[240606] More issues with SSEDOMAdapter
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 95e4f3c..409ffa0 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
@@ -30,7 +30,6 @@
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xml.core.internal.Logger;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
@@ -40,6 +39,8 @@
 import org.w3c.dom.Text;
 
 public class EMF2DOMSSEAdapter extends EMF2DOMAdapterImpl implements INodeAdapter {
+	
+	private Class resourceClass;
 	public EMF2DOMSSEAdapter(Node node, EMF2DOMRenderer renderer, Translator translator) {
 		super(node, renderer, translator);
 	}
@@ -321,9 +322,16 @@
 			// First Check if it's an EMF2DOMAdapter
 			if (adapter != null && adapter.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) {
 				// Cast to EMF2DOMAdapter
-				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter) adapter;
-				if (getTarget() == null || e2DAdapter.getTarget() == null)
-					return e2DAdapter;
+				EMF2DOMSSEAdapter e2DAdapter = (EMF2DOMSSEAdapter) adapter;
+				Object adapterTarget = e2DAdapter.getTarget();
+				
+				//Handle the cases where either adapter's target is null 
+				if ((getTarget() == null) || (adapterTarget == null))
+					if(resourceClass.equals(e2DAdapter.getResourceClass()))
+						return e2DAdapter;
+					else
+						continue;
+				
 				
 				// Check if target is an EMF resource
 				if (getTarget() instanceof Resource) {
@@ -331,24 +339,23 @@
 					 * Now check if it's the right one (Multiple resources
 					 * could be attached)
 					 */
-					if (e2DAdapter.getTarget() == getTarget()) {
+					if (adapterTarget != null && adapterTarget == getTarget()) {
 						return e2DAdapter;
 					}
 				}
 				else {
 					// Check if targets are EObjects with the same resources
 					EObject myTarget = (EObject) getTarget();
-					EObject adapterTarget = (EObject) e2DAdapter.getTarget();
 					/*
 					 * Now check if it's the right one (Multiple resources could
 					 * be attached)
 					 */
-					if (adapterTarget.eResource() == myTarget.eResource()) {
+					if (adapterTarget != null && ((EObject)adapterTarget).eResource() == myTarget.eResource()) {
 						return e2DAdapter;
 					}
 				}
 				
-				if (e2DAdapter.getTarget() instanceof EObject) {
+				if (adapterTarget instanceof EObject) {
 					if (((EObject) e2DAdapter.getTarget()).eResource() == null) {
 						return e2DAdapter;
 					}
@@ -404,7 +411,7 @@
 	}
 
 	protected void setEmptyTag(Element element) {
-		((ElementImpl) element).setEmptyTag(true);
+		((IDOMElement) element).setEmptyTag(true);
 	}
 
 	public void updateDOM() {
@@ -418,4 +425,15 @@
 			enableUndoManagement();
 		}
 	}
+
+	public Class getResourceClass() {
+		return resourceClass;
+	}
+
+	protected void initChildTranslators() {
+		if (fRenderer != null && fRenderer.getResource() != null)
+			resourceClass = fRenderer.getResource().getClass();
+		super.initChildTranslators();
+	}
+
 }
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 ae3e5f2..7b6eb86 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
@@ -64,6 +64,8 @@
 	private boolean isSaving = false;
 
 	private IModelManager modelManager;
+	
+	private Class resourceClass;
 
 	/** The XML DOM model */
 	protected IDOMModel xmlModel;
@@ -272,10 +274,15 @@
 			INodeAdapter adapter = (INodeAdapter) iterator.next();
 			// First Check if it's an EMF2DOMAdapter
 			if (adapter != null && adapter.isAdapterForType(EMF2DOMAdapter.ADAPTER_CLASS)) {
-				// Cast to EMF2DOMAdapter
-				EMF2DOMAdapter e2DAdapter = (EMF2DOMAdapter) adapter;
+				// Cast to EMF2DOMSSEAdapter
+				EMF2DOMSSEAdapter e2DAdapter = (EMF2DOMSSEAdapter) adapter;
+				//Handle the cases where either adapter's target is null 
+				//Use the resourceClass to make sure the resource type is identical
 				if (getResource() == null || e2DAdapter.getTarget() == null)
-					return e2DAdapter;
+					if(resourceClass.equals(e2DAdapter.getResourceClass()))
+						return e2DAdapter;
+					else
+						continue;
 				
 				// First check if targets are resources
 				if (e2DAdapter.getTarget() instanceof Resource) {
@@ -428,17 +435,18 @@
 		if (isBatchChanges)
 			return;
 		try {
-			if (aboutToChangeNode != null
-					&& model.getStructuredDocument() != null
-					&& model.getStructuredDocument()
-							.getFirstStructuredDocumentRegion() != aboutToChangeNode) {
-				modelAccessForWrite();
+			if (aboutToChangeNode != null && model.getStructuredDocument() != null
+					&& model.getStructuredDocument().getFirstStructuredDocumentRegion() != aboutToChangeNode) {
+				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.getReferenceCountForEdit() > 0)) {
+						tempModel.releaseFromEdit();
+					}
 				}
 			}
 		} finally {
@@ -622,4 +630,10 @@
 		return xmlModelReverted;
 	}
 
+	public void setResource(TranslatorResource resource) {
+		super.setResource(resource);
+		if (resource != null)
+			resourceClass = resource.getClass();
+	}
+
 }