diff options
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.xtend | 91 |
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) |