1 package com.kirkk.analyzer.framework.bcelbundle; 2 3 import com.kirkk.analyzer.framework.*; 4 import java.math.BigDecimal ; 5 6 public class JarMetricsImpl implements JarMetrics { 7 private Jar jar; 8 9 public JarMetricsImpl(Jar jar) { 10 this.jar = jar; 11 } 12 13 public BigDecimal calculateAbstractness() { 14 int classCount = jar.getClassCount(); 15 if (classCount == 0) { 16 return new BigDecimal ("-1.0"); 17 } 18 BigDecimal totalClassCount = new BigDecimal (new Integer (classCount).toString()); 19 BigDecimal abstractClassCount = new BigDecimal (new Integer (jar.getAbstractClassCount()).toString()); 20 return abstractClassCount.divide(totalClassCount,2, BigDecimal.ROUND_HALF_UP); 21 } 22 23 public BigDecimal calculateInstability() { 24 int afferent = this.calculateAfferentCoupling(); 25 int efferent = this.calculateEfferentCoupling(); 26 27 if (afferent + efferent == 0) { 28 return new BigDecimal ("-1.0"); 29 } 30 31 BigDecimal top = new BigDecimal (new Integer (efferent).toString()); 32 BigDecimal bottom = new BigDecimal (new Integer (afferent + efferent).toString()); 33 34 return top.divide(bottom, 2, BigDecimal.ROUND_HALF_UP); 35 } 36 37 public int calculateEfferentCoupling() { 38 return jar.getOutgoingDependencies().size(); 39 } 40 41 public int calculateAfferentCoupling() { 42 return jar.getIncomingDependencies().size(); 43 } 44 45 public BigDecimal calculateDistance() { 46 BigDecimal abstractness = this.calculateAbstractness(); 47 BigDecimal instability = this.calculateInstability(); 48 if ( abstractness.equals(new BigDecimal ("-1.0")) || instability.equals(new BigDecimal ("-1.0")) ) { 49 return new BigDecimal ("-1.0"); 50 } 51 return abstractness.add(instability).subtract(new BigDecimal ("1.00")).abs(); 52 } 53 } | Popular Tags |