metric HAGGEC added
diff --git a/org.eclipse.emf.refactor.metrics.ecore/plugin.xml b/org.eclipse.emf.refactor.metrics.ecore/plugin.xml
index 39c3682..2ba49b0 100644
--- a/org.eclipse.emf.refactor.metrics.ecore/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.ecore/plugin.xml
@@ -64,5 +64,13 @@
metric_metamodel="http://www.eclipse.org/emf/2002/Ecore"
metric_name="NCEAEC">
</metric>
+<metric
+ id="org.eclipse.emf.refactor.metrics.ecore.haggec"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.ecore.eclass.HAGGEC"
+ metric_context="EClass"
+ metric_description="Length of the longest path to the leaves in the aggregation hierarchy."
+ metric_metamodel="http://www.eclipse.org/emf/2002/Ecore"
+ metric_name="HAGGEC">
+</metric>
</extension>
</plugin>
diff --git a/org.eclipse.emf.refactor.metrics.ecore/src/org/eclipse/emf/refactor/metrics/ecore/eclass/HAGGEC.java b/org.eclipse.emf.refactor.metrics.ecore/src/org/eclipse/emf/refactor/metrics/ecore/eclass/HAGGEC.java
new file mode 100644
index 0000000..86db29c
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.ecore/src/org/eclipse/emf/refactor/metrics/ecore/eclass/HAGGEC.java
@@ -0,0 +1,50 @@
+package org.eclipse.emf.refactor.metrics.ecore.eclass;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+
+public class HAGGEC implements IMetricCalculator {
+
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context=context;
+ }
+
+ @Override
+ public double calculate() {
+ EClass c = (EClass) context.get(0);
+ return getHAgg(c);
+ }
+
+ private double getHAgg(EClass c) {
+ if (c.getEReferences() == null || c.getEReferences().isEmpty()) {
+ return 0;
+ }
+ int[] haggs = new int[c.getEReferences().size()];
+ for (int i=0; i < haggs.length; i++) {
+ haggs[i] = 0;
+ EReference ref = c.getEReferences().get(i);
+ if (ref.isContainment()) {
+ haggs[i] = (int) (1 + getHAgg((EClass) ref.getEReferenceType()));
+ }
+ }
+ return max(haggs);
+ }
+
+ 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;
+ }
+
+}