aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-03-20 16:09:09 +0100
committerLibravatar Kristóf Marussy <kris7topher@gmail.com>2019-03-20 16:09:09 +0100
commit3f5aaab5025b8eb243f414b1c789085327df04f4 (patch)
tree156d9d95888fce6b003d73f509b9155e6b24555f /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
parentFix ParseUtil to avoid breaking the .vql editor in Eclipse (diff)
downloadVIATRA-Generator-3f5aaab5025b8eb243f414b1c789085327df04f4.tar.gz
VIATRA-Generator-3f5aaab5025b8eb243f414b1c789085327df04f4.tar.zst
VIATRA-Generator-3f5aaab5025b8eb243f414b1c789085327df04f4.zip
Fault tree transformation for partial models WIP
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend233
1 files changed, 99 insertions, 134 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
index 36948c2d..b049b4c9 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend
@@ -3,28 +3,27 @@
3 */ 3 */
4package hu.bme.mit.inf.dslreasoner.application.scoping 4package hu.bme.mit.inf.dslreasoner.application.scoping
5 5
6import com.google.common.base.Function 6import com.google.inject.Inject
7import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry 7import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.CftImport
8import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPatternEntry
9import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage
10import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ClassReference
11import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript 8import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
12import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport 9import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport
13import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement 10import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement
14import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification 11import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelEntry
15import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternElement 12import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry
16import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification 13import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ReliabiltiyFunction
17import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport 14import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport
15import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.CftModel
18import org.eclipse.emf.ecore.EClass 16import org.eclipse.emf.ecore.EClass
19import org.eclipse.emf.ecore.EEnum 17import org.eclipse.emf.ecore.EEnum
20import org.eclipse.emf.ecore.EObject 18import org.eclipse.emf.ecore.EObject
21import org.eclipse.emf.ecore.EReference 19import org.eclipse.emf.ecore.EReference
22import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel 20import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel
23import org.eclipse.xtext.EcoreUtil2 21import org.eclipse.xtext.EcoreUtil2
24import org.eclipse.xtext.naming.QualifiedName 22import org.eclipse.xtext.naming.IQualifiedNameConverter
25import org.eclipse.xtext.scoping.IScope
26import org.eclipse.xtext.scoping.Scopes 23import org.eclipse.xtext.scoping.Scopes
27 24
25import static hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage.Literals.*
26
28/** 27/**
29 * This class contains custom scoping description. 28 * This class contains custom scoping description.
30 * 29 *
@@ -32,150 +31,116 @@ import org.eclipse.xtext.scoping.Scopes
32 * on how and when to use it. 31 * on how and when to use it.
33 */ 32 */
34class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider { 33class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider {
35 34
36 private val language = ApplicationConfigurationPackage.eINSTANCE 35 @Inject IQualifiedNameConverter qualifiedNameConverter
37 protected val nameConverter = new Function<PatternModel,QualifiedName>() { 36
38 override apply(PatternModel input) {
39 println(input)
40 val res = QualifiedName.create(input.packageName.split("\\."))
41 println(res.toString)
42 return res
43 }
44 }
45
46 override getScope(EObject context, EReference reference) { 37 override getScope(EObject context, EReference reference) {
47 val document = EcoreUtil2.getContainerOfType(context,ConfigurationScript) 38 val document = EcoreUtil2.getContainerOfType(context, ConfigurationScript)
48 if(context instanceof MetamodelElement) { 39 switch (reference) {
49 return context.scopeForMetamodelElement(reference,document) 40 case METAMODEL_ENTRY__PACKAGE:
50 } else if(context instanceof MetamodelSpecification) { 41 getEPackageScope(document)
51 return context.scopeForMetamodelSpecification(reference,document) 42 case METAMODEL_ELEMENT__CLASSIFIER:
52 } else if(context instanceof AllPackageEntry){ 43 getEClassifierScope(context, document)
53 return context.scopeForAllPackageEntry(reference,document) 44 case METAMODEL_ELEMENT__FEATURE:
54 } else if(context instanceof PatternElement) { 45 getEStructuralFeatureScope(context, reference, document)
55 return context.scopeForPatternElement(reference,document) 46 case PATTERN_ENTRY__PACKAGE:
56 } else if(context instanceof PatternSpecification) { 47 getViatraPackageScope(context, reference, document)
57 return context.scopeForPatternSpecification(reference,document) 48 case PATTERN_ELEMENT__PATTERN:
58 } else if(context instanceof AllPatternEntry) { 49 getViatraPatternScope(context, document)
59 return context.scopeForAllPatternEntry(reference,document) 50 case RELIABILTIY_FUNCTION__PACKAGE:
60 } else if(context instanceof ClassReference) { 51 getCftPackageScope(context, reference, document)
61 return context.scopeForClassReference(reference,document) 52 case RELIABILTIY_FUNCTION__TRANSFORMATION:
62 }else { 53 getCftTransformationScope(context, document)
63 return super.getScope(context,reference) 54 default:
55 super.getScope(context, reference)
64 } 56 }
65 } 57 }
66 58
67 private def allEPackages(ConfigurationScript document) { 59 private def getAllEPackages(ConfigurationScript document) {
68 return document.imports.filter(EPackageImport).map[it.importedPackage].filterNull 60 document.imports.filter(EPackageImport).map[importedPackage].filterNull
69 } 61 }
70 private def allViatraPackages(ConfigurationScript document) { 62
71 val res = document.imports.filter(ViatraImport).map[it.importedViatra].filterNull 63 private def getAllViatraPackages(ConfigurationScript document) {
72 //println('''All packages: «res.map[packageName].toList»''') 64 document.imports.filter(ViatraImport).map[importedViatra].filterNull
73 return res
74 } 65 }
75 private def allEClassifiers(ConfigurationScript document) { 66
67 private def getAllEClassifiers(ConfigurationScript document) {
76 document.allEPackages.map[EClassifiers].flatten 68 document.allEPackages.map[EClassifiers].flatten
77 } 69 }
78 private def allPatterns(ConfigurationScript document) { 70
79 val res = document.allViatraPackages.map[patterns].flatten 71 private def getAllPatterns(ConfigurationScript document) {
80 //println('''All patterns: «res.map[name].toList»''') 72 document.allViatraPackages.map[patterns].flatten
81 return res
82 } 73 }
83 74
84 protected def scopeForMetamodelElement(MetamodelElement context, EReference reference, ConfigurationScript document) { 75 private def getAllCftPackages(ConfigurationScript document) {
85 if(reference === language.metamodelEntry_Package) { 76 document.imports.filter(CftImport).map[importedCft].filterNull
86 return Scopes.scopeFor(document.allEPackages)
87 } else if(reference === language.metamodelElement_Classifier) {
88 if(context.package !== null) {
89 return Scopes.scopeFor(context.package.EClassifiers)
90 } else {
91 return Scopes.scopeFor(document.allEClassifiers)
92 }
93 } if (reference === language.metamodelElement_Feature) {
94 val referredClassifier = context.classifier
95 if(referredClassifier instanceof EClass) {
96 return Scopes.scopeFor(referredClassifier.EAllStructuralFeatures)
97 } else if(referredClassifier instanceof EEnum) {
98 return Scopes.scopeFor(referredClassifier.ELiterals)
99 } else {
100 super.getScope(context,reference)
101 }
102 }
103 } 77 }
104 78
105 protected def scopeForMetamodelSpecification(MetamodelSpecification context, EReference reference, ConfigurationScript document) { 79 private def getAllCftTransformations(ConfigurationScript document) {
106 if(reference === language.metamodelEntry_Package) { 80 document.allCftPackages.map[transformationDefinitions].flatten
107 return Scopes.scopeFor(document.allEPackages)
108 } else if(reference ===language.metamodelElement_Classifier) {
109 return Scopes.scopeFor(document.allEClassifiers)
110 } else {
111 return super.getScope(context,reference)
112 }
113 } 81 }
114 82
115 protected def scopeForAllPackageEntry(AllPackageEntry context, EReference reference, ConfigurationScript document) { 83 private def getEPackageScope(ConfigurationScript document) {
116 if(reference === language.metamodelEntry_Package) { 84 Scopes.scopeFor(document.allEPackages)
117 return Scopes.scopeFor(document.allEPackages)
118 } else if(reference === language.metamodelElement_Classifier) {
119 if(context.package === null) {
120 return Scopes.scopeFor(document.allEClassifiers)
121 } else {
122 return Scopes.scopeFor(context.package.EClassifiers)
123 }
124 } else {
125 return super.getScope(context,reference)
126 }
127 } 85 }
128 86
129 ////////// 87 private def getEClassifierScope(EObject context, ConfigurationScript document) {
130 88 val classifiers = switch (context) {
131 def IScope scopeForClassReference(ClassReference classReference, EReference eReference, ConfigurationScript document) { 89 MetamodelEntry case context.package !== null:
132 if(eReference === language.metamodelEntry_Package) { 90 context.package.EClassifiers
133 return Scopes.scopeFor(document.allEPackages) 91 default:
134 } else if(eReference === language.metamodelElement_Classifier) { 92 document.allEClassifiers
135 Scopes.scopeFor(document.allEClassifiers)
136 } else {
137 return super.getScope(classReference,eReference)
138 } 93 }
94 Scopes.scopeFor(classifiers)
139 } 95 }
140 96
141 ////////// 97 private def getEStructuralFeatureScope(EObject context, EReference reference, ConfigurationScript document) {
142 98 val referredClassifier = if (context instanceof MetamodelElement) {
143 protected def scopeForPatternElement(PatternElement context, EReference reference, ConfigurationScript document) { 99 context.classifier
144 if(reference === language.patternEntry_Package) {
145 return Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference))
146 } else if(reference === language.patternElement_Pattern) {
147 if(context.package !== null) {
148 return Scopes.scopeFor(context.package.patterns)
149 } else { 100 } else {
150 return Scopes.scopeFor(document.allPatterns) 101 null
151 } 102 }
152 } else { 103 switch (referredClassifier) {
153 super.getScope(context,reference) 104 EClass:
105 Scopes.scopeFor(referredClassifier.EAllStructuralFeatures)
106 EEnum:
107 Scopes.scopeFor(referredClassifier.ELiterals)
108 default:
109 super.getScope(context, reference)
154 } 110 }
155 } 111 }
156 112
157 protected def scopeForPatternSpecification(PatternSpecification context, EReference reference, ConfigurationScript document) { 113 private def getViatraPackageScope(EObject context, EReference reference, ConfigurationScript document) {
158 if(reference === language.patternEntry_Package) { 114 val patternModelNameConverter = [ PatternModel patternModel |
159 return Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference)) 115 qualifiedNameConverter.toQualifiedName(patternModel.packageName)
160 } else if(reference ===language.patternElement_Pattern) { 116 ]
161 return Scopes.scopeFor(document.allPatterns) 117 Scopes.scopeFor(document.allViatraPackages, patternModelNameConverter, super.getScope(context, reference))
162 } else { 118 }
163 return super.getScope(context,reference) 119
120 private def getViatraPatternScope(EObject context, ConfigurationScript document) {
121 val patterns = switch (context) {
122 PatternEntry case context.package !== null:
123 context.package.patterns
124 default:
125 document.allPatterns
164 } 126 }
127 Scopes.scopeFor(patterns)
165 } 128 }
166 129
167 protected def scopeForAllPatternEntry(AllPatternEntry context, EReference reference, ConfigurationScript document) { 130 private def getCftPackageScope(EObject context, EReference reference, ConfigurationScript document) {
168 if(reference === language.patternEntry_Package) { 131 val cftModelNameConverter = [ CftModel cftModel |
169 val res = Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference)) 132 qualifiedNameConverter.toQualifiedName(cftModel.packageName)
170 return res 133 ]
171 } else if(reference === language.patternElement_Pattern) { 134 Scopes.scopeFor(document.allCftPackages, cftModelNameConverter, super.getScope(context, reference))
172 if(context.package === null) { 135 }
173 return Scopes.scopeFor(document.allPatterns) 136
174 } else { 137 private def getCftTransformationScope(EObject context, ConfigurationScript document) {
175 return Scopes.scopeFor(context.package.patterns) 138 val transformations = switch (context) {
176 } 139 ReliabiltiyFunction case context.package !== null:
177 } else { 140 context.package.transformationDefinitions
178 return super.getScope(context,reference) 141 default:
142 document.allCftTransformations
179 } 143 }
144 Scopes.scopeFor(transformations)
180 } 145 }
181} 146}