From 777d5ecc6031f02ad3757db1c9736b6aad5ac6f5 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Tue, 30 Jan 2018 01:27:48 +0100 Subject: Scoping + Linking services fixed --- .../application/ApplicationConfiguration.xtext | 10 +++++-- .../ApplicationConfigurationRuntimeModule.xtend | 19 +++++++++---- .../application/execution/ModelLoader.xtend | 27 +++++++++++++----- .../application/execution/util/VQLParser.xtend | 7 ++--- .../ApplicationConfigurationLinkingService.xtend | 21 ++++++-------- .../ApplicationConfigurationScopeProvider.xtend | 32 ++++++++++++++++------ 6 files changed, 76 insertions(+), 40 deletions(-) (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext index 2ac81bf6..3efde6ec 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfiguration.xtext @@ -15,7 +15,7 @@ Command : ; QualifiedName returns ecore::EString: - ID (=>'.' ID)*; + ID ('.' ID)*; /////////////////////////////////////////////////// // Imports @@ -106,10 +106,14 @@ enum Solver: SMTSolver | AlloySolver | ViatraSolver; ScopeSpecification: {ScopeSpecification} '{' (scopes += TypeScope (',' scopes += TypeScope)*)? '}'; -TypeScope: ( min = INT ( greather?='<' | greaterOrEqual?= '<='))? '#' type = TypeReference (( less?='<' | lessOrEqual?= '<=') max = INT)?; +TypeScope: '#' type = TypeReference + (setsNew ?='+=' | setsSum ?= '=') + ( min = INT ) + ('..' (maxUnlimited?='*' | max=INT))? +; TypeReference: ClassReference | ObjectReference | IntegerReference | RealReference | StringReference; ClassReference: '[' element = MetamodelElement ']'; -ObjectReference: {ObjectReference} 'Object'; +ObjectReference: {ObjectReference} 'node'; IntegerReference: {IntegerScope} 'int'; RealReference: {RealScope} 'real'; StringReference: {StringScope} 'string'; diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationRuntimeModule.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationRuntimeModule.xtend index 919dd297..59b2f3f8 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationRuntimeModule.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationRuntimeModule.xtend @@ -3,17 +3,18 @@ */ package hu.bme.mit.inf.dslreasoner.application -import hu.bme.mit.inf.dslreasoner.application.linking.ApplicationConfigurationLinkingService import com.google.inject.Binder import com.google.inject.multibindings.Multibinder -import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProviderInstance +import hu.bme.mit.inf.dslreasoner.application.linking.ApplicationConfigurationLinkingService +import hu.bme.mit.inf.dslreasoner.application.valueconverter.ApplicationConfigurationValueConverterService import org.apache.log4j.Logger -import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader +import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader import org.eclipse.viatra.query.patternlanguage.emf.scoping.CompoundMetamodelProviderService +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProviderInstance import org.eclipse.viatra.query.patternlanguage.emf.scoping.MetamodelProviderService import org.eclipse.viatra.query.patternlanguage.emf.scoping.ResourceSetMetamodelProviderService -import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader -import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader /** * Use this class to register components to be used at runtime / without the Equinox extension registry. @@ -40,4 +41,12 @@ class ApplicationConfigurationRuntimeModule extends AbstractApplicationConfigura def Class bindIGenmodelMappingLoader() { GenmodelExtensionLoader } + + override bindIValueConverterService() { + ApplicationConfigurationValueConverterService + } + +// override bindIQualifiedNameProvider() { +// ApplicationConfigurationQualifiedNameProvider +// } } diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend index 1de7ee22..5fc2cdc5 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ModelLoader.xtend @@ -1,11 +1,24 @@ package hu.bme.mit.inf.dslreasoner.application.execution +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl +import org.eclipse.emf.common.util.URI + class ModelLoader { - //def loadMetamodels()7 -// val List classes = new LinkedList -// val List references = new LinkedList -// val List attributes = new LinkedList -// val List enums = new LinkedList -// val List literals = new LinkedList -// + def loadModel(String path, Context context) { + var URI uri + try { + uri = URI::createURI(path) + } catch(IllegalArgumentException e) { + context.writeError('''Malformed uri: "«uri»"!''') + return null + } + + val resourceSet = new ResourceSetImpl + val resource = resourceSet.getResource(uri,true) + if(resource === null) { + + } else { + return resource + } + } } \ No newline at end of file diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/util/VQLParser.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/util/VQLParser.xtend index 9b5c538f..6eb9e3c8 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/util/VQLParser.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/util/VQLParser.xtend @@ -3,7 +3,9 @@ package hu.bme.mit.inf.dslreasoner.application.execution.util import com.google.inject.Guice import com.google.inject.Injector import com.google.inject.Module +import hu.bme.mit.inf.dslreasoner.application.execution.Context import java.util.LinkedHashMap +import java.util.List import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.resource.Resource import org.eclipse.emf.ecore.resource.ResourceSet @@ -17,11 +19,8 @@ import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader import org.eclipse.viatra.query.patternlanguage.emf.eMFPatternLanguage.PatternModel import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder -import org.eclipse.xtext.resource.XtextResourceSet -import hu.bme.mit.inf.dslreasoner.application.execution.Context -import java.util.List -import java.util.HashMap import org.eclipse.viatra.query.runtime.api.IQuerySpecification +import org.eclipse.xtext.resource.XtextResourceSet class MyModule extends EMFPatternLanguageRuntimeModule implements Module { def public Class bindAnnotationValidatorLoader() { 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 index 35d4008b..e48b74ba 100644 --- 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 @@ -2,33 +2,30 @@ 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.ConfigurationScript import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport import java.util.Collections +import java.util.List import java.util.Optional import org.eclipse.emf.common.util.URI import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EReference +import org.eclipse.emf.ecore.resource.Resource import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import org.eclipse.xtext.EcoreUtil2 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 -import org.eclipse.emf.ecore.resource.Resource -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEntry -import org.eclipse.emf.ecore.util.EcoreUtil -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript -import org.eclipse.xtext.EcoreUtil2 -import java.util.List -import org.eclipse.xtext.conversion.impl.QualifiedNameValueConverter class ApplicationConfigurationLinkingService extends DefaultLinkingService{ //@Inject Logger logger @Inject IValueConverterService valueConverterService - @Inject IMetamodelProvider metamodelProvider public static extension ApplicationConfigurationPackage pac = ApplicationConfigurationPackage.eINSTANCE @@ -39,8 +36,8 @@ class ApplicationConfigurationLinkingService extends DefaultLinkingService{ return getEPackage(context as EPackageImport, node as ILeafNode) } } else if(context instanceof ViatraImport) { - if(ref == viatraImport_ImportedViatra && node instanceof ILeafNode) { - return getViatra(context as ViatraImport, node as ILeafNode) + if(ref == viatraImport_ImportedViatra) { + return getViatra(context as ViatraImport, node) } } else if(context instanceof PatternEntry) { if(ref === patternEntry_Package) { @@ -67,7 +64,7 @@ class ApplicationConfigurationLinkingService extends DefaultLinkingService{ ].orElse(emptyList) } - private def getViatra(ViatraImport viatraImport, ILeafNode node) { + private def getViatra(ViatraImport viatraImport, INode node) { val uri = getNSUri(node) if(uri.present) { var URI createdURI @@ -92,7 +89,7 @@ class ApplicationConfigurationLinkingService extends DefaultLinkingService{ } } - private def getNSUri(ILeafNode node) { + private def getNSUri(INode node) { try { val convertedValue = valueConverterService.toValue(node.text, linkingHelper.getRuleNameFrom(node.grammarElement), node) 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 97cda4a4..ea0e8d1e 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 @@ -19,6 +19,9 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternEl import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.AllPatternEntry import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImport +import com.google.common.base.Function +import org.eclipse.viatra.query.patternlanguage.patternLanguage.PatternModel +import org.eclipse.xtext.naming.QualifiedName /** * This class contains custom scoping description. @@ -29,21 +32,29 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ViatraImp class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigurationScopeProvider { private val language = ApplicationConfigurationPackage.eINSTANCE + protected val nameConverter = new Function() { + override apply(PatternModel input) { + println(input) + val res = QualifiedName.create(input.packageName.split("\\.")) + println(res.toString) + return res + } + } override getScope(EObject context, EReference reference) { val document = EcoreUtil2.getContainerOfType(context,ConfigurationScript) if(context instanceof MetamodelElement) { - context.scopeForMetamodelElement(reference,document) + return context.scopeForMetamodelElement(reference,document) } else if(context instanceof MetamodelSpecification) { - context.scopeForMetamodelSpecification(reference,document) + return context.scopeForMetamodelSpecification(reference,document) } else if(context instanceof AllPackageEntry){ - context.scopeForAllPackageEntry(reference,document) + return context.scopeForAllPackageEntry(reference,document) } else if(context instanceof PatternElement) { - context.scopeForPatternElement(reference,document) + return context.scopeForPatternElement(reference,document) } else if(context instanceof PatternSpecification) { - context.scopeForPatternSpecification(reference,document) + return context.scopeForPatternSpecification(reference,document) } else if(context instanceof AllPatternEntry) { - context.scopeForAllPatternEntry(reference,document) + return context.scopeForAllPatternEntry(reference,document) } else { return super.getScope(context,reference) } @@ -111,11 +122,13 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura } } + // Todo [] scope + ////////// protected def scopeForPatternElement(PatternElement context, EReference reference, ConfigurationScript document) { if(reference === language.patternEntry_Package) { - return Scopes.scopeFor(document.allViatraPackages) + return Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference)) } else if(reference === language.patternElement_Pattern) { if(context.package !== null) { return Scopes.scopeFor(context.package.patterns) @@ -129,7 +142,7 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura protected def scopeForPatternSpecification(PatternSpecification context, EReference reference, ConfigurationScript document) { if(reference === language.patternEntry_Package) { - return Scopes.scopeFor(document.allViatraPackages) + return Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference)) } else if(reference ===language.patternElement_Pattern) { return Scopes.scopeFor(document.allPatterns) } else { @@ -139,7 +152,8 @@ class ApplicationConfigurationScopeProvider extends AbstractApplicationConfigura protected def scopeForAllPatternEntry(AllPatternEntry context, EReference reference, ConfigurationScript document) { if(reference === language.patternEntry_Package) { - return Scopes.scopeFor(document.allViatraPackages) + val res = Scopes.scopeFor(document.allViatraPackages,nameConverter,super.getScope(context,reference)) + return res } else if(reference === language.patternElement_Pattern) { if(context.package === null) { return Scopes.scopeFor(document.allPatterns) -- cgit v1.2.3-54-g00ecf