[412341] Provide Multi-Resource ResourceRenamer
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/GeneratePivotModel.mwe2 b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/GeneratePivotModel.mwe2
index f56a2e1..e5ebf6f 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/GeneratePivotModel.mwe2
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/GeneratePivotModel.mwe2
@@ -182,28 +182,37 @@
}
+ bean = ResourceSetImpl : pivotRenameResourceSet {}
+ bean = ProjectMapSetup { resourceSet = pivotRenameResourceSet }
+ bean = UMLStandaloneSetup { resourceSet = pivotRenameResourceSet }
+ bean = OCLStandaloneSetup {}
+ bean = EcoreGenModelSetup { resourceSet = pivotRenameResourceSet }
+ component = ResourceRenamer { resourceSet = pivotRenameResourceSet skipOnErrors = true
+ projectName = "${buildProjectName}"
+ resourceRename = {
+ from = "model-gen/RawPivot.ecore"
+ to = "../${internalProjectName}/model/Pivot.ecore"
+ }
+ }
+ //
+ //
+ //
bean = ResourceSetImpl : pivotMergeResourceSet {}
bean = ProjectMapSetup { resourceSet = pivotMergeResourceSet }
bean = UMLStandaloneSetup { resourceSet = pivotMergeResourceSet }
bean = OCLStandaloneSetup {}
bean = EcoreGenModelSetup { resourceSet = pivotMergeResourceSet }
+ component = ConstraintMerger { resourceSet = pivotMergeResourceSet skipOnErrors = true
+ projectName = "${internalProjectName}"
+ libraryURI = "http://www.eclipse.org/ocl/2015/Library"
+ ecoreURI = "model/Pivot.ecore"
+ oclURI = "model/Pivot.ocl"
+ invariantPrefix = "validate"
+ }
component = ResourceReader { resourceSet = pivotMergeResourceSet skipOnErrors = true
modelSlot = "${ecoreSlot}"
- uri = "/${buildProjectName}/model-gen/RawPivot.ecore"
- }
- component = ResourceRenamer { /*resourceSet = pivotGenerateResourceSet*/ skipOnErrors = true
- modelSlot = "${ecoreSlot}"
uri = "/${internalProjectName}/model/Pivot.ecore"
}
- component = EConstraintRemover { skipOnErrors = true
- modelSlot = "${ecoreSlot}"
- }
- component = ConstraintMerger { resourceSet = pivotMergeResourceSet skipOnErrors = true
- projectName = "${internalProjectName}"
- modelSlot = "${ecoreSlot}"
- uri = "model/Pivot.ocl"
- invariantPrefix = "validate"
- }
component = EPackageAlphabetizer { skipOnErrors = true
modelSlot = "${ecoreSlot}"
}
@@ -230,7 +239,6 @@
bean = EcoreGenModelSetup { resourceSet = pivotGenerateResourceSet }
component = GenmodelReloader { resourceSet = pivotGenerateResourceSet skipOnErrors = true
projectName = "${internalProjectName}"
- modelSlot = "xyzzy"
genModel = "/${internalProjectName}/model/Pivot.genmodel"
ecoreFile = "/${internalProjectName}/model/Pivot.ecore"
}
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/QuickGeneratePivotModel.mwe2 b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/QuickGeneratePivotModel.mwe2
index e800c1d..82172d7 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/QuickGeneratePivotModel.mwe2
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/QuickGeneratePivotModel.mwe2
@@ -21,7 +21,6 @@
var buildProjectName = "org.eclipse.ocl.examples.build"
var ecoreSlot = "ecore"
-var umlSlot = "uml"
//var pivotProjectName = "org.eclipse.ocl.pivot"
var internalProjectName = "org.eclipse.ocl.pivot"
//var platformURI = ".."
@@ -34,107 +33,37 @@
Workflow {
bean = CompleteOCLStandaloneSetup {}
- bean = ResourceSetImpl : uml2pivotResourceSet {}
- bean = ProjectMapSetup { resourceSet = uml2pivotResourceSet }
- bean = UMLStandaloneSetup { resourceSet = uml2pivotResourceSet }
+ bean = ResourceSetImpl : pivotRenameResourceSet {}
+ bean = ProjectMapSetup { resourceSet = pivotRenameResourceSet }
+ bean = UMLStandaloneSetup { resourceSet = pivotRenameResourceSet }
bean = OCLStandaloneSetup {}
-// bean = GenModelSetup { resourceSet = uml2pivotResourceSet }
-// bean = UMLGenModelSetup { resourceSet = uml2pivotResourceSet }
- bean = EcoreGenModelSetup { resourceSet = uml2pivotResourceSet }
- component = ResourceReader { resourceSet = uml2pivotResourceSet skipOnErrors = true
- modelSlot = "${umlSlot}"
- uri = "/${buildProjectName}/model-gen/RawPivot.ecore"
- }
-// component = PackageMerger { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
- component = EPackageAlphabetizer { skipOnErrors = true
- modelSlot = "${umlSlot}"
+ bean = EcoreGenModelSetup { resourceSet = pivotRenameResourceSet }
+ component = ResourceRenamer { resourceSet = pivotRenameResourceSet skipOnErrors = true
+ projectName = "${buildProjectName}"
+ resourceRename = {
+ from = "model-gen/RawPivot.ecore"
+ to = "../${internalProjectName}/model/Pivot.ecore"
+ }
}
- component = EConstraintRemover { skipOnErrors = true
- modelSlot = "${umlSlot}"
- }
-// component = NonAbstractTypeZapper { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
-// component = CommentNormalizer { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
-// component = UMLIDAssigner { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
- component = ResourceWriter { resourceSet = uml2pivotResourceSet skipOnErrors = true
- modelSlot = "${umlSlot}"
- uri = "/${internalProjectName}/model/Pivot.ecore"
-// contentTypeIdentifier = "org.eclipse.uml2.uml_5_0_0" // UMLResource.UML_CONTENT_TYPE_IDENTIFIER
- }
- component = GenmodelReloader { resourceSet = uml2pivotResourceSet skipOnErrors = true
- projectName = "${internalProjectName}"
- modelSlot = "${ecoreSlot}"
- genModel = "/${internalProjectName}/model/Pivot.genmodel"
- ecoreFile = "/${internalProjectName}/model/Pivot.ecore"
-// modelImporter = "org.eclipse.uml2.uml.ecore.importer.UMLImporter"
-// modelImporter = "org.eclipse.ocl.examples.build.utilities.UMLImporterWithDelegates"
- }
- bean = ResourceSetImpl : pivot2modelsResourceSet {}
- bean = ProjectMapSetup { resourceSet = pivot2modelsResourceSet }
- bean = UMLStandaloneSetup { resourceSet = pivot2modelsResourceSet }
+ //
+ //
+ //
+ bean = ResourceSetImpl : pivotMergeResourceSet {}
+ bean = ProjectMapSetup { resourceSet = pivotMergeResourceSet }
+ bean = UMLStandaloneSetup { resourceSet = pivotMergeResourceSet }
bean = OCLStandaloneSetup {}
-// bean = GenModelSetup { resourceSet = pivot2modelsResourceSet }
-// bean = UMLGenModelSetup { resourceSet = pivot2modelsResourceSet }
- bean = EcoreGenModelSetup { resourceSet = pivot2modelsResourceSet }
- component = ResourceReader { resourceSet = pivot2modelsResourceSet skipOnErrors = true
- modelSlot = "${umlSlot}"
- uri = "/${buildProjectName}/model-gen/RawPivot.ecore"
- }
- component = ResourceReader { resourceSet = pivot2modelsResourceSet skipOnErrors = true
- modelSlot = "${ecoreSlot}"
- uri = "/${internalProjectName}/model/Pivot.ecore"
- }
- component = ConstraintMerger { resourceSet = pivot2modelsResourceSet skipOnErrors = true
+ bean = EcoreGenModelSetup { resourceSet = pivotMergeResourceSet }
+ component = ConstraintMerger { resourceSet = pivotMergeResourceSet skipOnErrors = true
projectName = "${internalProjectName}"
- modelSlot = "${ecoreSlot}"
- uri = "model/Pivot.ocl"
+ libraryURI = "http://www.eclipse.org/ocl/2015/Library"
+ ecoreURI = "model/Pivot.ecore"
+ oclURI = "model/Pivot.ocl"
invariantPrefix = "validate"
}
- component = EPackageAlphabetizer { skipOnErrors = true
- modelSlot = "${umlSlot}"
- }
- component = EConstraintRemover { skipOnErrors = true
- modelSlot = "${umlSlot}"
- }
-// component = NonAbstractTypeZapper { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
-// component = CommentNormalizer { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
-// component = UMLIDAssigner { skipOnErrors = true
-// modelSlot = "${umlSlot}"
-// }
- component = ResourceWriter { resourceSet = pivot2modelsResourceSet skipOnErrors = true
- modelSlot = "${umlSlot}"
- uri = "/${internalProjectName}/model/Pivot.ecore"
-// contentTypeIdentifier = "org.eclipse.uml2.uml_5_0_0" // UMLResource.UML_CONTENT_TYPE_IDENTIFIER
- }
- component = GenmodelReloader { resourceSet = pivot2modelsResourceSet skipOnErrors = true
- projectName = "${internalProjectName}"
- modelSlot = "${ecoreSlot}"
- genModel = "/${internalProjectName}/model/Pivot.genmodel"
- ecoreFile = "/${internalProjectName}/model/Pivot.ecore"
-// modelImporter = "org.eclipse.uml2.uml.ecore.importer.UMLImporter"
-// modelImporter = "org.eclipse.ocl.examples.build.utilities.UMLImporterWithDelegates"
- }
- component = ResourceReader { resourceSet = pivot2modelsResourceSet skipOnErrors = true
+ component = ResourceReader { resourceSet = pivotMergeResourceSet skipOnErrors = true
modelSlot = "${ecoreSlot}"
uri = "/${internalProjectName}/model/Pivot.ecore"
- }
- component = ConstraintMerger { resourceSet = pivot2modelsResourceSet skipOnErrors = true
- projectName = "${internalProjectName}"
- modelSlot = "${ecoreSlot}"
- uri = "model/Pivot.ocl"
- invariantPrefix = "validate"
- }
+ }
component = EPackageAlphabetizer { skipOnErrors = true
modelSlot = "${ecoreSlot}"
}
@@ -144,17 +73,28 @@
component = SetASmetamodel { skipOnErrors = true
modelSlot = "${ecoreSlot}"
}
-// component = PivotWorkarounds { skipOnErrors = true
-// modelSlot = "${ecoreSlot}"
-// }
-// component = OCLDelegateActivator { skipOnErrors = true
-// modelSlot = "${pivotSlot}"
-// }
- component = ResourceWriter { resourceSet = pivot2modelsResourceSet skipOnErrors = true
+ component = StructuralENamedElementIdAssigner { skipOnErrors = true
modelSlot = "${ecoreSlot}"
}
+ component = ResourceWriter { resourceSet = pivotMergeResourceSet skipOnErrors = true
+ modelSlot = "${ecoreSlot}"
+ uri = "/${internalProjectName}/model/Pivot.ecore"
+ }
+ //
+ //
+ //
+ bean = ResourceSetImpl : pivotGenerateResourceSet {}
+ bean = ProjectMapSetup { resourceSet = pivotGenerateResourceSet }
+ bean = UMLStandaloneSetup { resourceSet = pivotGenerateResourceSet }
+ bean = OCLStandaloneSetup {}
+ bean = EcoreGenModelSetup { resourceSet = pivotGenerateResourceSet }
+ component = GenmodelReloader { resourceSet = pivotGenerateResourceSet skipOnErrors = true
+ projectName = "${internalProjectName}"
+ genModel = "/${internalProjectName}/model/Pivot.genmodel"
+ ecoreFile = "/${internalProjectName}/model/Pivot.ecore"
+ }
- component = GenerateModel { resourceSet = pivot2modelsResourceSet skipOnErrors = true
+ component = GenerateModel { resourceSet = pivotGenerateResourceSet skipOnErrors = true
// projectName = "${internalProjectName}"
genModel = "/${internalProjectName}/model/Pivot.genmodel"
// clearResourceSet = false
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/AbstractProjectComponent.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/AbstractProjectComponent.java
index a604ceb..e70c1a5 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/AbstractProjectComponent.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/AbstractProjectComponent.java
@@ -13,19 +13,18 @@
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.mwe.core.issues.Issues;
-import org.eclipse.emf.mwe.core.lib.WorkflowComponentWithModelSlot;
+import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap;
-public abstract class AbstractProjectComponent extends WorkflowComponentWithModelSlot
+public abstract class AbstractProjectComponent extends AbstractWorkflowComponent
{
- private ResourceSet resourceSet = null;
+ private ResourceSet resourceSet = null;
private String projectName;
@Override
public void checkConfiguration(Issues issues) {
- super.checkConfiguration(issues);
if (projectName == null) {
issues.addError(this, "projectName not specified.");
}
@@ -49,7 +48,7 @@
public void setProjectName(@NonNull String projectName) {
this.projectName = projectName;
}
-
+
public void setResourceSet(@NonNull ResourceSet resourceSet) {
this.resourceSet = resourceSet;
}
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
index 8c75383..151663d 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
@@ -25,6 +25,7 @@
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.mwe.core.WorkflowContext;
import org.eclipse.emf.mwe.core.issues.Issues;
import org.eclipse.emf.mwe.core.monitor.ProgressMonitor;
@@ -49,9 +50,12 @@
import org.eclipse.ocl.pivot.model.OCLstdlib;
import org.eclipse.ocl.pivot.resource.ASResource;
import org.eclipse.ocl.pivot.resource.CSResource;
+import org.eclipse.ocl.pivot.resource.ProjectManager;
+import org.eclipse.ocl.pivot.resource.ProjectManager.IResourceDescriptor;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.MetamodelManager;
import org.eclipse.ocl.pivot.utilities.PivotUtil;
+import org.eclipse.ocl.pivot.utilities.XMIUtil;
import org.eclipse.ocl.xtext.completeocl.CompleteOCLStandaloneSetup;
import com.google.common.collect.Sets;
@@ -62,7 +66,9 @@
public class ConstraintMerger extends AbstractProjectComponent
{
private Logger log = Logger.getLogger(getClass());
- protected String uri;
+ protected @NonNull List<@NonNull String> ecoreURIs = new ArrayList<>();
+ protected String libraryURI = null;
+ protected @NonNull List<@NonNull String> oclURIs = new ArrayList<>();
protected String invariantPrefix;
public ConstraintMerger() {
@@ -70,52 +76,81 @@
CompleteOCLStandaloneSetup.doSetup();
}
+ public void addEcoreURI(String ecoreURI) {
+ assert ecoreURI != null;
+ ecoreURIs.add(ecoreURI);
+ }
+
+ public void addOclURI(String oclURI) {
+ assert oclURI != null;
+ oclURIs.add(oclURI);
+ }
+
@Override
public void checkConfiguration(Issues issues) {
super.checkConfiguration(issues);
- if (uri == null) {
- issues.addError(this, "uri not specified.");
+ if (ecoreURIs.size() <= 0) {
+ issues.addError(this, "no ecoreURI specified.");
}
- }
-
- public String getUri() {
- return uri;
+ if (oclURIs.size() <= 0) {
+ issues.addError(this, "no oclURI specified.");
+ }
}
@Override
public void invokeInternal(WorkflowContext ctx, ProgressMonitor arg1, Issues arg2) {
+ ResourceSet resourceSet = getResourceSet();
StandaloneProjectMap.IProjectDescriptor projectDescriptor = ClassUtil.nonNullState(getProjectDescriptor());
- assert uri != null;
- URI inputURI = projectDescriptor.getPlatformResourceURI(uri);
- log.info("Merging '" + inputURI + "'");
- Resource ecoreResource = (Resource) ctx.get(getModelSlot());
- EPackage ecorePivotPackage = (EPackage) ecoreResource.getContents().get(0);
- final String pivotNsURI = ClassUtil.nonNullState(ecorePivotPackage.getNsURI());
- OCLInternal ocl = OCLInternal.newInstance();
+ // Resource ecoreResource = (Resource) ctx.get(getModelSlot());
+ // EPackage ecorePivotPackage = (EPackage) ecoreResource.getContents().get(0);
+ // final String pivotNsURI = ClassUtil.nonNullState(ecorePivotPackage.getNsURI());
+ OCLInternal ocl = OCLInternal.newInstance(resourceSet);
EnvironmentFactoryInternal environmentFactory = ocl.getEnvironmentFactory();
MetamodelManagerInternal metamodelManager = ocl.getMetamodelManager();
ResourceSet asResourceSet = metamodelManager.getASResourceSet();
- ocl.getResourceSet().getResources().add(ecoreResource); // Don't load another copy
- ocl.getStandardLibrary().setDefaultStandardLibraryURI(pivotNsURI);
- StandardLibraryContribution.REGISTRY.put(pivotNsURI, new OCLstdlib.Loader());
- for (EObject eObject : ecoreResource.getContents()) {
- if (eObject instanceof EPackage) {
- EPackage ePackage = (EPackage) eObject;
- ClassUtil.getMetamodelAnnotation(ePackage); // Install EAnnotation
- }
+ // ocl.getResourceSet().getResources().add(ecoreResource); // Don't load another copy
+ String libraryURI2 = libraryURI;
+ if (libraryURI2 != null) {
+ ocl.getStandardLibrary().setDefaultStandardLibraryURI(libraryURI2);
+ StandardLibraryContribution.REGISTRY.put(libraryURI2, new OCLstdlib.Loader());
}
- Ecore2AS ecore2as = Ecore2AS.getAdapter(ecoreResource, ocl.getEnvironmentFactory());
- Model pivotModel = ecore2as.getASModel();
- ASResource asResource = ClassUtil.nonNullState((ASResource)pivotModel.eResource());
- Set<@NonNull Resource> primaryASResources = Sets.newHashSet(asResource);
- //FIXME diagnoseErrors(asResource);
+
+
+ //
try {
- CSResource csResource = ocl.getCSResource(inputURI);
+ for (@NonNull String ecoreURI : ecoreURIs) {
+ URI uri = projectDescriptor.getPlatformResourceURI(ecoreURI);
+ log.info("Loading " + uri);
+ Resource ecoreResource = resourceSet.getResource(uri, true);
+ EcoreUtil.resolveAll(ecoreResource);
+ ResourceUtils.checkResource(ecoreResource);
+ for (EObject eObject : ecoreResource.getContents()) {
+ if (eObject instanceof EPackage) {
+ EPackage ePackage = (EPackage) eObject;
+ ClassUtil.getMetamodelAnnotation(ePackage); // Install EAnnotation
+ }
+ }
+ Ecore2AS ecore2as = Ecore2AS.getAdapter(ecoreResource, environmentFactory);
+ Model pivotModel = ecore2as.getASModel();
+ ASResource asResource = ClassUtil.nonNullState((ASResource)pivotModel.eResource());
+ ResourceUtils.checkResource(asResource);
+ }
+ EcoreUtil.resolveAll(resourceSet);
+ ResourceUtils.checkResourceSet(resourceSet);
+ Set<@NonNull Resource> primaryASResources = Sets.newHashSet(ClassUtil.nullFree(asResourceSet.getResources()));
+ //
+ for (@NonNull String oclURI : oclURIs) {
+ URI uri = projectDescriptor.getPlatformResourceURI(oclURI);
+ log.info("Merging " + uri);
+ CSResource csResource = ocl.getCSResource(uri);
+ ResourceUtils.checkResourceSet(asResourceSet);
+ @SuppressWarnings("unused") Resource oclResource = csResource.getASResource();
+ }
ResourceUtils.checkResourceSet(asResourceSet);
- @SuppressWarnings("unused") Resource oclResource = csResource.getASResource();
+ //
Set<@NonNull Resource> modifiedPrimaryASResources = new HashSet<>();
Map<@NonNull CompleteClass, @NonNull List<org.eclipse.ocl.pivot.Class>> completeClass2mergeTypes = new HashMap<>();
- for (Resource secondaryASResource : metamodelManager.getASResourceSet().getResources()) {
+ for (Resource secondaryASResource : asResourceSet.getResources()) {
if (!primaryASResources.contains(secondaryASResource)) {
for (TreeIterator<EObject> tit = secondaryASResource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
@@ -162,14 +197,31 @@
Map<@NonNull String, @Nullable Object> options = new HashMap<>();
options.put(AS2Ecore.OPTION_SUPPRESS_DUPLICATES, true);
options.put(AS2Ecore.OPTION_INVARIANT_PREFIX, invariantPrefix);
+ ProjectManager projectManager = StandaloneProjectMap.findAdapter(resourceSet);
+ resourceSet.getResources().clear();
for (@NonNull Resource modifiedPrimaryASResource : modifiedPrimaryASResources) {
Model asModel = PivotUtil.getModel(modifiedPrimaryASResource);
String externalURI = asModel.getExternalURI();
URI ecoreURI = URI.createURI(externalURI);
- Resource ecoreResource2 = AS2Ecore.createResource(environmentFactory, asResource, ecoreURI, options);
- ctx.set(getModelSlot(), ecoreResource2);
- projectDescriptor.configure(ecoreResource2.getResourceSet(), StandaloneProjectMap.LoadBothStrategy.INSTANCE, null);
- ocl.getResourceSet().getResources().remove(ecoreResource2);
+ // Resource oldEcoreResource = resourceSet.getResource(ecoreURI, false);
+ // if (oldEcoreResource != null) {
+ //
+ // }
+ if (projectManager != null) {
+ IResourceDescriptor resourceDescriptor = null;
+ resourceDescriptor = projectManager.getResourceDescriptor(ecoreURI);
+ if (resourceDescriptor != null) {
+ resourceDescriptor.unload(resourceSet);
+ resourceDescriptor.configure(resourceSet,
+ StandaloneProjectMap.CreateStrategy.INSTANCE,
+ StandaloneProjectMap.MapToFirstConflictHandlerWithLog.INSTANCE);
+ }
+ }
+ Resource newEcoreResource = AS2Ecore.createResource(environmentFactory, modifiedPrimaryASResource, ecoreURI, options);
+ // projectDescriptor.configure(ecoreResource2.getResourceSet(), StandaloneProjectMap.LoadBothStrategy.INSTANCE, null);
+ XMIUtil.assignIds(newEcoreResource, new XMIUtil.StructuralENamedElementIdCreator(), null);
+ newEcoreResource.save(null); //getSaveOptions());
+ // resourceSet.getResources().remove(ecoreResource2);
}
ocl.dispose();
} catch (IOException e) {
@@ -228,9 +280,9 @@
}
}
- public void setUri(String uri) {
- this.uri = uri;
- }
+ // public void setUri(String uri) {
+ // this.uri = uri;
+ // }
/**
* Define a prefix such as "validate" for all invariant operation names.
@@ -238,4 +290,11 @@
public void setInvariantPrefix(String invariantPrefix) {
this.invariantPrefix = invariantPrefix;
}
+
+ /**
+ * Define a URI to bw loade as the OCL Standard Library.
+ */
+ public void setLibraryURI(String libraryURI) {
+ this.libraryURI = libraryURI;
+ }
}
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ResourceRenamer.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ResourceRenamer.java
index f8ab20b..ae7b981 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ResourceRenamer.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ResourceRenamer.java
@@ -10,41 +10,89 @@
*******************************************************************************/
package org.eclipse.ocl.examples.build.utilities;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.mwe.core.WorkflowContext;
import org.eclipse.emf.mwe.core.issues.Issues;
-import org.eclipse.emf.mwe.core.lib.WorkflowComponentWithModelSlot;
import org.eclipse.emf.mwe.core.monitor.ProgressMonitor;
+import org.eclipse.emf.mwe.utils.Mapping;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap;
+import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.utilities.XMIUtil;
/**
- * Renames a Resource in a designated <tt>modelSlot</tt> by changing its URI to a specified <tt>uri</tt> and
- * by registering the new URO with its ResourceSet so that references to the new URI resolve to the Resource.
+ * Renames a set of Resources as a group. All from Resources are loaded, then URIs are changed and saved.
*/
-public class ResourceRenamer extends WorkflowComponentWithModelSlot
+public class ResourceRenamer extends AbstractProjectComponent
{
private Logger log = Logger.getLogger(getClass());
- protected String uri;
+ private final @NonNull Map<@NonNull String, @NonNull String> resourceRenameMap = new HashMap<>();
- public String getUri() {
- return uri;
+ /**
+ * Defines a package rename only from some package to another package.
+ */
+ public void addResourceRename(Mapping mapping) {
+ String from = mapping.getFrom();
+ String to = mapping.getTo();
+ assert (from != null) && (to != null);
+ String oldTo = resourceRenameMap.put(from, to);
+ assert oldTo == null;
+ }
+
+ protected Map<?, ?> getSaveOptions() {
+ Map<Object, Object> result = XMIUtil.createSaveOptions();
+ result.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ return result;
}
@Override
public void invokeInternal(WorkflowContext ctx, ProgressMonitor arg1, Issues arg2) {
- URI fileURI = URI.createPlatformResourceURI(uri, true);
- log.info("Renaming as '" + fileURI + "'");
- Resource resource = (Resource) ctx.get(getModelSlot());
- resource.setURI(fileURI);
- Map<URI, Resource> uriResourceMap = ((ResourceSetImpl)resource.getResourceSet()).getURIResourceMap();
- uriResourceMap.put(fileURI, resource);
- }
-
- public void setUri(String uri) {
- this.uri = uri;
+ StandaloneProjectMap.IProjectDescriptor projectDescriptor = ClassUtil.nonNullState(getProjectDescriptor());
+ ResourceSet resourceSet = getResourceSet();
+ Map<@NonNull String, @NonNull Resource> from2resource = new HashMap<>();
+ List<@NonNull String> froms = new ArrayList<>(resourceRenameMap.keySet());
+ Collections.sort(froms);
+ for (@NonNull String from : froms) {
+ URI uri = projectDescriptor.getPlatformResourceURI(from);
+ Resource resource = resourceSet.getResource(uri, true);
+ assert resource != null;
+ EcoreUtil.resolveAll(resource);
+ ResourceUtils.checkResource(resource);
+ from2resource.put(from, resource);
+ }
+ EcoreUtil.resolveAll(resourceSet);
+ ResourceUtils.checkResourceSet(resourceSet);
+ //
+ for (@NonNull String from : froms) {
+ Resource resource = from2resource.get(from);
+ assert resource != null;
+ String to = resourceRenameMap.get(from);
+ assert to != null;
+ URI uri = projectDescriptor.getPlatformResourceURI(to);
+ log.info("Renaming " + resource.getURI() + " as " + uri);
+ resource.setURI(uri);
+ XMIUtil.assignIds(resource, new XMIUtil.StructuralENamedElementIdCreator(), null);
+ }
+ //
+ try {
+ for (@NonNull String from : froms) {
+ Resource resource = from2resource.get(from);
+ assert resource != null;
+ resource.save(getSaveOptions());
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Problems running " + getClass().getSimpleName(), e);
+ }
}
}