new UML metrics context Class added
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
index 0e0f371..2bc5166 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/plugin.xml
@@ -12,6 +12,7 @@
metric_name="A">
</metric>
</extension>
+
<extension
point="org.eclipse.emf.refactor.metrics">
<metric
@@ -90,6 +91,54 @@
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="NFEAC">
</metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nasc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NASC"
+ metric_context="Class"
+ metric_description="Number of association with other classes or itself"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NASC">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nppac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPPAC"
+ metric_context="Class"
+ metric_description="Number of private and protected owned attributes"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPPAC">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nai"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NAI"
+ metric_context="Class"
+ metric_description="Number of owned attributes visible to subclasses (public and protected)"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NAI">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.dam"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.DAM"
+ metric_context="Class"
+ metric_description="Ratio between number of private and protected owned attributes and number of owned attributes"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="DAM">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.icpar"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.ICPar"
+ metric_context="Class"
+ metric_description="Number of parameters within the class having another class or interface as type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ICPar">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.apoc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.APOC"
+ metric_context="Class"
+ metric_description="Average number of parameters in all owned operations within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="APOC">
+ </metric>
</extension>
</plugin>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/APOC.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/APOC.java
new file mode 100644
index 0000000..6a16d96
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/APOC.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class APOC implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.nparc";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.nopc";
+
+ 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());
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAM.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAM.java
new file mode 100644
index 0000000..c0f2213
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAM.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class DAM implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.nppac";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.natc";
+
+ 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());
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ICPar.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ICPar.java
new file mode 100644
index 0000000..ba38402
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ICPar.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class ICPar implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.icparc";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.icpari";
+
+ IOperation operation = Operations.getOperation("Sum");
+
+ @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());
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NAI.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NAI.java
new file mode 100644
index 0000000..4d40a10
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NAI.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class NAI implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.npubac";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.nproac";
+
+ IOperation operation = Operations.getOperation("Sum");
+
+ @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());
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASC.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASC.java
new file mode 100644
index 0000000..a811624
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASC.java
@@ -0,0 +1,36 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class NASC implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.nassc";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.nasoc";
+
+ IOperation operation = Operations.getOperation("Sum");
+
+ @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());
+ }
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPPAC.java b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPPAC.java
new file mode 100644
index 0000000..619cfd6
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.compositional/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPPAC.java
@@ -0,0 +1,37 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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 class NPPAC implements IMetricCalculator {
+
+ private List<EObject> context;
+ private String metricID1 = "org.eclipse.emf.refactor.metrics.uml24.npriac";
+ private String metricID2 = "org.eclipse.emf.refactor.metrics.uml24.nproac";
+
+ IOperation operation = Operations.getOperation("Sum");
+
+ @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());
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/.settings/org.eclipse.core.resources.prefs b/org.eclipse.emf.refactor.metrics.uml24.henshin/.settings/org.eclipse.core.resources.prefs
index a52f4a1..a4ca92b 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.henshin/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,6 @@
eclipse.preferences.version=1
+encoding//transformations/ICParC.henshin_diagram=UTF-8
+encoding//transformations/ICParI.henshin_diagram=UTF-8
+encoding//transformations/NASOC.henshin_diagram=UTF-8
encoding//transformations/NNIACP.henshin=UTF-8
encoding//transformations/NNIACP.henshin_diagram=UTF-8
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
index 5377293..c99d842 100644
--- 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
Binary files differ
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24.henshin/plugin.xml
index e59075c..8c6bfe1 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.henshin/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/plugin.xml
@@ -10,4 +10,30 @@
metric_name="NNIACP">
</metric>
</extension>
+<extension point="org.eclipse.emf.refactor.metrics">
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.nasoc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.umlpack.NASOC"
+ metric_context="Class"
+ metric_description="Number of associations with other classes"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NASOC">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.icparc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.umlpack.ICParC"
+ metric_context="Class"
+ metric_description="Number of parameters within the class having another class as type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ICParC">
+ </metric>
+ <metric
+ id="org.eclipse.emf.refactor.metrics.uml24.icpari"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.umlpack.ICParI"
+ metric_context="Class"
+ metric_description="Number of parameters within the class having an interface as type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ICParI">
+ </metric>
+</extension>
</plugin>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParC.java b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParC.java
new file mode 100644
index 0000000..174ffdc
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParC.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.metrics.umlpack;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.henshin.managers.HenshinManager;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.uml24.henshin.Activator;
+
+public class ICParC implements IMetricCalculator {
+
+ private String transformationPath = getFullPath("transformations/ICParC.henshin");
+
+ private EObject context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context.get(0);
+ }
+
+ @Override
+ public double calculate() {
+ return HenshinManager.run(transformationPath, this.context);
+ }
+
+ private String getFullPath(String transformationPath){
+ URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(transformationPath), Collections.EMPTY_MAP);
+ URL fileUrl = null;
+ try {
+ fileUrl = FileLocator.toFileURL(url);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ return fileUrl.getPath();
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParI.java b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParI.java
new file mode 100644
index 0000000..9386e73
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/ICParI.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.metrics.umlpack;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.henshin.managers.HenshinManager;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.uml24.henshin.Activator;
+
+public class ICParI implements IMetricCalculator {
+
+private String transformationPath = getFullPath("transformations/ICParI.henshin");
+
+ private EObject context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context.get(0);
+ }
+
+ @Override
+ public double calculate() {
+ return HenshinManager.run(transformationPath, this.context);
+ }
+
+ private String getFullPath(String transformationPath){
+ URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(transformationPath), Collections.EMPTY_MAP);
+ URL fileUrl = null;
+ try {
+ fileUrl = FileLocator.toFileURL(url);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ return fileUrl.getPath();
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NASOC.java b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NASOC.java
new file mode 100644
index 0000000..8b793ce
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NASOC.java
@@ -0,0 +1,43 @@
+package org.eclipse.emf.refactor.metrics.umlpack;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.metrics.henshin.managers.HenshinManager;
+import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
+import org.eclipse.emf.refactor.metrics.uml24.henshin.Activator;
+
+public class NASOC implements IMetricCalculator {
+
+ private String transformationPath = getFullPath("transformations/NASOC.henshin");
+
+ private EObject context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context.get(0);
+ }
+
+ @Override
+ public double calculate() {
+ return HenshinManager.run(transformationPath, this.context);
+ }
+
+ private String getFullPath(String transformationPath){
+ URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(transformationPath), Collections.EMPTY_MAP);
+ URL fileUrl = null;
+ try {
+ fileUrl = FileLocator.toFileURL(url);
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ return fileUrl.getPath();
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.java b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.java
index 0b2386e..918900c 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.java
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/src/org/eclipse/emf/refactor/metrics/umlpack/NNIACP.java
@@ -10,12 +10,11 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.refactor.metrics.henshin.managers.HenshinManager;
import org.eclipse.emf.refactor.metrics.interfaces.IMetricCalculator;
-
+import org.eclipse.emf.refactor.metrics.uml24.henshin.Activator;
public final class NNIACP implements IMetricCalculator {
- private String transformationPath =
- getFullPath("transformations/NNIACP.henshin");
+ private String transformationPath = getFullPath("transformations/NNIACP.henshin");
private EObject context;
@@ -30,7 +29,7 @@
}
private String getFullPath(String transformationPath){
- URL url = FileLocator.find(org.eclipse.emf.refactor.metrics.uml24.henshin.Activator.getDefault().getBundle(), new Path(transformationPath), Collections.EMPTY_MAP);
+ URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(transformationPath), Collections.EMPTY_MAP);
URL fileUrl = null;
try {
fileUrl = FileLocator.toFileURL(url);
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin
new file mode 100644
index 0000000..ff5a03f
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<henshin:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_owY5AKFLEeOs9qNIBJqQxw">
+ <imports href="http://www.eclipse.org/uml2/4.0.0/UML#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_owb8UKFLEeOs9qNIBJqQxw" name="mainRule">
+ <parameters xmi:id="_owdKcKFLEeOs9qNIBJqQxw" name="context"/>
+ <lhs xmi:id="_oweYkKFLEeOs9qNIBJqQxw" name="Lhs">
+ <nodes xmi:id="_1kgEsKFLEeOs9qNIBJqQxw" name="context" outgoing="_Up6bsaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Up4mgKGHEeOive5EI1bBFw" incoming="_Up6bsaGHEeOive5EI1bBFw" outgoing="_VZSqMqGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Operation"/>
+ </nodes>
+ <nodes xmi:id="_VZSDIKGHEeOive5EI1bBFw" incoming="_VZSqMqGHEeOive5EI1bBFw" outgoing="_Y-z_YKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Parameter"/>
+ </nodes>
+ <nodes xmi:id="_WW6wEKGHEeOive5EI1bBFw" incoming="_Y-z_YKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <edges xmi:id="_Up6bsaGHEeOive5EI1bBFw" source="_1kgEsKFLEeOs9qNIBJqQxw" target="_Up4mgKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class/ownedOperation"/>
+ </edges>
+ <edges xmi:id="_VZSqMqGHEeOive5EI1bBFw" source="_Up4mgKGHEeOive5EI1bBFw" target="_VZSDIKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//BehavioralFeature/ownedParameter"/>
+ </edges>
+ <edges xmi:id="_Y-z_YKGHEeOive5EI1bBFw" source="_VZSDIKGHEeOive5EI1bBFw" target="_WW6wEKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_o76MgaFLEeOs9qNIBJqQxw" name="Rhs">
+ <nodes xmi:id="_1kgEsaFLEeOs9qNIBJqQxw" name="context" outgoing="_Up7CwKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Up50oKGHEeOive5EI1bBFw" incoming="_Up7CwKGHEeOive5EI1bBFw" outgoing="_VZSqM6GHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Operation"/>
+ </nodes>
+ <nodes xmi:id="_VZSqMKGHEeOive5EI1bBFw" incoming="_VZSqM6GHEeOive5EI1bBFw" outgoing="_Y-z_YaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Parameter"/>
+ </nodes>
+ <nodes xmi:id="_WW6wEaGHEeOive5EI1bBFw" incoming="_Y-z_YaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <edges xmi:id="_Up7CwKGHEeOive5EI1bBFw" source="_1kgEsaFLEeOs9qNIBJqQxw" target="_Up50oKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class/ownedOperation"/>
+ </edges>
+ <edges xmi:id="_VZSqM6GHEeOive5EI1bBFw" source="_Up50oKGHEeOive5EI1bBFw" target="_VZSqMKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//BehavioralFeature/ownedParameter"/>
+ </edges>
+ <edges xmi:id="_Y-z_YaGHEeOive5EI1bBFw" source="_VZSqMKGHEeOive5EI1bBFw" target="_WW6wEaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_1kgEsqFLEeOs9qNIBJqQxw" origin="_1kgEsKFLEeOs9qNIBJqQxw" image="_1kgEsaFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_Up6bsKGHEeOive5EI1bBFw" origin="_Up4mgKGHEeOive5EI1bBFw" image="_Up50oKGHEeOive5EI1bBFw"/>
+ <mappings xmi:id="_VZSqMaGHEeOive5EI1bBFw" origin="_VZSDIKGHEeOive5EI1bBFw" image="_VZSqMKGHEeOive5EI1bBFw"/>
+ <mappings xmi:id="_WW6wEqGHEeOive5EI1bBFw" origin="_WW6wEKGHEeOive5EI1bBFw" image="_WW6wEaGHEeOive5EI1bBFw"/>
+ </units>
+</henshin:Module>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin_diagram b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin_diagram
new file mode 100644
index 0000000..1be30c6
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParC.henshin_diagram
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_LpKM4KGHEeOive5EI1bBFw" type="Henshin" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_L4fpYKGHEeOive5EI1bBFw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Up7CwaGHEeOive5EI1bBFw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Up7CwqGHEeOive5EI1bBFw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_L4issKGHEeOive5EI1bBFw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_L4issaGHEeOive5EI1bBFw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_L7RQkKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_L7R3oKGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_L7R3oaGHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_L7TFwKGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_L7TFwaGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_L7TFwqGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParC.henshin#_1kgEsKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L7RQkaGHEeOive5EI1bBFw" x="23" y="20"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_UqEMsKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UqEzwKGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_UqEzwaGHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_UqEzwqGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_UqEzw6GHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_UqEzxKGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParC.henshin#_Up4mgKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_UqEMsaGHEeOive5EI1bBFw" x="30" y="165"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_VZVGcKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_VZVGcqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_VZVGc6GHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_VZVGdKGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_VZVGdaGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_VZVGdqGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParC.henshin#_VZSDIKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VZVGcaGHEeOive5EI1bBFw" x="253" y="165"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WW9MUKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WW9MUqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_WW9zYKGHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_WW9zYaGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_WW9zYqGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_WW9zY6GHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParC.henshin#_WW6wEKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WW9MUaGHEeOive5EI1bBFw" x="253" y="20"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="ICParC.henshin#_owb8UKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_L4gQcKGHEeOive5EI1bBFw" x="28" y="20" width="366" height="287"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_LpKM4aGHEeOive5EI1bBFw"/>
+ <element xmi:type="henshin:Module" href="ICParC.henshin#_owY5AKFLEeOs9qNIBJqQxw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_UqfqgKGHEeOive5EI1bBFw" type="4001" source="_L7RQkKGHEeOive5EI1bBFw" target="_UqEMsKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_UqgRkKGHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_UqgRkaGHEeOive5EI1bBFw" x="18" y="-72"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_UqgRkqGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_UqgRk6GHEeOive5EI1bBFw" x="-7" y="-47"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_UqfqgaGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParC.henshin#_Up6bsaGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_UqfqgqGHEeOive5EI1bBFw" points="[-18, -26, 51, 75]$[-69, -101, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_VZb0IKGHEeOive5EI1bBFw" type="4001" source="_UqEMsKGHEeOive5EI1bBFw" target="_VZVGcKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_VZcbMKGHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VZcbMaGHEeOive5EI1bBFw" x="4" y="-16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_VZcbMqGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VZcbM6GHEeOive5EI1bBFw" x="1" y="16"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_VZb0IaGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParC.henshin#_VZSqMqGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_VZb0IqGHEeOive5EI1bBFw" points="[-14, -26, 117, 219]$[-131, -245, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Y-1NgKGHEeOive5EI1bBFw" type="4001" source="_VZVGcKGHEeOive5EI1bBFw" target="_WW9MUKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Y-10kKGHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Y-10kaGHEeOive5EI1bBFw" y="30"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Y-10kqGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Y-10k6GHEeOive5EI1bBFw" x="10" y="-47"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Y-1NgaGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParC.henshin#_Y-z_YKGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Y-1NgqGHEeOive5EI1bBFw" points="[2, -26, -17, 111]$[14, -163, -5, -26]"/>
+ </edges>
+</notation:Diagram>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin
new file mode 100644
index 0000000..0e18c38
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<henshin:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_owY5AKFLEeOs9qNIBJqQxw">
+ <imports href="http://www.eclipse.org/uml2/4.0.0/UML#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_owb8UKFLEeOs9qNIBJqQxw" name="mainRule">
+ <parameters xmi:id="_owdKcKFLEeOs9qNIBJqQxw" name="context"/>
+ <lhs xmi:id="_oweYkKFLEeOs9qNIBJqQxw" name="Lhs">
+ <nodes xmi:id="_1kgEsKFLEeOs9qNIBJqQxw" name="context" outgoing="_Up6bsaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Up4mgKGHEeOive5EI1bBFw" incoming="_Up6bsaGHEeOive5EI1bBFw" outgoing="_VZSqMqGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Operation"/>
+ </nodes>
+ <nodes xmi:id="_VZSDIKGHEeOive5EI1bBFw" incoming="_VZSqMqGHEeOive5EI1bBFw" outgoing="_qhi2UKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Parameter"/>
+ </nodes>
+ <nodes xmi:id="_oaEzgKGHEeOive5EI1bBFw" incoming="_qhi2UKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Interface"/>
+ </nodes>
+ <edges xmi:id="_Up6bsaGHEeOive5EI1bBFw" source="_1kgEsKFLEeOs9qNIBJqQxw" target="_Up4mgKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class/ownedOperation"/>
+ </edges>
+ <edges xmi:id="_VZSqMqGHEeOive5EI1bBFw" source="_Up4mgKGHEeOive5EI1bBFw" target="_VZSDIKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//BehavioralFeature/ownedParameter"/>
+ </edges>
+ <edges xmi:id="_qhi2UKGHEeOive5EI1bBFw" source="_VZSDIKGHEeOive5EI1bBFw" target="_oaEzgKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_o76MgaFLEeOs9qNIBJqQxw" name="Rhs">
+ <nodes xmi:id="_1kgEsaFLEeOs9qNIBJqQxw" name="context" outgoing="_Up7CwKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Up50oKGHEeOive5EI1bBFw" incoming="_Up7CwKGHEeOive5EI1bBFw" outgoing="_VZSqM6GHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Operation"/>
+ </nodes>
+ <nodes xmi:id="_VZSqMKGHEeOive5EI1bBFw" incoming="_VZSqM6GHEeOive5EI1bBFw" outgoing="_qhi2UaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Parameter"/>
+ </nodes>
+ <nodes xmi:id="_oaEzgaGHEeOive5EI1bBFw" incoming="_qhi2UaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Interface"/>
+ </nodes>
+ <edges xmi:id="_Up7CwKGHEeOive5EI1bBFw" source="_1kgEsaFLEeOs9qNIBJqQxw" target="_Up50oKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class/ownedOperation"/>
+ </edges>
+ <edges xmi:id="_VZSqM6GHEeOive5EI1bBFw" source="_Up50oKGHEeOive5EI1bBFw" target="_VZSqMKGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//BehavioralFeature/ownedParameter"/>
+ </edges>
+ <edges xmi:id="_qhi2UaGHEeOive5EI1bBFw" source="_VZSqMKGHEeOive5EI1bBFw" target="_oaEzgaGHEeOive5EI1bBFw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_1kgEsqFLEeOs9qNIBJqQxw" origin="_1kgEsKFLEeOs9qNIBJqQxw" image="_1kgEsaFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_Up6bsKGHEeOive5EI1bBFw" origin="_Up4mgKGHEeOive5EI1bBFw" image="_Up50oKGHEeOive5EI1bBFw"/>
+ <mappings xmi:id="_VZSqMaGHEeOive5EI1bBFw" origin="_VZSDIKGHEeOive5EI1bBFw" image="_VZSqMKGHEeOive5EI1bBFw"/>
+ <mappings xmi:id="_oaEzgqGHEeOive5EI1bBFw" origin="_oaEzgKGHEeOive5EI1bBFw" image="_oaEzgaGHEeOive5EI1bBFw"/>
+ </units>
+</henshin:Module>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin_diagram b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin_diagram
new file mode 100644
index 0000000..d816a25
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/ICParI.henshin_diagram
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_kWu54KGHEeOive5EI1bBFw" type="Henshin" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_kYvFAKGHEeOive5EI1bBFw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oaFakaGHEeOive5EI1bBFw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_oaFakqGHEeOive5EI1bBFw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYvFAqGHEeOive5EI1bBFw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYvFA6GHEeOive5EI1bBFw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_kYyIUKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyIUqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyIU6GHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyIVKGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kYyIVaGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kYyIVqGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParI.henshin#_1kgEsKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kYyIUaGHEeOive5EI1bBFw" x="23" y="11"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kYyvYKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyvYqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyvY6GHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYyvZKGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kYyvZaGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kYyvZqGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParI.henshin#_Up4mgKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kYyvYaGHEeOive5EI1bBFw" x="30" y="150"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kYzWcKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYzWcqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYzWc6GHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kYzWdKGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kYzWdaGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kYzWdqGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParI.henshin#_VZSDIKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kYzWcaGHEeOive5EI1bBFw" x="258" y="150"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_oaHPwKGHEeOive5EI1bBFw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_oaHPwqGHEeOive5EI1bBFw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_oaHPw6GHEeOive5EI1bBFw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_oaH20KGHEeOive5EI1bBFw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_oaH20aGHEeOive5EI1bBFw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_oaH20qGHEeOive5EI1bBFw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="ICParI.henshin#_oaEzgKGHEeOive5EI1bBFw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_oaHPwaGHEeOive5EI1bBFw" x="258" y="11"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="ICParI.henshin#_owb8UKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kYvFAaGHEeOive5EI1bBFw" width="371" height="270"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_kWu54aGHEeOive5EI1bBFw"/>
+ <element xmi:type="henshin:Module" href="ICParI.henshin#_owY5AKFLEeOs9qNIBJqQxw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_kZWwEKGHEeOive5EI1bBFw" type="4001" source="_kYyIUKGHEeOive5EI1bBFw" target="_kYyvYKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kZWwE6GHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZWwFKGHEeOive5EI1bBFw" x="-8" y="-71"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kZWwFaGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZWwFqGHEeOive5EI1bBFw" x="19" y="-50"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_kZWwEaGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParI.henshin#_Up6bsaGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kZWwEqGHEeOive5EI1bBFw" points="[3, 26, 0, 16]$[0, -16, -3, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_kZXXIKGHEeOive5EI1bBFw" type="4001" source="_kYyvYKGHEeOive5EI1bBFw" target="_kYzWcKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kZX-MqGHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZX-M6GHEeOive5EI1bBFw" x="2" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kZX-NKGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZX-NaGHEeOive5EI1bBFw" y="16"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_kZX-MKGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParI.henshin#_VZSqMqGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kZX-MaGHEeOive5EI1bBFw" points="[26, 26, 16, 16]$[-16, -16, -26, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_qhkrgKGHEeOive5EI1bBFw" type="4001" source="_kYzWcKGHEeOive5EI1bBFw" target="_oaHPwKGHEeOive5EI1bBFw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_qhkrg6GHEeOive5EI1bBFw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qhkrhKGHEeOive5EI1bBFw" x="2" y="23"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qhkrhaGHEeOive5EI1bBFw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qhkrhqGHEeOive5EI1bBFw" x="-16" y="-51"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_qhkrgaGHEeOive5EI1bBFw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="ICParI.henshin#_qhi2UKGHEeOive5EI1bBFw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qhkrgqGHEeOive5EI1bBFw" points="[-7, -26, 22, 86]$[-28, -138, 1, -26]"/>
+ </edges>
+</notation:Diagram>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin
new file mode 100644
index 0000000..43180b3
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<henshin:Module xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmi:id="_owY5AKFLEeOs9qNIBJqQxw">
+ <imports href="http://www.eclipse.org/uml2/4.0.0/UML#/"/>
+ <units xsi:type="henshin:Rule" xmi:id="_owb8UKFLEeOs9qNIBJqQxw" name="mainRule">
+ <parameters xmi:id="_owdKcKFLEeOs9qNIBJqQxw" name="context"/>
+ <lhs xmi:id="_oweYkKFLEeOs9qNIBJqQxw" name="Lhs">
+ <nodes xmi:id="_ygzDIKFLEeOs9qNIBJqQxw" incoming="_KXOFsKFMEeOs9qNIBJqQxw" outgoing="_MN6hkKFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Property"/>
+ </nodes>
+ <nodes xmi:id="_0XSDoKFLEeOs9qNIBJqQxw" outgoing="_KXOFsKFMEeOs9qNIBJqQxw _K5SQ8KFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association"/>
+ </nodes>
+ <nodes xmi:id="_1kgEsKFLEeOs9qNIBJqQxw" name="context" incoming="_MN6hkKFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_3SkwEKFLEeOs9qNIBJqQxw" incoming="_K5SQ8KFMEeOs9qNIBJqQxw" outgoing="_MyE-kKFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Property"/>
+ </nodes>
+ <nodes xmi:id="_4cEuwKFLEeOs9qNIBJqQxw" incoming="_MyE-kKFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <edges xmi:id="_KXOFsKFMEeOs9qNIBJqQxw" source="_0XSDoKFLEeOs9qNIBJqQxw" target="_ygzDIKFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association/memberEnd"/>
+ </edges>
+ <edges xmi:id="_K5SQ8KFMEeOs9qNIBJqQxw" source="_0XSDoKFLEeOs9qNIBJqQxw" target="_3SkwEKFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association/memberEnd"/>
+ </edges>
+ <edges xmi:id="_MN6hkKFMEeOs9qNIBJqQxw" source="_ygzDIKFLEeOs9qNIBJqQxw" target="_1kgEsKFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ <edges xmi:id="_MyE-kKFMEeOs9qNIBJqQxw" source="_3SkwEKFLEeOs9qNIBJqQxw" target="_4cEuwKFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_o76MgaFLEeOs9qNIBJqQxw" name="Rhs">
+ <nodes xmi:id="_yg04UKFLEeOs9qNIBJqQxw" incoming="_KXOFsaFMEeOs9qNIBJqQxw" outgoing="_MN6hkaFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Property"/>
+ </nodes>
+ <nodes xmi:id="_0XSDoaFLEeOs9qNIBJqQxw" outgoing="_KXOFsaFMEeOs9qNIBJqQxw _K5SQ8aFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association"/>
+ </nodes>
+ <nodes xmi:id="_1kgEsaFLEeOs9qNIBJqQxw" name="context" incoming="_MN6hkaFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <nodes xmi:id="_3SkwEaFLEeOs9qNIBJqQxw" incoming="_K5SQ8aFMEeOs9qNIBJqQxw" outgoing="_MyE-kaFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Property"/>
+ </nodes>
+ <nodes xmi:id="_4cFV0KFLEeOs9qNIBJqQxw" incoming="_MyE-kaFMEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Class"/>
+ </nodes>
+ <edges xmi:id="_KXOFsaFMEeOs9qNIBJqQxw" source="_0XSDoaFLEeOs9qNIBJqQxw" target="_yg04UKFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association/memberEnd"/>
+ </edges>
+ <edges xmi:id="_K5SQ8aFMEeOs9qNIBJqQxw" source="_0XSDoaFLEeOs9qNIBJqQxw" target="_3SkwEaFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//Association/memberEnd"/>
+ </edges>
+ <edges xmi:id="_MN6hkaFMEeOs9qNIBJqQxw" source="_yg04UKFLEeOs9qNIBJqQxw" target="_1kgEsaFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ <edges xmi:id="_MyE-kaFMEeOs9qNIBJqQxw" source="_3SkwEaFLEeOs9qNIBJqQxw" target="_4cFV0KFLEeOs9qNIBJqQxw">
+ <type href="http://www.eclipse.org/uml2/4.0.0/UML#//TypedElement/type"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_yg04UaFLEeOs9qNIBJqQxw" origin="_ygzDIKFLEeOs9qNIBJqQxw" image="_yg04UKFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_0XSDoqFLEeOs9qNIBJqQxw" origin="_0XSDoKFLEeOs9qNIBJqQxw" image="_0XSDoaFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_1kgEsqFLEeOs9qNIBJqQxw" origin="_1kgEsKFLEeOs9qNIBJqQxw" image="_1kgEsaFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_3SkwEqFLEeOs9qNIBJqQxw" origin="_3SkwEKFLEeOs9qNIBJqQxw" image="_3SkwEaFLEeOs9qNIBJqQxw"/>
+ <mappings xmi:id="_4cFV0aFLEeOs9qNIBJqQxw" origin="_4cEuwKFLEeOs9qNIBJqQxw" image="_4cFV0KFLEeOs9qNIBJqQxw"/>
+ </units>
+</henshin:Module>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin_diagram b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin_diagram
new file mode 100644
index 0000000..8d307b0
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.henshin/transformations/NASOC.henshin_diagram
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<notation:Diagram xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:henshin="http://www.eclipse.org/emf/2011/Henshin" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmi:id="_uTsJgKFLEeOs9qNIBJqQxw" type="Henshin" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_uw7fIKFLEeOs9qNIBJqQxw" type="2001" fontName="Segoe UI" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yg1fYKFLEeOs9qNIBJqQxw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yg1fYaFLEeOs9qNIBJqQxw" key="value" value="preserve"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_uw-icKFLEeOs9qNIBJqQxw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_uw-icaFLEeOs9qNIBJqQxw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_yg4isKFLEeOs9qNIBJqQxw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yg4isqFLEeOs9qNIBJqQxw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yg4is6FLEeOs9qNIBJqQxw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yhCTsKFLEeOs9qNIBJqQxw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yhCTsaFLEeOs9qNIBJqQxw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yhCTsqFLEeOs9qNIBJqQxw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="NASOC.henshin#_ygzDIKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yg4isaFLEeOs9qNIBJqQxw" x="194" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0XT40KFLEeOs9qNIBJqQxw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0XT40qFLEeOs9qNIBJqQxw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0XT406FLEeOs9qNIBJqQxw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0XT41KFLEeOs9qNIBJqQxw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0XT41aFLEeOs9qNIBJqQxw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0XT41qFLEeOs9qNIBJqQxw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="NASOC.henshin#_0XSDoKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0XT40aFLEeOs9qNIBJqQxw" x="310" y="119"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_1khS0KFLEeOs9qNIBJqQxw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_1kh54KFLEeOs9qNIBJqQxw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1kh54aFLEeOs9qNIBJqQxw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1kh54qFLEeOs9qNIBJqQxw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_1kh546FLEeOs9qNIBJqQxw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_1kh55KFLEeOs9qNIBJqQxw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="NASOC.henshin#_1kgEsKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_1khS0aFLEeOs9qNIBJqQxw" x="20" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3SnMUKFLEeOs9qNIBJqQxw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_3SnMUqFLEeOs9qNIBJqQxw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3SnMU6FLEeOs9qNIBJqQxw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3SnMVKFLEeOs9qNIBJqQxw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3SnMVaFLEeOs9qNIBJqQxw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3SnMVqFLEeOs9qNIBJqQxw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="NASOC.henshin#_3SkwEKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3SnMUaFLEeOs9qNIBJqQxw" x="421" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_4cHLAKFLEeOs9qNIBJqQxw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_4cHLAqFLEeOs9qNIBJqQxw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_4cHLA6FLEeOs9qNIBJqQxw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_4cHyEKFLEeOs9qNIBJqQxw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_4cHyEaFLEeOs9qNIBJqQxw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_4cHyEqFLEeOs9qNIBJqQxw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="NASOC.henshin#_4cEuwKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_4cHLAaFLEeOs9qNIBJqQxw" x="598" y="25"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="NASOC.henshin#_owb8UKFLEeOs9qNIBJqQxw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_uw7fIaFLEeOs9qNIBJqQxw" x="14" y="27" width="707" height="222"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_uTsJgaFLEeOs9qNIBJqQxw"/>
+ <element xmi:type="henshin:Module" href="NASOC.henshin#_owY5AKFLEeOs9qNIBJqQxw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_KXPT0KFMEeOs9qNIBJqQxw" type="4001" source="_0XT40KFLEeOs9qNIBJqQxw" target="_yg4isKFLEeOs9qNIBJqQxw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_KXP64KFMEeOs9qNIBJqQxw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KXP64aFMEeOs9qNIBJqQxw" x="2" y="-16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_KXP64qFMEeOs9qNIBJqQxw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KXP646FMEeOs9qNIBJqQxw" x="-33" y="16"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_KXPT0aFMEeOs9qNIBJqQxw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="NASOC.henshin#_KXOFsKFMEeOs9qNIBJqQxw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_KXPT0qFMEeOs9qNIBJqQxw" points="[-42, 0, 78, 94]$[-127, 0, -7, 94]$[-127, -68, -7, 26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_K5TfEKFMEeOs9qNIBJqQxw" type="4001" source="_0XT40KFLEeOs9qNIBJqQxw" target="_3SnMUKFLEeOs9qNIBJqQxw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_K5UGIKFMEeOs9qNIBJqQxw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_K5UGIaFMEeOs9qNIBJqQxw" x="58" y="-7"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_K5UGIqFMEeOs9qNIBJqQxw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_K5UGI6FMEeOs9qNIBJqQxw" x="25" y="19"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_K5TfEaFMEeOs9qNIBJqQxw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="NASOC.henshin#_K5SQ8KFMEeOs9qNIBJqQxw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_K5TfEqFMEeOs9qNIBJqQxw" points="[42, -9, -65, 85]$[107, -9, 0, 85]$[107, -68, 0, 26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_MN7vsKFMEeOs9qNIBJqQxw" type="4001" source="_yg4isKFLEeOs9qNIBJqQxw" target="_1khS0KFLEeOs9qNIBJqQxw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_MN7vs6FMEeOs9qNIBJqQxw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MN7vtKFMEeOs9qNIBJqQxw" x="-3" y="16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MN8WwKFMEeOs9qNIBJqQxw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MN8WwaFMEeOs9qNIBJqQxw" x="1" y="-16"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MN7vsaFMEeOs9qNIBJqQxw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="NASOC.henshin#_MN6hkKFMEeOs9qNIBJqQxw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MN7vsqFMEeOs9qNIBJqQxw" points="[-9, -26, 35, 135]$[-53, -187, -9, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_MyGMsKFMEeOs9qNIBJqQxw" type="4001" source="_3SnMUKFLEeOs9qNIBJqQxw" target="_4cHLAKFLEeOs9qNIBJqQxw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_MyGMs6FMEeOs9qNIBJqQxw" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MyGMtKFMEeOs9qNIBJqQxw" x="-3" y="-16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MyGMtaFMEeOs9qNIBJqQxw" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MyGMtqFMEeOs9qNIBJqQxw" x="-1" y="21"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MyGMsaFMEeOs9qNIBJqQxw" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="NASOC.henshin#_MyE-kKFMEeOs9qNIBJqQxw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MyGMsqFMEeOs9qNIBJqQxw" points="[38, -24, -177, 110]$[215, -108, 0, 26]"/>
+ </edges>
+</notation:Diagram>
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
index f0b7ed6..cc11cee 100644
--- a/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/plugin.xml
@@ -132,6 +132,97 @@
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="NAPTC">
</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.ecatt"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.ECAtt"
+ metric_context="Class"
+ metric_description="Number of times the class is externally used as attribute type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ECAtt">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.ecpar"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.ECPar"
+ metric_context="Class"
+ metric_description="Number of times the class is externally used as parameter type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="ECPar">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nsupc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NSUPC"
+ metric_context="Class"
+ metric_description="Number of direct parent classes of the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NSUPC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nsubc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NSUBC"
+ metric_context="Class"
+ metric_description="Number of direct child classes of the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NSUBC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nsubc2"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NSUBC2"
+ metric_context="Class"
+ metric_description="Number of all children of the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NSUBC2">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.npubac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPUBAC"
+ metric_context="Class"
+ metric_description="Number of public attributes within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPUBAC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.npriac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPRIAC"
+ metric_context="Class"
+ metric_description="Number of private attributes within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPRIAC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nproac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPROAC"
+ metric_context="Class"
+ metric_description="Number of protected attributes within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPROAC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.npacac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPACAC"
+ metric_context="Class"
+ metric_description="Number of package attributes within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPACAC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nparc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NPARC"
+ metric_context="Class"
+ metric_description="Number of parameters in all owned operations within the class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NPARC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.dac"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.DAC"
+ metric_context="Class"
+ metric_description="Number of owned attributes having another class as type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="DAC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.dac2"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.DAC2"
+ metric_context="Class"
+ metric_description="Number of different classes that are used as attribute type"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="DAC2">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.ndpc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NDPC"
+ metric_context="Class"
+ metric_description="Number of direct part classes which compose a composite class"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NDPC">
+</metric>
</extension>
<extension point="org.eclipse.emf.refactor.metrics">
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC.java
new file mode 100644
index 0000000..328acd7
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class DAC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> reject(type.oclIsUndefined()) -> select(type.oclIsTypeOf(Class) and type<>self) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC2.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC2.java
new file mode 100644
index 0000000..064b9b8
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/DAC2.java
@@ -0,0 +1,28 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class DAC2 implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute "
+ + "-> reject(type.oclIsUndefined()) "
+ + "-> select(type.oclIsTypeOf(Class) and type<>self) "
+ + "-> collect(type) -> asSet() -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECAtt.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECAtt.java
new file mode 100644
index 0000000..2ab3dc8
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECAtt.java
@@ -0,0 +1,28 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class ECAtt implements IMetricCalculator {
+
+ private final String expression =
+ "Class.allInstances() -> reject(c|c=self) "
+ + "-> collect(ownedAttribute) -> select(type=self) "
+ + "-> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECPar.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECPar.java
new file mode 100644
index 0000000..acd42c9
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/ECPar.java
@@ -0,0 +1,28 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class ECPar implements IMetricCalculator {
+
+ private final String expression =
+ "Class.allInstances() -> reject(c|c=self) "
+ + "-> collect(ownedOperation) -> collect(ownedParameter) "
+ + "-> select(type=self) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NDPC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NDPC.java
new file mode 100644
index 0000000..2f2f575
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NDPC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NDPC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> select(aggregation=AggregationKind::composite) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPACAC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPACAC.java
new file mode 100644
index 0000000..ca96083
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPACAC.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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NPACAC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> select(visibility = VisibilityKind::_package) -> 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);
+ }
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPARC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPARC.java
new file mode 100644
index 0000000..4285877
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPARC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NPARC implements IMetricCalculator {
+
+ private final String expression = "self.ownedOperation -> collect(ownedParameter) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPRIAC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPRIAC.java
new file mode 100644
index 0000000..e97a65c
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPRIAC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NPRIAC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> select(visibility = VisibilityKind::private) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPROAC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPROAC.java
new file mode 100644
index 0000000..bc31fa7
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPROAC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NPROAC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> select(visibility = VisibilityKind::protected) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPUBAC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPUBAC.java
new file mode 100644
index 0000000..8427e22
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NPUBAC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NPUBAC implements IMetricCalculator {
+
+ private final String expression = "self.ownedAttribute -> select(visibility = VisibilityKind::public) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC.java
new file mode 100644
index 0000000..811024a
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NSUBC implements IMetricCalculator {
+
+ private final String expression = "Class.allInstances() -> select(superClass -> includes(self)) -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC2.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC2.java
new file mode 100644
index 0000000..31e1cd2
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUBC2.java
@@ -0,0 +1,25 @@
+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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NSUBC2 implements IMetricCalculator {
+
+ private final String expression = "Class.allInstances() -> select(allParents() -> includes(self)) -> asSet() -> 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);
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC.java b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC.java
new file mode 100644
index 0000000..7e7e6cc
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24.ocl/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NSUPC.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.emf.refactor.metrics.ocl.managers.OCLManager;
+
+public class NSUPC implements IMetricCalculator {
+
+ private final String expression = "self.superClass -> 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);
+ }
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24/plugin.xml b/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
index 88d5405..ef2a3c8 100644
--- a/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
+++ b/org.eclipse.emf.refactor.metrics.uml24/plugin.xml
@@ -39,7 +39,29 @@
metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
metric_name="MaxDITC">
</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.nassc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.NASSC"
+ metric_context="Class"
+ metric_description="Number of associations with itself"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="NASSC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.cbc"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.CBC"
+ metric_context="Class"
+ metric_description="Number of owned attributes and associations with class type (coupling between classes)"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="CBC">
+</metric>
+<metric id="org.eclipse.emf.refactor.metrics.uml24.hagg"
+ metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlcl.HAgg"
+ metric_context="Class"
+ metric_description="Length of the longest path to the leaves in the aggregation hierarchy"
+ metric_metamodel="http://www.eclipse.org/uml2/4.0.0/UML"
+ metric_name="HAgg">
+</metric>
</extension>
+
<extension point="org.eclipse.emf.refactor.metrics">
<metric id="org.eclipse.emf.refactor.metrics.uml24.neipo"
metric_calculate_class="org.eclipse.emf.refactor.metrics.uml24.umlop.NEIPO"
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/CBC.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/CBC.java
new file mode 100644
index 0000000..2960af7
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/CBC.java
@@ -0,0 +1,85 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Association;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Property;
+
+public class CBC implements IMetricCalculator {
+
+ private List<EObject> context;
+
+ @Override
+ public void setContext(List<EObject> context) {
+ this.context = context;
+ }
+
+ @Override
+ public double calculate() {
+ double ret = 0;
+ ret += getAttributeUses();
+ ret += getAssociationEndUses();
+ return ret;
+ }
+
+ private double getAttributeUses() {
+ double ret = 0;
+ Class cl = (Class) context.get(0);
+ for (Property p : cl.getOwnedAttributes()) {
+ if (p.getType() != null) {
+ if (p.getType() instanceof Class) {
+ if (((Class)p.getType()) != cl) {
+ ret++;
+ }
+ }
+ }
+ }
+ return ret;
+ }
+
+ private double getAssociationEndUses() {
+ double ret = 0;
+ Class cl = (Class) context.get(0);
+ for (Association a : getOutgoingAssociations()) {
+ for (Property p : a.getOwnedEnds()) {
+ if (p.getType() != cl) {
+ ret++;
+ }
+ }
+ }
+ return ret;
+ }
+
+ private EList<Association> getOutgoingAssociations() {
+ EList<Association> outgoingAssociations = new BasicEList<Association>();
+ Class cl = (Class) context.get(0);
+ for (Association a : getAssociations()) {
+ for (Property p : a.getMemberEnds()) {
+ if (p.getType() == cl) {
+ outgoingAssociations.add(a);
+ break;
+ }
+ }
+ }
+ return outgoingAssociations;
+ }
+
+ private EList<Association> getAssociations() {
+ EList<Association> associations = new BasicEList<Association>();
+ TreeIterator<EObject> iter = context.get(0).eResource().getAllContents();
+ while (iter.hasNext()) {
+ EObject eObject = iter.next();
+ if (eObject instanceof Association) {
+ associations.add((Association) eObject);
+ }
+ }
+ return associations;
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/HAgg.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/HAgg.java
new file mode 100644
index 0000000..d3127c3
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/HAgg.java
@@ -0,0 +1,52 @@
+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.AggregationKind;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Property;
+
+public class HAgg 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 getHAgg(c);
+ }
+
+ private int getHAgg(Class c) {
+ if (c.getOwnedAttributes() == null || c.getOwnedAttributes().isEmpty()) {
+ return 0;
+ }
+ int[] haggs = new int[c.getOwnedAttributes().size()];
+ for (int i=0; i < haggs.length; i++) {
+ haggs[i] = 0;
+ Property att = c.getOwnedAttributes().get(i);
+ if (! att.getAggregation().equals(AggregationKind.NONE_LITERAL)) {
+ System.out.println("Attribute: " + att.getQualifiedName());
+ haggs[i] = 1 + getHAgg((Class) att.getType());
+ }
+ }
+ 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;
+ }
+
+}
diff --git a/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASSC.java b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASSC.java
new file mode 100644
index 0000000..3137d7d
--- /dev/null
+++ b/org.eclipse.emf.refactor.metrics.uml24/src/org/eclipse/emf/refactor/metrics/uml24/umlcl/NASSC.java
@@ -0,0 +1,55 @@
+package org.eclipse.emf.refactor.metrics.uml24.umlcl;
+
+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.interfaces.IMetricCalculator;
+import org.eclipse.uml2.uml.Association;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Property;
+
+public class NASSC 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);
+ double ret = 0;
+
+ for (Association as : getAssociations()) {
+ boolean isassocionwithitself = true;
+ for (Property pr : as.getMemberEnds()) {
+ if (pr.getType() != c) {
+ isassocionwithitself = false;
+ break;
+ }
+ }
+ if (isassocionwithitself) ret++;
+ }
+
+ return ret;
+ }
+
+ private EList<Association> getAssociations() {
+ EList<Association> associations = new BasicEList<Association>();
+ TreeIterator<EObject> iter = context.get(0).eResource().getAllContents();
+ while (iter.hasNext()) {
+ EObject eObject = iter.next();
+ if (eObject instanceof Association) {
+ associations.add((Association) eObject);
+ }
+ }
+ return associations;
+ }
+
+}