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) {