[209103] EMF2DOM fixes
diff --git a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
index f327036..145fd1e 100644
--- a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
+++ b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSEAdapter.java
@@ -11,6 +11,9 @@
 
 package org.eclipse.wst.xml.core.internal.emf2xml;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.text.BadLocationException;
@@ -267,7 +270,24 @@
 	}
 
 	protected EMF2DOMAdapter primGetExistingAdapter(Node aNode) {
-		return (EMF2DOMAdapter) ((IDOMNode) aNode).getExistingAdapter(EMF2DOMAdapter.ADAPTER_CLASS);
+		
+		INodeNotifier sseNode = (INodeNotifier)aNode;
+		Collection adapters = sseNode.getAdapters();
+		INodeAdapter result = null;
+		for (Iterator iterator = adapters.iterator(); iterator.hasNext();) {
+			INodeAdapter a = (INodeAdapter) iterator.next();
+			if (a != null && a.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) { //First Check if its an EMF2DOMAdapter
+				//Cast to EMF2DOMAdapter
+				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter)a;
+				if (e2DAdapter.getTarget() == getTarget()) {//Now check if its the right one  (Multiple resources could be attached)
+					result = a;
+					break;
+				}
+			}
+		}
+		// if we didn't find one in our list,
+		// return the null result
+		return (EMF2DOMAdapter)result;
 
 	}
 
diff --git a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
index d9a55fc..b49c254 100644
--- a/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
+++ b/bundles/org.eclipse.wst.xml.core/src-emfModelSynch/org/eclipse/wst/xml/core/internal/emf2xml/EMF2DOMSSERenderer.java
@@ -18,19 +18,19 @@
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.WeakHashMap;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.jem.util.emf.workbench.ProjectResourceSet;
+import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase;
 import org.eclipse.wst.common.internal.emf.resource.EMF2DOMAdapter;
 import org.eclipse.wst.common.internal.emf.resource.EMF2DOMRenderer;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
@@ -43,7 +43,6 @@
 import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
-import org.eclipse.wst.sse.core.internal.provisional.exceptions.ResourceInUse;
 import org.eclipse.wst.xml.core.internal.Logger;
 import org.eclipse.wst.xml.core.internal.document.DocumentTypeImpl;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
@@ -201,10 +200,7 @@
 	}
 
 	private void deregisterFromXMLModel() {
-		if (getXMLModel() != null) {
-			String id = getXMLModel().getId();
-			decrementCacheCount(id);
-		}
+		
 		deRegisterAsModelStateListener();
 		deRegisterAsModelLifecycleListener();
 		// This try/catch block is a hack to fix defect 204114. This occurs
@@ -301,78 +297,20 @@
 
 	public String getXMLModelId() {
 		return xmlModelId;
-	}
+	}	
 	
-	private static int uniqueCount = 0;
-	
-	private static synchronized String getUniqueID(String id){
-		return id+uniqueCount++;
-	}
-	
-	private static WeakHashMap resourceMap = new WeakHashMap();
-	private static HashMap resourceCount = new HashMap();
-	
-	private static synchronized Object getCachedResource(String id){
-		Object obj = resourceMap.get(id);
-		return obj;
-	}
-	
-	private static synchronized void incrementCacheCount(String id, Object resource){
-		resourceMap.put(id, resource);
-		if(resourceCount.containsKey(id)){
-			Integer integer = (Integer)resourceCount.get(id);
-			Integer newInteger = new Integer(integer.intValue() + 1);
-			resourceCount.put(id, newInteger);
-		} else {
-			resourceCount.put(id, new Integer(1));
-		}
-	}
-	
-	private static void decrementCacheCount(String id){
-		if(resourceCount.containsKey(id)){
-			Integer integer = (Integer)resourceCount.get(id);
-			if(integer.intValue() > 1){
-				Integer newInteger = new Integer(integer.intValue() - 1);
-				resourceCount.put(id, newInteger);
-			} else {
-				resourceCount.remove(id);
-				resourceMap.remove(id);
-			}
-		} else {
-			resourceMap.remove(id);
-		}
-	}
-	
-
 	private IDOMModel initializeXMLModel(IFile file, boolean forWrite) throws UnsupportedEncodingException, IOException {
 		if (file == null || !file.exists())
 			throw new FileNotFoundException((file == null) ? "null" : file.getFullPath().toOSString()); //$NON-NLS-1$
 		try {
 			IModelManager manager = getModelManager();
-			String id = manager.calculateId(file);
-			Object cachedResource = getCachedResource(id);
-			boolean needCopy = false;
-			if(null != cachedResource && cachedResource != resource){
-				needCopy = true;
-			} else {
-				incrementCacheCount(id, resource);
-			}
-			
+			String id = manager.calculateId(file);			
 			if (forWrite) {
 				IDOMModel mod = (IDOMModel)manager.getExistingModelForEdit(id);
 				if (mod == null)
 					setXMLModel((IDOMModel) manager.getModelForEdit(file));
 				else {
-					if(needCopy)
-						try {
-							String uniqueID = getUniqueID(id);
-							incrementCacheCount(id, resource);
-							setXMLModel((IDOMModel) manager.copyModelForEdit(id, uniqueID));
-						} catch (ResourceInUse e) {
-							Logger.logException(e);
-						}
-					else
-						setXMLModel(mod);
+					setXMLModel(mod);
 				}
 			}
 			else {
@@ -380,16 +318,7 @@
 				if (mod == null)
 					setXMLModel((IDOMModel) manager.getModelForRead(file));
 				else {
-					if(needCopy)
-						try {
-							String uniqueID = getUniqueID(id);
-							incrementCacheCount(id, resource);
-							setXMLModel((IDOMModel) manager.copyModelForEdit(id, uniqueID));
-						} catch (ResourceInUse e) {
-							Logger.logException(e);
-						}
-					else
-						setXMLModel(mod);
+					setXMLModel(mod);
 				}
 			}
 			setXMLModelId(getXMLModel().getId());
@@ -458,14 +387,17 @@
 			return;
 		try {
 			if (aboutToChangeNode != null && model.getStructuredDocument() != null && model.getStructuredDocument().getFirstStructuredDocumentRegion() != aboutToChangeNode) {
-				modelAccessForWrite();
+				String id = getModelManagerId();
+				IStructuredModel tempModel = null;
 				try {
+					tempModel = getModelManager().getExistingModelForEdit(id);
 					xmlModelReverted = true;
 					resource.unload();
 				}
 				finally {
-					if (getXMLModel() != null)
-						getXMLModel().releaseFromEdit();
+					if (tempModel != null) {
+						tempModel.releaseFromEdit();
+					}
 				}
 			}
 		}
@@ -479,7 +411,8 @@
 			resource.setModified(false);
 			long stamp = WorkbenchResourceHelper.computeModificationStamp(resource);
 			WorkbenchResourceHelper.setSynhronizationStamp(resource, stamp);
-			ResourceSetWorkbenchEditSynchronizer synchronizer = (ResourceSetWorkbenchEditSynchronizer) ((ProjectResourceSet) resource.getResourceSet()).getSynchronizer();
+			IProject proj = WorkbenchResourceHelper.getProject(resource);
+			ResourceSetWorkbenchEditSynchronizer synchronizer = (ResourceSetWorkbenchEditSynchronizer) ((ProjectResourceSet) WorkbenchResourceHelperBase.getResourceSet(proj)).getSynchronizer();
 			IFile aFile = WorkbenchResourceHelper.getFile(resource);
 			synchronizer.preSave(aFile);
 		}