several metrics added
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.class b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.class
new file mode 100644
index 0000000..db80509
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.class b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.class
new file mode 100644
index 0000000..8ceb494
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.class b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.class
new file mode 100644
index 0000000..3a4e3c8
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
index 257acbe..71e1394 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
@@ -7,7 +7,7 @@
id="org.eclipse.emf.refactor.metrics.uml24.qacp"
metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlpack.QACP"
metric_context="Package"
- metric_description="Quota of abstract Classes within the Package"
+ metric_description="Quota of abstract classes within the package"
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="QACP">
</metric>
@@ -15,6 +15,33 @@
<extension
point="org.eclipse.emf.refactor.metrics">
<metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nacm"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlmodel.NACM"
+ metric_context="Model"
+ metric_description="Number of all ancestors of all classes in the model"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NACM">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.ana"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlmodel.ANA"
+ metric_context="Model"
+ metric_description="Average number of ancestors of all classes in the model"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ANA">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.maxdit"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlmodel.MaxDIT"
+ metric_context="Model"
+ metric_description="Maximum of all depths of inheritance trees"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="MaxDIT">
+ </metric>
+ </extension>
+ <extension
+ point="org.eclipse.emf.refactor.metrics">
+ <metric
id="org.eclipse.emf.refactor.metrics.uml24.nfeac"
metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NFEAC"
metric_context="Class"
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.java
new file mode 100644
index 0000000..a513c44
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/ANA.java
@@ -0,0 +1,39 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlmodel;
+
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.core.Metric;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.interfaces.IOperation;
+import org.eclipse.emf.refactor.metrics.operations.Operations;
+
+
+public final class ANA implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.nacm";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.ncm";
+
+ IOperation operation = Operations.getOperation("Division");
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ Metric metric1 = Metric.getMetricInstanceFromId(metricID1);
+ Metric metric2 = Metric.getMetricInstanceFromId(metricID2);
+
+ IMetricCalculator calc1 = metric1.getCalculateClass();
+ IMetricCalculator calc2 = metric2.getCalculateClass();
+
+ calc1.setContext(this.context);
+ calc2.setContext(this.context);
+ return operation.calculate(calc1.calculate(),calc2.calculate());
+ }
+
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.java
new file mode 100644
index 0000000..c1daba5
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/MaxDIT.java
@@ -0,0 +1,53 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlmodel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicEList;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.core.Metric;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Class;
+
+
+public final class MaxDIT implements IMetricCalculator {
+
+
+ private List<EObject> context;
+ private String metricId = "org.eclipse.emf.refactor.metrics.uml24.maxditc";
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context=context;
+ }
+
+ @Override
+ public double calculate() {
+ EList<Double> dits = new BasicEList<Double>();
+ Metric metric = Metric.getMetricInstanceFromId(metricId);
+ IMetricCalculator calc = metric.getCalculateClass();
+ TreeIterator<EObject> iter = context.get(0).eResource().getAllContents();
+ while (iter.hasNext()) {
+ EObject eObject = iter.next();
+ if (eObject instanceof Class) {
+ ArrayList<EObject> context = new ArrayList<EObject>();
+ context.add(eObject);
+ calc.setContext(context);
+ dits.add(calc.calculate());
+ }
+ }
+ return maxDITs(dits);
+ }
+
+ private double maxDITs(EList<Double> doubles) {
+ Double result = 0.0;
+ for (Double d : doubles) {
+ if (d > result) {
+ result = d;
+ }
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.java
new file mode 100644
index 0000000..3a3aff4
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NACM.java
@@ -0,0 +1,41 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlmodel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.core.Metric;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Class;
+
+
+public final class NACM implements IMetricCalculator {
+
+
+ private List<EObject> context;
+ private String metricId = "org.eclipse.emf.refactor.metrics.uml24.nsupc2";
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context=context;
+ }
+
+ @Override
+ public double calculate() {
+ Double result = 0.0;
+ Metric metric = Metric.getMetricInstanceFromId(metricId);
+ IMetricCalculator calc = metric.getCalculateClass();
+ TreeIterator<EObject> iter = context.get(0).eResource().getAllContents();
+ while (iter.hasNext()) {
+ EObject eObject = iter.next();
+ if (eObject instanceof Class) {
+ ArrayList<EObject> context = new ArrayList<EObject>();
+ context.add(eObject);
+ calc.setContext(context);
+ result += calc.calculate();
+ }
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/bin/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.class b/org.eclipse.emf.refactor.metrics.uml24.henshin/bin/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.class
new file mode 100644
index 0000000..5377293
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/bin/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.class b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.class
new file mode 100644
index 0000000..ad0e417
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.class b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.class
new file mode 100644
index 0000000..102c84a
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.class b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.class
new file mode 100644
index 0000000..73e484f
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.class b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.class
new file mode 100644
index 0000000..ecdfeb2
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/bin/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
index 47e12ac..24111b8 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
@@ -1,13 +1,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugin>
<extension point="org.eclipse.emf.refactor.metrics">
- <metric id="org.eclipse.emf.refactor.metrics.uml24.nccp"
+<metric id="org.eclipse.emf.refactor.metrics.uml24.ncm"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlmodel.NCM"
+ metric_context="Model"
+ metric_description="Number of Classes in the Model"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NCM">
+</metric>
+</extension>
+<extension point="org.eclipse.emf.refactor.metrics">
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nccp"
metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlpack.NCCP"
metric_context="Package"
metric_description="Number of concrete Classes within the Package"
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="NCCP">
</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.ninp"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlpack.NINP"
+ metric_context="Package"
+ metric_description="Number of Interfaces within the Package"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NINP">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.natp"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlpack.NATP"
+ metric_context="Package"
+ metric_description="Number of Attributes in Classes within the Package"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NATP">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nopp"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlpack.NOPP"
+ metric_context="Package"
+ metric_description="Number of Operations in Classes and Interfaces within the Package"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NOPP">
+</metric>
</extension>
<extension point="org.eclipse.emf.refactor.metrics">
<metric id="org.eclipse.emf.refactor.metrics.uml24.natc"
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.java
new file mode 100644
index 0000000..4a93df1
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NCM.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlmodel;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;
+
+
+public final class NCM implements IMetricCalculator {
+
+ private final String expression =
+ "Class.allInstances() -> reject(oclIsTypeOf(StateMachine)) -> size()";
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ EObject contextObject = context.get(0);
+ return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.java
new file mode 100644
index 0000000..fa834e6
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NATP.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlpack;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;
+
+
+public final class NATP implements IMetricCalculator {
+
+ private final String expression =
+ "self.packagedElement -> select(oclIsTypeOf(Class)) -> collect(oclAsType(Class).ownedAttribute) -> size()";
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ EObject contextObject = context.get(0);
+ return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.java
new file mode 100644
index 0000000..7c4860a
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NINP.java
@@ -0,0 +1,25 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlpack;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;
+
+
+public final class NINP implements IMetricCalculator {
+
+ private final String expression =
+ "self.packagedElement -> select(oclIsTypeOf(Interface)) -> size()";
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ EObject contextObject = context.get(0);
+ return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.java
new file mode 100644
index 0000000..fc6c076
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlpack/NOPP.java
@@ -0,0 +1,26 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlpack;
+
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.ocl.managers.OCLManager;
+
+
+public final class NOPP implements IMetricCalculator {
+
+ private final String expression =
+ "self.packagedElement -> select(oclIsTypeOf(Class)) -> collect(oclAsType(Class).ownedOperation) -> size() + " +
+ "self.packagedElement -> select(oclIsTypeOf(Interface)) -> collect(oclAsType(Interface).ownedOperation) -> size()";
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ EObject contextObject = context.get(0);
+ return OCLManager.evaluateOCLOnContextObject(contextObject, expression);
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.class b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.class
new file mode 100644
index 0000000..cc9688f
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.class b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.class
new file mode 100644
index 0000000..b7b6ce6
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.class b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.class
new file mode 100644
index 0000000..a8b159f
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/bin/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
index 82b27dd..a4e6c11 100644
--- a/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
@@ -25,6 +25,20 @@
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="NEATC">
</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nsupc2"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NSUPC2"
+ metric_context="Class"
+ metric_description="Total number of ancestors of the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NSUPC2">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.maxditc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.MaxDITC"
+ metric_context="Class"
+ metric_description="TDepth of Inheritance Tree (maximum due to multiple inheritance)"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="MacDITC">
+</metric>
</extension>
<extension point="org.eclipse.emf.refactor.metrics">
<metric id="org.eclipse.emf.refactor.metrics.uml24.neipo"
@@ -35,4 +49,14 @@
metric_name="NEIPO">
</metric>
</extension>
+<extension point="org.eclipse.emf.refactor.metrics">
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nih"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlmodel.NIH"
+ metric_context="Model"
+ metric_description="Total number of inheritance hierarchies in the model"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NIH">
+ </metric>
+</extension>
</plugin>
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.java
new file mode 100644
index 0000000..a8a84fc
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/MaxDITC.java
@@ -0,0 +1,45 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Class;
+
+
+public final class MaxDITC implements IMetricCalculator {
+
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ Class c = (Class) context.get(0);
+ return getMaxDit(c);
+ }
+
+ private int getMaxDit(Class c) {
+ if (c.getGeneralizations().isEmpty()) {
+ return 0;
+ }
+ int[] dits = new int[c.getGeneralizations().size()];
+ for (int i=0; i < dits.length; i++) {
+ dits[i] = 1 + getMaxDit((Class) c.getGeneralizations().get(i).getGeneral());
+ }
+ return max(dits);
+ }
+
+ private int max(int[] intArray) {
+ int result = 0;
+ for (int i=0; i < intArray.length; i++) {
+ if (intArray[i] > result) {
+ result = intArray[i];
+ }
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.java
new file mode 100644
index 0000000..5a2eea2
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC2.java
@@ -0,0 +1,24 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Class;
+
+public final class NSUPC2 implements IMetricCalculator {
+
+
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context=context;
+ }
+
+ @Override
+ public double calculate() {
+ Class c = (Class) context.get(0);
+ return c.allParents().size();
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.java
new file mode 100644
index 0000000..8c37c43
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlmodel/NIH.java
@@ -0,0 +1,55 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlmodel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Model;
+
+public final class NIH implements IMetricCalculator {
+
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context=context;
+ }
+
+ @Override
+ public double calculate() {
+ org.eclipse.uml2.uml.Model in = (org.eclipse.uml2.uml.Model) context.get(0);
+ double ret = 0.0;
+ // custom code - begin
+ List<Class> classes = getAllClasses(in);
+ for (Class cl : classes) {
+ if (isSuperclass(cl) && cl.getGeneralizations().isEmpty()) {
+ ret++;
+ }
+ }
+ // custom code - end
+ return ret;
+ }
+
+ private boolean isSuperclass(Class clazz) {
+ List<Class> classes = getAllClasses(clazz.getModel());
+ for (Class cl : classes) {
+ if (cl.getSuperClasses().contains(clazz)) return true;
+ }
+ return false;
+ }
+
+ private ArrayList<Class> getAllClasses(Model model) {
+ ArrayList<Class> classes = new ArrayList<Class>();
+ TreeIterator<EObject> iter = model.eResource().getAllContents();
+ while (iter.hasNext()) {
+ EObject eObject = iter.next();
+ if (eObject instanceof Class) {
+ classes.add((Class) eObject);
+ }
+ }
+ return classes;
+ }
+}
\ No newline at end of file