aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java')
-rw-r--r--framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java203
1 files changed, 0 insertions, 203 deletions
diff --git a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java b/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
deleted file mode 100644
index 32e9ef1c..00000000
--- a/framework/src/onos/utils/jdvue/src/main/java/org/onlab/jdvue/DependencyViewer.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onlab.jdvue;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import java.io.BufferedReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Set;
-
-/**
- * Generator of a self-contained HTML file which serves as a GUI for
- * visualizing Java package dependencies carried in the supplied catalog.
- *
- * The HTML file is an adaptation of D3.js Hierarchical Edge Bundling as
- * shown at http://bl.ocks.org/mbostock/7607999.
- *
- * @author Thomas Vachuska
- */
-public class DependencyViewer {
-
- private static final String JPD_EXT = ".db";
- private static final String HTML_EXT = ".html";
-
- private static final String INDEX = "index.html";
- private static final String D3JS = "d3.v3.min.js";
-
- private static final String TITLE_PLACEHOLDER = "TITLE_PLACEHOLDER";
- private static final String D3JS_PLACEHOLDER = "D3JS_PLACEHOLDER";
- private static final String DATA_PLACEHOLDER = "DATA_PLACEHOLDER";
-
- private final Catalog catalog;
-
- /**
- * Creates a Java package dependency viewer.
- *
- * @param catalog dependency catalog
- */
- public DependencyViewer(Catalog catalog) {
- this.catalog = catalog;
- }
-
- /**
- * Main program entry point.
- *
- * @param args command line arguments
- */
- public static void main(String[] args) {
- Catalog cat = new Catalog();
- DependencyViewer viewer = new DependencyViewer(cat);
- try {
- String path = args[0];
- cat.load(path + JPD_EXT);
- cat.analyze();
-
- System.err.println(cat);
- viewer.dumpLongestCycle(cat);
- viewer.writeHTMLFile(path);
- } catch (IOException e) {
- System.err.println("Unable to process catalog: " + e.getMessage());
- }
- }
-
- /**
- * Prints out the longest cycle; just for kicks.
- * @param cat catalog
- */
- private void dumpLongestCycle(Catalog cat) {
- DependencyCycle longest = null;
- for (DependencyCycle cycle : cat.getCycles()) {
- if (longest == null || longest.getCycleSegments().size() < cycle.getCycleSegments().size()) {
- longest = cycle;
- }
- }
-
- if (longest != null) {
- for (Dependency dependency : longest.getCycleSegments()) {
- System.out.println(dependency);
- }
- }
- }
-
- /**
- * Writes the HTML catalog file for the given viewer.
- *
- * @param path base file path
- * @throws IOException if issues encountered writing the HTML file
- */
- public void writeHTMLFile(String path) throws IOException {
- String index = slurp(getClass().getResourceAsStream(INDEX));
- String d3js = slurp(getClass().getResourceAsStream(D3JS));
-
- FileWriter fw = new FileWriter(path + HTML_EXT);
- ObjectWriter writer = new ObjectMapper().writer(); // .writerWithDefaultPrettyPrinter();
- fw.write(index.replace(TITLE_PLACEHOLDER, path)
- .replace(D3JS_PLACEHOLDER, d3js)
- .replace(DATA_PLACEHOLDER, writer.writeValueAsString(toJson())));
- fw.close();
- }
-
- /**
- * Slurps the specified input stream into a string.
- *
- * @param stream input stream to be read
- * @return string containing the contents of the input stream
- * @throws IOException if issues encountered reading from the stream
- */
- static String slurp(InputStream stream) throws IOException {
- StringBuilder sb = new StringBuilder();
- BufferedReader br = new BufferedReader(new InputStreamReader(stream));
- String line;
- while ((line = br.readLine()) != null) {
- sb.append(line).append(System.lineSeparator());
- }
- br.close();
- return sb.toString();
- }
-
- // Produces a JSON structure designed to drive the hierarchical visual
- // representation of Java package dependencies and any dependency cycles
- private JsonNode toJson() {
- ObjectMapper mapper = new ObjectMapper();
- ObjectNode root = mapper.createObjectNode();
- root.put("packages", jsonPackages(mapper));
- root.put("cycleSegments", jsonCycleSegments(mapper, catalog.getCycleSegments()));
- root.put("summary", jsonSummary(mapper));
- return root;
- }
-
- // Produces a JSON summary of dependencies
- private JsonNode jsonSummary(ObjectMapper mapper) {
- ObjectNode summary = mapper.createObjectNode();
- summary.put("packages", catalog.getPackages().size());
- summary.put("sources", catalog.getSources().size());
- summary.put("cycles", catalog.getCycles().size());
- summary.put("cycleSegments", catalog.getCycleSegments().size());
- return summary;
- }
-
- // Produces a JSON structure with package dependency data
- private JsonNode jsonPackages(ObjectMapper mapper) {
- ArrayNode packages = mapper.createArrayNode();
- for (JavaPackage javaPackage : catalog.getPackages()) {
- packages.add(json(mapper, javaPackage));
- }
- return packages;
- }
-
- // Produces a JSON structure with all cyclic segments
- private JsonNode jsonCycleSegments(ObjectMapper mapper,
- Set<Dependency> segments) {
- ObjectNode cyclicSegments = mapper.createObjectNode();
- for (Dependency dependency : segments) {
- String s = dependency.getSource().name();
- String t = dependency.getTarget().name();
- cyclicSegments.put(t + "-" + s,
- mapper.createObjectNode().put("s", s).put("t", t));
- }
- return cyclicSegments;
- }
-
- // Produces a JSON object structure describing the specified Java package.
- private JsonNode json(ObjectMapper mapper, JavaPackage javaPackage) {
- ObjectNode node = mapper.createObjectNode();
-
- ArrayNode imports = mapper.createArrayNode();
- for (JavaPackage dependency : javaPackage.getDependencies()) {
- imports.add(dependency.name());
- }
-
- Set<DependencyCycle> packageCycles = catalog.getPackageCycles(javaPackage);
- Set<Dependency> packageCycleSegments = catalog.getPackageCycleSegments(javaPackage);
-
- node.put("name", javaPackage.name());
- node.put("size", javaPackage.getSources().size());
- node.put("imports", imports);
- node.put("cycleSegments", jsonCycleSegments(mapper, packageCycleSegments));
- node.put("cycleCount", packageCycles.size());
- node.put("cycleSegmentCount", packageCycleSegments.size());
- return node;
- }
-
-}