| 1 package jdepend.swingui; 2 3 import java.text.NumberFormat ; 4 import java.util.*; 5 6 import jdepend.framework.*; 7 8 15 16 public abstract class PackageNode { 17 18 private PackageNode parent; 19 20 private JavaPackage jPackage; 21 22 private ArrayList children; 23 24 private static NumberFormat formatter; 25 static { 26 formatter = NumberFormat.getInstance(); 27 formatter.setMaximumFractionDigits(2); 28 } 29 30 37 public PackageNode(PackageNode parent, JavaPackage jPackage) { 38 this.parent = parent; 39 this.jPackage = jPackage; 40 children = null; 41 } 42 43 48 public JavaPackage getPackage() { 49 return jPackage; 50 } 51 52 57 public PackageNode getParent() { 58 return parent; 59 } 60 61 67 public boolean isLeaf() { 68 if (getCoupledPackages().size() > 0) { 69 return false; 70 } 71 72 return true; 73 } 74 75 83 protected abstract PackageNode makeNode(PackageNode parent, 84 JavaPackage jPackage); 85 86 92 protected abstract Collection getCoupledPackages(); 93 94 102 public boolean isChild(JavaPackage jPackage) { 103 return true; 104 } 105 106 111 public ArrayList getChildren() { 112 113 if (children == null) { 114 115 children = new ArrayList(); 116 ArrayList packages = new ArrayList(getCoupledPackages()); 117 Collections.sort(packages, new PackageComparator(PackageComparator 118 .byName())); 119 Iterator i = packages.iterator(); 120 while (i.hasNext()) { 121 JavaPackage jPackage = (JavaPackage) i.next(); 122 if (isChild(jPackage)) { 123 PackageNode childNode = makeNode(this, jPackage); 124 children.add(childNode); 125 } 126 } 127 } 128 129 return children; 130 } 131 132 137 public String toMetricsString() { 138 StringBuffer label = new StringBuffer (); 139 label.append(getPackage().getName()); 140 label.append(" ("); 141 label.append("CC: " + getPackage().getConcreteClassCount() + " "); 142 label.append("AC: " + getPackage().getAbstractClassCount() + " "); 143 label.append("Ca: " + getPackage().afferentCoupling() + " "); 144 label.append("Ce: " + getPackage().efferentCoupling() + " "); 145 label.append("A: " + format(getPackage().abstractness()) + " "); 146 label.append("I: " + format(getPackage().instability()) + " "); 147 label.append("D: " + format(getPackage().distance()) + " "); 148 label.append("V: " + getPackage().getVolatility()); 149 if (getPackage().containsCycle()) { 150 label.append(" Cyclic"); 151 } 152 153 label.append(")"); 154 155 return label.toString(); 156 } 157 158 164 public String toString() { 165 166 if (getParent().getParent() == null) { 167 return toMetricsString(); 168 } 169 170 return getPackage().getName(); 171 } 172 173 177 private static String format(float f) { 178 return formatter.format(f); 179 } 180 } 181 182 | Popular Tags |