From 041a0e39fa419a378df624b0d5a3bce4a3722262 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Mon, 19 Feb 2018 19:52:49 -0500 Subject: Working injector for linking viatra and emf execution time. --- .../ApplicationConfigurationRuntimeModule.xtend | 10 +++- .../application/execution/ScriptConsole.xtend | 14 ++++-- .../application/execution/ScriptExecutor.xtend | 55 ++++++++++++++++++---- .../application/execution/util/VQLParser.xtend | 7 +++ 4 files changed, 72 insertions(+), 14 deletions(-) (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/src') 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 59b2f3f8..f3ba89ad 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 @@ -15,6 +15,9 @@ 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.TargetPlatformMetamodelProviderService +import org.eclipse.viatra.query.tooling.core.targetplatform.ITargetPlatformMetamodelLoader +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. @@ -36,8 +39,9 @@ class ApplicationConfigurationRuntimeModule extends AbstractApplicationConfigura val metamodelProviderBinder = Multibinder.newSetBinder(binder, IMetamodelProviderInstance) metamodelProviderBinder.addBinding.to(MetamodelProviderService) metamodelProviderBinder.addBinding.to(ResourceSetMetamodelProviderService) + metamodelProviderBinder.addBinding.to(TargetPlatformMetamodelProviderService) } - + def Class bindIGenmodelMappingLoader() { GenmodelExtensionLoader } @@ -46,6 +50,10 @@ class ApplicationConfigurationRuntimeModule extends AbstractApplicationConfigura ApplicationConfigurationValueConverterService } + def Class bindITargetPlatformMetamodelLoader() { + TargetPlatformMetamodelsIndex + } + // override bindIQualifiedNameProvider() { // ApplicationConfigurationQualifiedNameProvider // } diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend index 77c5252a..24f77754 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptConsole.xtend @@ -90,12 +90,16 @@ class ScriptConsole implements Closeable { } private def prepareFile(URI uri) { - val fileString = uri.toFileString - val file = new File(fileString) - if(this.cleanFiles && file.exists) { - file.delete + if (uri === null) { + return null + } else { + val fileString = uri.toFileString + val file = new File(fileString) + if (this.cleanFiles && file.exists) { + file.delete + } + return file } - return file } override close() throws IOException { diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend index 32d44540..c783c9b9 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend +++ b/Application/hu.bme.mit.inf.dslreasoner.application/src/hu/bme/mit/inf/dslreasoner/application/execution/ScriptExecutor.xtend @@ -1,6 +1,10 @@ package hu.bme.mit.inf.dslreasoner.application.execution +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigurationScript +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.FileReference +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.FileSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GenerationTask import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.GraphPatternReference import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.MetamodelReference @@ -8,30 +12,65 @@ import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.Metamodel import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PartialModelReference import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PartialModelSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.PatternSpecification -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.Task -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.FileSpecification -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.FileReference -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ScopeSpecification import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ScopeReference -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigSpecification -import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ConfigReference +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.ScopeSpecification +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.Task +import hu.bme.mit.inf.dslreasoner.application.execution.util.ApplicationConfigurationParser import java.util.LinkedHashMap +import org.eclipse.emf.common.util.URI +import hu.bme.mit.inf.dslreasoner.application.applicationConfiguration.EPackageImport class ScriptExecutor { - + val parser = new ApplicationConfigurationParser def static void main(String[] args) { println("generator") } + /** + * Executes a script + */ + public def executeScript(URI uri) { + val script = parser.parse(uri) + script.executeScript + } + public def executeScript(ConfigurationScript script) { + script.activateAllEPackageReferences val tasks = script.commands.filter(Task) for(task : tasks.filterNull) { task.execute } } + private def activateAllEPackageReferences(ConfigurationScript script) { + val ecoreImports = script.imports.filter(EPackageImport).toMap[it.importedPackage.nsURI] + val packageRegistry = script.eResource.resourceSet.packageRegistry + for(entry : ecoreImports.entrySet) { + println('''«entry.key» -> «entry.value.importedPackage.name»''') + packageRegistry.put(entry.key,entry.value.importedPackage) + } + +// val viatraImports = script.imports.filter(ViatraImport) +// for(viatraImport : viatraImports) { +// val PatternModel importedViatra = viatraImport.importedViatra as PatternModel +// val packagesImportedByViatra = importedViatra.importPackages.packageImport +// for(packageImport : packagesImportedByViatra) { +// val originalPackage = packageImport.EPackage +// if(originalPackage.eIsProxy) { +// println('''Proxy: «originalPackage»''') +// } else if(ecoreImports.containsKey(originalPackage.nsURI)) { +// packageImport.EPackage = ecoreImports.get(originalPackage.nsURI).importedPackage +// println('''Redirected: «originalPackage.nsURI» -> «packageImport.EPackage.name»''') +// } else { +// println('''Unreferred: «originalPackage.name»''') +// } +// } +// } + } + def public dispatch execute(GenerationTask task) { - + val generationTaskExecutor = new GenerationTaskExecutor + generationTaskExecutor.executeGenerationTask(task,this) } def public dispatch execute(Task task) { 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 e6d516f4..f85e3dcf 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 @@ -21,6 +21,9 @@ import org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationB import org.eclipse.viatra.query.runtime.api.IQuerySpecification import org.eclipse.xtext.resource.XtextResourceSet import hu.bme.mit.inf.dslreasoner.application.execution.ScriptConsole +import org.eclipse.viatra.query.patternlanguage.emf.scoping.IMetamodelProvider +import hu.bme.mit.inf.dslreasoner.application.linking.PreloadedMetamodelProvider +import org.eclipse.viatra.query.patternlanguage.emf.scoping.CompoundMetamodelProviderService class MyModule extends EMFPatternLanguageRuntimeModule implements Module { def public Class bindAnnotationValidatorLoader() { @@ -29,6 +32,10 @@ class MyModule extends EMFPatternLanguageRuntimeModule implements Module { def public Class bindGenmodelMappingLoader() { return typeof(GenmodelExtensionLoader); } + override Class bindIMetamodelProvider() { + CompoundMetamodelProviderService + // PreloadedMetamodelProvider + } } class VQLParser { -- cgit v1.2.3-54-g00ecf