diff options
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.xtend | 96 |
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 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck | ||
7 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl | ||
8 | import java.io.File | ||
9 | import java.util.ArrayList | ||
10 | import org.eclipse.emf.ecore.EPackage | ||
11 | import org.eclipse.emf.ecore.EcorePackage | ||
12 | import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine | ||
13 | import org.eclipse.emf.ecore.impl.EcorePackageImpl | ||
14 | import org.eclipse.emf.ecore.EReference | ||
15 | |||
16 | //import yakindumm2.impl.Yakindumm2PackageImpl | ||
17 | |||
18 | class 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 | ||