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