Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 2010-2011 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 package com.sun.enterprise.tools.visualizer.hk2;
 
 import java.io.File;
 import java.util.Date;
 import java.util.List;
 
 
reads a wires XML file generated by the dependency-verifier and outputs a dot file (Use GraphViz to create images from the dot file) that helps visualizing the wiring dependencies between packages. The tool also supports viewing the dependencies of only a subset of the packages.

Author(s):
Sivakumar Thyagarajan
 
 public class DotGenerator {
 	private final static boolean DEBUG = false;
 
 	PrintStream wireOut = null;
An internal class holding all the command line options supported by this DotGenerator

Author(s):
Sivakumar Thyagarajan
 
 	static class GeneratorOptions {
 		// Accept XML files generated by HK2 dependency-verifier
 		@Option(name = "-i", usage = "Input Wires XML file")
 		public String input = "wires.xml";
 
 		@Option(name = "-o", usage = "Output DOT file", required = true)
 		public String output;
 
 		@Option(name = "-m", usage = "Show only packages that contains the specified substring")
 		public String match = "";// By default, match all.
 
 		// receives other command line parameters than options
 		public List<Stringarguments = new ArrayList<String>();
 	}

A simple class representing all the information about a package that can be derived from the wires.xml

Author(s):
Sivakumar Thyagarajan
	class PackageInfo {
		String[] importedBy = null;
		public PackageInfo(String packageNameString exportedBy,
				String[] importedBy) {
			this. = packageName;
			this. = exportedBy;
			this. = importedBy;
		}
	}
	public DotGenerator(GeneratorOptions gothrows Exception {
		this. = go;
	}
	private Document doc = null;
	private void initXML() throws Exception {
		File file = new File(this..);
		debug("file " + file);
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		 = db.parse(file);
	}
	private PackageInfo[] getPackageXML() throws IOException {
		NodeList pkgLst = .getElementsByTagName("Package");
		debug("Package count:" + pkgLst.getLength());
		List<PackageInfopkgInfos = new ArrayList<PackageInfo>();
		for (int i = 0; i < pkgLst.getLength(); i++) {
			Node pkgNode = pkgLst.item(i);
			if (pkgNode.getNodeType() == .) {
				Element packageElement = (ElementpkgNode;
				// exports
				NodeList ExportersList = packageElement
						.getElementsByTagName("Exporters");
				Element exporterElt = (ElementExportersList.item(0);
				String exporter = ((NodeexporterElt.getChildNodes().item(0))
				debug("Exporter : " + exporter);
				// importers
				NodeList importersList = packageElement
						.getElementsByTagName("Importers");
				Element importerElt = (ElementimportersList.item(0);
				String importers = ((NodeimporterElt.getChildNodes().item(0))
				debug("Importers : " + importers);
				// Get package name and return PackageInfos
				String pkgName = packageElement.getAttribute("name").trim();
				debug("Package Name : " + pkgName);
				PackageInfo pkgInfo = new PackageInfo(pkgNameexporter,
						split(importers));
				pkgInfos.add(pkgInfo);
			}
		}
		return pkgInfos.toArray(new PackageInfo[] {});
	}
	private void generate() throws Exception {
		PackageInfo[] pkgInfos = getPackageXML();
		for (PackageInfo pkgInfo : pkgInfos) {
			// Match if needed
			String matchString = this...trim();
			boolean matchNeeded = !matchString.isEmpty();
			if (matchNeeded) {
				if (pkgInfo.exportedBy.contains(matchString)) {
					generateDotEdge(pkgInfo.importedBypkgInfo.exportedBy,
							pkgInfo.packageName);
				}
else {
				generateDotEdge(pkgInfo.importedBypkgInfo.exportedBy,
						pkgInfo.packageName);
			}
		}
	}
	private void debug(String s) {
		if ()
	}
	private void debug(String textString s) {
		debug(textnew String[] { s });
	}
	private void debug(String textString[] arr) {
		StringBuffer sb = new StringBuffer(text);
		for (String s : arr) {
			sb.append(s).append(" , ");
		}
	}
	public static void main(String[] argsthrows Exception {
		CmdLineParser parser = new CmdLineParser(options);
		try {
			parser.parseArgument(args);
catch (CmdLineException e) {
			..println("java -jar program-name.jar [options...] arguments...");
			return;
		}
		new DotGenerator(options);
	}
	// Generate the beginning of the dot file
	private void generateDotStart() {
		this..println("digraph  wiring {");
		this..println("node [color=grey, style=filled];");
		this..println("node [fontname=\"Verdana\", size=\"30,30\"];");
		StringBuffer footer = new StringBuffer();
		footer.append("graph [ fontname = \"Arial\", fontsize = 26,style = \"bold\", ");
		footer.append("label = \"\\nGlassFish v3 OSGi bundle wiring relationship diagram");
		if (!this...trim().isEmpty()) {
			footer.append("\\n Filter: " + this...trim()
" bundles");
		}
		footer.append("\\nSun Microsystems");
		footer.append("\\n\\nDate: " + date + "\\n\", "
"ssize = \"30,60\" ];");
		this..println(footer.toString());
	}
	// Generate a Dot representation for each edge in the graph
	private void generateDotEdge(String[] importedByString exportedBy,
			String pkg) {
		if (importedBy.length == 0)
			return;
		for (String s : importedBy) {
			if (!s.equals(exportedBy)) { // remove self-loops for readability
				this..println("\"" + s + "\" -> \"" + exportedBy
"\" [label =\"" + pkg + "\"" + "]");
			}
		}
	}
	// End the dot file generation
	private void generateDotEnd() {
		this..println("}");
	}
	// Utility class to split the importers representation (space separated) 
	//in wires.xml
	private String[] split(String s) {
		List<Stringl = new ArrayList<String>();
		while (st.hasMoreTokens()) {
			l.add(st.nextToken());
		}
		return l.toArray(new String[] {});
	}
New to GrepCode? Check out our FAQ X