diff options
author | 2017-09-27 22:47:51 +0200 | |
---|---|---|
committer | 2017-09-27 22:47:51 +0200 | |
commit | 0d4516ef455e916ffac2702d2bfe727c71789bc0 (patch) | |
tree | cb16562d8c29f2df497d876ab46ca1e1e99f8c0b /Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend | |
parent | Set thread stop signal to volatile (diff) | |
download | VIATRA-Generator-0d4516ef455e916ffac2702d2bfe727c71789bc0.tar.gz VIATRA-Generator-0d4516ef455e916ffac2702d2bfe727c71789bc0.tar.zst VIATRA-Generator-0d4516ef455e916ffac2702d2bfe727c71789bc0.zip |
Research paper measurement configuration updates
Diffstat (limited to 'Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend')
-rw-r--r-- | Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend | 150 |
1 files changed, 132 insertions, 18 deletions
diff --git a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend index 60908365..10072f5a 100644 --- a/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend +++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend | |||
@@ -1,25 +1,30 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.run | 1 | package hu.bme.mit.inf.dslreasoner.run |
2 | 2 | ||
3 | import hu.bme.mit.inf.dslreasomer.domains.transima.fam.FunctionalArchitecture.FunctionalArchitecturePackage | 3 | import hu.bme.mit.inf.dslreasomer.domains.transima.fam.FunctionalArchitecture.FunctionalArchitecturePackage |
4 | import hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem | ||
5 | import hu.bme.mit.inf.dslreasoner.domains.alloyexamples.Filesystem.FilesystemPackage | ||
6 | import hu.bme.mit.inf.dslreasoner.domains.transima.fam.patterns.Pattern | ||
7 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage | ||
4 | import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor | 8 | import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor |
9 | import hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns | ||
5 | import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor | 10 | import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor |
11 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod | ||
12 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ModelGenerationMethodBasedGlobalConstraint | ||
13 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | ||
14 | import java.util.Collection | ||
6 | import java.util.LinkedHashMap | 15 | import java.util.LinkedHashMap |
7 | import java.util.List | 16 | import java.util.List |
17 | import java.util.Set | ||
8 | import org.eclipse.emf.ecore.EAttribute | 18 | import org.eclipse.emf.ecore.EAttribute |
9 | import org.eclipse.emf.ecore.EClass | 19 | import org.eclipse.emf.ecore.EClass |
10 | import org.eclipse.emf.ecore.EEnum | 20 | import org.eclipse.emf.ecore.EEnum |
11 | import org.eclipse.emf.ecore.EEnumLiteral | 21 | import org.eclipse.emf.ecore.EEnumLiteral |
22 | import org.eclipse.emf.ecore.EObject | ||
12 | import org.eclipse.emf.ecore.EReference | 23 | import org.eclipse.emf.ecore.EReference |
13 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage | ||
14 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ModelGenerationMethodBasedGlobalConstraint | ||
15 | import org.eclipse.xtext.xbase.lib.Functions.Function1 | 24 | import org.eclipse.xtext.xbase.lib.Functions.Function1 |
16 | import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod | 25 | import java.util.HashMap |
17 | import org.eclipse.emf.ecore.EObject | 26 | import org.eclipse.emf.ecore.EcorePackage |
18 | import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace | 27 | import hu.bme.mit.inf.dslreasoner.domains.alloyexamples.Ecore |
19 | import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor | ||
20 | import java.util.Collection | ||
21 | import java.util.Set | ||
22 | import java.util.Collections | ||
23 | 28 | ||
24 | abstract class MetamodelLoader { | 29 | abstract class MetamodelLoader { |
25 | protected val ReasonerWorkspace workspace | 30 | protected val ReasonerWorkspace workspace |
@@ -65,7 +70,7 @@ class FAMLoader extends MetamodelLoader{ | |||
65 | } | 70 | } |
66 | 71 | ||
67 | override loadQueries(EcoreMetamodelDescriptor metamodel) { | 72 | override loadQueries(EcoreMetamodelDescriptor metamodel) { |
68 | val i = hu.bme.mit.inf.dslreasoner.domains.transima.fam.patterns.Pattern.instance | 73 | val i = Pattern.instance |
69 | val patterns = i.specifications.toList | 74 | val patterns = i.specifications.toList |
70 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet | 75 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet |
71 | val derivedFeatures = new LinkedHashMap | 76 | val derivedFeatures = new LinkedHashMap |
@@ -88,11 +93,12 @@ class FAMLoader extends MetamodelLoader{ | |||
88 | class YakinduLoader extends MetamodelLoader{ | 93 | class YakinduLoader extends MetamodelLoader{ |
89 | 94 | ||
90 | private var useSynchronization = true; | 95 | private var useSynchronization = true; |
96 | private var useComplexStates = false; | ||
91 | public static val patternsWithSynchronization = #[ | 97 | public static val patternsWithSynchronization = #[ |
92 | "synchHasNoOutgoing", "synchHasNoIncoming", "SynchronizedIncomingInSameRegion", "notSynchronizingStates", | 98 | "synchHasNoOutgoing", "synchHasNoIncoming", "SynchronizedIncomingInSameRegion", "notSynchronizingStates", |
93 | "hasMultipleOutgoingTrainsition", "hasMultipleIncomingTrainsition", "SynchronizedRegionsAreNotSiblings", | 99 | "hasMultipleOutgoingTrainsition", "hasMultipleIncomingTrainsition", "SynchronizedRegionsAreNotSiblings", |
94 | "SynchronizedRegionDoesNotHaveMultipleRegions", "synchThree", "twoSynch"] | 100 | "SynchronizedRegionDoesNotHaveMultipleRegions", "synchThree", "twoSynch","noSynch2","synch","noSynch4","noSynch3","noSynch"] |
95 | 101 | public static val patternsWithComplexStates =#["outgoingFromExit","outgoingFromFinal","choiceHasNoOutgoing","choiceHasNoIncoming"] | |
96 | new(ReasonerWorkspace workspace) { | 102 | new(ReasonerWorkspace workspace) { |
97 | super(workspace) | 103 | super(workspace) |
98 | } | 104 | } |
@@ -100,12 +106,19 @@ class YakinduLoader extends MetamodelLoader{ | |||
100 | public def setUseSynchronization(boolean useSynchronization) { | 106 | public def setUseSynchronization(boolean useSynchronization) { |
101 | this.useSynchronization = useSynchronization | 107 | this.useSynchronization = useSynchronization |
102 | } | 108 | } |
109 | public def setUseComplexStates(boolean useComplexStates) { | ||
110 | this.useComplexStates = useComplexStates | ||
111 | } | ||
103 | 112 | ||
104 | override loadMetamodel() { | 113 | override loadMetamodel() { |
105 | val useSynchInThisLoad = this.useSynchronization | 114 | val useSynchInThisLoad = this.useSynchronization |
115 | val useComplexStates = this.useComplexStates | ||
106 | 116 | ||
107 | val package = YakindummPackage.eINSTANCE | 117 | val package = YakindummPackage.eINSTANCE |
108 | val List<EClass> classes = package.EClassifiers.filter(EClass).filter[(useSynchInThisLoad) || (it.name != "Synchronization")].toList | 118 | val List<EClass> classes = package.EClassifiers.filter(EClass) |
119 | .filter[useSynchInThisLoad || (it.name != "Synchronization")] | ||
120 | .filter[useComplexStates || (it.name != "Choice" && it.name != "Exit" && it.name != "FinalState")] | ||
121 | .toList | ||
109 | val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList | 122 | val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList |
110 | val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList | 123 | val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList |
111 | val List<EReference> references = classes.map[EReferences].flatten.toList | 124 | val List<EReference> references = classes.map[EReferences].flatten.toList |
@@ -116,11 +129,17 @@ class YakinduLoader extends MetamodelLoader{ | |||
116 | override loadQueries(EcoreMetamodelDescriptor metamodel) { | 129 | override loadQueries(EcoreMetamodelDescriptor metamodel) { |
117 | val useSynchInThisLoad = this.useSynchronization | 130 | val useSynchInThisLoad = this.useSynchronization |
118 | 131 | ||
119 | val i = hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns.instance | 132 | val i = Patterns.instance |
120 | val patterns = i.specifications.filter[spec | | 133 | val patterns = i.specifications |
121 | useSynchInThisLoad || | 134 | .filter[spec | |
122 | !patternsWithSynchronization.exists[spec.fullyQualifiedName.endsWith(it)] | 135 | useSynchInThisLoad || |
123 | ].toList | 136 | !patternsWithSynchronization.exists[spec.fullyQualifiedName.endsWith(it)] |
137 | ] | ||
138 | .filter[spec | | ||
139 | useComplexStates || | ||
140 | !patternsWithComplexStates.exists[spec.fullyQualifiedName.endsWith(it)] | ||
141 | ] | ||
142 | .toList | ||
124 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet | 143 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet |
125 | val derivedFeatures = new LinkedHashMap | 144 | val derivedFeatures = new LinkedHashMap |
126 | val res = new ViatraQuerySetDescriptor( | 145 | val res = new ViatraQuerySetDescriptor( |
@@ -145,4 +164,99 @@ class YakinduLoader extends MetamodelLoader{ | |||
145 | override additionalConstraints() { //#[] | 164 | override additionalConstraints() { //#[] |
146 | #[[method | new SGraphInconsistencyDetector(method)]] | 165 | #[[method | new SGraphInconsistencyDetector(method)]] |
147 | } | 166 | } |
167 | } | ||
168 | |||
169 | class FileSystemLoader extends MetamodelLoader{ | ||
170 | |||
171 | new(ReasonerWorkspace workspace) { | ||
172 | super(workspace) | ||
173 | } | ||
174 | |||
175 | override loadMetamodel() { | ||
176 | val package = FilesystemPackage.eINSTANCE | ||
177 | val List<EClass> classes = package.EClassifiers.filter(EClass).toList | ||
178 | val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList | ||
179 | val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList | ||
180 | val List<EReference> references = classes.map[EReferences].flatten.toList | ||
181 | val List<EAttribute> attributes = classes.map[EAttributes].flatten.toList | ||
182 | return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes) | ||
183 | } | ||
184 | |||
185 | override getRelevantTypes(EcoreMetamodelDescriptor descriptor) { | ||
186 | return null | ||
187 | } | ||
188 | |||
189 | override getRelevantReferences(EcoreMetamodelDescriptor descriptor) { | ||
190 | null | ||
191 | } | ||
192 | |||
193 | override loadQueries(EcoreMetamodelDescriptor metamodel) { | ||
194 | val patternGroup = FileSystem.instance | ||
195 | val patterns = patternGroup.specifications.toList | ||
196 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name == "Constraint"]].toSet | ||
197 | val derivedFeatures = new HashMap | ||
198 | derivedFeatures.put(patternGroup.live.internalQueryRepresentation,metamodel.references.filter[it.name == "live"].head) | ||
199 | return new ViatraQuerySetDescriptor( | ||
200 | patterns, | ||
201 | wfPatterns, | ||
202 | derivedFeatures | ||
203 | ) | ||
204 | |||
205 | } | ||
206 | |||
207 | override loadPartialModel() { | ||
208 | this.workspace.readModel(EObject,"fs.xmi").eResource.allContents.toList | ||
209 | } | ||
210 | |||
211 | override additionalConstraints() { | ||
212 | #[[method | new FileSystemInconsistencyDetector(method)]] | ||
213 | } | ||
214 | |||
215 | } | ||
216 | |||
217 | class EcoreLoader extends MetamodelLoader { | ||
218 | |||
219 | new(ReasonerWorkspace workspace) { | ||
220 | super(workspace) | ||
221 | } | ||
222 | |||
223 | override loadMetamodel() { | ||
224 | val package = EcorePackage.eINSTANCE | ||
225 | val List<EClass> classes = package.EClassifiers.filter(EClass).filter[it.name!="EFactory"].toList | ||
226 | val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList | ||
227 | val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList | ||
228 | val List<EReference> references = classes.map[EReferences].flatten.filter[it.name!="eFactoryInstance"].filter[!it.derived].toList | ||
229 | val List<EAttribute> attributes = #[] //classes.map[EAttributes].flatten.toList | ||
230 | return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes) | ||
231 | } | ||
232 | |||
233 | override getRelevantTypes(EcoreMetamodelDescriptor descriptor) { | ||
234 | return null | ||
235 | } | ||
236 | |||
237 | override getRelevantReferences(EcoreMetamodelDescriptor descriptor) { | ||
238 | null | ||
239 | } | ||
240 | |||
241 | override loadQueries(EcoreMetamodelDescriptor metamodel) { | ||
242 | val patternGroup = Ecore.instance | ||
243 | val patterns = patternGroup.specifications.toList | ||
244 | val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name == "Constraint"]].toSet | ||
245 | val derivedFeatures = new HashMap | ||
246 | return new ViatraQuerySetDescriptor( | ||
247 | patterns, | ||
248 | wfPatterns, | ||
249 | derivedFeatures | ||
250 | ) | ||
251 | |||
252 | } | ||
253 | |||
254 | override loadPartialModel() { | ||
255 | this.workspace.readModel(EObject,"ecore.xmi").eResource.allContents.toList | ||
256 | } | ||
257 | |||
258 | override additionalConstraints() { | ||
259 | #[] | ||
260 | } | ||
261 | |||
148 | } \ No newline at end of file | 262 | } \ No newline at end of file |