From 7e50434905cbb7f5d03636033b698e17a9075e9d Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Sat, 13 Jan 2018 19:33:26 +0100 Subject: Initial commit of the configuration language and application --- .../ApplicationConfigurationLinkingService.xtend | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking/ApplicationConfigurationLinkingService.xtend (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/linking') 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 @@ +package hu.bme.mit.inf.dslreasoner.application.linking + +import com.google.inject.Inject +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ApplicationConfigurationPackage +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport +import java.util.Collections +import java.util.Optional +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.EReference +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import org.eclipse.xtext.conversion.IValueConverterService +import org.eclipse.xtext.conversion.ValueConverterException +import org.eclipse.xtext.linking.impl.DefaultLinkingService +import org.eclipse.xtext.nodemodel.ILeafNode +import org.eclipse.xtext.nodemodel.INode + +class ApplicationConfigurationLinkingService extends DefaultLinkingService{ + + //@Inject Logger logger + + @Inject IValueConverterService valueConverterService + + @Inject IMetamodelProvider metamodelProvider + + public static extension ApplicationConfigurationPackage pac = ApplicationConfigurationPackage.eINSTANCE + + override getLinkedObjects(EObject context, EReference ref, INode node) { + if(context instanceof EPackageImport) { + if(ref == EPackageImport_ImportedPackage && node instanceof ILeafNode) { + return getEPackage(context as EPackageImport, node as ILeafNode) + } + } else if(context instanceof ViatraImport) { + super.getLinkedObjects(context, ref, node) + } + return super.getLinkedObjects(context, ref, node) + } + + private def getEPackage(EPackageImport packageImport, ILeafNode node) { + getMetamodelNsUri(node).flatMap [ uri | + Optional.ofNullable(metamodelProvider.loadEPackage(uri, packageImport.eResource.resourceSet)) + ].map [ ePackage | + Collections.singletonList(ePackage as EObject) + ].orElse(emptyList) + } + + private def getMetamodelNsUri(ILeafNode node) { + try { + val convertedValue = valueConverterService.toValue(node.text, + linkingHelper.getRuleNameFrom(node.grammarElement), node) + Optional.of(convertedValue as String) + } catch (ValueConverterException e) { + Optional.empty + } + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2