Changed rascal metric provider (not using manager anymore). Added extension points for rascal metrics. This transient metric provider looks for rascal metrics the same way the platform looks for transient metric providers.

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

a.shahi@cwi.nl a.shahi@cwi.nl 2013-11-11

added metric-providers/org.ossmeter.metricprovider.rascal/schema/org.ossmeter.metricprovider.rascal.metric.exsd
removed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RealMeasurement.java
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/history/model/HistoricRascalMetrics.java
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/rascalmetric.ecore
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/rascalmetric.emf
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalHistoricMetricProvider.java
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalMetricProviderManager.java
changed metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalTransientMetricProvider.java
changed metric-providers/org.ossmeter.metricprovider.rascal/.classpath
changed metric-providers/org.ossmeter.metricprovider.rascal/plugin.xml
copied metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/BooleanMeasurement.java -> metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalMetrics.java
copied metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/IntegerMeasurement.java -> metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetric.java
copied metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/Measurement.java -> metric-providers/org.ossmeter.metricprovider.rascal/modules/Manager.rsc
copied metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/MeasurementCollection.java -> metric-providers/org.ossmeter.metricprovider.rascal/modules/LOC.rsc
copied metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetrics.java -> metric-providers/org.ossmeter.metricprovider.rascal/modules/NOM.rsc
metric-providers/org.ossmeter.metricprovider.rascal/schema/org.ossmeter.metricprovider.rascal.metric.exsd Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/history/model/HistoricRascalMetrics.java Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/rascalmetric.ecore Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/rascalmetric.emf Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalHistoricMetricProvider.java Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalMetricProviderManager.java Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalTransientMetricProvider.java Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/.classpath Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/plugin.xml Diff Switch to side-by-side view
Loading...
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/BooleanMeasurement.java to metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalMetrics.java
--- a/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/BooleanMeasurement.java
+++ b/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/RascalMetrics.java
@@ -1,29 +1,21 @@
-package org.ossmeter.metricprovider.rascal.trans.model;
+package org.ossmeter.metricprovider.rascal;
 
-import com.mongodb.*;
-import java.util.*;
-import com.googlecode.pongo.runtime.*;
+import org.eclipse.imp.pdb.facts.IValue;
+import org.ossmeter.platform.Date;
+import org.rascalmpl.interpreter.Evaluator;
 
+import com.mongodb.DB;
 
