aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend')
-rw-r--r--Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend91
1 files changed, 38 insertions, 53 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend
index 4022804c..22addd3d 100644
--- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/SGraphInconsistencyDetector.xtend
@@ -12,7 +12,7 @@ class SGraphInconsistencyDetector extends ModelGenerationMethodBasedGlobalConstr
12 var ViatraQueryMatcher<?> noEntry 12 var ViatraQueryMatcher<?> noEntry
13 var ViatraQueryMatcher<?> entryHasNoOutgoing 13 var ViatraQueryMatcher<?> entryHasNoOutgoing
14 var ViatraQueryMatcher<?> choiceHasNoOutgiong 14 var ViatraQueryMatcher<?> choiceHasNoOutgiong
15 var ViatraQueryMatcher<?> choiceHasNoIncoming 15 //var ViatraQueryMatcher<?> choiceHasNoIncoming
16 var ViatraQueryMatcher<?> noSynch 16 var ViatraQueryMatcher<?> noSynch
17 var ViatraQueryMatcher<?> synchronizationHasNoOutgoing 17 var ViatraQueryMatcher<?> synchronizationHasNoOutgoing
18 18
@@ -27,63 +27,48 @@ class SGraphInconsistencyDetector extends ModelGenerationMethodBasedGlobalConstr
27 return SGraphInconsistencyDetector.simpleName 27 return SGraphInconsistencyDetector.simpleName
28 } 28 }
29 29
30 def private selectMatcher(ThreadContext context, String name) {
31 val x = method.unfinishedWF.filter[
32 it.fullyQualifiedName.equals(name)
33 ].head
34 if(x!==null) {
35 x.getMatcher(context.queryEngine)
36 } else {
37 return null
38 }
39 }
40
41 def private numberOfMatches(ViatraQueryMatcher<?> matcher) {
42 if(matcher!==null) {
43 matcher.countMatches
44 } else {
45 return 0
46 }
47 }
48
30 override init(ThreadContext context) { 49 override init(ThreadContext context) {
31 partialInterpretation = context.model as PartialInterpretation 50 partialInterpretation = context.model as PartialInterpretation
32 51 this.noEntry = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noEntryInRegion")
33 try{ 52 this.entryHasNoOutgoing = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noOutgoingTransitionFromEntry")
34 this.noEntry = method.unfinishedWF.filter[ 53 this.noStateInRegion = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noStateInRegion")
35 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noEntryInRegion") 54 this.choiceHasNoOutgiong = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_choiceHasNoOutgoing")
36 ].head.getMatcher(context.queryEngine) 55 this.noSynch = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noSynch")
37 56 this.synchronizedSiblingRegions = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_SynchronizedRegionDoesNotHaveMultipleRegions")
38 this.entryHasNoOutgoing = method.unfinishedWF.filter[ 57 this.synchronizationHasNoOutgoing = context.selectMatcher("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_synchHasNoOutgoing")
39 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noOutgoingTransitionFromEntry")
40 ].head.getMatcher(context.queryEngine)
41
42 this.noStateInRegion = method.unfinishedWF.filter[
43 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noStateInRegion")
44 ].head.getMatcher(context.queryEngine)
45
46 this.choiceHasNoOutgiong = method.unfinishedWF.filter[
47 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_choiceHasNoOutgoing")
48 ].head.getMatcher(context.queryEngine)
49
50 } catch(Exception e) { }
51 try{
52 this.noSynch = method.unfinishedWF.filter[
53 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_noSynch")
54 ].head.getMatcher(context.queryEngine)
55
56 this.synchronizedSiblingRegions = method.unfinishedWF.filter[
57 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_SynchronizedRegionDoesNotHaveMultipleRegions")
58 ].head.getMatcher(context.queryEngine)
59
60 this.synchronizationHasNoOutgoing = method.unfinishedWF.filter[
61 it.fullyQualifiedName.equals("unfinishedBy_pattern_hu_bme_mit_inf_dslreasoner_partialsnapshot_mavo_yakindu_synchHasNoOutgoing")
62 ].head.getMatcher(context.queryEngine)
63 } catch(Exception e) { }
64 } 58 }
65 59
66 override checkGlobalConstraint(ThreadContext context) { 60 override checkGlobalConstraint(ThreadContext context) {
67 if(noEntry !== null) { 61 var requiredNewObjects =
68 var requiredNewObjects = noEntry.countMatches*2 +entryHasNoOutgoing.countMatches + noStateInRegion.countMatches 62 noEntry.numberOfMatches*2 +
69 if(choiceHasNoOutgiong!=null) { 63 entryHasNoOutgoing.numberOfMatches +
70 requiredNewObjects+=choiceHasNoOutgiong.countMatches 64 noStateInRegion.numberOfMatches +
71 } 65 choiceHasNoOutgiong.numberOfMatches +
72 if(synchronizationHasNoOutgoing!= null) { 66 noSynch.numberOfMatches*2 +
73 requiredNewObjects += 67 synchronizationHasNoOutgoing.numberOfMatches +
74 noSynch.countMatches*2 + 68 synchronizedSiblingRegions.numberOfMatches*4
75 synchronizationHasNoOutgoing.countMatches + 69 val availableNewObjects = partialInterpretation.maxNewElements
76 synchronizedSiblingRegions.countMatches*4 70 val res = availableNewObjects >= requiredNewObjects
77 } 71 return res
78
79 val availableNewObjects = partialInterpretation.maxNewElements
80 val res = availableNewObjects >= requiredNewObjects
81 //println('''[«availableNewObjects» >= «requiredNewObjects»] = «res»''')
82 return res
83 } else {
84 true
85 }
86
87 } 72 }
88 override createNew() { 73 override createNew() {
89 return new SGraphInconsistencyDetector(this.method) 74 return new SGraphInconsistencyDetector(this.method)