diff options
author | Kristóf Marussy <kris7topher@gmail.com> | 2019-03-20 16:09:09 +0100 |
---|---|---|
committer | Kristóf Marussy <kris7topher@gmail.com> | 2019-03-20 16:09:09 +0100 |
commit | 3f5aaab5025b8eb243f414b1c789085327df04f4 (patch) | |
tree | 156d9d95888fce6b003d73f509b9155e6b24555f /Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping | |
parent | Fix ParseUtil to avoid breaking the .vql editor in Eclipse (diff) | |
download | VIATRA-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')
-rw-r--r-- | Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/scoping/ApplicationConfigurationScopeProvider.xtend | 233 |
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 | */ |
4 | package hu.bme.mit.inf.dslreasoner.application.scoping | 4 | package hu.bme.mit.inf.dslreasoner.application.scoping |
5 | 5 | ||
6 | import com.google.common.base.Function | 6 | import com.google.inject.Inject |
7 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPackageEntry | 7 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.CftImport |
8 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPatternEntry | ||
9 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage | ||
10 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ClassReference | ||
11 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript | 8 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript |
12 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport | 9 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport |
13 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement | 10 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelElement |
14 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelSpecification | 11 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelEntry |
15 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternElement | 12 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry |
16 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification | 13 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ReliabiltiyFunction |
17 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport | 14 | import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport |
15 | import hu.bme.mit.inf.dslreasoner.faulttree.components.cftLanguage.CftModel | ||
18 | import org.eclipse.emf.ecore.EClass | 16 | import org.eclipse.emf.ecore.EClass |
19 | import org.eclipse.emf.ecore.EEnum | 17 | import org.eclipse.emf.ecore.EEnum |
20 | import org.eclipse.emf.ecore.EObject | 18 | import org.eclipse.emf.ecore.EObject |
21 | import org.eclipse.emf.ecore.EReference | 19 | import org.eclipse.emf.ecore.EReference |
22 | import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel | 20 | import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel |
23 | import org.eclipse.xtext.EcoreUtil2 | 21 | import org.eclipse.xtext.EcoreUtil2 |
24 | import org.eclipse.xtext.naming.QualifiedName | 22 | import org.eclipse.xtext.naming.IQualifiedNameConverter |
25 | import org.eclipse.xtext.scoping.IScope | ||
26 | import org.eclipse.xtext.scoping.Scopes | 23 | import org.eclipse.xtext.scoping.Scopes |
27 | 24 | ||
25 | import 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 | */ |
34 | class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider { | 33 | class 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 | } |