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 | 71 |
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 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | 3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph |
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter | 4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter |
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader | 5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader |
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck | ||
6 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl | 7 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl |
8 | import java.io.File | ||
7 | import java.util.ArrayList | 9 | import java.util.ArrayList |
10 | import org.eclipse.emf.ecore.EPackage | ||
8 | import org.eclipse.emf.ecore.EcorePackage | 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 | ||
9 | 15 | ||
10 | //import yakindumm2.impl.Yakindumm2PackageImpl | 16 | //import yakindumm2.impl.Yakindumm2PackageImpl |
11 | 17 | ||
12 | class Main { | 18 | class 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 |