Skip to content

Commit

Permalink
refactor: minor refactor of the IntegrationManager
Browse files Browse the repository at this point in the history
  • Loading branch information
quintesse committed Jun 15, 2022
1 parent 82d955c commit 9fedad4
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 39 deletions.
48 changes: 9 additions & 39 deletions src/main/java/dev/jbang/spi/IntegrationManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,31 +23,21 @@
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;

import javax.annotation.Nonnull;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

import dev.jbang.cli.ExitException;
import dev.jbang.dependencies.ArtifactInfo;
import dev.jbang.dependencies.MavenRepo;
import dev.jbang.source.RunContext;
import dev.jbang.source.Source;
import dev.jbang.source.SourceSet;
import dev.jbang.util.PathTypeAdapter;
import dev.jbang.util.Util;

/**
Expand All @@ -59,8 +49,9 @@ public class IntegrationManager {
public static final String MAIN_CLASS = "main-class";
public static final String JAVA_ARGS = "java-args";

private static final GsonBuilder gsonb = new GsonBuilder().registerTypeHierarchyAdapter(Path.class,
new PathTypeAdapter());
private static final GsonBuilder gsonb = new GsonBuilder()
.registerTypeHierarchyAdapter(Path.class,
new PathTypeAdapter());

/**
* Discovers all integration points and runs them.
Expand All @@ -87,7 +78,7 @@ public static IntegrationResult runIntegrations(SourceSet ss, RunContext ctx, Pa
ClassLoader old = Thread.currentThread().getContextClassLoader();
PrintStream oldout = System.out;
try {
URLClassLoader integrationCl = getClassLoader(deps);
URLClassLoader integrationCl = getClassLoader(deps.values());
Thread.currentThread().setContextClassLoader(integrationCl);
String requestedJavaVersion = ctx.getJavaVersionOr(ss);
Set<String> classNames = loadIntegrationClassNames(integrationCl);
Expand Down Expand Up @@ -120,8 +111,8 @@ public static IntegrationResult runIntegrations(SourceSet ss, RunContext ctx, Pa
}

@Nonnull
private static URLClassLoader getClassLoader(Map<String, Path> deps) {
URL[] urls = deps.values().stream().map(path -> {
private static URLClassLoader getClassLoader(Collection<Path> deps) {
URL[] urls = deps.stream().map(path -> {
try {
return path.toUri().toURL();
} catch (MalformedURLException e) {
Expand Down Expand Up @@ -265,27 +256,6 @@ private static <K, V> List<Map.Entry<K, V>> mapToList(Map<K, V> map) {
return new ArrayList<>(map.entrySet());
}

private static class PathTypeAdapter extends TypeAdapter<Path> {
@Override
public Path read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return null;
}
String path = in.nextString();
return Paths.get(path);
}

@Override
public void write(JsonWriter out, Path path) throws IOException {
if (path == null) {
out.nullValue();
return;
}
out.value(path.toString());
}
}

public static void main(String... args) {
Gson parser = gsonb.create();
IntegrationInput input = parser.fromJson(new InputStreamReader(System.in), IntegrationInput.class);
Expand All @@ -294,7 +264,7 @@ public static void main(String... args) {
String output = "";
boolean ok = false;
try {
URLClassLoader integrationCl = getClassLoader(input.dependencies);
URLClassLoader integrationCl = getClassLoader(input.dependencies.values());
Thread.currentThread().setContextClassLoader(integrationCl);
IntegrationResult result = runIntegrationEmbedded(input, integrationCl);
output = parser.toJson(result);
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/dev/jbang/util/FileTypeAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package dev.jbang.util;

import java.io.File;
import java.io.IOException;

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

public class FileTypeAdapter extends TypeAdapter<File> {
@Override
public File read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return null;
}
String path = in.nextString();
return new File(path);
}

@Override
public void write(JsonWriter out, File path) throws IOException {
if (path == null) {
out.nullValue();
return;
}
out.value(path.getPath());
}
}
31 changes: 31 additions & 0 deletions src/main/java/dev/jbang/util/PathTypeAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package dev.jbang.util;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;

public class PathTypeAdapter extends TypeAdapter<Path> {
@Override
public Path read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return null;
}
String path = in.nextString();
return Paths.get(path);
}

@Override
public void write(JsonWriter out, Path path) throws IOException {
if (path == null) {
out.nullValue();
return;
}
out.value(path.toString());
}
}

0 comments on commit 9fedad4

Please sign in to comment.