merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / AbstractFormSection.java
index b245498e9ee82efbc0cfc3d715f0b7903c953434..6afa2b7bff3931051f4dad493bc4a9231b920c7a 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package eu.etaxonomy.taxeditor.ui.element;
 
@@ -33,27 +33,30 @@ import org.eclipse.ui.forms.widgets.ToggleHyperlink;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 
 /**
  * <p>
- * Abstract AbstractFormSection class.
+ * Abstract super class for a {@link Section} GUI element that visualizes a CDM
+ * entity, manages a conversation and listens to selections
  * </p>
- * 
+ *
+ * @param <ENTITY> A CDM entity which should be visualized by this section.
+ *
  * @author n.hoffmann
  * @created Feb 22, 2010
  * @version 1.0
  * @param <T>
  */
-public abstract class AbstractFormSection<ENTITY> extends Section implements
-               ISelectionChangedListener, ICdmFormElement, IEntityElement<ENTITY>,
-               IConversationEnabled {
+//TODO shouldn't ENTITY be bound with super class ICdmBase for example (AbstractFormSection<ENTITY extends ICdmBase>)?
+public abstract class AbstractFormSection<ENTITY> extends Section implements ISelectionChangedListener, IEntityElement<ENTITY>, IConversationEnabled {
 
        private ISelectionProvider selectionProvider;
 
        private ENTITY entity;
 
-       private Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();
+       private final Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();
 
        protected CdmFormFactory formFactory;
 
@@ -67,7 +70,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * Constructor for AbstractFormSection.
         * </p>
-        * 
+        *
         * @param conversation
         *            TODO
         * @param style
@@ -81,8 +84,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * @param <ENTITY>
         *            a ENTITY object.
         */
-       protected AbstractFormSection(CdmFormFactory formFactory, ICdmFormElement parentElement,
-                       int style) {
+    protected AbstractFormSection(CdmFormFactory formFactory, ICdmFormElement parentElement, int style) {
                super(parentElement.getLayoutComposite(), style);
 
                this.parentElement = parentElement;
@@ -101,47 +103,48 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
                client.setLayout(layout);
 
                this.setClient(client);
-       }
 
-       /**
-        * <p>
-        * Constructor for AbstractFormSection.
-        * </p>
-        * 
-        * @param formFactory
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
-        *            object.
-        * @param conversation
-        *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
-        *            object.
-        * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
-        * @param selectionProvider
-        *            a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
-        * @param style
-        *            a int.
-        */
-       protected AbstractFormSection(CdmFormFactory formFactory,
-                       ICdmFormElement parentElement,
-                       ISelectionProvider selectionProvider, int style) {
-               this(formFactory, parentElement, style);
-               this.selectionProvider = selectionProvider;
        }
 
+           /**
+     * <p>
+     * Constructor for AbstractFormSection.
+     * </p>
+     *
+     * @param formFactory
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+     *            object.
+     * @param conversation
+     *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+     *            object.
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     * @param selectionProvider
+     *            a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
+     * @param style
+     *            a int.
+     */
+    protected AbstractFormSection(CdmFormFactory formFactory, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
+        this(formFactory, parentElement, style);
+        this.selectionProvider = selectionProvider;
+    }
+
        /**
         * <p>
         * Getter for the field <code>propertyChangeListeners</code>.
         * </p>
-        * 
+        *
         * @return a {@link java.util.Set} object.
         */
-       public List<IPropertyChangeListener> getPropertyChangeListeners() {
+       @Override
+    public List<IPropertyChangeListener> getPropertyChangeListeners() {
                return propertyChangeListeners;
        }
 
        /** {@inheritDoc} */
-       public void setPropertyChangeListeners(
+       @Override
+    public void setPropertyChangeListeners(
                        List<IPropertyChangeListener> propertyChangeListeners) {
                this.propertyChangeListeners = propertyChangeListeners;
        }
@@ -150,7 +153,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * Setter for the field <code>entity</code>.
         * </p>
-        * 
+        *
         * @param entity
         *            a ENTITY object.
         */
@@ -160,17 +163,18 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see eu.etaxonomy.taxeditor.forms.IEntityElement#getEntity()
         */
        /**
         * <p>
         * Getter for the field <code>entity</code>.
         * </p>
-        * 
+        *
         * @return a ENTITY object.
         */
-       public ENTITY getEntity() {
+       @Override
+    public ENTITY getEntity() {
                return entity;
        }
 
@@ -178,7 +182,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * getToggle
         * </p>
-        * 
+        *
         * @return a {@link org.eclipse.ui.forms.widgets.ToggleHyperlink} object.
         */
        public ToggleHyperlink getToggle() {
@@ -189,7 +193,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * getSection
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
         *         object.
         */
@@ -199,29 +203,28 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * eu.etaxonomy.taxeditor.forms.IPropertyChangeEmitter#firePropertyChangeEvent
         * ()
         */
        /** {@inheritDoc} */
-       public void firePropertyChangeEvent(CdmPropertyChangeEvent event) {
-               Assert.isNotNull(propertyChangeListeners,
-                               "No property change listeners.");
-               try {
-                       for (Object listener : propertyChangeListeners) {
-                               ((IPropertyChangeListener) listener).propertyChange(event);
-                       }
-               } catch (ConcurrentModificationException e) {
-                       StoreUtil.warn(getClass(),
-                                       "ConcurrentModificationException while handling PropertyChangeEvents."
-                                                       + " It seems like this is not critical");
-               }
+       @Override
+    public void firePropertyChangeEvent(CdmPropertyChangeEvent event) {
+        Assert.isNotNull(propertyChangeListeners, "No property change listeners.");
+        try {
+            for (Object listener : propertyChangeListeners) {
+                ((IPropertyChangeListener) listener).propertyChange(event);
+            }
+        } catch (ConcurrentModificationException e) {
+            MessagingUtils.warn(getClass(), "ConcurrentModificationException while handling PropertyChangeEvents."
+                    + " It seems like this is not critical");
+        }
        }
 
        /**
         * Fires a {@link CdmPropertyChangeEvent} with the given object as source.
-        * 
+        *
         * @param object
         *            the object on which the property changed
         */
@@ -232,7 +235,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
        /**
         * Fires a {@link CdmPropertyChangeEvent} with the given object as source
         * also containing the originating event
-        * 
+        *
         * @param object
         *            the object on which the property changed
         * @param originatingEvent
@@ -246,7 +249,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see org.eclipse.swt.widgets.Composite#setFocus()
         */
        /** {@inheritDoc} */
@@ -257,19 +260,20 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse
         * .jface.util.PropertyChangeEvent)
         */
        /** {@inheritDoc} */
-       public void propertyChange(PropertyChangeEvent event) {
+       @Override
+    public void propertyChange(PropertyChangeEvent event) {
                firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.swt.widgets.Control#setBackground(org.eclipse.swt.graphics
         * .Color)
@@ -283,42 +287,41 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
                getLayoutComposite().setBackground(color);
                super.setBackground(color);
        }
-       
+
        @Override
        public void setPersistentBackground(Color color) {
                persistentBackgroundColor = color;
                setBackground(color);
        }
-       
+
        @Override
        public Color getPersistentBackground() {
                return persistentBackgroundColor;
        }
-       
+
 
        /**
         * <p>
         * widgetSelected
         * </p>
-        * 
+        *
         * @param e
         *            a {@link org.eclipse.swt.events.SelectionEvent} object.
         */
        public void widgetSelected(SelectionEvent e) {
-               Widget widget = e.widget;
-
-               if (widget instanceof Control) {
-                       Control control = (Control) widget;
-                       if (checkControlAncestryForWidget(control)) {
-                               if (getEntity() != null) {
-                                       IStructuredSelection selection = new StructuredSelection(
-                                                       getEntity());
-                                       if (selectionProvider != null) {
-                                               selectionProvider.setSelection(selection);
-                                       }
-                               }
-                       }
-               }
+        Widget widget = e.widget;
+
+        if (widget instanceof Control) {
+            Control control = (Control) widget;
+            if (checkControlAncestryForWidget(control)) {
+                if (getEntity() != null) {
+                    IStructuredSelection selection = new StructuredSelection(getEntity());
+                    if (selectionProvider != null) {
+                        selectionProvider.setSelection(selection);
+                    }
+                }
+            }
+        }
        }
 
        private boolean checkControlAncestryForWidget(Control control) {
@@ -335,7 +338,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
        }
 
        /** {@inheritDoc} */
-       public void setSelected(boolean selected) {
+       @Override
+    public void setSelected(boolean selected) {
                if (selected) {
                        setBackground(Display.getCurrent().getSystemColor(
                                        SWT.COLOR_LIST_SELECTION));
@@ -345,7 +349,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
        }
 
        /** {@inheritDoc} */
-       public void selectionChanged(SelectionChangedEvent event) {
+       @Override
+    public void selectionChanged(SelectionChangedEvent event) {
                if (event.getSelection() == CdmFormFactory.EMPTY_SELECTION) {
                        return;
                }
@@ -365,7 +370,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * addSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
@@ -377,7 +382,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * removeSelectionListener
         * </p>
-        * 
+        *
         * @param listener
         *            a {@link org.eclipse.swt.events.SelectionListener} object.
         */
@@ -386,7 +391,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
        }
 
        /** {@inheritDoc} */
-       public void addElement(ICdmFormElement element) {
+       @Override
+    public void addElement(ICdmFormElement element) {
                elements.add(element);
        }
 
@@ -394,7 +400,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * removeElement
         * </p>
-        * 
+        *
         * @param element
         *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
         *            object.
@@ -408,7 +414,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * removeElements
         * </p>
         */
-       public void removeElements() {
+       @Override
+    public void removeElements() {
                for (ICdmFormElement childElement : getElements()) {
                        // recursion
                        childElement.removeElements();
@@ -416,8 +423,7 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
                        // unregister selection arbitrator
                        if (childElement instanceof ISelectableElement) {
                                ISelectableElement selectableElement = (ISelectableElement) childElement;
-                               if (selectableElement != null
-                                               && selectableElement.getSelectionArbitrator() != null) {
+                               if (selectableElement.getSelectionArbitrator() != null) {
                                        formFactory.destroySelectionArbitrator(selectableElement
                                                        .getSelectionArbitrator());
                                }
@@ -447,10 +453,11 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * Getter for the field <code>parentElement</code>.
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
         */
-       public ICdmFormElement getParentElement() {
+       @Override
+    public ICdmFormElement getParentElement() {
                return parentElement;
        }
 
@@ -458,10 +465,11 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * Getter for the field <code>elements</code>.
         * </p>
-        * 
+        *
         * @return a {@link java.util.Set} object.
         */
-       public Set<ICdmFormElement> getElements() {
+       @Override
+    public Set<ICdmFormElement> getElements() {
                return elements;
        }
 
@@ -469,10 +477,11 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * getControls
         * </p>
-        * 
+        *
         * @return a {@link java.util.Set} object.
         */
-       public Set<Control> getControls() {
+       @Override
+    public Set<Control> getControls() {
                Set<Control> controls = new HashSet<Control>();
 
                for (Control control : getChildren()) {
@@ -493,15 +502,17 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * getLayoutComposite
         * </p>
-        * 
+        *
         * @return a {@link org.eclipse.swt.widgets.Composite} object.
         */
-       public Composite getLayoutComposite() {
+       @Override
+    public Composite getLayoutComposite() {
                return (Composite) getClient();
        }
 
        /** {@inheritDoc} */
-       public boolean containsFormElement(ICdmFormElement formElement) {
+       @Override
+    public boolean containsFormElement(ICdmFormElement formElement) {
                if (formElement == this) {
                        return true;
                } else {
@@ -519,16 +530,17 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * Getter for the field <code>formFactory</code>.
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
         */
-       public CdmFormFactory getFormFactory() {
+       @Override
+    public CdmFormFactory getFormFactory() {
                return formFactory;
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see eu.etaxonomy.taxeditor.forms.ICdmFormElement#refresh()
         */
        /**
@@ -536,7 +548,8 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * refresh
         * </p>
         */
-       public void refresh() {
+       @Override
+    public void refresh() {
                // empty default implementation
 
        }
@@ -545,30 +558,34 @@ public abstract class AbstractFormSection<ENTITY> extends Section implements
         * <p>
         * getConversationHolder
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
         *         object.
         */
-       public ConversationHolder getConversationHolder() {
+       @Override
+    public ConversationHolder getConversationHolder() {
                if(getParentElement() instanceof RootElement || getParentElement() == null){
-               
-                       IEditorPart activeEditor = StoreUtil.getActiveEditor();
+
+                       IEditorPart activeEditor = AbstractUtility.getActiveEditor();
                        if(activeEditor instanceof IConversationEnabled){
-                               ConversationHolder conversation = ((IConversationEnabled) StoreUtil.getActiveEditor()).getConversationHolder();
+                               ConversationHolder conversation = ((IConversationEnabled) AbstractUtility.getActiveEditor()).getConversationHolder();
                                return conversation;
                        }
                }else if(getParentElement() instanceof IConversationEnabled){
                        return ((IConversationEnabled) getParentElement()).getConversationHolder();
                }
-               StoreUtil.errorDialog("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.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",
                                new IllegalArgumentException());
                return null;
-       
+
        }
 
        /** {@inheritDoc} */
-       public void update(CdmDataChangeMap changeEvents) {
+
+       @Override
+    public void update(CdmDataChangeMap changeEvents) {
+
        }