aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend89
1 files changed, 89 insertions, 0 deletions
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
new file mode 100644
index 00000000..005304ea
--- /dev/null
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/util/ParseUtil.xtend
@@ -0,0 +1,89 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util
2
3import com.google.inject.Guice
4import com.google.inject.Injector
5import com.google.inject.Module
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguagePackage
7import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicproblemPackage
8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationPackage
9import java.io.ByteArrayInputStream
10import java.io.InputStream
11import java.util.LinkedHashMap
12import org.eclipse.emf.common.util.URI
13import org.eclipse.emf.ecore.resource.Resource
14import org.eclipse.emf.ecore.util.EcoreUtil
15import org.eclipse.viatra.query.patternlanguage.PatternLanguageStandaloneSetup
16import org.eclipse.viatra.query.patternlanguage.annotations.ExtensionBasedAnnotationValidatorLoader
17import org.eclipse.viatra.query.patternlanguage.annotations.IAnnotationValidatorLoader
18import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageRuntimeModule
19import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup
20import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader
21import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader
22import org.eclipse.viatra.query.patternlanguage.emf.eMFPatternLanguage.PatternModel
23import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder
24import org.eclipse.xtext.resource.XtextResourceSet
25
26class MyModule extends EMFPatternLanguageRuntimeModule implements Module{
27 def public Class<? extends IAnnotationValidatorLoader> bindAnnotationValidatorLoader() {
28 return typeof(ExtensionBasedAnnotationValidatorLoader);
29 }
30 def public Class<? extends IGenmodelMappingLoader> bindGenmodelMappingLoader() {
31 return typeof(GenmodelExtensionLoader);
32 }
33}
34
35class ParseUtil {
36 val Injector injector;
37 new() {
38 PatternLanguageStandaloneSetup.doSetup
39 EMFPatternLanguageStandaloneSetup.doSetup;
40 PartialinterpretationPackage.eINSTANCE.class;
41 LogicproblemPackage.eINSTANCE.class;
42 LogiclanguagePackage.eINSTANCE.class;
43
44 injector = internalCreateInjector//(new EMFPatternLanguageStandaloneSetup()).createInjectorAndDoEMFRegistration();
45 }
46
47 def protected Injector internalCreateInjector() {
48 var newInjector = new EMFPatternLanguageStandaloneSetup().createInjectorAndDoEMFRegistration();
49 //XXX the following line enforce the tests to be run in an Eclipse environment
50 val Module module = new MyModule
51 newInjector = Guice.createInjector(module)
52 //ViatraQueryLoggingUtil.setExternalLogger(newInjector.getInstance(Logger.class));
53 //EMFPatternLanguagePlugin.getInstance().addCompoundInjector(newInjector,EMFPatternLanguagePlugin.TEST_INJECTOR_PRIORITY);
54 return newInjector;
55 }
56
57// @Inject
58// var ParseHelper<PatternModel> parseHelper;
59 val builder = new SpecificationBuilder
60
61 public def parse(CharSequence vqlFileContent) {
62 //val patternModel = this.parseHelper.parse(vqlFileContent)
63 val XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet);
64 val Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.vql"));
65 val InputStream in = new ByteArrayInputStream(vqlFileContent.toString.getBytes());
66 resource.load(in, resourceSet.getLoadOptions());
67 val patternModel = resource.getContents().get(0) as PatternModel;
68
69 EcoreUtil.resolveAll(resource)
70 resource.validate
71 val res = new LinkedHashMap
72 for(pattern : patternModel.patterns) {
73 val querySpecification = builder.getOrCreateSpecification(pattern)
74 res.put(querySpecification.fullyQualifiedName,querySpecification)
75 //println('''«querySpecification.fullyQualifiedName» -> «querySpecification»''')
76 }
77 resource.validate
78 return res
79 }
80
81 def private validate(Resource resource) {
82 val errors = resource.errors
83 if(!errors.isEmpty) {
84 println('''-- Errors --''')
85 errors.forEach[println('''> «it»''')]
86 println('''------------''')
87 }
88 }
89} \ No newline at end of file