aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-05-18 18:24:34 +0200
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-05-18 18:24:34 +0200
commit40e18991f67fa616536c1e1ba25126d5cbb3eedd (patch)
tree3fdb9108589ebf59c546b6bc463e16b01b46292b
parentMoved partial model management is moved to one project (+1 PM edge fix) (diff)
downloadVIATRA-Generator-40e18991f67fa616536c1e1ba25126d5cbb3eedd.tar.gz
VIATRA-Generator-40e18991f67fa616536c1e1ba25126d5cbb3eedd.tar.zst
VIATRA-Generator-40e18991f67fa616536c1e1ba25126d5cbb3eedd.zip
Query parser update to current Viatra milestone
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend3
-rw-r--r--Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig2
-rw-r--r--Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi2
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend91
4 files changed, 82 insertions, 16 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend
index c25bfb07..8f8348b1 100644
--- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/QueryLoader.xtend
@@ -21,6 +21,7 @@ import org.eclipse.viatra.query.runtime.api.IQuerySpecification
21import org.eclipse.xtext.EcoreUtil2 21import org.eclipse.xtext.EcoreUtil2
22 22
23import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 23import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
24import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternCall
24 25
25class QueryLoader { 26class QueryLoader {
26 //val parser = new VQLParser 27 //val parser = new VQLParser
@@ -99,7 +100,7 @@ class QueryLoader {
99 .map[constraints] 100 .map[constraints]
100 .flatten 101 .flatten
101 .filter(PatternCompositionConstraint) 102 .filter(PatternCompositionConstraint)
102 .map[call.patternRef].toSet 103 .map[(call as PatternCall).patternRef].toSet
103 } 104 }
104 105
105 def private referredEcoreModels(Set<Pattern> patterns) { 106 def private referredEcoreModels(Set<Pattern> patterns) {
diff --git a/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig b/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig
index 166c551c..90bd5b2b 100644
--- a/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig
+++ b/Domains/Examples/ModelGenExampleFAM_standalone/FamGeneration.vsconfig
@@ -16,7 +16,7 @@ generate {
16 } 16 }
17 17
18 number = 5 18 number = 5
19 runs = 1 19 runs = 5
20 20
21 debug = "platform:/resource/ModelGenExampleFAM_standalone/outputs/debug" 21 debug = "platform:/resource/ModelGenExampleFAM_standalone/outputs/debug"
22 log = "platform:/resource/ModelGenExampleFAM_standalone/outputs/log.txt" 22 log = "platform:/resource/ModelGenExampleFAM_standalone/outputs/log.txt"
diff --git a/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi b/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi
index f91e0af0..1d9aeae4 100644
--- a/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi
+++ b/Domains/Examples/ModelGenExampleFAM_standalone/inputs/FamInstance.xmi
@@ -5,4 +5,6 @@
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xmlns:functionalarchitecture="http://www.inf.mit.bme.hu/viatrasolver/example/fam" 6 xmlns:functionalarchitecture="http://www.inf.mit.bme.hu/viatrasolver/example/fam"
7 xsi:schemaLocation="http://www.inf.mit.bme.hu/viatrasolver/example/fam FamMetamodel.ecore"> 7 xsi:schemaLocation="http://www.inf.mit.bme.hu/viatrasolver/example/fam FamMetamodel.ecore">
8 <rootElements
9 xsi:type="functionalarchitecture:Function"/>
8</functionalarchitecture:FunctionalArchitectureModel> 10</functionalarchitecture:FunctionalArchitectureModel>
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend
index 6febe0a6..00342d8b 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend
@@ -1,53 +1,92 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util 1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util
2 2
3import com.google.inject.Binder
3import com.google.inject.Guice 4import com.google.inject.Guice
4import com.google.inject.Injector 5import com.google.inject.Injector
5import com.google.inject.Module 6import com.google.inject.Module
7import com.google.inject.multibindings.Multibinder
8import com.google.inject.name.Names
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage 9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage 10import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage 11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
9import java.io.ByteArrayInputStream 12import java.io.ByteArrayInputStream
10import java.io.InputStream 13import java.io.InputStream
11import java.util.LinkedHashMap 14import java.util.LinkedHashMap
15import java.util.LinkedList
16import java.util.List
12import org.eclipse.emf.common.util.URI 17import org.eclipse.emf.common.util.URI
18import org.eclipse.emf.ecore.EClassifier
19import org.eclipse.emf.ecore.EObject
20import org.eclipse.emf.ecore.EPackage
13import org.eclipse.emf.ecore.resource.Resource 21import org.eclipse.emf.ecore.resource.Resource
22import org.eclipse.emf.ecore.resource.ResourceSet
14import org.eclipse.emf.ecore.util.EcoreUtil 23import org.eclipse.emf.ecore.util.EcoreUtil
15import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageRuntimeModule
16import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup 24import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup
17import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader 25import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup.StandaloneParserWithSeparateModules
18import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader 26import org.eclipse.viatra.query.patternlanguage.emf.scoping.BaseMetamodelProviderService
27import org.eclipse.viatra.query.patternlanguage.emf.scoping.EMFPatternLanguageImportNamespaceProvider
28import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider
29import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProviderInstance
19import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder 30import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder
20import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel 31import org.eclipse.viatra.query.patternlanguage.emf.vql.PatternModel
32import org.eclipse.xtext.resource.IResourceFactory
33import org.eclipse.xtext.resource.IResourceServiceProvider
21import org.eclipse.xtext.resource.XtextResourceSet 34import org.eclipse.xtext.resource.XtextResourceSet
35import org.eclipse.xtext.scoping.IScopeProvider
36import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider
22 37
23class MyModule extends EMFPatternLanguageRuntimeModule implements Module{ 38class MyModule extends StandaloneParserWithSeparateModules implements Module{
24// def public Class<? extends IAnnotationValidatorLoader> bindAnnotationValidatorLoader() { 39// def public Class<? extends IAnnotationValidatorLoader> bindAnnotationValidatorLoader() {
25// return typeof(ExtensionBasedAnnotationValidatorLoader); 40// return typeof(ExtensionBasedAnnotationValidatorLoader);
26// } 41// }
27 def public Class<? extends IGenmodelMappingLoader> bindGenmodelMappingLoader() { 42// def public Class<? extends IGenmodelMappingLoader> bindGenmodelMappingLoader() {
28 return typeof(GenmodelExtensionLoader); 43// return typeof(GenmodelExtensionLoader);
44// }
45
46 override configureIScopeProviderDelegate(Binder binder) {
47 binder.bind(IScopeProvider).annotatedWith(Names.named(AbstractDeclarativeScopeProvider.NAMED_DELEGATE))
48 .to(EMFPatternLanguageImportNamespaceProvider);
49 // .to(XImportSectionNamespaceScopeProvider.class);
50 //val Multibinder<IMetamodelProviderInstance> metamodelProviderBinder =
51 Multibinder::newSetBinder(binder, IMetamodelProviderInstance);
52// metamodelProviderBinder.addBinding().to(MetamodelProviderService.class);
53// metamodelProviderBinder.addBinding().to(ResourceSetMetamodelProviderService.class);
29 } 54 }
55
56 override Class<? extends IMetamodelProvider> bindIMetamodelProvider() {
57 MetamodelProviderForModelGeneration
58 }
59// def configureFixedMetamodelProviderService(FixedMetamodelProviderService s) {
60// println('''Configured «s.class.simpleName» with «s.packages.toList»''')
61// s.packages += PartialinterpretationPackage.eINSTANCE
62// s.packages += LogicproblemPackage.eINSTANCE
63// s.packages += LogiclanguagePackage.eINSTANCE
64// println('''Configured «s.class.simpleName» with «s.packages.toList»''')
65// }
30} 66}
31 67
32class ParseUtil { 68class ParseUtil {
33 val Injector injector; 69 val Injector injector;
34 new() { 70 new() {
35 EMFPatternLanguageStandaloneSetup.doSetup; 71 //EMFPatternLanguageStandaloneSetup.doSetup;
36 PartialinterpretationPackage.eINSTANCE.class; 72 PartialinterpretationPackage.eINSTANCE.class;
37 LogicproblemPackage.eINSTANCE.class; 73 LogicproblemPackage.eINSTANCE.class;
38 LogiclanguagePackage.eINSTANCE.class; 74 LogiclanguagePackage.eINSTANCE.class;
39 75
40 injector = internalCreateInjector//(new EMFPatternLanguageStandaloneSetup()).createInjectorAndDoEMFRegistration(); 76 injector = internalCreateInjector//(new EMFPatternLanguageStandaloneSetup()).createInjectorAndDoEMFRegistration();
77
78 val IResourceFactory resourceFactory = injector.getInstance(IResourceFactory);
79 val IResourceServiceProvider serviceProvider = injector.getInstance(IResourceServiceProvider);
80
81 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("vql_deactivated", resourceFactory);
82 IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("vql_deactivated", serviceProvider);
41 } 83 }
42 84
43 def protected Injector internalCreateInjector() { 85 def protected Injector internalCreateInjector() {
44 var newInjector = new EMFPatternLanguageStandaloneSetup().createInjectorAndDoEMFRegistration(); 86 var newInjector = new EMFPatternLanguageStandaloneSetup().createInjectorAndDoEMFRegistration();
45 //XXX the following line enforce the tests to be run in an Eclipse environment 87 val Module module = new MyModule
46 val Module module = new MyModule 88 newInjector = Guice.createInjector(module)
47 newInjector = Guice.createInjector(module) 89 return newInjector;
48 //ViatraQueryLoggingUtil.setExternalLogger(newInjector.getInstance(Logger.class));
49 //EMFPatternLanguagePlugin.getInstance().addCompoundInjector(newInjector,EMFPatternLanguagePlugin.TEST_INJECTOR_PRIORITY);
50 return newInjector;
51 } 90 }
52 91
53// @Inject 92// @Inject
@@ -57,7 +96,7 @@ class ParseUtil {
57 public def parse(CharSequence vqlFileContent) { 96 public def parse(CharSequence vqlFileContent) {
58 //val patternModel = this.parseHelper.parse(vqlFileContent) 97 //val patternModel = this.parseHelper.parse(vqlFileContent)
59 val XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet); 98 val XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet);
60 val Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.vql")); 99 val Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.vql_deactivated"));
61 val InputStream in = new ByteArrayInputStream(vqlFileContent.toString.getBytes()); 100 val InputStream in = new ByteArrayInputStream(vqlFileContent.toString.getBytes());
62 resource.load(in, resourceSet.getLoadOptions()); 101 resource.load(in, resourceSet.getLoadOptions());
63 val patternModel = resource.getContents().get(0) as PatternModel; 102 val patternModel = resource.getContents().get(0) as PatternModel;
@@ -82,4 +121,28 @@ class ParseUtil {
82 println('''------------''') 121 println('''------------''')
83 } 122 }
84 } 123 }
124}
125
126abstract class FixedMetamodelProviderService extends BaseMetamodelProviderService {
127
128 protected val List<EPackage> packages = new LinkedList
129
130 override protected doGetQualifiedClassName(EClassifier classifier, EObject context) {
131 classifier.name
132 }
133
134 override protected getProvidedMetamodels() {
135 return packages.map[it.nsURI]
136 }
137
138 override loadEPackage(String uri, ResourceSet resourceSet) {
139 packages.filter[it.nsURI.equals(uri)].head
140 }
141}
142class MetamodelProviderForModelGeneration extends FixedMetamodelProviderService {
143 new() {
144 packages += PartialinterpretationPackage.eINSTANCE
145 packages += LogicproblemPackage.eINSTANCE
146 packages += LogiclanguagePackage.eINSTANCE
147 }
85} \ No newline at end of file 148} \ No newline at end of file