001: package com.kirkk.analyzer.textui;
002:
003: import java.io.*;
004: import java.util.*;
005: import com.kirkk.analyzer.framework.*;
006: import com.kirkk.analyzer.*;
007:
008: /*
009: * Modified version of XMLUISummary
010: * http://www.kirkk.com/wiki/wiki.php/Main/JarAnalyzer
011: *
012: * This class takes the input directory and output file
013: * from the command line or from System.in. It is also
014: * usable directly from Java and can be called from
015: * an ant task
016: */
017: public class DOTSummary implements Summary {
018: private PrintWriter writer;
019:
020: public static void main(String args[]) throws Exception {
021: new DOTSummary().instanceMain(args);
022: }
023:
024: public void instanceMain(String args[]) throws Exception {
025: File scrDir = (args.length > 0) ? new File(args[0]) : null;
026: File destFile = (args.length > 1) ? new File(args[1]) : null;
027: if (scrDir == null) {
028: System.out.print("Please enter input directory name: ");
029: scrDir = getFile();
030: }
031: if (destFile == null) {
032: System.out.print("Please enter output file name: ");
033: destFile = getFile();
034: }
035: createSummary(scrDir, destFile);
036: }
037:
038: public void createSummary(File srcDir, File destFile)
039: throws Exception {
040: Analyzer analyzer = new Analyzer();
041: Jar jarBundle[] = analyzer.analyze(srcDir);
042: outputAll(jarBundle, destFile);
043: }
044:
045: public void createSummary(File srcDir, File destFile,
046: String packageFilter, String jarFilter) throws Exception {
047: Analyzer analyzer = new Analyzer();
048: Configuration.initialize(packageFilter, jarFilter);
049: Jar jarBundle[] = analyzer.analyze(srcDir);
050: outputAll(jarBundle, destFile);
051: }
052:
053: private File getFile() throws IOException {
054: try {
055: InputStreamReader streamReader = new InputStreamReader(
056: System.in);
057: BufferedReader reader = new BufferedReader(streamReader);
058: String fileName = reader.readLine();
059: File file = new File(fileName);
060: return file;
061: } catch (IOException e) {
062: throw e;
063: }
064: }
065:
066: private void outputAll(Jar[] jarBundle, File file) {
067: try {
068: FileWriter fileWriter = new FileWriter(file);
069: writer = new PrintWriter(fileWriter);
070: } catch (IOException e) {
071: System.out
072: .println("IOException - Redirecting to System.out");
073: System.out.println(e);
074: OutputStreamWriter outputWriter = new OutputStreamWriter(
075: System.out);
076: writer = new PrintWriter(outputWriter);
077: }
078: this .printHeader();
079: this .output(jarBundle);
080: this .printFooter();
081: writer.flush();
082: writer.close();
083: }
084:
085: private void printHeader() {
086: writer.println("digraph G {");
087: //writer.println("node[shape=box,width=1.5,height=1.25,fontsize=30];");
088: }
089:
090: private void printFooter() {
091: writer.println("}");
092: }
093:
094: private void output(Jar[] jarBundles) {
095: //writer.println(tab()+"<Jars>");writer.println();
096: for (int i = 0; i < jarBundles.length; i++) {
097: String jar = jarBundles[i].getJarFileName()
098: .substring(
099: jarBundles[i].getJarFileName().lastIndexOf(
100: "\\") + 1,
101: jarBundles[i].getJarFileName().length());
102: //writer.println(tab(2)+"<Jar name=\"" + jar + "\">");
103: //writer.println(tab(3)+"<Summary>");
104: //this.statistics(jarBundles[i]);writer.println();
105: //this.jarPackages(jarBundles[i]);writer.println();
106: this .externalJars(jarBundles[i]);
107: //this.unresolveableDependencies(jarBundles[i]);
108: //writer.println(tab(3)+"</Summary>");writer.println();
109: //writer.println(tab(2)+"</Jar>");writer.println();
110: }
111: //writer.println(tab()+"</Jars>");
112: }
113:
114: /*private void statistics(Jar jarBundle) {
115: writer.println(tab(4)+"<Statistics>");
116: writer.println(tab(5)+"<ClassCount>" + jarBundle.getPublicClassCount() + "</ClassCount>");
117: writer.println(tab(5)+"<PackageCount>" + jarBundle.getPackageCount() + "</PackageCount>");
118: writer.println(tab(5)+"<Level>" + jarBundle.getLevel() + "</Level>");
119: writer.println(tab(4)+"</Statistics>");
120: }*/
121: private void externalJars(Jar jarBundle) {
122: //writer.println(tab(4)+"<ResolvedDependencies>");
123: Iterator jarDependencies = jarBundle.getOutgoingDependencies()
124: .iterator();
125: while (jarDependencies.hasNext()) {
126: String jarName = jarBundle.getJarFileName().replaceAll(
127: "[-.]", "_");
128: writer.print(tab()
129: + jarName.substring(0, jarName.length() - 4));
130: Jar dependentBundle = (Jar) jarDependencies.next();
131: //String jar2 = dependentBundle.getJarFileName().substring(dependentBundle.getJarFileName().lastIndexOf("\\") + 1,
132: // dependentBundle.getJarFileName().length());
133: String jar2 = dependentBundle.getJarFileName().replaceAll(
134: "[-.]", "_");
135: writer.println(" -> "
136: + jar2.substring(0, jar2.length() - 4) + ";");
137: }
138: //writer.println(tab(4)+"</ResolvedDependencies>");writer.println();
139: }
140:
141: /*private void externalDependencies(Jar jarBundle) {
142: Iterator allPackages = jarBundle.getAllExternallyReferencedPackages().iterator();
143: while (allPackages.hasNext()) {
144: String javaPackage = (String) allPackages.next();
145: writer.println(tab(5)+"<Package>"+javaPackage+"</Package>");
146: }
147: }*/
148:
149: /*private void unresolveableDependencies(Jar jarBundle) {
150: writer.println(tab(4)+"<UnresolvedDependencies>");
151: Iterator unresolvedPackages = jarBundle.getAllUnidentifiableExternallyReferencedPackages().iterator();
152: while (unresolvedPackages.hasNext()) {
153: String packageName = (String) unresolvedPackages.next();
154: writer.println(tab(5)+"<Package>"+packageName+"</Package>");
155: }
156: writer.println(tab(4)+"</UnresolvedDependencies>");
157: }*/
158:
159: /*private void jarPackages(Jar jarBundle) {
160: writer.println(tab(4)+"<Packages>");
161: Iterator allPackages = jarBundle.getAllContainedPackages().iterator();
162: while (allPackages.hasNext()) {
163: JavaPackage javaPackage = (JavaPackage) allPackages.next();
164: writer.println(tab(5)+"<Package>" + javaPackage.getLongName() + "</Package>");
165: }
166: writer.println(tab(4)+"</Packages>");
167: }*/
168:
169: private String tab() {
170: return " ";
171: }
172:
173: private String tab(int i) {
174: String tab = tab();
175: for (int j = 0; j < i - 1; j++) {
176: tab = tab + tab();
177: }
178: return tab;
179: }
180:
181: }
|