All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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