aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/.classpath2
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveClosesWithoutReopenConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveReopensWithoutCloseConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveSubWithoutUnSubConstraint0.java81
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/ConsecutiveUnSubWithoutSubConstraint0.java81
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/LoopInParentConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/MergedIssueWithoutPrConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoCommitterConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/constraints/constraints/github/NoUserConstraint0.java79
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/EcoreMetricDistance.xtend44
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.xtend21
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.xtend11
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.xtend7
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend24
14 files changed, 721 insertions, 24 deletions
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 @@
7 <classpathentry kind="src" path="constraints"/> 7 <classpathentry kind="src" path="constraints"/>
8 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1.jar"/> 8 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1.jar"/>
9 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1-javadoc.jar"/> 9 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/commons-math3-3.6.1-javadoc.jar"/>
10 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/weka.jar"/> 10 <classpathentry kind="lib" path="C:/Users/chenp/eclipse-workspace/VIATRA-Generator/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/lib/weka.jar" sourcepath="/VIATRA-Generator/Solvers/Alloy-Solver/hu.bme.mit.inf.dlsreasoner.alloy.reasoner/lib/alloy4.2_2015-02-22.jar"/>
11 <classpathentry kind="output" path="bin"/> 11 <classpathentry kind="output" path="bin"/>
12</classpath> 12</classpath>
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.ConsecutiveClosesWithoutReopen;
20
21public class ConsecutiveClosesWithoutReopenConstraint0 implements IConstraintSpecification {
22
23 private ConsecutiveClosesWithoutReopen querySpecification;
24
25 public ConsecutiveClosesWithoutReopenConstraint0() {
26 querySpecification = ConsecutiveClosesWithoutReopen.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("i",signature.get("i"));
39 return map;
40 }
41
42 @Override
43 public List<String> getKeyNames() {
44 List<String> keyNames = Arrays.asList(
45 "i"
46 );
47 return keyNames;
48 }
49
50 @Override
51 public List<String> getPropertyNames() {
52 List<String> propertyNames = Arrays.asList(
53 );
54 return propertyNames;
55 }
56
57 @Override
58 public Set<List<String>> getSymmetricPropertyNames() {
59 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60 return symmetricPropertyNamesSet;
61 }
62
63 @Override
64 public Set<List<String>> getSymmetricKeyNames() {
65 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66 return symmetricKeyNamesSet;
67 }
68
69 @Override
70 public Severity getSeverity() {
71 return Severity.ERROR;
72 }
73
74 @Override
75 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76 return querySpecification;
77 }
78
79}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.ConsecutiveReopensWithoutClose;
20
21public class ConsecutiveReopensWithoutCloseConstraint0 implements IConstraintSpecification {
22
23 private ConsecutiveReopensWithoutClose querySpecification;
24
25 public ConsecutiveReopensWithoutCloseConstraint0() {
26 querySpecification = ConsecutiveReopensWithoutClose.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("i",signature.get("i"));
39 return map;
40 }
41
42 @Override
43 public List<String> getKeyNames() {
44 List<String> keyNames = Arrays.asList(
45 "i"
46 );
47 return keyNames;
48 }
49
50 @Override
51 public List<String> getPropertyNames() {
52 List<String> propertyNames = Arrays.asList(
53 );
54 return propertyNames;
55 }
56
57 @Override
58 public Set<List<String>> getSymmetricPropertyNames() {
59 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60 return symmetricPropertyNamesSet;
61 }
62
63 @Override
64 public Set<List<String>> getSymmetricKeyNames() {
65 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66 return symmetricKeyNamesSet;
67 }
68
69 @Override
70 public Severity getSeverity() {
71 return Severity.ERROR;
72 }
73
74 @Override
75 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76 return querySpecification;
77 }
78
79}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6//import java.util.HashMap;
7//import java.util.HashSet;
8//import java.util.List;
9//import java.util.Map;
10//import java.util.Set;
11//import java.util.Arrays;
12//
13//import org.eclipse.viatra.addon.validation.core.api.Severity;
14//import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15//import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16//import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17//import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18//
19//import queries.ConsecutiveSubWithoutUnSub;
20
21public class ConsecutiveSubWithoutUnSubConstraint0 {//implements IConstraintSpecification {
22
23// private ConsecutiveSubWithoutUnSub querySpecification;
24//
25// public ConsecutiveSubWithoutUnSubConstraint0() {
26// querySpecification = ConsecutiveSubWithoutUnSub.instance();
27// }
28//
29// @Override
30// public String getMessageFormat() {
31// return "error";
32// }
33//
34//
35// @Override
36// public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37// Map<String,Object> map = new HashMap<>();
38// map.put("i",signature.get("i"));
39// map.put("u",signature.get("u"));
40// return map;
41// }
42//
43// @Override
44// public List<String> getKeyNames() {
45// List<String> keyNames = Arrays.asList(
46// "i",
47// "u"
48// );
49// return keyNames;
50// }
51//
52// @Override
53// public List<String> getPropertyNames() {
54// List<String> propertyNames = Arrays.asList(
55// );
56// return propertyNames;
57// }
58//
59// @Override
60// public Set<List<String>> getSymmetricPropertyNames() {
61// Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
62// return symmetricPropertyNamesSet;
63// }
64//
65// @Override
66// public Set<List<String>> getSymmetricKeyNames() {
67// Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
68// return symmetricKeyNamesSet;
69// }
70//
71// @Override
72// public Severity getSeverity() {
73// return Severity.ERROR;
74// }
75//
76// @Override
77// public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
78// return querySpecification;
79// }
80
81}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.ConsecutiveUnSubWithoutSub;
20
21public class ConsecutiveUnSubWithoutSubConstraint0 implements IConstraintSpecification {
22
23 private ConsecutiveUnSubWithoutSub querySpecification;
24
25 public ConsecutiveUnSubWithoutSubConstraint0() {
26 querySpecification = ConsecutiveUnSubWithoutSub.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("i",signature.get("i"));
39 map.put("u",signature.get("u"));
40 return map;
41 }
42
43 @Override
44 public List<String> getKeyNames() {
45 List<String> keyNames = Arrays.asList(
46 "i",
47 "u"
48 );
49 return keyNames;
50 }
51
52 @Override
53 public List<String> getPropertyNames() {
54 List<String> propertyNames = Arrays.asList(
55 );
56 return propertyNames;
57 }
58
59 @Override
60 public Set<List<String>> getSymmetricPropertyNames() {
61 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
62 return symmetricPropertyNamesSet;
63 }
64
65 @Override
66 public Set<List<String>> getSymmetricKeyNames() {
67 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
68 return symmetricKeyNamesSet;
69 }
70
71 @Override
72 public Severity getSeverity() {
73 return Severity.ERROR;
74 }
75
76 @Override
77 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
78 return querySpecification;
79 }
80
81}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.LoopInParent;
20
21public class LoopInParentConstraint0 implements IConstraintSpecification {
22
23 private LoopInParent querySpecification;
24
25 public LoopInParentConstraint0() {
26 querySpecification = LoopInParent.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("a",signature.get("a"));
39 return map;
40 }
41
42 @Override
43 public List<String> getKeyNames() {
44 List<String> keyNames = Arrays.asList(
45 "a"
46 );
47 return keyNames;
48 }
49
50 @Override
51 public List<String> getPropertyNames() {
52 List<String> propertyNames = Arrays.asList(
53 );
54 return propertyNames;
55 }
56
57 @Override
58 public Set<List<String>> getSymmetricPropertyNames() {
59 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60 return symmetricPropertyNamesSet;
61 }
62
63 @Override
64 public Set<List<String>> getSymmetricKeyNames() {
65 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66 return symmetricKeyNamesSet;
67 }
68
69 @Override
70 public Severity getSeverity() {
71 return Severity.ERROR;
72 }
73
74 @Override
75 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76 return querySpecification;
77 }
78
79}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5//
6//import java.util.HashMap;
7//import java.util.HashSet;
8//import java.util.List;
9//import java.util.Map;
10//import java.util.Set;
11//import java.util.Arrays;
12//
13//import org.eclipse.viatra.addon.validation.core.api.Severity;
14//import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15//import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16//import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17//import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18//
19//import queries.MergedIssueWithoutPr;
20
21public class MergedIssueWithoutPrConstraint0 {//implements IConstraintSpecification {
22
23// private MergedIssueWithoutPr querySpecification;
24//
25// public MergedIssueWithoutPrConstraint0() {
26// querySpecification = MergedIssueWithoutPr.instance();
27// }
28//
29// @Override
30// public String getMessageFormat() {
31// return "error";
32// }
33//
34//
35// @Override
36// public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37// Map<String,Object> map = new HashMap<>();
38// map.put("i",signature.get("i"));
39// return map;
40// }
41//
42// @Override
43// public List<String> getKeyNames() {
44// List<String> keyNames = Arrays.asList(
45// "i"
46// );
47// return keyNames;
48// }
49//
50// @Override
51// public List<String> getPropertyNames() {
52// List<String> propertyNames = Arrays.asList(
53// );
54// return propertyNames;
55// }
56//
57// @Override
58// public Set<List<String>> getSymmetricPropertyNames() {
59// Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60// return symmetricPropertyNamesSet;
61// }
62//
63// @Override
64// public Set<List<String>> getSymmetricKeyNames() {
65// Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66// return symmetricKeyNamesSet;
67// }
68//
69// @Override
70// public Severity getSeverity() {
71// return Severity.ERROR;
72// }
73//
74// @Override
75// public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76// return querySpecification;
77// }
78
79}
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 @@
1///**
2//Generated from platform:/resource/github-graph/queries/queries/github.vql
3//*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.NoCommitter;
20
21public class NoCommitterConstraint0 implements IConstraintSpecification {
22
23 private NoCommitter querySpecification;
24
25 public NoCommitterConstraint0() {
26 querySpecification = NoCommitter.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("c",signature.get("c"));
39 return map;
40 }
41
42 @Override
43 public List<String> getKeyNames() {
44 List<String> keyNames = Arrays.asList(
45 "c"
46 );
47 return keyNames;
48 }
49
50 @Override
51 public List<String> getPropertyNames() {
52 List<String> propertyNames = Arrays.asList(
53 );
54 return propertyNames;
55 }
56
57 @Override
58 public Set<List<String>> getSymmetricPropertyNames() {
59 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60 return symmetricPropertyNamesSet;
61 }
62
63 @Override
64 public Set<List<String>> getSymmetricKeyNames() {
65 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66 return symmetricKeyNamesSet;
67 }
68
69 @Override
70 public Severity getSeverity() {
71 return Severity.ERROR;
72 }
73
74 @Override
75 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76 return querySpecification;
77 }
78
79}
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 @@
1/**
2Generated from platform:/resource/github-graph/queries/queries/github.vql
3*/
4package constraints.github;
5
6import java.util.HashMap;
7import java.util.HashSet;
8import java.util.List;
9import java.util.Map;
10import java.util.Set;
11import java.util.Arrays;
12
13import org.eclipse.viatra.addon.validation.core.api.Severity;
14import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification;
15import org.eclipse.viatra.query.runtime.api.IPatternMatch;
16import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
17import org.eclipse.viatra.query.runtime.api.ViatraQueryMatcher;
18
19import queries.NoUser;
20
21public class NoUserConstraint0 implements IConstraintSpecification {
22
23 private NoUser querySpecification;
24
25 public NoUserConstraint0() {
26 querySpecification = NoUser.instance();
27 }
28
29 @Override
30 public String getMessageFormat() {
31 return "error";
32 }
33
34
35 @Override
36 public Map<String,Object> getKeyObjects(IPatternMatch signature) {
37 Map<String,Object> map = new HashMap<>();
38 map.put("e",signature.get("e"));
39 return map;
40 }
41
42 @Override
43 public List<String> getKeyNames() {
44 List<String> keyNames = Arrays.asList(
45 "e"
46 );
47 return keyNames;
48 }
49
50 @Override
51 public List<String> getPropertyNames() {
52 List<String> propertyNames = Arrays.asList(
53 );
54 return propertyNames;
55 }
56
57 @Override
58 public Set<List<String>> getSymmetricPropertyNames() {
59 Set<List<String>> symmetricPropertyNamesSet = new HashSet<>();
60 return symmetricPropertyNamesSet;
61 }
62
63 @Override
64 public Set<List<String>> getSymmetricKeyNames() {
65 Set<List<String>> symmetricKeyNamesSet = new HashSet<>();
66 return symmetricKeyNamesSet;
67 }
68
69 @Override
70 public Severity getSeverity() {
71 return Severity.ERROR;
72 }
73
74 @Override
75 public IQuerySpecification<? extends ViatraQueryMatcher<? extends IPatternMatch>> getQuerySpecification() {
76 return querySpecification;
77 }
78
79}
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 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance
4import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph
5import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.RepMetricsReader
6import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric
7import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup
8import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric
9import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric
10import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric
11import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric
12import java.util.ArrayList
13import org.eclipse.emf.ecore.EObject
14
15class 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
12import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine 12import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine
13import org.eclipse.emf.ecore.impl.EcorePackageImpl 13import org.eclipse.emf.ecore.impl.EcorePackageImpl
14import org.eclipse.emf.ecore.EReference 14import org.eclipse.emf.ecore.EReference
15import github.impl.GithubPackageImpl
15 16
16//import yakindumm2.impl.Yakindumm2PackageImpl 17//import yakindumm2.impl.Yakindumm2PackageImpl
17 18
18class Main { 19class 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 }
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{
13 @Accessors(PUBLIC_GETTER) 13 @Accessors(PUBLIC_GETTER)
14 var EObject root; 14 var EObject root;
15 15
16 def void init (EObject root, List<Metric> metrics, String name, List<EReference> referenceTypes){ 16 def void init (EObject root, List<Metric> metrics, String name){
17 val otherContents = root.eAllContents.toList(); 17 val otherContents = root.eAllContents.toList();
18 val metaModel = root.eClass.EPackage;
19 val referenceTypes = new ArrayList<EReference>;
18 this.root = root; 20 this.root = root;
19 otherContents.add(root); 21 otherContents.add(root);
22
23 metaModel.eAllContents.forEach[
24 if(it instanceof EReference){
25 referenceTypes.add(it);
26 }
27 ]
28
20 init(otherContents, metrics, name, referenceTypes); 29 init(otherContents, metrics, name, referenceTypes);
21 } 30 }
22 31
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
20import org.eclipse.emf.ecore.resource.ResourceSet 20import org.eclipse.emf.ecore.resource.ResourceSet
21import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl 21import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
22import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl 22import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
23import org.eclipse.emf.ecore.EGenericType
24import org.eclipse.emf.ecore.EStructuralFeature
25import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedClusteringCoefficientMetric
26 23
27class GraphReader{ 24class GraphReader{
28 val ResourceSet resSet = new ResourceSetImpl(); 25 val ResourceSet resSet = new ResourceSetImpl();
@@ -64,7 +61,7 @@ class GraphReader{
64 //add a list of metrics 61 //add a list of metrics
65 val g = new EMFGraph(); 62 val g = new EMFGraph();
66 for(root : roots){ 63 for(root : roots){
67 g.init(root, metrics, name.replaceFirst(suffix, ""), referenceTypes); 64 g.init(root, metrics, name.replaceFirst(suffix, ""));
68 } 65 }
69 66
70 count ++; 67 count ++;
@@ -88,7 +85,7 @@ class GraphReader{
88 //add a list of metrics 85 //add a list of metrics
89 val g = new EMFGraph(); 86 val g = new EMFGraph();
90 for(root : roots){ 87 for(root : roots){
91 g.init(root, metrics, filename.replaceFirst(suffix, ""), referenceTypes); 88 g.init(root, metrics, filename.replaceFirst(suffix, ""));
92 } 89 }
93 return g 90 return g
94 } 91 }
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
5import ecore.Ecore 5import ecore.Ecore
6import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns 6import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns
7import java.util.ArrayList 7import java.util.ArrayList
8import java.util.List
8import org.eclipse.emf.ecore.EObject 9import org.eclipse.emf.ecore.EObject
9import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification 10import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification
11import queries.Github
10 12
11class ViolationCheck { 13class ViolationCheck {
12 /** 14 /**
13 * Return the total number of violations 15 * Return the total number of violations
14 */ 16 */
15 def static int calculateViolationCounts(EObject root, Domain d) { 17 var List<IConstraintSpecification> constraints;
16 var packageName = ''; 18
19 new(Domain d) {
20 var packageName = '';
17 if (d == Domain.Yakindumm) { 21 if (d == Domain.Yakindumm) {
18 packageName = 'constraints.yakindumm'; 22 packageName = 'constraints.yakindumm';
19 } else if (d == Domain.Ecore) { 23 } else if (d == Domain.Ecore) {
20 packageName = 'constraints.ecore'; 24 packageName = 'constraints.ecore';
21 } else if (d == Domain.Github) { 25 } else if (d == Domain.Github) {
22 return -1; 26 packageName = 'constraints.github'
23 } 27 }
24 28
25 var constriants = loadConstraints(packageName); 29 constraints = loadConstraints(packageName);
26 var collections = new ConstraintCollection(constriants, Ecore.instance); 30 }
31
32 def int calculateViolationCounts(EObject root) {
33 var collections = new ConstraintCollection(constraints, Ecore.instance);
27 collections.addModel(root); 34 collections.addModel(root);
28 var results = collections.calculateViolations(); 35 var results = collections.calculateViolations();
29 if (results.size > 0) { 36 if (results.size > 0) {
@@ -36,9 +43,8 @@ class ViolationCheck {
36 /** 43 /**
37 * return a map contain the count for each type of violation 44 * return a map contain the count for each type of violation
38 */ 45 */
39 def static violationMaps(EObject root) { 46 def violationMaps(EObject root) {
40 var constriants = loadConstraints('hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu'); 47 var collections = new ConstraintCollection(constraints, Ecore.instance);
41 var collections = new ConstraintCollection(constriants, Patterns.instance);
42 collections.addModel(root); 48 collections.addModel(root);
43 var results = collections.calculateViolationMaps(); 49 var results = collections.calculateViolationMaps();
44 if (results.size > 0) { 50 if (results.size > 0) {
@@ -48,7 +54,7 @@ class ViolationCheck {
48 } 54 }
49 } 55 }
50 56
51 def static loadConstraints(String packageName) { 57 def loadConstraints(String packageName) {
52 val constraints = new ArrayList<IConstraintSpecification>(); 58 val constraints = new ArrayList<IConstraintSpecification>();
53 59
54 val classPath = ClassPath.from(ClassLoader.systemClassLoader); 60 val classPath = ClassPath.from(ClassLoader.systemClassLoader);