-public class BooleanMeasurement extends Measurement {
+public abstract class RascalMetrics {
 	
+	protected String module;
+	protected String function;
 	
+	public abstract void adapt(DB db);
+	public abstract void measure(Evaluator eval, IValue file, String revision, String fileURL, Date today);
+	public abstract void sync();
 	
-	public BooleanMeasurement() { 
-		super();
+	public String getModule() {
+		return this.module;
 	}
-	
-	public boolean getValue() {
-		return parseBoolean(dbObject.get("value")+"", false);
-	}
-	
-	public BooleanMeasurement setValue(boolean value) {
-		dbObject.put("value", value + "");
-		notifyChanged();
-		return this;
-	}
-	
-	
-	
-	
-}+}
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/IntegerMeasurement.java to metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetric.java
--- a/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/IntegerMeasurement.java
+++ b/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetric.java
@@ -1,29 +1,22 @@
 package org.ossmeter.metricprovider.rascal.trans.model;
 
+import com.googlecode.pongo.runtime.*;
 import com.mongodb.*;
-import java.util.*;
-import com.googlecode.pongo.runtime.*;
 
-
-public class IntegerMeasurement extends Measurement {
+public class RascalMetric extends PongoDB {
 	
+	public RascalMetric() {}
 	
-	
-	public IntegerMeasurement() { 
-		super();
+	public RascalMetric(DB db) {
+		setDb(db);
 	}
-	
-	public long getValue() {
-		return parseLong(dbObject.get("value")+"", 0);
-	}
-	
-	public IntegerMeasurement setValue(long value) {
-		dbObject.put("value", value + "");
-		notifyChanged();
-		return this;
-	}
 	
 	
 	
 	
+	
+	@Override
+	public void setDb(DB db) {
+		super.setDb(db);
+	}
 }
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/Measurement.java to metric-providers/org.ossmeter.metricprovider.rascal/modules/Manager.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/Measurement.java
+++ b/metric-providers/org.ossmeter.metricprovider.rascal/modules/Manager.rsc
@@ -1,38 +1,28 @@
-package org.ossmeter.metricprovider.rascal.trans.model;
+module Manager
 
-import com.mongodb.*;
-import java.util.*;
-import com.googlecode.pongo.runtime.*;
+import util::ShellExec;
+import List;
+import Set;
+import IO;
+import lang::java::m3::Core;
+import util::Math;
+import LOC;
+import String;
 
+str checkOutRepository(str repositoryURL, int revision, loc localStorage) {
+    str result = readEntireStream(createProcess("svn", 
+        ["co", "-r", toString(revision), "--non-interactive", "--trust-server-cert", repositoryURL], localStorage
+    ));
+    return result;
+}
 
-public class Measurement extends Pongo {
-	
-	
-	
-	public Measurement() { 
-		super();
-	}
-	
-	public String getUri() {
-		return parseString(dbObject.get("uri")+"", "");
-	}
-	
-	public Measurement setUri(String uri) {
-		dbObject.put("uri", uri + "");
-		notifyChanged();
-		return this;
-	}
-	public String getMetric() {
-		return parseString(dbObject.get("metric")+"", "");
-	}
-	
-	public Measurement setMetric(String metric) {
-		dbObject.put("metric", metric + "");
-		notifyChanged();
-		return this;
-	}
-	
-	
-	
-	
-}+M3 createFileM3(loc file) {
+  if (file.extension == "java") {
+    return createM3FromFile(file);
+  }
+  return m3(|unknown:///|);
+}
+
+bool isValid(M3 fileM3) {
+  return !isEmpty(fileM3);
+}
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/MeasurementCollection.java to metric-providers/org.ossmeter.metricprovider.rascal/modules/LOC.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/MeasurementCollection.java
+++ b/metric-providers/org.ossmeter.metricprovider.rascal/modules/LOC.rsc
@@ -1,65 +1,104 @@
-package org.ossmeter.metricprovider.rascal.trans.model;
+module LOC
 
-import com.googlecode.pongo.runtime.*;
-import java.util.*;
-import com.mongodb.*;
+import lang::java::m3::Core;
+import analysis::graphs::Graph;
+import IO;
+import List;
+import String;
+import Set;
 
-import org.ossmeter.metricprovider.rascal.trans.model.Measurement;
+alias locResult = tuple[int total, int comment, int empty, int source];
 
-public class MeasurementCollection extends PongoCollection<Measurement> {
-	
-	public MeasurementCollection(DBCollection dbCollection) {
-		super(dbCollection);
-		createIndex("uri");
-		createIndex("metric");
-	}
-	
-	public Iterable<Measurement> findById(String id) {
-		return new IteratorIterable<Measurement>(new PongoCursorIterator<Measurement>(this, dbCollection.find(new BasicDBObject("_id", id))));
-	}
-	
-	public Iterable<Measurement> findByUri(String q) {
-		return new IteratorIterable<Measurement>(new PongoCursorIterator<Measurement>(this, dbCollection.find(new BasicDBObject("uri", q + ""))));
-	}
-	
-	public Measurement findOneByUri(String q) {
-		Measurement measurement = (Measurement) PongoFactory.getInstance().createPongo(dbCollection.findOne(new BasicDBObject("uri", q + "")));
-		if (measurement != null) {
-			measurement.setPongoCollection(this);
-		}
-		return measurement;
-	}
+int countCommentedLoc(M3 projectModel, loc cu) 
+  = (0 | it + (doc.end.line - doc.begin.line + 1 - checkForSourceLines(doc)) | doc <- projectModel@documentation[cu]); 
 
-	public long countByUri(String q) {
-		return dbCollection.count(new BasicDBObject("uri", q + ""));
-	}
-	public Iterable<Measurement> findByMetric(String q) {
-		return new IteratorIterable<Measurement>(new PongoCursorIterator<Measurement>(this, dbCollection.find(new BasicDBObject("metric", q + ""))));
-	}
-	
-	public Measurement findOneByMetric(String q) {
-		Measurement measurement = (Measurement) PongoFactory.getInstance().createPongo(dbCollection.findOne(new BasicDBObject("metric", q + "")));
-		if (measurement != null) {
-			measurement.setPongoCollection(this);
-		}
-		return measurement;
-	}
+private int checkForSourceLines(loc commentLoc, str fileContents) {
+  str comment = substring(fileContents, commentLoc.offset, commentLoc.offset + commentLoc.length);
+  // We will check to see if there are any source code in the commented lines
+  loc commentedLines = commentLoc;
+  // start from start of the line
+  commentedLines.begin.column = 0;
+  // increase to the next line to cover the full line
+  commentedLines.end.line += 1;
+  // we won't take any character from the next line
+  commentedLines.end.column = 0;
+  list[str] contents = split("\n", fileContents)[commentedLines.begin.line-1..commentedLines.end.line-1];
+  str commentedLinesSrc = intercalate("\n", contents);
+  // since we look till the start of the next line, we need to make sure we remove the extra \n from the end  
+  if (isEmpty(last(contents)))
+    commentedLinesSrc = replaceLast(commentedLinesSrc, "\n" , "");
+  return size(split(trim(comment), trim(commentedLinesSrc)));
+}
 
-	public long countByMetric(String q) {
-		return dbCollection.count(new BasicDBObject("metric", q + ""));
-	}
-	
-	@Override
-	public Iterator<Measurement> iterator() {
-		return new PongoCursorIterator<Measurement>(this, dbCollection.find());
-	}
-	
-	public void add(Measurement measurement) {
-		super.add(measurement);
-	}
-	
-	public void remove(Measurement measurement) {
-		super.remove(measurement);
-	}
-	
-}+str removeComments(str contents, M3 fileM3) {
+  set[loc] compilationUnit = {src | <name, src> <- fileM3@declarations, isCompilationUnit(name)};
+  assert size(compilationUnit) == 1 : "More than one compilation unit in a file???";
+  loc cu = getOneFrom(compilationUnit);
+  list[str] listContents = split("\n", contents);
+  list[str] result = listContents;
+  for (loc commentLoc <- fileM3@documentation[cu]) {
+    // remove comments
+    result = result - slice(listContents, commentLoc.begin.line - 1, commentLoc.end.line - commentLoc.begin.line + 1);
+  }
+  return intercalate("\n", result);
+}
+
+locResult countLoc(loc file) {
+  locResult result = <-1,-1,-1,-1>;
+  
+  str fileContents = readFile(file);
+  
+  result.total = size(split("\n", fileContents));
+  result.comment = -1;
+  result.empty = -1;
+  result.source = result.total;
+  
+  return result;
+}
+
+loc getCompilationUnit(M3 fileM3) {
+  set[loc] compilationUnit = {src | <name, src> <- fileM3@declarations, isCompilationUnit(name)};
+  assert size(compilationUnit) == 1 : "More than one compilation unit in a file???";
+  loc compilationUnitSrc = getOneFrom(compilationUnit);
+  
+  return compilationUnitSrc;
+}
+
+locResult countLoc(M3 fileM3) {
+  locResult result = <-1,-1,-1,-1>;
+  
+  loc compilationUnitSrc = getCompilationUnit(fileM3);
+  
+  str fileContents = readFile(compilationUnitSrc);
+  
+  result.total = compilationUnitSrc.end.line;
+  result.comment = countCommentedLoc(fileM3, fileContents);
+  result.empty = countEmptyLoc(fileM3, fileContents);
+  result.source = result.total - result.comment - result.empty;
+  return result;
+}
+
+int countTotalLoc(M3 fileM3) {
+  loc compilationUnit = getCompilationUnit(fileM3);
+  return compilationUnit.end.line;
+}
+
+int countCommentedLoc(M3 fileM3, str fileContents) {
+  int result = 0;
+  set[loc] comments = { src | <name, src> <- fileM3@documentation, isCompilationUnit(name) };
+  for (source <- comments) {
+    result += source.end.line - source.begin.line + 1 - checkForSourceLines(source, fileContents);
+  }
+  return result;
+}
+
+int countEmptyLoc(M3 fileM3, str fileContents)
+  =  (0 | it + 1 | /^\s*$/ <- split("\n", removeComments(fileContents, fileM3)));
+  
+tuple[str language, int count] locPerLanguage(M3 fileM3) {
+  return <"java", countTotalLoc(fileM3)>;
+}
+
+tuple[str language, int count] locPerLanguage(loc file) {
+  return <file.extension, size(readFileLines(file))>;
+}
metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetrics.java to metric-providers/org.ossmeter.metricprovider.rascal/modules/NOM.rsc
--- a/metric-providers/org.ossmeter.metricprovider.rascal/src/org/ossmeter/metricprovider/rascal/trans/model/RascalMetrics.java
+++ b/metric-providers/org.ossmeter.metricprovider.rascal/modules/NOM.rsc
@@ -1,29 +1,16 @@
-package org.ossmeter.metricprovider.rascal.trans.model;
+module NOM
 
-import com.googlecode.pongo.runtime.*;
-import com.mongodb.*;
+import lang::java::m3::Core;
+import List;
+import String;
+import Map;
 
-public class RascalMetrics extends PongoDB {
-	
-	public RascalMetrics() {}
-	
-	public RascalMetrics(DB db) {
-		setDb(db);
-	}
-	
-	protected MeasurementCollection measurements = null;
-	
-	
-	
-	public MeasurementCollection getMeasurements() {
-		return measurements;
-	}
-	
-	
-	@Override
-	public void setDb(DB db) {
-		super.setDb(db);
-		measurements = new MeasurementCollection(db.getCollection("measurements"));
-		pongoCollections.add(measurements);
-	}
+int numberOfMethods(loc cl, M3 model) = size([ m | m <- model@containment[cl], isMethod(m)]);
+
+map[str class, int nom] getNOM(M3 fileM3) {
+  return (replaceAll(replaceFirst(cl.path, "/", ""), "/", "."):numberOfMethods(cl, fileM3) | <cl,_> <- fileM3@containment, isClass(cl));
+}
+
+map[str class, int nom] getNOM(loc file) {
+  return ("": -1);
 }