Fixed NOA metric to work with the new design.

git-svn-id: https://svn.cs.york.ac.uk/svn/ossmeter/Software/source@1118 1b171192-1bc4-4300-84b6-1b6fde2e8ce3

a.shahi@cwi.nl a.shahi@cwi.nl 2014-04-05

added metric-providers/org.ossmeter.metricprovider.rascal.NOA/META-INF/RASCAL.MF
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.emf
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.java
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOAData.java
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOADataCollection.java
removed metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/NumberOfAttributes.java
changed metric-providers/org.ossmeter.metricprovider.rascal.NOA/META-INF/MANIFEST.MF
changed metric-providers/org.ossmeter.metricprovider.rascal.NOA/plugin.xml
copied metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.ecore -> metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/NOA.rsc
metric-providers/org.ossmeter.metricprovider.rascal.NOA/META-INF/RASCAL.MF Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal.NOA/META-INF/MANIFEST.MF Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal.NOA/plugin.xml Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.ecore to metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/NOA.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/org/ossmeter/metricprovider/rascal/metric/trans/model/NOA.ecore
+++ b/metric-providers/org.ossmeter.metricprovider.rascal.NOA/src/NOA.rsc
@@ -1,25 +1,46 @@
-<?xml version="1.0" encoding="ASCII"?>
-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="org.ossmeter.metricprovider.rascal.metric.trans.model">
-  <eClassifiers xsi:type="ecore:EClass" name="NOA">
-    <eAnnotations source="db">
-      <details key="qualifiedCollectionNames" value="true"/>
-    </eAnnotations>
-    <eAnnotations source="customize"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="numberOfAttributes" upperBound="-1" eType="//NOAData" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="NOAData">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="className">
-      <eAnnotations source="searchable"/>
-      <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attributes">
-      <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//ELong"/>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="revisionNumber">
-      <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="date">
-      <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eStructuralFeatures>
-  </eClassifiers>
-</ecore:EPackage>
+module NOA
+
+import lang::java::m3::Core;
+import List;
+import String;
+import Map;
+import org::ossmeter::metricprovider::Manager;
+import org::ossmeter::metricprovider::ProjectDelta;
+import IO;
+import ValueIO;
+
+int numberOfAttributes(loc cl, M3 model) = size([ m | m <- model@containment[cl], isField(m)]);
+
+map[str class, int nom] getNOA(M3 fileM3) {
+  return (replaceAll(replaceFirst(cl.path, "/", ""), "/", "."):numberOfAttributes(cl, fileM3.model) | <cl,_> <- fileM3.model@containment, isClass(cl));
+}
+
+map[str class, int nom] getNOA(unknownFileType(int lines)) {
+  return ("": -1);
+}
+
+@metric{NOA}
+@doc{Compute your NOA}
+@friendlyName{Number of attributes}
+map[str class, int noa] NOA(ProjectDelta delta, map[str, loc] workingCopyFolders, map[str, loc] scratchFolders) {
+  map[str class, int noa] result = ();
+  map[str, list[str]] changedItemsPerRepo = getChangedItemsPerRepository(delta);
+  
+  for (str repo <- changedItemsPerRepo) {
+    list[str] changedItems = changedItemsPerRepo[repo];
+    loc workingCopyFolder = workingCopyFolders[repo];
+    loc scratchFolder = scratchFolders[repo];
+    
+    for (str changedItem <- changedItems) {
+      if (exists(workingCopyFolder+changedItem)) {
+        loc scratchFile = scratchFolder+changedItem;
+        M3 itemM3 = readBinaryValueFile(#M3, scratchFile[extension = scratchFile.extension+".m3"]);
+        if (!(unknownFileType(_) := itemM3)) {
+          result += (replaceAll(replaceFirst(cl.path, "/", ""), "/", "."):numberOfAttributes(cl, itemM3.model) | <cl,_> <- itemM3.model@containment, isClass(cl));
+        }
+      }
+    }
+  }
+  
+  return result;
+}