[91927]: Releasing fixes for concurrency problems. Committed for MDE.
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
index ebc77b0..d3a644e 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
@@ -35,6 +35,7 @@
 import org.eclipse.wst.common.internal.emf.utilities.StringUtil;
 import org.eclipse.wst.common.internal.emf.utilities.WFTUtilsResourceHandler;
 import org.w3c.dom.Attr;
+import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
 import org.w3c.dom.DocumentType;
 import org.w3c.dom.Element;
@@ -611,8 +612,12 @@
 	 * Reorder a child before a given node
 	 */
 	protected void reorderDOMChild(Node parentNode, Node childNode, Node insertBeforeNode, Translator map) {
-		removeDOMChild(parentNode, childNode, false);
-		parentNode.insertBefore(childNode, insertBeforeNode);
+		try {
+			removeDOMChild(parentNode, childNode, false);
+			parentNode.insertBefore(childNode, insertBeforeNode);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
 	}
 
 	protected String getNewlineString(Node node) {
@@ -634,21 +639,22 @@
 	 * Remove a child node
 	 */
 	protected void removeDOMChild(Node parentNode, Node childNode, boolean removeAdapter) {
-		if (childNode == null)
-			return;
-
-		// Look for any whitespace preceeding the node being
-		// removed and remove it as well.
-		Text prevText = DOMUtilities.getPreviousTextSibling(childNode);
-		if (prevText != null && DOMUtilities.isWhitespace(prevText)) {
-			parentNode.removeChild(prevText);
+		try {
+			if (childNode == null)
+				return;
+			// Look for any whitespace preceeding the node being
+			// removed and remove it as well.
+			Text prevText = DOMUtilities.getPreviousTextSibling(childNode);
+			if (prevText != null && DOMUtilities.isWhitespace(prevText)) {
+				parentNode.removeChild(prevText);
+			}
+			// Remove the node.
+			if (removeAdapter)
+				removeAdapters(childNode);
+			parentNode.removeChild(childNode);
+		} catch (Throwable e) { 
+			e.printStackTrace();
 		}
-
-		// Remove the node.
-		if (removeAdapter)
-			removeAdapters(childNode);
-
-		parentNode.removeChild(childNode);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
index 83d9700..da5b33c 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/TranslatorResourceImpl.java
@@ -358,12 +358,23 @@
 	public boolean isSharedForWrite() {
 		return super.isSharedForWrite() || renderer.isSharedForWrite();
 	}
+	
+	public boolean isLoaded() {
+		synchronized(this) {
+			return super.isLoaded();
+		}
+	}
 
 	public void load(Map options) throws IOException {
-		if (renderer.useStreamsForIO()) {
-			super.load(options);
-		} else if (!isLoaded) {
-			load(null, options);
+		synchronized (this) {
+			if(isLoaded) return;
+			//System.out.println(Thread.currentThread() + " TranslatorResource.load(): " + this);
+			if (renderer.useStreamsForIO()) {
+				super.load(options);
+			} else if (!isLoaded) {
+				load(null, options);
+			}
 		}
+
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
index 91d5cb4..6c36c63 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleStructuralModel.java
@@ -8,6 +8,9 @@
  **************************************************************************************************/
 package org.eclipse.wst.common.componentcore.internal;
 
+import java.io.IOException;
+import java.util.HashMap;
+
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.ecore.EObject;
@@ -58,10 +61,13 @@
 	 * @see org.eclipse.wst.common.internal.emfworkbench.integration.EditModel#getPrimaryRootObject()
 	 */
 	public EObject getPrimaryRootObject() {
-		Resource res = getPrimaryResource();
-		if(res != null && res.getContents().size() == 0)
+		
+		EObject modelRoot = super.getPrimaryRootObject();
+		if(modelRoot == null) {
 			prepareProjectModulesIfNecessary();
-		return super.getPrimaryRootObject();
+			return super.getPrimaryRootObject();
+		}
+		return modelRoot;
 	}
        
 	public WTPModulesResource  makeWTPModulesResource() {
@@ -69,8 +75,15 @@
 	}
 
 	public Resource prepareProjectModulesIfNecessary() {
-		XMIResource res = makeWTPModulesResource();		
-		addProjectModulesIfNecessary(res);
+
+		XMIResource res = (XMIResource) getPrimaryResource();
+		if(res == null)
+			res = makeWTPModulesResource();		
+		try {
+			addProjectModulesIfNecessary(res);
+		} catch (IOException e) {		
+			e.printStackTrace();
+		}
 		return res;
 	}
 	
@@ -78,12 +91,15 @@
 		return Platform.getAdapterManager().getAdapter(this, anAdapter); 
 	}
 	
-	protected void addProjectModulesIfNecessary(XMIResource aResource) { 
-		if (aResource != null && aResource.getContents().isEmpty()) {
-			ProjectComponents projectModules = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createProjectComponents();
-			projectModules.setProjectName(project.getName());
-			aResource.getContents().add(projectModules); 
-			aResource.setID(projectModules, MODULE_CORE_ID);
+	protected void addProjectModulesIfNecessary(XMIResource aResource) throws IOException {
+		
+		if (aResource != null) { 
+			if(aResource.getContents().isEmpty()) {
+				ProjectComponents projectModules = ComponentcorePackage.eINSTANCE.getComponentcoreFactory().createProjectComponents();
+				projectModules.setProjectName(project.getName());
+				aResource.getContents().add(projectModules); 
+				aResource.setID(projectModules, MODULE_CORE_ID);
+			}
 		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
index 5cc8b8b..e5394b1 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/StructureEdit.java
@@ -89,6 +89,8 @@
 	private boolean isStructuralModelSelfManaged;
 	private boolean isReadOnly;
 
+	private static final WorkbenchComponent[] NO_COMPONENTS = new WorkbenchComponent[0];
+
 	/**
 	 * 
 	 * <p>
@@ -458,8 +460,12 @@
 	 * @return The WorkbenchModules of the underlying model, if any.
 	 */
 	public WorkbenchComponent[] getWorkbenchModules() {
-		List wbModules = getComponentModelRoot().getComponents();
-		return (WorkbenchComponent[]) wbModules.toArray(new WorkbenchComponent[wbModules.size()]);
+		ProjectComponents pc = getComponentModelRoot();
+		if(pc != null) {
+			List wbModules = getComponentModelRoot().getComponents();
+			return (WorkbenchComponent[]) wbModules.toArray(new WorkbenchComponent[wbModules.size()]);
+		}
+		return NO_COMPONENTS;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResource.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResource.java
index d0927b3..fe43bb4 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResource.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/WTPModulesResource.java
@@ -10,7 +10,11 @@
  *******************************************************************************/ 
 package org.eclipse.wst.common.componentcore.internal.impl;
 
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
 import org.eclipse.wst.common.componentcore.internal.util.WTPModulesTranslator;
 import org.eclipse.wst.common.internal.emf.resource.Renderer;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
@@ -62,5 +66,20 @@
 	public Translator getRootTranslator() {
 		return WTPModulesTranslator.INSTANCE;
 	}
-
+//	 
+//	 
+//	// temporary for debugging not to be released. 
+//	protected void initializeContents() {
+//		contents = new ResourceImpl.ContentsEList() {
+//			public boolean add(Object object) {
+//				renderer.prepareToAddContents();
+//				return super.add(object);
+//			}
+//
+//			public boolean addAll(Collection collection) {
+//				renderer.prepareToAddContents();
+//				return super.addAll(collection);
+//			}
+//		};
+//	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
index 93f7f00..d532e68 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/WTPModulesTranslator.java
@@ -1,6 +1,10 @@
 package org.eclipse.wst.common.componentcore.internal.util;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.internal.emf.resource.GenericTranslator;
 import org.eclipse.wst.common.internal.emf.resource.IDTranslator;
@@ -18,7 +22,15 @@
 	 */
 	public WTPModulesTranslator() {
 		super(PROJECT_MODULES, ComponentcorePackage.eINSTANCE.getProjectComponents());
-	}
+	}	
+	
+//	public void setMOFValue(Notifier owner, Object value, int newIndex) {		
+//		super.setMOFValue(owner, value, newIndex);
+//		EObject target = ((EObject)value);
+//		IProject project = ProjectUtilities.getProject(target);
+//		if(project != null)
+//			target.eSet(ComponentcorePackage.eINSTANCE.getProjectComponents_ProjectName(), project.getName());
+//	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.common.internal.emf.resource.Translator#getChildren(java.lang.Object, int)
 	 */