fix #7665 Use iterator to avoid ConcurrentModificationException
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / AbstractFormSection.java
index 026b527bbf0720c1d9d6bcda70ffee9fe727a8ad..b816fe223241debc93b17d10e1297433b5f40201 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;
 
@@ -48,7 +49,6 @@ import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
  *
  * @author n.hoffmann
  * @created Feb 22, 2010
- * @version 1.0
  * @param <T>
  */
 //TODO shouldn't ENTITY be bound with super class ICdmBase for example (AbstractFormSection<ENTITY extends ICdmBase>)?
@@ -63,7 +63,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
 
        private ENTITY entity;
 
-       private final Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();
+       private final Set<ICdmFormElement> elements = new HashSet<>();
 
        protected CdmFormFactory formFactory;
 
@@ -170,11 +170,6 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
                addExpandListener();
        }
 
-       /*
-        * (non-Javadoc)
-        *
-        * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
-        */
        /**
         * <p>
         * Getter for the field <code>entity</code>.
@@ -425,7 +420,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
         */
        @Override
     public void removeElements() {
-               for (ICdmFormElement childElement : getElements()) {
+               for (Iterator<ICdmFormElement> formElementIterator = getElements().iterator();formElementIterator.hasNext();) {
+                   ICdmFormElement childElement = formElementIterator.next();
                        // recursion
                        childElement.removeElements();
 
@@ -442,7 +438,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
                        formFactory.removePropertyChangeListener(childElement);
 
                        // dispose of the controls
-                       for (Control control : childElement.getControls()) {
+                       for (Iterator<Control> controlIterator = childElement.getControls().iterator();controlIterator.hasNext();) {
+                           Control control = controlIterator.next();
                                // we added the layoutComposite of the parental element as the
                                // layout composite to this formElement
                                // but we do not want to destroy it.
@@ -491,7 +488,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
         */
        @Override
     public Set<Control> getControls() {
-               Set<Control> controls = new HashSet<Control>();
+               Set<Control> controls = new HashSet<>();
 
                for (Control control : getChildren()) {
                        controls.add(control);
@@ -552,11 +549,6 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
         *
         * @see eu.etaxonomy.taxeditor.forms.ICdmFormElement#refresh()
         */
-       /**
-        * <p>
-        * refresh
-        * </p>
-        */
        @Override
     public void refresh() {
                // empty default implementation