KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > kirkk > analyzer > framework > bcelbundle > JarMetricsImpl


1 package com.kirkk.analyzer.framework.bcelbundle;
2
3 import com.kirkk.analyzer.framework.*;
4 import java.math.BigDecimal JavaDoc;
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 JavaDoc calculateAbstractness() {
14         int classCount = jar.getClassCount();
15         if (classCount == 0) {
16             return new BigDecimal JavaDoc("-1.0");
17         }
18         BigDecimal JavaDoc totalClassCount = new BigDecimal JavaDoc(new Integer JavaDoc(classCount).toString());
19         BigDecimal JavaDoc abstractClassCount = new BigDecimal JavaDoc(new Integer JavaDoc(jar.getAbstractClassCount()).toString());
20         return abstractClassCount.divide(totalClassCount,2, BigDecimal.ROUND_HALF_UP);
21     }
22
23     public BigDecimal JavaDoc calculateInstability() {
24         int afferent = this.calculateAfferentCoupling();
25         int efferent = this.calculateEfferentCoupling();
26
27         if (afferent + efferent == 0) {
28             return new BigDecimal JavaDoc("-1.0");
29         }
30
31         BigDecimal JavaDoc top = new BigDecimal JavaDoc(new Integer JavaDoc(efferent).toString());
32         BigDecimal JavaDoc bottom = new BigDecimal JavaDoc(new Integer JavaDoc(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 JavaDoc calculateDistance() {
46         BigDecimal JavaDoc abstractness = this.calculateAbstractness();
47         BigDecimal JavaDoc instability = this.calculateInstability();
48         if ( abstractness.equals(new BigDecimal JavaDoc("-1.0")) || instability.equals(new BigDecimal JavaDoc("-1.0")) ) {
49             return new BigDecimal JavaDoc("-1.0");
50         }
51         return abstractness.add(instability).subtract(new BigDecimal JavaDoc("1.00")).abs();
52     }
53 }
Popular Tags