From 1cfc2e98ffbba1dc2a489ad415c81264b76d8c14 Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Sun, 15 Nov 2020 21:56:45 -0500 Subject: code for paper --- .../calculator/app/EcoreMetricDistance.xtend | 44 ++++++++++++++++++++++ .../realistic/metrics/calculator/app/Main.xtend | 21 +++++++---- 2 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/EcoreMetricDistance.xtend (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app') 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 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric +import java.util.ArrayList +import org.eclipse.emf.ecore.EObject + +class EcoreMetricDistance { + var KSDistance ks; + var MetricSampleGroup g; + + + new(Domain d){ + var metrics = RepMetricsReader.read(d); + this.g = metrics; + ks = new KSDistance(g); + } + + def MetricDistanceGroup calculateMetricDistanceKS(EObject root){ + val metrics = new ArrayList(); + metrics.add(new OutDegreeMetric()); + metrics.add(new NodeActivityMetric()); + metrics.add(new MultiplexParticipationCoefficientMetric()); + metrics.add(new NodeTypeMetric()); + val metricCalculator = new EMFGraph(); + metricCalculator.init(root, metrics, null); + var metricSamples = metricCalculator.evaluateAllMetricsToSamples(); + + var mpc = ks.mpcDistance(metricSamples.mpcSamples); + var na = ks.naDistance(metricSamples.naSamples); + var outDegree = ks.outDegreeDistance(metricSamples.outDegreeSamples); + var nodeType = ks.nodeTypeDistance(metricSamples.nodeTypeSamples); + var distance = new MetricDistanceGroup(mpc, na, outDegree, nodeType); + distance.nodeTypeInfo = metricSamples.nodeTypeSamples; + return distance; + } +} \ 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 import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine import org.eclipse.emf.ecore.impl.EcorePackageImpl import org.eclipse.emf.ecore.EReference +import github.impl.GithubPackageImpl //import yakindumm2.impl.Yakindumm2PackageImpl class Main { - var static Domain d = Domain.Ecore; + var static Domain d = Domain.Github; val static String suffix = '.xmi' - val static String OUTPUT_FOLDER = "Inputs/random/ecore/"; - val static String INPUT_FOLDER = "outputs/random/ecore/"; + val static String OUTPUT_FOLDER = "Inputs/Github/Alloy/"; + val static String INPUT_FOLDER = "outputs/Github/Alloy/"; val static int NUM_RUNS = 1; var static validFiles = 0; var static totalFiles = 0; + var static ViolationCheck checker; + var static EPackage metamodel; static class RWInformation{ public var String inputFolder; @@ -38,7 +41,6 @@ class Main { def static void main(String[] args){ //init model - var EPackage metamodel; //init viatra engine for the violation checker ReteEngine.getClass(); @@ -49,10 +51,10 @@ class Main { EcorePackage.eINSTANCE.eClass; metamodel = EcorePackageImpl.eINSTANCE; }else if (d == Domain.Github){ - //TODO: Initialize Github Package + metamodel = GithubPackageImpl.eINSTANCE; } - + checker = new ViolationCheck(d); println("Start Reading Models..."); var reader = new GraphReader(metamodel, suffix); @@ -68,7 +70,7 @@ class Main { val models = new ArrayList(); models.addAll(reader.readModels(inputFolder + "run" + i)); for(model : models){ - calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, outputFolder+model.name+"_run_"+i+".csv"); + calculateAndOutputMetrics(model, metamodel.name, outputFolder+model.name+"_run_"+i+".csv"); } } println("output results Ended for: " + outputFolder); @@ -90,7 +92,10 @@ class Main { } var outputs = model.evaluateAllMetrics(); - var violations = ViolationCheck.calculateViolationCounts(model.root, d); + var violations = checker.calculateViolationCounts(model.root); + var map = checker.violationMaps(model.root); + + println(violations); if (violations == 0) { validFiles += 1; } -- cgit v1.2.3-54-g00ecf