aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend
diff options
context:
space:
mode:
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.xtend132
1 files changed, 132 insertions, 0 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
new file mode 100644
index 00000000..3da6305d
--- /dev/null
+++ b/Tests/hu.bme.mit.inf.dslreasoner.run/src/hu/bme/mit/inf/dslreasoner/run/MetamodelLoader.xtend
@@ -0,0 +1,132 @@
1package hu.bme.mit.inf.dslreasoner.run
2
3import hu.bme.mit.inf.dslreasomer.domains.transima.fam.FunctionalArchitecture.FunctionalArchitecturePackage
4import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor
5import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor
6import java.util.LinkedHashMap
7import java.util.List
8import org.eclipse.emf.ecore.EAttribute
9import org.eclipse.emf.ecore.EClass
10import org.eclipse.emf.ecore.EEnum
11import org.eclipse.emf.ecore.EEnumLiteral
12import org.eclipse.emf.ecore.EReference
13import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage
14import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ModelGenerationMethodBasedGlobalConstraint
15import org.eclipse.xtext.xbase.lib.Functions.Function1
16import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethod
17import org.eclipse.emf.ecore.EObject
18import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
19import hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.DiversityDescriptor
20import java.util.Collection
21import java.util.Set
22import java.util.Collections
23
24abstract class MetamodelLoader {
25 protected val ReasonerWorkspace workspace
26 public new(ReasonerWorkspace workspace) {
27 this.workspace = workspace
28 }
29 def EcoreMetamodelDescriptor loadMetamodel()
30 def Set<EClass> getRelevantTypes(EcoreMetamodelDescriptor descriptor)
31 def Set<EReference> getRelevantReferences(EcoreMetamodelDescriptor descriptor)
32 def ViatraQuerySetDescriptor loadQueries(EcoreMetamodelDescriptor metamodel)
33 def List<EObject> loadPartialModel()
34
35 def List<Function1<ModelGenerationMethod,ModelGenerationMethodBasedGlobalConstraint>> additionalConstraints()
36
37 def <T> filterByNames(Iterable<T> collection, Function1<T,String> nameExtractor, Collection<String> requiredNames) {
38 val res = collection.filter[requiredNames.contains(nameExtractor.apply(it))]
39 if(res.size != requiredNames.size) throw new IllegalArgumentException
40 return res.toSet
41 }
42}
43
44class FAMLoader extends MetamodelLoader{
45
46 new(ReasonerWorkspace workspace) {
47 super(workspace)
48 }
49
50 override loadMetamodel() {
51 val package = FunctionalArchitecturePackage.eINSTANCE
52 val List<EClass> classes = package.EClassifiers.filter(EClass).toList
53 val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList
54 val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList
55 val List<EReference> references = classes.map[EReferences].flatten.toList
56 val List<EAttribute> attributes = classes.map[EAttributes].flatten.toList
57 return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes)
58 }
59
60 override getRelevantTypes(EcoreMetamodelDescriptor descriptor) {
61 return descriptor.classes.filterByNames([it.name],#["FunctionalElement"])
62 }
63 override getRelevantReferences(EcoreMetamodelDescriptor descriptor) {
64 return descriptor.references.filterByNames([it.name],#["subElements"])
65 }
66
67 override loadQueries(EcoreMetamodelDescriptor metamodel) {
68 val i = hu.bme.mit.inf.dslreasoner.domains.transima.fam.patterns.Pattern.instance
69 val patterns = i.specifications.toList
70 val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet
71 val derivedFeatures = new LinkedHashMap
72 derivedFeatures.put(i.type.internalQueryRepresentation,metamodel.attributes.filter[it.name == "type"].head)
73 derivedFeatures.put(i.model.internalQueryRepresentation,metamodel.references.filter[it.name == "model"].head)
74 val res = new ViatraQuerySetDescriptor(
75 patterns,
76 wfPatterns,
77 derivedFeatures
78 )
79 return res
80 }
81 override loadPartialModel() {
82 this.workspace.readModel(EObject,"FAM.xmi").eResource.allContents.toList
83 }
84
85 override additionalConstraints() { #[] }
86}
87
88class YakinduLoader extends MetamodelLoader{
89
90 new(ReasonerWorkspace workspace) {
91 super(workspace)
92 }
93
94 override loadMetamodel() {
95 val package = YakindummPackage.eINSTANCE
96 val List<EClass> classes = package.EClassifiers.filter(EClass).toList
97 val List<EEnum> enums = package.EClassifiers.filter(EEnum).toList
98 val List<EEnumLiteral> literals = enums.map[ELiterals].flatten.toList
99 val List<EReference> references = classes.map[EReferences].flatten.toList
100
101 val List<EAttribute> attributes = classes.map[EAttributes].flatten.toList
102
103 return new EcoreMetamodelDescriptor(classes,#{},false,enums,literals,references,attributes)
104 }
105 override loadQueries(EcoreMetamodelDescriptor metamodel) {
106 val i = hu.bme.mit.inf.dslreasoner.partialsnapshot_mavo.yakindu.Patterns.instance
107 val patterns = i.specifications.toList
108 val wfPatterns = patterns.filter[it.allAnnotations.exists[it.name== "Constraint"]].toSet
109 val derivedFeatures = new LinkedHashMap
110 val res = new ViatraQuerySetDescriptor(
111 patterns,
112 wfPatterns,
113 derivedFeatures
114 )
115 return res
116 }
117 override getRelevantTypes(EcoreMetamodelDescriptor descriptor) {
118 descriptor.classes.filterByNames([it.name],#["Vertex","Transition","Synchronization"])
119 }
120
121 override getRelevantReferences(EcoreMetamodelDescriptor descriptor) {
122 descriptor.references.filterByNames([it.name],#["source","target"])
123 }
124
125 override loadPartialModel() {
126 this.workspace.readModel(EObject,"Yakindu.xmi").eResource.allContents.toList
127 }
128
129 override additionalConstraints() {
130 #[[method | new SGraphInconsistencyDetector(method)]]
131 }
132} \ No newline at end of file