diff options
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app')
2 files changed, 57 insertions, 8 deletions
diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/EcoreMetricDistance.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/EcoreMetricDistance.xtend new file mode 100644 index 00000000..67bf14b4 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/EcoreMetricDistance.xtend | |||
@@ -0,0 +1,44 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app | ||
2 | |||
3 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance | ||
4 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph | ||
5 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader | ||
6 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric | ||
7 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup | ||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric | ||
11 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric | ||
12 | import java.util.ArrayList | ||
13 | import org.eclipse.emf.ecore.EObject | ||
14 | |||
15 | class EcoreMetricDistance { | ||
16 | var KSDistance ks; | ||
17 | var MetricSampleGroup g; | ||
18 | |||
19 | |||
20 | new(Domain d){ | ||
21 | var metrics = RepMetricsReader.read(d); | ||
22 | this.g = metrics; | ||
23 | ks = new KSDistance(g); | ||
24 | } | ||
25 | |||
26 | def MetricDistanceGroup calculateMetricDistanceKS(EObject root){ | ||
27 | val metrics = new ArrayList<Metric>(); | ||
28 | metrics.add(new OutDegreeMetric()); | ||
29 | metrics.add(new NodeActivityMetric()); | ||
30 | metrics.add(new MultiplexParticipationCoefficientMetric()); | ||
31 | metrics.add(new NodeTypeMetric()); | ||
32 | val metricCalculator = new EMFGraph(); | ||
33 | metricCalculator.init(root, metrics, null); | ||
34 | var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); | ||
35 | |||
36 | var mpc = ks.mpcDistance(metricSamples.mpcSamples); | ||
37 | var na = ks.naDistance(metricSamples.naSamples); | ||
38 | var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); | ||
39 | var nodeType = ks.nodeTypeDistance(metricSamples.nodeTypeSamples); | ||
40 | var distance = new MetricDistanceGroup(mpc, na, outDegree, nodeType); | ||
41 | distance.nodeTypeInfo = metricSamples.nodeTypeSamples; | ||
42 | return distance; | ||
43 | } | ||
44 | } \ No newline at end of file | ||
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 8d936a88..010e8f87 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 | |||
@@ -12,17 +12,20 @@ import org.eclipse.emf.ecore.EcorePackage | |||
12 | import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine | 12 | import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine |
13 | import org.eclipse.emf.ecore.impl.EcorePackageImpl | 13 | import org.eclipse.emf.ecore.impl.EcorePackageImpl |
14 | import org.eclipse.emf.ecore.EReference | 14 | import org.eclipse.emf.ecore.EReference |
15 | import github.impl.GithubPackageImpl | ||
15 | 16 | ||
16 | //import yakindumm2.impl.Yakindumm2PackageImpl | 17 | //import yakindumm2.impl.Yakindumm2PackageImpl |
17 | 18 | ||
18 | class Main { | 19 | class Main { |
19 | var static Domain d = Domain.Ecore; | 20 | var static Domain d = Domain.Github; |
20 | val static String suffix = '.xmi' | 21 | val static String suffix = '.xmi' |
21 | val static String OUTPUT_FOLDER = "Inputs/random/ecore/"; | 22 | val static String OUTPUT_FOLDER = "Inputs/Github/Alloy/"; |
22 | val static String INPUT_FOLDER = "outputs/random/ecore/"; | 23 | val static String INPUT_FOLDER = "outputs/Github/Alloy/"; |
23 | val static int NUM_RUNS = 1; | 24 | val static int NUM_RUNS = 1; |
24 | var static validFiles = 0; | 25 | var static validFiles = 0; |
25 | var static totalFiles = 0; | 26 | var static totalFiles = 0; |
27 | var static ViolationCheck checker; | ||
28 | var static EPackage metamodel; | ||
26 | 29 | ||
27 | static class RWInformation{ | 30 | static class RWInformation{ |
28 | public var String inputFolder; | 31 | public var String inputFolder; |
@@ -38,7 +41,6 @@ class Main { | |||
38 | 41 | ||
39 | def static void main(String[] args){ | 42 | def static void main(String[] args){ |
40 | //init model | 43 | //init model |
41 | var EPackage metamodel; | ||
42 | //init viatra engine for the violation checker | 44 | //init viatra engine for the violation checker |
43 | ReteEngine.getClass(); | 45 | ReteEngine.getClass(); |
44 | 46 | ||
@@ -49,10 +51,10 @@ class Main { | |||
49 | EcorePackage.eINSTANCE.eClass; | 51 | EcorePackage.eINSTANCE.eClass; |
50 | metamodel = EcorePackageImpl.eINSTANCE; | 52 | metamodel = EcorePackageImpl.eINSTANCE; |
51 | }else if (d == Domain.Github){ | 53 | }else if (d == Domain.Github){ |
52 | //TODO: Initialize Github Package | 54 | metamodel = GithubPackageImpl.eINSTANCE; |
53 | } | 55 | } |
54 | 56 | ||
55 | 57 | checker = new ViolationCheck(d); | |
56 | println("Start Reading Models..."); | 58 | println("Start Reading Models..."); |
57 | var reader = new GraphReader(metamodel, suffix); | 59 | var reader = new GraphReader(metamodel, suffix); |
58 | 60 | ||
@@ -68,7 +70,7 @@ class Main { | |||
68 | val models = new ArrayList<EMFGraph>(); | 70 | val models = new ArrayList<EMFGraph>(); |
69 | models.addAll(reader.readModels(inputFolder + "run" + i)); | 71 | models.addAll(reader.readModels(inputFolder + "run" + i)); |
70 | for(model : models){ | 72 | for(model : models){ |
71 | calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, outputFolder+model.name+"_run_"+i+".csv"); | 73 | calculateAndOutputMetrics(model, metamodel.name, outputFolder+model.name+"_run_"+i+".csv"); |
72 | } | 74 | } |
73 | } | 75 | } |
74 | println("output results Ended for: " + outputFolder); | 76 | println("output results Ended for: " + outputFolder); |
@@ -90,7 +92,10 @@ class Main { | |||
90 | } | 92 | } |
91 | 93 | ||
92 | var outputs = model.evaluateAllMetrics(); | 94 | var outputs = model.evaluateAllMetrics(); |
93 | var violations = ViolationCheck.calculateViolationCounts(model.root, d); | 95 | var violations = checker.calculateViolationCounts(model.root); |
96 | var map = checker.violationMaps(model.root); | ||
97 | |||
98 | println(violations); | ||
94 | if (violations == 0) { | 99 | if (violations == 0) { |
95 | validFiles += 1; | 100 | validFiles += 1; |
96 | } | 101 | } |