WIP towards extensible merge CG
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 cc1e33b..84062e7 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
@@ -43,6 +43,7 @@
import org.eclipse.ocl.pivot.internal.utilities.OCLInternal;
import org.eclipse.ocl.pivot.internal.utilities.PivotUtilInternal;
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.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.MetamodelManager;
@@ -86,7 +87,7 @@
// IPackageDescriptor packageDescriptor = projectDescriptor.getPackageDescriptor(URI.createURI(pivotNsURI));
// packageDescriptor.setUseModel(true, null); // Hide packages installed by CompleteOCLStandaloneSetup
- OCLInternal ocl = OCLInternal.newInstance();
+ OCLInternal ocl = OCLInternal.newInstance(/*resourceSet*/);
MetamodelManagerInternal metamodelManager = ocl.getMetamodelManager();
ResourceSet asResourceSet = metamodelManager.getASResourceSet();
// metamodelManager.setLibraryLoadInProgress(true);
@@ -109,6 +110,7 @@
// URI fileURI = URI.createPlatformResourceURI(uri, true);
try {
@SuppressWarnings("unused")CSResource csResource = ocl.getCSResource(inputURI);
+ ASResource asMergeResource = csResource.getASResource();
ResourceUtils.checkResourceSet(asResourceSet);
// CS2ASResourceAdapter cs2as = CS2ASResourceAdapter.getAdapter(xtextResource, metamodelManager);
// Resource oclResource = cs2as.getPivotResource(xtextResource);
@@ -121,9 +123,9 @@
// secondaryPivotResources.removeAll(libraryPivotResources);
// primaryPivotResources.removeAll(libraryPivotResources);
// for (Resource secondaryPivotResource : secondaryPivotResources) {
- for (Resource resource : metamodelManager.getASResourceSet().getResources()) {
- if (resource != asResource) {
- for (TreeIterator<EObject> tit = resource.getAllContents(); tit.hasNext(); ) {
+// for (Resource resource : metamodelManager.getASResourceSet().getResources()) {
+// if (resource != asResource) {
+ for (TreeIterator<EObject> tit = asMergeResource.getAllContents(); tit.hasNext(); ) {
EObject eObject = tit.next();
if ((eObject instanceof Library) || (eObject instanceof Orphanage)) {
tit.prune();
@@ -142,8 +144,8 @@
tit.prune();
}
}
- }
- }
+// }
+// }
// List<Resource> resources = resourceSet.getResources();
URI ecoreURI = ClassUtil.nonNullState(ecoreResource.getURI());
// for (int i = resources.size() - 1; i >= 0; --i) {
@@ -200,6 +202,7 @@
}
else // Else simple promotion
{
+ PivotUtilInternal.resetContainer(mergeProperty);
primaryProperties.add(mergeProperty);
}
}
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
index 001c35b..033af5d 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
@@ -21,6 +21,7 @@
import java.util.Set;
import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -548,12 +549,12 @@
}
}
- protected String declarePackageImport(@NonNull Package elem) {
+ protected String declarePackageImport(@NonNull Package elem, @Nullable String baseURI) {
// String generatedClassName = getGeneratedClassName(elem);
// if (generatedClassName != null) {
// return null;//"import " + generatedClassName + ";";
// }
- String ecoreQualifiedPackageInterfaceName = nameQueries.getEcoreQualifiedPackageInterfaceName(elem);
+ String ecoreQualifiedPackageInterfaceName = nameQueries.getEcoreQualifiedPackageInterfaceName(elem, baseURI);
if (ecoreQualifiedPackageInterfaceName != null) {
return "import " + ecoreQualifiedPackageInterfaceName + ";";
}
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
index a38caac..9edd460 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodelXtend.xtend
@@ -98,7 +98,7 @@
«IF ((externalPackages != null) && !externalPackages.isEmpty())»
«FOR externalPackage : externalPackages»
- «externalPackage.declarePackageImport()»
+ «externalPackage.declarePackageImport(root.getExternalURI())»
«ENDFOR»
«ENDIF»
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
index 2c7df34..f484656 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLstdlibXtend.xtend
@@ -88,7 +88,7 @@
«IF ((externalPackages != null) && !externalPackages.isEmpty())»
«FOR externalPackage : externalPackages»
- «externalPackage.declarePackageImport()»
+ «externalPackage.declarePackageImport(root.getExternalURI())»
«ENDFOR»
«ENDIF»
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
index ca37a7a..f65fc11 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
@@ -105,9 +105,9 @@
return "\"" + type.getName() + "\"";
}
- public @Nullable String getEcoreQualifiedPackageInterfaceName(@NonNull org.eclipse.ocl.pivot.Package pkge) {
+ public @Nullable String getEcoreQualifiedPackageInterfaceName(@NonNull org.eclipse.ocl.pivot.Package pkge, @Nullable String baseURI) {
String nsURI = ClassUtil.nonNullModel(pkge.getURI());
- GenPackage genPackage = ClassUtil.nonNullState(metamodelManager).getGenPackage(nsURI);
+ GenPackage genPackage = ClassUtil.nonNullState(metamodelManager).getGenPackage(nsURI, baseURI);
if (genPackage == null) {
return null;
}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
index 83c2edb..1f54522 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
@@ -78,6 +78,7 @@
@NonNull EnvironmentFactoryInternal getEnvironmentFactory();
@Nullable GenPackage getGenPackage(@NonNull String nsURI);
+ @Nullable GenPackage getGenPackage(@NonNull String nsURI, @Nullable String baseURI);
@Nullable org.eclipse.ocl.pivot.Class getPrimaryType(@NonNull String nsURI, @NonNull String path, String... extraPath);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
index b7afa7a..32d1f53 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
@@ -126,6 +126,10 @@
import org.eclipse.ocl.pivot.model.OCLmetamodel;
import org.eclipse.ocl.pivot.model.OCLstdlib;
import org.eclipse.ocl.pivot.resource.ASResource;
+import org.eclipse.ocl.pivot.resource.ProjectManager;
+import org.eclipse.ocl.pivot.resource.ProjectManager.IPackageDescriptor;
+import org.eclipse.ocl.pivot.resource.ProjectManager.IProjectDescriptor;
+import org.eclipse.ocl.pivot.resource.ProjectManager.IResourceDescriptor;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
import org.eclipse.ocl.pivot.utilities.FeatureFilter;
import org.eclipse.ocl.pivot.utilities.NameUtil;
@@ -1189,15 +1193,47 @@
@Override
public @Nullable GenPackage getGenPackage(@NonNull String nsURI) {
+ return getGenPackage(nsURI, null);
+ }
+
+ @Override
+ public @Nullable GenPackage getGenPackage(@NonNull String nsURI, @Nullable String baseURIstring) {
if (genPackageMap != null) {
GenPackage genPackage = genPackageMap.get(nsURI);
if (genPackage != null) {
return genPackage;
}
}
- ResourceSet externalResourceSet = environmentFactory.getResourceSet();
- URI uri = EMF_2_9.EcorePlugin.getEPackageNsURIToGenModelLocationMap(false).get(nsURI);
+ URI uri = null;
+ ProjectManager projectManager = environmentFactory.getProjectManager();
+ if (projectManager instanceof StandaloneProjectMap) {
+ IPackageDescriptor packageDescriptor = ((StandaloneProjectMap)projectManager).getPackageDescriptor(URI.createURI(nsURI));
+ if (packageDescriptor != null) {
+ IResourceDescriptor resourceDescriptor = packageDescriptor.getResourceDescriptor();
+ IProjectDescriptor projectDescriptor = resourceDescriptor.getProjectDescriptor();
+// URI platformResourceURI = resourceDescriptor.getPlatformResourceURI();
+ URI genModelURI = resourceDescriptor.getGenModelURI();
+// URI projectRelativeEcorePackageURI = resourceDescriptor.getProjectRelativeEcorePackageURI(genModelURI);
+ uri = projectDescriptor.getPlatformResourceURI(genModelURI.toString());
+// uri = genModelURI.resolve(platformResourceURI);
+ }
+ }
+ if (uri == null){
+ uri = EMF_2_9.EcorePlugin.getEPackageNsURIToGenModelLocationMap(false).get(nsURI);
+ }
if (uri != null) {
+/* URI baseURI = URI.createURI(baseURIstring);
+ if (baseURI.isPlatform() && (baseURI.segmentCount() >= 2)) {
+ if (projectManager instanceof StandaloneProjectMap) {
+ String projectSegment = baseURI.segment(1);
+ IProjectDescriptor projectDescriptor = ((StandaloneProjectMap)projectManager).getProjectDescriptor(projectSegment);
+ if (projectDescriptor != null) {
+ URI locationURI = projectDescriptor.getLocationURI();
+ uri = uri.deresolve(locationURI);
+ }
+ }
+ } */
+ ResourceSet externalResourceSet = environmentFactory.getResourceSet();
Resource resource = externalResourceSet.getResource(uri, true);
for (EObject eObject : resource.getContents()) {
if (eObject instanceof GenModel) {