From 1cfc2e98ffbba1dc2a489ad415c81264b76d8c14 Mon Sep 17 00:00:00 2001 From: 20001LastOrder Date: Sun, 15 Nov 2020 21:56:45 -0500 Subject: code for paper --- .../.classpath | 2 +- .../ConsecutiveClosesWithoutReopenConstraint0.java | 79 +++++++++++++++++++++ .../ConsecutiveReopensWithoutCloseConstraint0.java | 79 +++++++++++++++++++++ .../ConsecutiveSubWithoutUnSubConstraint0.java | 81 ++++++++++++++++++++++ .../ConsecutiveUnSubWithoutSubConstraint0.java | 81 ++++++++++++++++++++++ .../github/LoopInParentConstraint0.java | 79 +++++++++++++++++++++ .../github/MergedIssueWithoutPrConstraint0.java | 79 +++++++++++++++++++++ .../constraints/github/NoCommitterConstraint0.java | 79 +++++++++++++++++++++ .../constraints/github/NoUserConstraint0.java | 79 +++++++++++++++++++++ .../calculator/app/EcoreMetricDistance.xtend | 44 ++++++++++++ .../realistic/metrics/calculator/app/Main.xtend | 21 +++--- .../metrics/calculator/graph/EMFGraph.xtend | 11 ++- .../metrics/calculator/io/GraphReader.xtend | 7 +- .../calculator/validation/ViolationCheck.xtend | 24 ++++--- 14 files changed, 721 insertions(+), 24 deletions(-) create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveClosesWithoutReopenConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveReopensWithoutCloseConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveSubWithoutUnSubConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveUnSubWithoutSubConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/LoopInParentConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/MergedIssueWithoutPrConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoCommitterConstraint0.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoUserConstraint0.java 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') diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath index c5fe8c25..7a7d359a 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath @@ -7,6 +7,6 @@ - + diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveClosesWithoutReopenConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveClosesWithoutReopenConstraint0.java new file mode 100644 index 00000000..1c5e8b0a --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveClosesWithoutReopenConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.ConsecutiveClosesWithoutReopen; + +public class ConsecutiveClosesWithoutReopenConstraint0 implements IConstraintSpecification { + + private ConsecutiveClosesWithoutReopen querySpecification; + + public ConsecutiveClosesWithoutReopenConstraint0() { + querySpecification = ConsecutiveClosesWithoutReopen.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("i",signature.get("i")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "i" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveReopensWithoutCloseConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveReopensWithoutCloseConstraint0.java new file mode 100644 index 00000000..fe0a0155 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveReopensWithoutCloseConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.ConsecutiveReopensWithoutClose; + +public class ConsecutiveReopensWithoutCloseConstraint0 implements IConstraintSpecification { + + private ConsecutiveReopensWithoutClose querySpecification; + + public ConsecutiveReopensWithoutCloseConstraint0() { + querySpecification = ConsecutiveReopensWithoutClose.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("i",signature.get("i")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "i" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveSubWithoutUnSubConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveSubWithoutUnSubConstraint0.java new file mode 100644 index 00000000..38713eb5 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveSubWithoutUnSubConstraint0.java @@ -0,0 +1,81 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +//import java.util.HashMap; +//import java.util.HashSet; +//import java.util.List; +//import java.util.Map; +//import java.util.Set; +//import java.util.Arrays; +// +//import org.eclipse.viatra.addon.validation.core.api.Severity; +//import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +//import org.eclipse.viatra.query.runtime.api.IPatternMatch; +//import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +//import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +// +//import queries.ConsecutiveSubWithoutUnSub; + +public class ConsecutiveSubWithoutUnSubConstraint0 {//implements IConstraintSpecification { + +// private ConsecutiveSubWithoutUnSub querySpecification; +// +// public ConsecutiveSubWithoutUnSubConstraint0() { +// querySpecification = ConsecutiveSubWithoutUnSub.instance(); +// } +// +// @Override +// public String getMessageFormat() { +// return "error"; +// } +// +// +// @Override +// public Map getKeyObjects(IPatternMatch signature) { +// Map map = new HashMap<>(); +// map.put("i",signature.get("i")); +// map.put("u",signature.get("u")); +// return map; +// } +// +// @Override +// public List getKeyNames() { +// List keyNames = Arrays.asList( +// "i", +// "u" +// ); +// return keyNames; +// } +// +// @Override +// public List getPropertyNames() { +// List propertyNames = Arrays.asList( +// ); +// return propertyNames; +// } +// +// @Override +// public Set> getSymmetricPropertyNames() { +// Set> symmetricPropertyNamesSet = new HashSet<>(); +// return symmetricPropertyNamesSet; +// } +// +// @Override +// public Set> getSymmetricKeyNames() { +// Set> symmetricKeyNamesSet = new HashSet<>(); +// return symmetricKeyNamesSet; +// } +// +// @Override +// public Severity getSeverity() { +// return Severity.ERROR; +// } +// +// @Override +// public IQuerySpecification> getQuerySpecification() { +// return querySpecification; +// } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveUnSubWithoutSubConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveUnSubWithoutSubConstraint0.java new file mode 100644 index 00000000..c8eacf14 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveUnSubWithoutSubConstraint0.java @@ -0,0 +1,81 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.ConsecutiveUnSubWithoutSub; + +public class ConsecutiveUnSubWithoutSubConstraint0 implements IConstraintSpecification { + + private ConsecutiveUnSubWithoutSub querySpecification; + + public ConsecutiveUnSubWithoutSubConstraint0() { + querySpecification = ConsecutiveUnSubWithoutSub.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("i",signature.get("i")); + map.put("u",signature.get("u")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "i", + "u" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/LoopInParentConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/LoopInParentConstraint0.java new file mode 100644 index 00000000..ec653a89 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/LoopInParentConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.LoopInParent; + +public class LoopInParentConstraint0 implements IConstraintSpecification { + + private LoopInParent querySpecification; + + public LoopInParentConstraint0() { + querySpecification = LoopInParent.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("a",signature.get("a")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "a" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/MergedIssueWithoutPrConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/MergedIssueWithoutPrConstraint0.java new file mode 100644 index 00000000..4c7fba76 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/MergedIssueWithoutPrConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; +// +//import java.util.HashMap; +//import java.util.HashSet; +//import java.util.List; +//import java.util.Map; +//import java.util.Set; +//import java.util.Arrays; +// +//import org.eclipse.viatra.addon.validation.core.api.Severity; +//import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +//import org.eclipse.viatra.query.runtime.api.IPatternMatch; +//import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +//import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; +// +//import queries.MergedIssueWithoutPr; + +public class MergedIssueWithoutPrConstraint0 {//implements IConstraintSpecification { + +// private MergedIssueWithoutPr querySpecification; +// +// public MergedIssueWithoutPrConstraint0() { +// querySpecification = MergedIssueWithoutPr.instance(); +// } +// +// @Override +// public String getMessageFormat() { +// return "error"; +// } +// +// +// @Override +// public Map getKeyObjects(IPatternMatch signature) { +// Map map = new HashMap<>(); +// map.put("i",signature.get("i")); +// return map; +// } +// +// @Override +// public List getKeyNames() { +// List keyNames = Arrays.asList( +// "i" +// ); +// return keyNames; +// } +// +// @Override +// public List getPropertyNames() { +// List propertyNames = Arrays.asList( +// ); +// return propertyNames; +// } +// +// @Override +// public Set> getSymmetricPropertyNames() { +// Set> symmetricPropertyNamesSet = new HashSet<>(); +// return symmetricPropertyNamesSet; +// } +// +// @Override +// public Set> getSymmetricKeyNames() { +// Set> symmetricKeyNamesSet = new HashSet<>(); +// return symmetricKeyNamesSet; +// } +// +// @Override +// public Severity getSeverity() { +// return Severity.ERROR; +// } +// +// @Override +// public IQuerySpecification> getQuerySpecification() { +// return querySpecification; +// } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoCommitterConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoCommitterConstraint0.java new file mode 100644 index 00000000..0c2d413f --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoCommitterConstraint0.java @@ -0,0 +1,79 @@ +///** +//Generated from platform:/resource/github-graph/queries/queries/github.vql +//*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.NoCommitter; + +public class NoCommitterConstraint0 implements IConstraintSpecification { + + private NoCommitter querySpecification; + + public NoCommitterConstraint0() { + querySpecification = NoCommitter.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("c",signature.get("c")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "c" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoUserConstraint0.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoUserConstraint0.java new file mode 100644 index 00000000..331d0e64 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoUserConstraint0.java @@ -0,0 +1,79 @@ +/** +Generated from platform:/resource/github-graph/queries/queries/github.vql +*/ +package constraints.github; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Arrays; + +import org.eclipse.viatra.addon.validation.core.api.Severity; +import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification; +import org.eclipse.viatra.query.runtime.api.IPatternMatch; +import org.eclipse.viatra.query.runtime.api.IQuerySpecification; +import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher; + +import queries.NoUser; + +public class NoUserConstraint0 implements IConstraintSpecification { + + private NoUser querySpecification; + + public NoUserConstraint0() { + querySpecification = NoUser.instance(); + } + + @Override + public String getMessageFormat() { + return "error"; + } + + + @Override + public Map getKeyObjects(IPatternMatch signature) { + Map map = new HashMap<>(); + map.put("e",signature.get("e")); + return map; + } + + @Override + public List getKeyNames() { + List keyNames = Arrays.asList( + "e" + ); + return keyNames; + } + + @Override + public List getPropertyNames() { + List propertyNames = Arrays.asList( + ); + return propertyNames; + } + + @Override + public Set> getSymmetricPropertyNames() { + Set> symmetricPropertyNamesSet = new HashSet<>(); + return symmetricPropertyNamesSet; + } + + @Override + public Set> getSymmetricKeyNames() { + Set> symmetricKeyNamesSet = new HashSet<>(); + return symmetricKeyNamesSet; + } + + @Override + public Severity getSeverity() { + return Severity.ERROR; + } + + @Override + public IQuerySpecification> getQuerySpecification() { + return querySpecification; + } + +} 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; } diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend index 8fa29fe6..2baaa929 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend @@ -13,10 +13,19 @@ class EMFGraph extends Graph{ @Accessors(PUBLIC_GETTER) var EObject root; - def void init (EObject root, List metrics, String name, List referenceTypes){ + def void init (EObject root, List metrics, String name){ val otherContents = root.eAllContents.toList(); + val metaModel = root.eClass.EPackage; + val referenceTypes = new ArrayList; this.root = root; otherContents.add(root); + + metaModel.eAllContents.forEach[ + if(it instanceof EReference){ + referenceTypes.add(it); + } + ] + init(otherContents, metrics, name, referenceTypes); } diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend index 053e0da3..afa10259 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend @@ -20,9 +20,6 @@ import org.eclipse.emf.ecore.resource.Resource import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl -import org.eclipse.emf.ecore.EGenericType -import org.eclipse.emf.ecore.EStructuralFeature -import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedClusteringCoefficientMetric class GraphReader{ val ResourceSet resSet = new ResourceSetImpl(); @@ -64,7 +61,7 @@ class GraphReader{ //add a list of metrics val g = new EMFGraph(); for(root : roots){ - g.init(root, metrics, name.replaceFirst(suffix, ""), referenceTypes); + g.init(root, metrics, name.replaceFirst(suffix, "")); } count ++; @@ -88,7 +85,7 @@ class GraphReader{ //add a list of metrics val g = new EMFGraph(); for(root : roots){ - g.init(root, metrics, filename.replaceFirst(suffix, ""), referenceTypes); + g.init(root, metrics, filename.replaceFirst(suffix, "")); } return g } diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend index 5e660111..e5feae2b 100644 --- a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend @@ -5,25 +5,32 @@ import com.google.common.reflect.ClassPath import ecore.Ecore import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns import java.util.ArrayList +import java.util.List import org.eclipse.emf.ecore.EObject import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification +import queries.Github class ViolationCheck { /** * Return the total number of violations */ - def static int calculateViolationCounts(EObject root, Domain d) { - var packageName = ''; + var List constraints; + + new(Domain d) { + var packageName = ''; if (d == Domain.Yakindumm) { packageName = 'constraints.yakindumm'; } else if (d == Domain.Ecore) { packageName = 'constraints.ecore'; } else if (d == Domain.Github) { - return -1; + packageName = 'constraints.github' } - var constriants = loadConstraints(packageName); - var collections = new ConstraintCollection(constriants, Ecore.instance); + constraints = loadConstraints(packageName); + } + + def int calculateViolationCounts(EObject root) { + var collections = new ConstraintCollection(constraints, Ecore.instance); collections.addModel(root); var results = collections.calculateViolations(); if (results.size > 0) { @@ -36,9 +43,8 @@ class ViolationCheck { /** * return a map contain the count for each type of violation */ - def static violationMaps(EObject root) { - var constriants = loadConstraints('hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu'); - var collections = new ConstraintCollection(constriants, Patterns.instance); + def violationMaps(EObject root) { + var collections = new ConstraintCollection(constraints, Ecore.instance); collections.addModel(root); var results = collections.calculateViolationMaps(); if (results.size > 0) { @@ -48,7 +54,7 @@ class ViolationCheck { } } - def static loadConstraints(String packageName) { + def loadConstraints(String packageName) { val constraints = new ArrayList(); val classPath = ClassPath.from(ClassLoader.systemClassLoader); -- cgit v1.2.3-54-g00ecf