Merge branch 'release/5.4.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / AbstractCdmFormElement.java
index 51923f3e20ea13fa5f271eb2e304e13e578f8aa5..ec1f11e29f3d2a1279b8b594120e171c52807f8f 100644 (file)
@@ -5,6 +5,7 @@ package eu.etaxonomy.taxeditor.ui.element;
 
 import java.util.ConcurrentModificationException;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -111,10 +112,6 @@ public abstract class AbstractCdmFormElement implements ICdmFormElement {
                elements.add(element);
        }
 
-       protected void removeElement(ICdmFormElement element){
-               elements.remove(element);
-       }
-
        /**
         * Remove all child {@link ICdmFormElement}s and child {@link Control}s
         * of the given and the element itself.
@@ -148,7 +145,8 @@ public abstract class AbstractCdmFormElement implements ICdmFormElement {
         */
        @Override
     public void removeElements(){
-               for(ICdmFormElement childElement : getElements()){
+        for (Iterator<ICdmFormElement> iterator = getElements().iterator();iterator.hasNext();) {
+            ICdmFormElement childElement = iterator.next();
                        // recursion
                        childElement.removeElements();
 
@@ -166,6 +164,12 @@ public abstract class AbstractCdmFormElement implements ICdmFormElement {
                        // dispose of the controls
                        removeControls(childElement);
                }
+               if(this instanceof ISelectableElement){
+            SelectionArbitrator selectionArbitrator = ((ISelectableElement) this).getSelectionArbitrator();
+            if(selectionArbitrator != null){
+                formFactory.destroySelectionArbitrator(selectionArbitrator);
+            }
+        }
                removeControls(this);
                elements.clear();
        }