aboutsummaryrefslogtreecommitdiffstats
path: root/Application
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-07-06 15:19:02 +0200
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-07-06 15:19:02 +0200
commit3961e8630edc5cb9f13d352383f6f7be59fdf457 (patch)
tree582e69a41423e1e2d8c7f237722af4d90c893b2a /Application
parentAdded support for running application in plain java. (diff)
downloadVIATRA-Generator-3961e8630edc5cb9f13d352383f6f7be59fdf457.tar.gz
VIATRA-Generator-3961e8630edc5cb9f13d352383f6f7be59fdf457.tar.zst
VIATRA-Generator-3961e8630edc5cb9f13d352383f6f7be59fdf457.zip
Additional packages for standalone runtime environment
Diffstat (limited to 'Application')
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationStandaloneRuntimeModule.xtend53
-rw-r--r--Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend74
2 files changed, 127 insertions, 0 deletions
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationStandaloneRuntimeModule.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationStandaloneRuntimeModule.xtend
new file mode 100644
index 00000000..2738dfff
--- /dev/null
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationStandaloneRuntimeModule.xtend
@@ -0,0 +1,53 @@
1package hu.bme.mit.inf.dslreasoner.application
2
3import com.google.inject.Binder
4import com.google.inject.multibindings.Multibinder
5import hu.bme.mit.inf.dslreasoner.application.linking.ApplicationConfigurationLinkingService
6import hu.bme.mit.inf.dslreasoner.application.valueconverter.ApplicationConfigurationValueConverterService
7import org.apache.log4j.Logger
8import org.eclipse.viatra.query.patternlanguage.emf.GenmodelExtensionLoader
9import org.eclipse.viatra.query.patternlanguage.emf.IGenmodelMappingLoader
10import org.eclipse.viatra.query.patternlanguage.emf.scoping.CompoundMetamodelProviderService
11import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider
12import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProviderInstance
13import org.eclipse.viatra.query.patternlanguage.emf.scoping.MetamodelProviderService
14import org.eclipse.viatra.query.patternlanguage.emf.scoping.ResourceSetMetamodelProviderService
15import org.eclipse.viatra.query.tooling.core.targetplatform.ITargetPlatformMetamodelLoader
16import org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelProviderService
17import org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex
18
19/**
20 * Use this class to register components to be used at runtime / without the Equinox extension registry.
21 */
22class ApplicationConfigurationStandaloneRuntimeModule extends AbstractApplicationConfigurationRuntimeModule {
23 override bindILinkingService() {
24 ApplicationConfigurationLinkingService
25 }
26
27 def configureLoggerImplementation(Binder binder) {
28 binder.bind(Logger).toInstance(Logger.getLogger(ApplicationConfigurationStandaloneRuntimeModule))
29 }
30
31 def Class<? extends IMetamodelProvider> bindIMetamodelProvider() {
32 CompoundMetamodelProviderService
33 }
34
35 def configureMetamodelProviderInstance(Binder binder) {
36 val metamodelProviderBinder = Multibinder.newSetBinder(binder, IMetamodelProviderInstance)
37 metamodelProviderBinder.addBinding.to(MetamodelProviderService)
38 metamodelProviderBinder.addBinding.to(ResourceSetMetamodelProviderService)
39 //metamodelProviderBinder.addBinding.to(TargetPlatformMetamodelProviderService)
40 }
41
42
43
44 override bindIValueConverterService() {
45 ApplicationConfigurationValueConverterService
46 }
47 def Class<? extends IGenmodelMappingLoader> bindIGenmodelMappingLoader() {
48 GenmodelExtensionLoader
49 }
50// def Class<? extends ITargetPlatformMetamodelLoader> bindITargetPlatformMetamodelLoader() {
51// TargetPlatformMetamodelsIndex
52// }
53} \ No newline at end of file
diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend
new file mode 100644
index 00000000..825bfdcc
--- /dev/null
+++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend
@@ -0,0 +1,74 @@
1package hu.bme.mit.inf.dslreasoner.application.execution
2
3import hu.bme.mit.inf.dslreasoner.application.ApplicationConfigurationStandaloneSetup
4import org.eclipse.emf.common.util.URI
5import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
6import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript
7import org.eclipse.core.runtime.NullProgressMonitor
8import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup
9import org.eclipse.emf.ecore.util.EcoreUtil
10import java.io.FileNotFoundException
11import org.eclipse.emf.ecore.resource.Resource
12import java.io.IOException
13import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl
14import org.eclipse.viatra.query.runtime.matchers.backend.IQueryBackendFactoryProvider
15import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactoryProvider
16import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions
17import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint
18import org.eclipse.viatra.query.runtime.rete.util.ReteHintOptions
19import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine
20
21class StandaloneScriptExecutor {
22 def static void main(String[] args) {
23 if(args.size == 1) {
24 val message = executeScript(args.head)
25 println(message)
26 } else if(args.size == 0){
27 println('''Run generator with script file path as parameter!''')
28 } else { // args.size > 1
29 println('''Multiple arguments are not supported! Run generator with script file path as parameter!''')
30 }
31 }
32
33 def static executeScript(String path){
34 //Initialise extensions
35 EMFPatternLanguageStandaloneSetup.doSetup
36 ApplicationConfigurationStandaloneSetup.doSetup
37 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi",new XMIResourceFactoryImpl)
38 Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("logicproblem",new XMIResourceFactoryImpl)
39 ReteEngine.getClass
40
41 val ext = path.split("\\.").last
42 if(ext.equals("vsconfig")) {
43 val resourceSet = new ResourceSetImpl
44 var Resource resource
45
46 try{
47 resource = resourceSet.getResource(URI.createURI(path),true)
48 } catch(Exception e) {
49 return '''Unable to load Configuration Script!'''
50 }
51
52 EcoreUtil::resolveAll(resource)
53 val errors = resource.errors
54 if(errors.empty) {
55 val content = resource.contents.head
56 if(content instanceof ConfigurationScript) {
57 val executor = new ScriptExecutor
58 executor.executeScript(content,new NullProgressMonitor)
59 } else {
60 return('''Content is not a Configuration Script! (Found : «content.class.simpleName»)''')
61 }
62 } else {
63 return '''
64 The Configuration Script contains «errors.size» error«IF errors.size>1»s«ENDIF»:
65 «FOR error : errors»
66 «"\t"»«error.message»
67 «ENDFOR»
68 '''
69 }
70 } else {
71 return '''Unsupported file extension: «ext»'''
72 }
73 }
74} \ No newline at end of file