aboutsummaryrefslogtreecommitdiffstats
path: root/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend56
1 files changed, 56 insertions, 0 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
new file mode 100644
index 00000000..15567f88
--- /dev/null
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend
@@ -0,0 +1,56 @@
1package hu.bme.mit.inf.dslreasoner.application.linking
2
3import com.google.inject.Inject
4import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage
5import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport
6import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport
7import java.util.Collections
8import java.util.Optional
9import org.eclipse.emf.ecore.EObject
10import org.eclipse.emf.ecore.EReference
11import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider
12import org.eclipse.xtext.conversion.IValueConverterService
13import org.eclipse.xtext.conversion.ValueConverterException
14import org.eclipse.xtext.linking.impl.DefaultLinkingService
15import org.eclipse.xtext.nodemodel.ILeafNode
16import org.eclipse.xtext.nodemodel.INode
17
18class ApplicationConfigurationLinkingService extends DefaultLinkingService{
19
20 //@Inject Logger logger
21
22 @Inject IValueConverterService valueConverterService
23
24 @Inject IMetamodelProvider metamodelProvider
25
26 public static extension ApplicationConfigurationPackage pac = ApplicationConfigurationPackage.eINSTANCE
27
28 override getLinkedObjects(EObject context, EReference ref, INode node) {
29 if(context instanceof EPackageImport) {
30 if(ref == EPackageImport_ImportedPackage && node instanceof ILeafNode) {
31 return getEPackage(context as EPackageImport, node as ILeafNode)
32 }
33 } else if(context instanceof ViatraImport) {
34 super.getLinkedObjects(context, ref, node)
35 }
36 return super.getLinkedObjects(context, ref, node)
37 }
38
39 private def getEPackage(EPackageImport packageImport, ILeafNode node) {
40 getMetamodelNsUri(node).flatMap [ uri |
41 Optional.ofNullable(metamodelProvider.loadEPackage(uri, packageImport.eResource.resourceSet))
42 ].map [ ePackage |
43 Collections.singletonList(ePackage as EObject)
44 ].orElse(emptyList)
45 }
46
47 private def getMetamodelNsUri(ILeafNode node) {
48 try {
49 val convertedValue = valueConverterService.toValue(node.text,
50 linkingHelper.getRuleNameFrom(node.grammarElement), node)
51 Optional.of(convertedValue as String)
52 } catch (ValueConverterException e) {
53 Optional.empty
54 }
55 }
56} \ No newline at end of file