aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend')
-rw-r--r--Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend69
1 files changed, 69 insertions, 0 deletions
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
new file mode 100644
index 00000000..72239e22
--- /dev/null
+++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/src/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.xtend
@@ -0,0 +1,69 @@
1package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation
2
3import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain
4import com.google.common.reflect.ClassPath
5import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns
6import java.util.ArrayList
7import org.eclipse.emf.ecore.EObject
8import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification
9
10class ViolationCheck {
11 /**
12 * Return the total number of violations
13 */
14 def static int calculateViolationCounts(EObject root, Domain d){
15 var packageName = '';
16 if(d == Domain.Yakindumm){
17 packageName = 'constraints.yakindumm';
18 }else if (d == Domain.Ecore){
19 //TODO: put constraints package names for ecore and github models
20 return -1;
21 }else if (d == Domain.Github){
22 return -1;
23 }
24
25
26 var constriants = loadConstraints(packageName);
27 var collections = new ConstraintCollection(constriants, Patterns.instance);
28 collections.addModel(root);
29 var results = collections.calculateViolations();
30 if(results.size > 0){
31 return results.get(0);
32 }else{
33 throw new IllegalArgumentException("Calculate Violation Failed");
34 }
35 }
36
37 /**
38 * return a map contain the count for each type of violation
39 */
40 def static violationMaps(EObject root){
41 var constriants = loadConstraints('hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu');
42 var collections = new ConstraintCollection(constriants, Patterns.instance);
43 collections.addModel(root);
44 var results = collections.calculateViolationMaps();
45 if(results.size > 0){
46 return results.get(0);
47 }else{
48 throw new IllegalArgumentException("Calculate Violation Failed");
49 }
50 }
51
52 def static loadConstraints(String packageName){
53 val constraints = new ArrayList<IConstraintSpecification>();
54
55 val classPath = ClassPath.from(ClassLoader.systemClassLoader);
56 val classInfos = classPath.getTopLevelClasses(packageName);
57
58 for(info : classInfos){
59 if(info.load.interfaces.contains(IConstraintSpecification)){
60 //IConstraintSpecification only has one constructor with empty argument list
61 var constructor = info.load.constructors.get(0);
62 var instance = constructor.newInstance();
63 constraints.add(instance as IConstraintSpecification);
64 }
65 }
66
67 return constraints
68 }
69}