[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)
*/