fix #7665 Use iterator to avoid ConcurrentModificationException
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / AbstractFormSection.java
index 482476491819ff270b81ebc30d2e7f55125eec12..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
@@ -573,21 +565,20 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
         */
        @Override
     public ConversationHolder getConversationHolder() {
-           if(AbstractUtility.getActiveE4Part() instanceof IConversationEnabled){
-            return ((IConversationEnabled) AbstractUtility.getActiveE4Part()).getConversationHolder();
+           if(AbstractUtility.getActivePart() instanceof IConversationEnabled){
+            return ((IConversationEnabled) AbstractUtility.getActivePart()).getConversationHolder();
         }
            if(getParentElement() instanceof RootElement || getParentElement() == null){
 
-               Object activeEditor = AbstractUtility.getActiveE4Editor();
+               Object activeEditor = AbstractUtility.getActiveEditor();
                if(activeEditor instanceof IConversationEnabled){
-                   ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveE4Editor()).getConversationHolder();
+                   ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveEditor()).getConversationHolder();
                    return conversation;
                }
            }else if(getParentElement() instanceof IConversationEnabled){
                return ((IConversationEnabled) getParentElement()).getConversationHolder();
            }
-               MessagingUtils.messageDialog("Could not get conversation for AbstractFormSection",
-                               getClass(), "There is an error in the implementation. There should have been an active editor but it wasn't",
+               MessagingUtils.error(getClass(), "Could not get conversation for AbstractFormSection. There is an error in the implementation. There should have been an active editor but it wasn't",
                                new IllegalArgumentException());
                return null;
 
@@ -599,7 +590,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
 
        }
 
-    private class ExpandListener implements IExpansionListener{
+    public class ExpandListener implements IExpansionListener{
                @Override
                public void expansionStateChanging(ExpansionEvent e) {
                }
@@ -613,7 +604,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements ISe
      * Adds a custom implementation of IExpansionListener to this section
      * which stores the expansion state in the preferences
      */
-       private void addExpandListener() {
+       protected void addExpandListener() {
                PreferencesUtil.getPreferenceStore().setDefault(getPrefKey(), isExpanded());
                setExpanded(PreferencesUtil.getPreferenceStore().getBoolean(getPrefKey()));
                addExpansionListener(new ExpandListener());