From 3961e8630edc5cb9f13d352383f6f7be59fdf457 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Fri, 6 Jul 2018 15:19:02 +0200 Subject: Additional packages for standalone runtime environment --- ...ationConfigurationStandaloneRuntimeModule.xtend | 53 ++++++++++++++++ .../execution/StandaloneScriptExecutor.xtend | 74 ++++++++++++++++++++++ .../dslreasoner/workspace/URIBasedWorkspace.xtend | 65 +++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/ApplicationConfigurationStandaloneRuntimeModule.xtend create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/StandaloneScriptExecutor.xtend create mode 100644 Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/workspace/URIBasedWorkspace.xtend 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 @@ +package hu.bme.mit.inf.dslreasoner.application + +import com.google.inject.Binder +import com.google.inject.multibindings.Multibinder +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.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.tooling.core.targetplatform.ITargetPlatformMetamodelLoader +import org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelProviderService +import org.eclipse.viatra.query.tooling.core.targetplatform.TargetPlatformMetamodelsIndex + +/** + * Use this class to register components to be used at runtime / without the Equinox extension registry. + */ +class ApplicationConfigurationStandaloneRuntimeModule extends AbstractApplicationConfigurationRuntimeModule { + override bindILinkingService() { + ApplicationConfigurationLinkingService + } + + def configureLoggerImplementation(Binder binder) { + binder.bind(Logger).toInstance(Logger.getLogger(ApplicationConfigurationStandaloneRuntimeModule)) + } + + def Class bindIMetamodelProvider() { + CompoundMetamodelProviderService + } + + def configureMetamodelProviderInstance(Binder binder) { + val metamodelProviderBinder = Multibinder.newSetBinder(binder, IMetamodelProviderInstance) + metamodelProviderBinder.addBinding.to(MetamodelProviderService) + metamodelProviderBinder.addBinding.to(ResourceSetMetamodelProviderService) + //metamodelProviderBinder.addBinding.to(TargetPlatformMetamodelProviderService) + } + + + + override bindIValueConverterService() { + ApplicationConfigurationValueConverterService + } + def Class bindIGenmodelMappingLoader() { + GenmodelExtensionLoader + } +// def Class bindITargetPlatformMetamodelLoader() { +// TargetPlatformMetamodelsIndex +// } +} \ 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 @@ +package hu.bme.mit.inf.dslreasoner.application.execution + +import hu.bme.mit.inf.dslreasoner.application.ApplicationConfigurationStandaloneSetup +import org.eclipse.emf.common.util.URI +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript +import org.eclipse.core.runtime.NullProgressMonitor +import org.eclipse.viatra.query.patternlanguage.emf.EMFPatternLanguageStandaloneSetup +import org.eclipse.emf.ecore.util.EcoreUtil +import java.io.FileNotFoundException +import org.eclipse.emf.ecore.resource.Resource +import java.io.IOException +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl +import org.eclipse.viatra.query.runtime.matchers.backend.IQueryBackendFactoryProvider +import org.eclipse.viatra.query.runtime.rete.matcher.ReteBackendFactoryProvider +import org.eclipse.viatra.query.runtime.api.ViatraQueryEngineOptions +import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint +import org.eclipse.viatra.query.runtime.rete.util.ReteHintOptions +import org.eclipse.viatra.query.runtime.rete.matcher.ReteEngine + +class StandaloneScriptExecutor { + def static void main(String[] args) { + if(args.size == 1) { + val message = executeScript(args.head) + println(message) + } else if(args.size == 0){ + println('''Run generator with script file path as parameter!''') + } else { // args.size > 1 + println('''Multiple arguments are not supported! Run generator with script file path as parameter!''') + } + } + + def static executeScript(String path){ + //Initialise extensions + EMFPatternLanguageStandaloneSetup.doSetup + ApplicationConfigurationStandaloneSetup.doSetup + Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("xmi",new XMIResourceFactoryImpl) + Resource.Factory.Registry.INSTANCE.extensionToFactoryMap.put("logicproblem",new XMIResourceFactoryImpl) + ReteEngine.getClass + + val ext = path.split("\\.").last + if(ext.equals("vsconfig")) { + val resourceSet = new ResourceSetImpl + var Resource resource + + try{ + resource = resourceSet.getResource(URI.createURI(path),true) + } catch(Exception e) { + return '''Unable to load Configuration Script!''' + } + + EcoreUtil::resolveAll(resource) + val errors = resource.errors + if(errors.empty) { + val content = resource.contents.head + if(content instanceof ConfigurationScript) { + val executor = new ScriptExecutor + executor.executeScript(content,new NullProgressMonitor) + } else { + return('''Content is not a Configuration Script! (Found : «content.class.simpleName»)''') + } + } else { + return ''' + The Configuration Script contains «errors.size» error«IF errors.size>1»s«ENDIF»: + «FOR error : errors» + «"\t"»«error.message» + «ENDFOR» + ''' + } + } else { + return '''Unsupported file extension: «ext»''' + } + } +} \ No newline at end of file diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/workspace/URIBasedWorkspace.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/workspace/URIBasedWorkspace.xtend new file mode 100644 index 00000000..37db4c3f --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/workspace/URIBasedWorkspace.xtend @@ -0,0 +1,65 @@ +package hu.bme.mit.inf.dslreasoner.workspace + +import org.eclipse.emf.common.util.URI + +class URIBasedWorkspace extends ReasonerWorkspace{ + val ReasonerWorkspace delegatedWorkspace; + + new(String targetFolder, String prefix) { + super(targetFolder, prefix) + val targetFolderURI = URI.createURI(targetFolder) + if(targetFolderURI.isFile) { + delegatedWorkspace = new FileSystemWorkspace(targetFolder,prefix) + } else if(targetFolderURI.isPlatformResource){ + delegatedWorkspace = new ProjectWorkspace(targetFolder,prefix) + } else { + delegatedWorkspace = null + throw new UnsupportedOperationException('''Unknown URI: «targetFolder»''') + } + } + + override subWorkspace(String targetFolder, String prefix) { + delegatedWorkspace.subWorkspace(targetFolder,prefix) + } + + override getWorkspaceURI() { + delegatedWorkspace.getWorkspaceURI + } + + override init() { + delegatedWorkspace.init + } + + override clear() { + delegatedWorkspace.clear + } + + override protected getURI(String name) { + delegatedWorkspace.getURI(name) + } + + override getFile(String name) { + delegatedWorkspace.getFile(name) + } + + override refreshFile(String name) { + delegatedWorkspace.refreshFile(name) + } + + override protected renameFile(String name) { + delegatedWorkspace.renameFile(name) + } + + override allFiles() { + delegatedWorkspace.allFiles + } + + override writeText(String name, CharSequence content) { + delegatedWorkspace.writeText(name, content) + } + + override readText(String name) { + delegatedWorkspace.readText(name) + } + +} \ No newline at end of file -- cgit v1.2.3-54-g00ecf