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();