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.xtend71
1 files changed, 46 insertions, 25 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
index 062d69fa..ab187b3a 100644
--- 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
@@ -3,13 +3,25 @@ package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph 3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter 4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader 5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck
6import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl 7import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl
8import java.io.File
7import java.util.ArrayList 9import java.util.ArrayList
10import org.eclipse.emf.ecore.EPackage
8import org.eclipse.emf.ecore.EcorePackage 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
9 15
10//import yakindumm2.impl.Yakindumm2PackageImpl 16//import yakindumm2.impl.Yakindumm2PackageImpl
11 17
12class Main { 18class Main {
19 var static Domain d = Domain.Ecore;
20 val static String suffix = '.ecore'
21 val static String OUTPUT_FOLDER = "Inputs/human/";
22 val static String INPUT_FOLDER = "outputs/human/";
23 val static int NUM_RUNS = 1;
24
13 static class RWInformation{ 25 static class RWInformation{
14 public var String inputFolder; 26 public var String inputFolder;
15 public var String outputFolder; 27 public var String outputFolder;
@@ -24,36 +36,32 @@ class Main {
24 36
25 def static void main(String[] args){ 37 def static void main(String[] args){
26 //init model 38 //init model
27 YakindummPackageImpl.eINSTANCE.eClass; 39 var EPackage metamodel;
28 EcorePackage.eINSTANCE.eClass;
29// Yakindumm2PackageImpl.eINSTANCE.eClass;
30 //val infos = initData();
31
32 println("Start Reading Models...");
33 var reader = new GraphReader(EcorePackage.eINSTANCE, ".xmi");
34// for(info : infos){
35// calculateAllModels(info.inputFolder, info.outputFolder,info.numRuns, reader);
36// }
37 40
38 //human input has different package declaration 41 //init viatra engine for the violation checker
39// reader = new GraphReader(Yakindumm2PackageImpl.eINSTANCE); 42 ReteEngine.getClass();
40 val human = new RWInformation("Inputs/viatra75/", "outputs/", 50);
41 calculateAllModels(human.inputFolder, human.outputFolder,human.numRuns, reader);
42 43
44 if(d == Domain.Yakindumm){
45 YakindummPackageImpl.eINSTANCE.eClass;
46 metamodel = YakindummPackageImpl.eINSTANCE;
47 }else if (d == Domain.Ecore){
48 EcorePackage.eINSTANCE.eClass;
49 metamodel = EcorePackageImpl.eINSTANCE;
50 }else if (d == Domain.Github){
51 //TODO: Initialize Github Package
52 }
43 53
54
55 println("Start Reading Models...");
56 var reader = new GraphReader(metamodel, suffix);
57
58 val models = new RWInformation(OUTPUT_FOLDER, INPUT_FOLDER, NUM_RUNS);
59 calculateAllModels(models.inputFolder, models.outputFolder,models.numRuns, reader);
44 println("finished"); 60 println("finished");
45 } 61 }
46 62
47 static def initData(){
48 val infos = new ArrayList<RWInformation>();
49 infos.add(new RWInformation("inputs/alloyInput/models/", "../plot/statistics/alloyOutput/", 20));
50 infos.add(new RWInformation("inputs/randomInput/models/", "../plot/statistics/randomOutput/", 20));
51 infos.add(new RWInformation("inputs/viatraInput30/", "../plot/statistics/viatraOutput30/", 20));
52 infos.add(new RWInformation("inputs/viatraInput100/", "../plot/statistics/viatraOutput100/", 10));
53 return infos;
54 }
55
56 static def calculateAllModels(String inputFolder, String outputFolder, int numRuns, GraphReader reader){ 63 static def calculateAllModels(String inputFolder, String outputFolder, int numRuns, GraphReader reader){
64 (new File(outputFolder)).mkdir();
57 for(var i = 1; i <= numRuns; i++){ 65 for(var i = 1; i <= numRuns; i++){
58 val models = new ArrayList<EMFGraph>(); 66 val models = new ArrayList<EMFGraph>();
59 models.addAll(reader.readModels(inputFolder + "run" + i)); 67 models.addAll(reader.readModels(inputFolder + "run" + i));
@@ -67,8 +75,21 @@ class Main {
67 } 75 }
68 76
69 static def calculateAndOutputMetrics(EMFGraph model, String metaModel, String fileName){ 77 static def calculateAndOutputMetrics(EMFGraph model, String metaModel, String fileName){
70 //println("evaluating for " + model.name); 78 //println("evaluating for " + model.name);
71 model.metaModel = metaModel; 79 model.metaModel = metaModel;
72 CsvFileWriter.write(model.evaluateAllMetrics(), fileName); 80
81 //remove eGenericType for Ecore domain
82 if(d == Domain.Ecore){
83 var refsToRemove = EcorePackageImpl.eINSTANCE.eAllContents.filter(EReference).filter[
84 it.name.equals('eGenericType') || it.name.equals('eGenericSuperTypes') || it.name.equals('eFactoryInstance')||
85 it.name.equals('eGenericExceptions') || it.name.equals('references') || it.name.equals('contents');
86 ];
87 refsToRemove.forEach[model.removeReference(it)];
88 }
89
90 var outputs = model.evaluateAllMetrics();
91 var violationsOutput = newArrayList('violations', ViolationCheck.calculateViolationCounts(model.root, d)+'');
92 outputs.add(violationsOutput);
93 CsvFileWriter.write(outputs, fileName);
73 } 94 }
74} \ No newline at end of file 95} \ No newline at end of file