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;
+	}
+
+}