![JAR search and dependency download from the Maven repository](/logo.png)
io.tesla.maven.plugins.dependency.tree.serializer.JsTreeRenderer Maven / Gradle / Ivy
The newest version!
package io.tesla.maven.plugins.dependency.tree.serializer;
import io.tesla.maven.plugins.dependency.tree.WebUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.nio.charset.Charset;
import java.util.UUID;
import org.eclipse.aether.graph.DependencyNode;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
// [
// {"title": "Item 1"},
// {"title": "Folder 2", "isFolder": true, "key": "folder2",
// "children": [
// {"title": "Sub-item 2.1"},
// {"title": "Sub-item 2.2"}
// ]
// },
// {"title": "Folder 3", "isFolder": true, "key": "folder3",
// "children": [
// {"title": "Sub-item 3.1"},
// {"title": "Sub-item 3.2"}
// ]
// },
// {"title": "Item 5"}
// ]
public class JsTreeRenderer implements TreeRenderer {
private StringWriter out = new StringWriter();
public void render(DependencyNode root) {
//
// Generate the JSON for the fancytree view
//
out.write("[");
renderNode(root);
out.write("]");
//
// Prettify the JSON output
//
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(out.toString());
String prettyJsonString = gson.toJson(je);
//
// Spit out the resources required by the view
//
String[] resources = new String[] { //
"dhv.html", //
"graph.json", //
"jquery.js", //
"jquery-ui.js", //
"jquery.fancytree.filter.js", //
"jquery.fancytree.js", //
"skin-lion/icons.gif", //
"skin-lion/loading.gif", //
"skin-lion/ui.fancytree.css"
};
// Open the URL
try {
File tmpdir = new File(System.getProperty("java.io.tmpdir"));
File outputDirectory = new File(tmpdir.getAbsolutePath() + "/" + UUID.randomUUID().toString());
outputDirectory.mkdirs();
for (String resource : resources) {
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("dependency/tree/" + resource);
File f = new File(outputDirectory, resource);
f.getParentFile().mkdirs();
ByteStreams.copy(in, new FileOutputStream(f));
}
//File outputFile = new File(outputDirectory, "graph.json");
File dhv = new File(outputDirectory, "dhv.html");
String dhvContent = Files.toString(dhv, Charset.defaultCharset());
dhvContent = dhvContent.replace("@tree@", prettyJsonString);
Files.write(dhvContent, dhv, Charset.defaultCharset());
WebUtils.openUrl(dhv.toURI().toURL().toExternalForm());
} catch (IOException e) {
e.printStackTrace();
}
}
void renderNode(DependencyNode node) {
out.write("{ \"title\" : \"" + node + "\", \"expanded\": true");
if (node.getChildren().size() > 0) {
out.write(", \"children\" : [");
int children = node.getChildren().size();
for (int i = 0; i < children; i++) {
DependencyNode n = node.getChildren().get(i);
renderNode(n);
if (i != (children - 1)) {
out.write(",");
}
}
out.write("]");
}
out.write(" }");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy