blob: 5e660111bbe8af8863ab1856325a7d036ec22947 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation
import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain
import com.google.common.reflect.ClassPath
import ecore.Ecore
import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns
import java.util.ArrayList
import org.eclipse.emf.ecore.EObject
import org.eclipse.viatra.addon.validation.core.api.IConstraintSpecification
class ViolationCheck {
/**
* Return the total number of violations
*/
def static int calculateViolationCounts(EObject root, 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;
}
var constriants = loadConstraints(packageName);
var collections = new ConstraintCollection(constriants, Ecore.instance);
collections.addModel(root);
var results = collections.calculateViolations();
if (results.size > 0) {
return results.get(0);
} else {
throw new IllegalArgumentException("Calculate Violation Failed");
}
}
/**
* 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);
collections.addModel(root);
var results = collections.calculateViolationMaps();
if (results.size > 0) {
return results.get(0);
} else {
throw new IllegalArgumentException("Calculate Violation Failed");
}
}
def static loadConstraints(String packageName) {
val constraints = new ArrayList<IConstraintSpecification>();
val classPath = ClassPath.from(ClassLoader.systemClassLoader);
val classInfos = classPath.getTopLevelClasses(packageName);
for (info : classInfos) {
if (info.load.interfaces.contains(IConstraintSpecification)) {
// IConstraintSpecification only has one constructor with empty argument list
var constructor = info.load.constructors.get(0);
var instance = constructor.newInstance();
constraints.add(instance as IConstraintSpecification);
}
}
return constraints
}
}
|