From 2e8d82b562fd333fd80c33382712d95b7cd155db Mon Sep 17 00:00:00 2001 From: Erle Czar Mantos Date: Wed, 2 Mar 2016 14:10:28 +0800 Subject: [PATCH] Passed local mapping context to generators when generating from the toolset. Also fixes https://bugs.eclipse.org/bugs/show_bug.cgi?id=487483 Signed-off-by: Erle Czar Mantos --- .../CodeGeneratorInvocationHandler.java | 23 +++++++++++++------ .../handler/ConfigurationElementLookup.java | 10 ++++++++ .../codegen/api/DefaultMappingContext.java | 2 -- .../core/model/AbstractModelProject.java | 11 +++++++-- .../vorto/core/model/IModelProject.java | 5 +++- .../core/model/MappingResourceFactory.java | 15 ++++++++++++ 6 files changed, 54 insertions(+), 12 deletions(-) diff --git a/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/CodeGeneratorInvocationHandler.java b/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/CodeGeneratorInvocationHandler.java index 15cd723c6f..9a5d355825 100644 --- a/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/CodeGeneratorInvocationHandler.java +++ b/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/CodeGeneratorInvocationHandler.java @@ -24,6 +24,7 @@ import org.eclipse.vorto.codegen.ui.display.MessageDisplayFactory; import org.eclipse.vorto.codegen.ui.utils.PlatformUtils; import org.eclipse.vorto.core.api.model.informationmodel.InformationModel; +import org.eclipse.vorto.core.api.model.mapping.MappingModel; import org.eclipse.vorto.core.model.IModelProject; import org.eclipse.vorto.core.service.ModelProjectServiceFactory; @@ -51,12 +52,13 @@ public Object execute(ExecutionEvent event) throws ExecutionException { } private void evaluate(String generatorName) { + final IModelProject selectedProject = ModelProjectServiceFactory.getDefault().getProjectFromSelection(); + final InformationModel informationModel = (InformationModel) selectedProject.getModel(); + + final String targetPlatform = ConfigurationElementLookup.getDefault().getExtensionSimpleIdentifier(GENERATOR_ID, generatorName); + final IConfigurationElement[] configElements = getUserSelectedGenerators(generatorName); - IModelProject selectedProject = ModelProjectServiceFactory.getDefault().getProjectFromSelection(); - - InformationModel informationModel = (InformationModel) selectedProject.getModel(); - for (IConfigurationElement e : configElements) { try { final Object codeGenerator = e.createExecutableExtension("class"); @@ -67,7 +69,7 @@ private void evaluate(String generatorName) { IVortoCodeGenerator informationModelCodeGenerator = (IVortoCodeGenerator) codeGenerator; - CodeGeneratorTaskExecutor.execute(informationModel, informationModelCodeGenerator, createMappingContext()); + CodeGeneratorTaskExecutor.execute(informationModel, informationModelCodeGenerator, createMappingContext(selectedProject, targetPlatform)); } catch (Exception e1) { MessageDisplayFactory.getMessageDisplay().displayError(e1); @@ -76,8 +78,14 @@ private void evaluate(String generatorName) { } } - private IMappingContext createMappingContext() { - return new DefaultMappingContext(); + private IMappingContext createMappingContext(IModelProject project, String targetPlatform) { + DefaultMappingContext mappingContext = new DefaultMappingContext(); + + for(MappingModel mappingModel : project.getMapping(targetPlatform)) { + mappingContext.addMappingModel(mappingModel); + } + + return mappingContext; } private IConfigurationElement[] getUserSelectedGenerators(String generatorIdentifier) { @@ -85,6 +93,7 @@ private IConfigurationElement[] getUserSelectedGenerators(String generatorIdenti IConfigurationElement[] configurationElements; ConfigurationElementLookup elementLookup = ConfigurationElementLookup.getDefault(); configurationElements = elementLookup.getSelectedConfigurationElementFor(GENERATOR_ID, generatorIdentifier); + return configurationElements; } diff --git a/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/ConfigurationElementLookup.java b/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/ConfigurationElementLookup.java index a442936758..65b91b512b 100644 --- a/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/ConfigurationElementLookup.java +++ b/bundles/org.eclipse.vorto.codegen.ui/src/org/eclipse/vorto/codegen/ui/handler/ConfigurationElementLookup.java @@ -46,6 +46,16 @@ public IConfigurationElement[] getSelectedConfigurationElementFor( id); return extension.getConfigurationElements(); } + + public String getExtensionSimpleIdentifier(String extensionPtId, String id) { + IExtension extension = EXTENSION_REGISTRY.getExtension(extensionPtId, + id); + if (extension != null) { + return extension.getSimpleIdentifier(); + } + + return null; + } public void setExtensionRegistry(IExtensionRegistry reg) { this.EXTENSION_REGISTRY = reg; diff --git a/bundles/org.eclipse.vorto.codegen/src/org/eclipse/vorto/codegen/api/DefaultMappingContext.java b/bundles/org.eclipse.vorto.codegen/src/org/eclipse/vorto/codegen/api/DefaultMappingContext.java index 69ecd9cc94..9b0a52d3ee 100644 --- a/bundles/org.eclipse.vorto.codegen/src/org/eclipse/vorto/codegen/api/DefaultMappingContext.java +++ b/bundles/org.eclipse.vorto.codegen/src/org/eclipse/vorto/codegen/api/DefaultMappingContext.java @@ -51,8 +51,6 @@ public void addMappingModel(MappingModel mappingModel) { this.allMappingModels.add(mappingModel); } - - @Override public List getMappingRulesByOperation(Operation operation) { List mappingRules = new ArrayList<>(); diff --git a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/AbstractModelProject.java b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/AbstractModelProject.java index d2384739ec..5dbfe7f726 100644 --- a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/AbstractModelProject.java +++ b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/AbstractModelProject.java @@ -17,6 +17,8 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -34,6 +36,7 @@ import org.eclipse.vorto.core.api.model.datatype.Type; import org.eclipse.vorto.core.api.model.functionblock.FunctionblockModel; import org.eclipse.vorto.core.api.model.informationmodel.InformationModel; +import org.eclipse.vorto.core.api.model.mapping.MappingModel; import org.eclipse.vorto.core.api.model.model.Model; import org.eclipse.vorto.core.api.model.model.ModelId; import org.eclipse.vorto.core.api.model.model.ModelReference; @@ -138,8 +141,12 @@ public void refresh(IProgressMonitor monitor) { } @Override - public IMapping getMapping(String targetPlatform){ - return MappingResourceFactory.getInstance().createMapping(this, targetPlatform); + public Collection getMapping(String targetPlatform){ + if (targetPlatform == null) { + return Collections.emptyList(); + } + + return MappingResourceFactory.getInstance().getMappingModels(this, targetPlatform); } protected IModelElementResolver[] getResolvers() { diff --git a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/IModelProject.java b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/IModelProject.java index 464d51b040..23b4a3610f 100644 --- a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/IModelProject.java +++ b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/IModelProject.java @@ -14,9 +14,12 @@ *******************************************************************************/ package org.eclipse.vorto.core.model; +import java.util.Collection; + import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.vorto.core.api.model.mapping.MappingModel; import org.eclipse.vorto.core.api.model.model.ModelId; /** @@ -60,7 +63,7 @@ public interface IModelProject extends IModelElement { * @param targetPlatform: Target platform name the mapping designed for * @return instance if IMapping */ - IMapping getMapping(String targetPlatform); + Collection getMapping(String targetPlatform); /** * Saves the actual model project, after it has been modified, e.g. after diff --git a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/MappingResourceFactory.java b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/MappingResourceFactory.java index a2e8c38ba8..a246113982 100644 --- a/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/MappingResourceFactory.java +++ b/bundles/org.eclipse.vorto.core.ui/src/org/eclipse/vorto/core/model/MappingResourceFactory.java @@ -81,6 +81,13 @@ public IMapping createMapping(IModelElement ownerModelElement, String targetPlat List referenceMappings = this.getReferenceMappings(ownerModelElement, targetPlatform); return createMapping(mappingModel, referenceMappings); } + + public List getMappingModels(IModelElement ownerModelElement, String targetPlatform) { + List mappingModels = new ArrayList(); + mappingModels.add(getMappingModel(ownerModelElement, targetPlatform)); + mappingModels.addAll(getReferenceMappingModels(ownerModelElement, targetPlatform)); + return mappingModels; + } /** * Create IMapping instance based on given Mapping Model and child IMapping @@ -148,6 +155,14 @@ private MappingModel getMappingModel(IModelElement ownerModelElement, String tar return mappingModel; } + private List getReferenceMappingModels(IModelElement ownerModelElement, String targetPlatform) { + List referenceMappings = new ArrayList(); + for (IModelElement referenceModelElement : ownerModelElement.getReferences()) { + referenceMappings.add(getMappingModel(referenceModelElement, targetPlatform)); + } + return referenceMappings; + } + private List getReferenceMappings(IModelElement ownerModelElement, String targetPlatform) { List referenceMappings = new ArrayList(); for (IModelElement referenceModelElement : ownerModelElement.getReferences()) {