Bug 431847 - duplicate top level items created in tree when editing xmi
Change-Id: I504de19c6070dcd576a9b233b4b04b749baad548
Signed-off-by: Steven Spungin <steven@spungin.tv>
diff --git a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
index d301121..e05c4ac 100644
--- a/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
+++ b/bundles/org.eclipse.e4.tools.emf.ui/src/org/eclipse/e4/tools/emf/ui/internal/common/TreeViewerEx.java
@@ -6,7 +6,7 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Steven Spungin <steven@spungin.tv> - initial API and implementation, Bug 396902
+ * Steven Spungin <steven@spungin.tv> - initial API and implementation, Bug 396902, Bug 431847
******************************************************************************/
package org.eclipse.e4.tools.emf.ui.internal.common;
@@ -48,12 +48,13 @@
E4XMIResource xmiResource = (E4XMIResource) ((EObject) modelProvider.getRoot().get(0)).eResource();
ArrayList<Object> newElements = new ArrayList<Object>();
ObservableListTreeContentProvider provider = (ObservableListTreeContentProvider) getContentProvider();
+ Object[] children = new Object[] { modelProvider.getRoot().get(0) };
for (String id : elementsIds) {
EObject eObject = xmiResource.getEObject(id);
if (eObject != null) {
newElements.add(eObject);
// force tree node creation
- getFirstMatchingItem(eObject, provider, provider.getChildren(getInput()));
+ getFirstMatchingItem(eObject, provider, children);
}
}
ArrayList<Object> newSelected = new ArrayList<Object>();
@@ -62,14 +63,14 @@
if (eObject != null) {
newSelected.add(eObject);
// force tree node creation
- getFirstMatchingItem(eObject, provider, provider.getChildren(getInput()));
+ getFirstMatchingItem(eObject, provider, children);
}
}
setExpandedElements(newElements.toArray(new Object[0]));
setSelection(new StructuredSelection(newSelected));
// update our stored id values
- documentAboutToBeChanged(event);
+ reloadIds(modelProvider);
} catch (Exception e) {
e.printStackTrace();
}
@@ -78,6 +79,10 @@
@Override
public void documentAboutToBeChanged(DocumentEvent event) {
+ reloadIds(modelProvider);
+ }
+
+ private void reloadIds(final IModelResource modelProvider) {
try {
// Stash XmiIds
Object[] elements = getExpandedElements();