aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend96
1 files changed, 96 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
new file mode 100644
index 00000000..dfde6593
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend
@@ -0,0 +1,96 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck
7import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
8import java.io.File
9import java.util.ArrayList
10import org.eclipse.emf.ecore.EPackage
11import org.eclipse.emf.ecore.EcorePackage
12import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine
13import org.eclipse.emf.ecore.impl.EcorePackageImpl
14import org.eclipse.emf.ecore.EReference
15
16//import yakindumm2.impl.Yakindumm2PackageImpl
17
18class Main {
19 var static Domain d = Domain.Yakindumm;
20 val static String suffix = '.xmi'
21 val static String OUTPUT_FOLDER = "Inputs/measurement2/yakindu/Alloy/";
22 val static String INPUT_FOLDER = "outputs/measurement2/yakindu/Alloy/";
23 val static int NUM_RUNS = 1;
24
25 static class RWInformation{
26 public var String inputFolder;
27 public var String outputFolder;
28 public var int numRuns;
29
30 new(String inputFolder, String outputFolder, int numRuns){
31 this.inputFolder = inputFolder;
32 this.outputFolder = outputFolder;
33 this.numRuns = numRuns;
34 }
35 }
36
37 def static void main(String[] args){
38 //init model
39 var EPackage metamodel;
40 //init viatra engine for the violation checker
41 ReteEngine.getClass();
42
43 if(d == Domain.Yakindumm){
44 YakindummPackageImpl.eINSTANCE.eClass;
45 metamodel = YakindummPackageImpl.eINSTANCE;
46 }else if (d == Domain.Ecore){
47 EcorePackage.eINSTANCE.eClass;
48 metamodel = EcorePackageImpl.eINSTANCE;
49 }else if (d == Domain.Github){
50 //TODO: Initialize Github Package
51 }
52
53
54 println("Start Reading Models...");
55 var reader = new GraphReader(metamodel, suffix);
56
57 val models = new RWInformation(OUTPUT_FOLDER, INPUT_FOLDER, NUM_RUNS);
58 calculateAllModels(models.inputFolder, models.outputFolder,models.numRuns, reader);
59 println("finished");
60 }
61
62 static def calculateAllModels(String inputFolder, String outputFolder, int numRuns, GraphReader reader){
63 (new File(outputFolder)).mkdir();
64 for(var i = 1; i <= numRuns; i++){
65 val models = new ArrayList<EMFGraph>();
66 models.addAll(reader.readModels(inputFolder + "run" + i));
67 for(model : models){
68 calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, outputFolder+model.name+"_run_"+i+".csv");
69 }
70 }
71 println("output results Ended for: " + outputFolder);
72
73
74 }
75
76 static def calculateAndOutputMetrics(EMFGraph model, String metaModel, String fileName){
77 //println("evaluating for " + model.name);
78 model.metaModel = metaModel;
79
80 //remove eGenericType for Ecore domain
81 if(d == Domain.Ecore){
82 var refsToRemove = EcorePackageImpl.eINSTANCE.eAllContents.filter(EReference).filter[
83 it.name.equals('eGenericType') || it.name.equals('eGenericSuperTypes') || it.name.equals('eFactoryInstance')||
84 it.name.equals('eGenericExceptions') || it.name.equals('references') || it.name.equals('contents');
85 ];
86 refsToRemove.forEach[model.removeReference(it)];
87 }
88
89 var outputs = model.evaluateAllMetrics();
90 var violations = ViolationCheck.calculateViolationCounts(model.root, d);
91 println(violations);
92 var violationsOutput = newArrayList('violations', violations+'');
93 outputs.add(violationsOutput);
94 CsvFileWriter.write(outputs, fileName);
95 }
96} \ No newline at end of file