extract string constant
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / AbstractCdmFormElement.java
index fbce4c31d87ba6a52be4e914dc0f1e9ebd536333..cbc98bc97030a52c959609d85373c053a983f51a 100644 (file)
-/**
- *
- */
-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;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.widgets.Section;
-
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
-import eu.etaxonomy.taxeditor.model.MessagingUtils;
-
-/**
- * @author n.hoffmann
- * @version $Id: $
- */
-public abstract class AbstractCdmFormElement implements ICdmFormElement {
-
-       protected CdmFormFactory formFactory;
-
-       private List<IPropertyChangeListener> propertyChangeListeners;
-
-       private Composite layoutComposite;
-
-       private final Set<Control> controls = new HashSet<Control>();
-
-       private final Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();
-       private ICdmFormElement parentElement;
-
-       private Color persistentBackgroundColor;
-
-
-       protected AbstractCdmFormElement(CdmFormFactory formFactory, Composite layoutComposite){
-               this.layoutComposite = layoutComposite;
-               this.formFactory = formFactory;
-       }
-
-       public AbstractCdmFormElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
-               this(formFactory, formElement.getLayoutComposite());
-               this.parentElement = formElement;
-//             addControl(layoutComposite);
-       }
-
-       @Override
-    public CdmFormFactory getFormFactory() {
-               return formFactory;
-       }
-
-       /**
-        * Delegates the focus to <code>this</code> elements main input control
-        */
-       public void setFocus(){
-               // Override in subclasses where needed
-       }
-
-       /**
-        * Returns all Controls that are managed by this element
-        *
-        * @return a {@link java.util.Set} object.
-        */
-       @Override
-    public Set<Control> getControls(){
-               return controls;
-       }
-
-       /**
-        * adds the control to the set of controls that are managed by this element
-        *
-        * @param child a {@link org.eclipse.swt.widgets.Control} object.
-        */
-       protected void addControl(Control child){
-               controls.add(child);
-       }
-
-       protected void removeControl(Control child){
-               controls.remove(child);
-       }
-
-       /**
-        * <p>Getter for the field <code>elements</code>.</p>
-        *
-        * @return a {@link java.util.Set} object.
-        */
-       @Override
-    public Set<ICdmFormElement> getElements(){
-               return elements;
-       }
-
-       /**
-        * <p>Getter for the field <code>parentElement</code>.</p>
-        *
-        * @return a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
-        */
-       @Override
-    public ICdmFormElement getParentElement(){
-               return parentElement;
-       }
-
-       /** {@inheritDoc} */
-       @Override
-    public void addElement(ICdmFormElement element){
-               elements.add(element);
-       }
-
-       /**
-        * Remove all child {@link ICdmFormElement}s and child {@link Control}s
-        * of the given and the element itself.
-        * @param formElement The element to remove
-        */
-       public void removeElementsAndControls(ICdmFormElement formElement){
-           for(ICdmFormElement childElement : formElement.getElements()){
-               // recursion
-               childElement.removeElements();
-
-               // unregister selection arbitrator
-               if(childElement instanceof ISelectableElement){
-                   SelectionArbitrator selectionArbitrator = ((ISelectableElement) childElement).getSelectionArbitrator();
-                   if(selectionArbitrator != null){
-                       formFactory.destroySelectionArbitrator(selectionArbitrator);
-                   }
-               }
-
-               // unregister from property changes
-               formFactory.removePropertyChangeListener(childElement);
-
-               // dispose of the controls
-               removeControls(childElement);
-           }
-           removeControls(formElement);
-           this.elements.remove(formElement);
-       }
-
-       /**
-        * Removes all child {@link ICdmFormElement}s and child {@link Control}s
-        * and the element itself.
-        */
-       @Override
-    public void removeElements(){
-        for (Iterator<ICdmFormElement> iterator = getElements().iterator();iterator.hasNext();) {
-            ICdmFormElement childElement = iterator.next();
-                       // recursion
-                       childElement.removeElements();
-
-                       // unregister selection arbitrator
-                       if(childElement instanceof ISelectableElement){
-                               SelectionArbitrator selectionArbitrator = ((ISelectableElement) childElement).getSelectionArbitrator();
-                               if(selectionArbitrator != null){
-                                       formFactory.destroySelectionArbitrator(selectionArbitrator);
-                               }
-                       }
-
-                       // unregister from property changes
-                       formFactory.removePropertyChangeListener(childElement);
-
-                       // 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();
-       }
-
-       private void removeControls(ICdmFormElement element){
-               if(element instanceof Section){
-                       ((Section) element).dispose();
-                       element = null;
-               }else{
-                       for(Control control : element.getControls()){
-                               // we added the layoutComposite of the parental element as the layout composite to this formElement
-                               // but we do not want to destroy it.
-                               if(control.equals(element.getLayoutComposite())){
-                                       continue;
-                               }else{
-                                       control.dispose();
-                                       control = null;
-                               }
-                       }
-               }
-       }
-
-       /**
-        * <p>Getter for the field <code>layoutComposite</code>.</p>
-        *
-        * @return a {@link org.eclipse.swt.widgets.Composite} object.
-        */
-       @Override
-    public Composite getLayoutComposite() {
-               return layoutComposite;
-       }
-
-       /**
-        * <p>Setter for the field <code>layoutComposite</code>.</p>
-        *
-        * @param layoutComposite a {@link org.eclipse.swt.widgets.Composite} object.
-        */
-       public void setLayoutComposite(Composite layoutComposite){
-               this.layoutComposite = layoutComposite;
-       }
-
-       /**
-        * <p>Getter for the field <code>propertyChangeListeners</code>.</p>
-        *
-        * @return a {@link java.util.Set} object.
-        */
-       @Override
-    public List<IPropertyChangeListener> getPropertyChangeListeners() {
-               return propertyChangeListeners;
-       }
-
-       /** {@inheritDoc} */
-       @Override
-    public void setPropertyChangeListeners(List<IPropertyChangeListener> propertyChangeListeners){
-               this.propertyChangeListeners = propertyChangeListeners;
-       }
-
-       /** {@inheritDoc} */
-       @Override
-    public void firePropertyChangeEvent(CdmPropertyChangeEvent event) {
-           //TODO: replace propertyChangeListeners with formFactory.getPropertyChangeListeners() and remove member propertyChangeListeners from AbstractCdmFormElement
-               Assert.isNotNull(propertyChangeListeners, "Property change listeners are not present");
-
-               try{
-                       for(Object listener : propertyChangeListeners){
-                               ((IPropertyChangeListener)listener).propertyChange(event);
-                       }
-               }catch(ConcurrentModificationException e){
-                       // There are two cases that produce a CME.
-                       // Described here: http://dev.e-taxonomy.eu/trac/ticket/2363#comment:2
-                       // and here: http://dev.e-taxonomy.eu/trac/ticket/2438
-                       // Ignoring the CME because nothing bad is happening
-                       MessagingUtils.warn(getClass(), "ConcurrentModificationException. Can be ignored.");
-               }
-       }
-
-       /**
-        * Fires a {@link CdmPropertyChangeEvent} with the given object as source.
-        *
-        * @param object the object on which the property changed
-        */
-       public void firePropertyChangeEvent(Object object){
-               firePropertyChangeEvent(object, null);
-       }
-
-       /**
-        * 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 the originating event
-        */
-       public void firePropertyChangeEvent(Object object, PropertyChangeEvent originatingEvent){
-               firePropertyChangeEvent(new CdmPropertyChangeEvent(object, originatingEvent));
-       }
-
-
-       /**
-        * {@inheritDoc}
-        *
-        * This method gets called whenever the toolkit this composite was created with gets a property change notification.
-        *
-        * It is good advice to check whether the PropertyChangeEvent is destined for the implementing composite.
-        * Implementations should also check for null PropertyChangeEvents and return immediately in that case.
-        * @see eu.etaxonomy.taxeditor.ui.element.ICdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-        */
-       @Override
-    public void propertyChange(PropertyChangeEvent event) {
-               // implement in subclasses
-       }
-
-       /** {@inheritDoc} */
-       @Override
-    public boolean containsFormElement(ICdmFormElement formElement){
-               if(formElement == this){
-                       return true;
-               }else{
-                       for(ICdmFormElement element : getElements()){
-                               boolean contains = element.containsFormElement(formElement);
-                               if(contains == true){
-                                       return true;
-                               }
-                       }
-                       return false;
-               }
-       }
-
-       @Override
-    public void refresh() {
-               // empty default implementation
-       }
-
-
-       /** {@inheritDoc} */
-       @Override
-       public void setBackground(Color color) {
-               for(ICdmFormElement element : getElements()){
-                       element.setBackground(color);
-               }
-       }
-
-       @Override
-       public void setPersistentBackground(Color color) {
-               persistentBackgroundColor = color;
-               setBackground(color);
-       }
-
-       @Override
-       public Color getPersistentBackground() {
-               return persistentBackgroundColor;
-       }
-
-       public Color getColor(String colorId){
-               return AbstractUtility.getColor(colorId);
-       }
-}
+/**\r
+ *\r
+ */\r
+package eu.etaxonomy.taxeditor.ui.element;\r
+\r
+import java.util.ConcurrentModificationException;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.eclipse.core.runtime.Assert;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
+import org.eclipse.jface.util.PropertyChangeEvent;\r
+import org.eclipse.swt.graphics.Color;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Control;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+import org.eclipse.ui.forms.widgets.TableWrapData;\r
+\r
+import eu.etaxonomy.taxeditor.model.AbstractUtility;\r
+import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
+\r
+/**\r
+ * @author n.hoffmann\r
+ * @version $Id: $\r
+ */\r
+public abstract class AbstractCdmFormElement implements ICdmFormElement {\r
+\r
+       protected CdmFormFactory formFactory;\r
+\r
+       private List<IPropertyChangeListener> propertyChangeListeners;\r
+\r
+       private Composite layoutComposite;\r
+\r
+       private final Set<Control> controls = new HashSet<Control>();\r
+\r
+       private final Set<ICdmFormElement> elements = new HashSet<ICdmFormElement>();\r
+       private ICdmFormElement parentElement;\r
+\r
+       private Color persistentBackgroundColor;\r
+\r
+\r
+       protected AbstractCdmFormElement(CdmFormFactory formFactory, Composite layoutComposite){\r
+               this.layoutComposite = layoutComposite;\r
+               this.formFactory = formFactory;\r
+       }\r
+\r
+       public AbstractCdmFormElement(CdmFormFactory formFactory, ICdmFormElement formElement) {\r
+               this(formFactory, formElement.getLayoutComposite());\r
+               this.parentElement = formElement;\r
+//             addControl(layoutComposite);\r
+       }\r
+\r
+       @Override\r
+    public CdmFormFactory getFormFactory() {\r
+               return formFactory;\r
+       }\r
+\r
+       /**\r
+        * Delegates the focus to <code>this</code> elements main input control\r
+        */\r
+       public void setFocus(){\r
+               // Override in subclasses where needed\r
+       }\r
+\r
+       /**\r
+        * Returns all Controls that are managed by this element\r
+        *\r
+        * @return a {@link java.util.Set} object.\r
+        */\r
+       @Override\r
+    public Set<Control> getControls(){\r
+               return controls;\r
+       }\r
+\r
+       /**\r
+        * adds the control to the set of controls that are managed by this element\r
+        *\r
+        * @param child a {@link org.eclipse.swt.widgets.Control} object.\r
+        */\r
+       protected void addControl(Control child){\r
+               controls.add(child);\r
+       }\r
+\r
+       protected void removeControl(Control child){\r
+               controls.remove(child);\r
+       }\r
+\r
+       /**\r
+        * <p>Getter for the field <code>elements</code>.</p>\r
+        *\r
+        * @return a {@link java.util.Set} object.\r
+        */\r
+       @Override\r
+    public Set<ICdmFormElement> getElements(){\r
+               return elements;\r
+       }\r
+\r
+       /**\r
+        * <p>Getter for the field <code>parentElement</code>.</p>\r
+        *\r
+        * @return a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.\r
+        */\r
+       @Override\r
+    public ICdmFormElement getParentElement(){\r
+               return parentElement;\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+    public void addElement(ICdmFormElement element){\r
+               elements.add(element);\r
+       }\r
+\r
+       /**\r
+        * Remove all child {@link ICdmFormElement}s and child {@link Control}s\r
+        * of the given and the element itself.\r
+        * @param formElement The element to remove\r
+        */\r
+       public void removeElementsAndControls(ICdmFormElement formElement){\r
+           for(ICdmFormElement childElement : formElement.getElements()){\r
+               // recursion\r
+               childElement.removeElements();\r
+\r
+               // unregister selection arbitrator\r
+               if(childElement instanceof ISelectableElement){\r
+                   SelectionArbitrator selectionArbitrator = ((ISelectableElement) childElement).getSelectionArbitrator();\r
+                   if(selectionArbitrator != null){\r
+                       formFactory.destroySelectionArbitrator(selectionArbitrator);\r
+                   }\r
+               }\r
+\r
+               // unregister from property changes\r
+               formFactory.removePropertyChangeListener(childElement);\r
+\r
+               // dispose of the controls\r
+               removeControls(childElement);\r
+           }\r
+           removeControls(formElement);\r
+           this.elements.remove(formElement);\r
+       }\r
+\r
+       /**\r
+        * Removes all child {@link ICdmFormElement}s and child {@link Control}s\r
+        * and the element itself.\r
+        */\r
+       @Override\r
+    public void removeElements(){\r
+        for (Iterator<ICdmFormElement> iterator = getElements().iterator();iterator.hasNext();) {\r
+            ICdmFormElement childElement = iterator.next();\r
+                       // recursion\r
+                       childElement.removeElements();\r
+\r
+                       // unregister selection arbitrator\r
+                       if(childElement instanceof ISelectableElement){\r
+                               SelectionArbitrator selectionArbitrator = ((ISelectableElement) childElement).getSelectionArbitrator();\r
+                               if(selectionArbitrator != null){\r
+                                       formFactory.destroySelectionArbitrator(selectionArbitrator);\r
+                               }\r
+                       }\r
+\r
+                       // unregister from property changes\r
+                       formFactory.removePropertyChangeListener(childElement);\r
+\r
+                       // dispose of the controls\r
+                       removeControls(childElement);\r
+               }\r
+               if(this instanceof ISelectableElement){\r
+            SelectionArbitrator selectionArbitrator = ((ISelectableElement) this).getSelectionArbitrator();\r
+            if(selectionArbitrator != null){\r
+                formFactory.destroySelectionArbitrator(selectionArbitrator);\r
+            }\r
+        }\r
+               removeControls(this);\r
+               elements.clear();\r
+       }\r
+\r
+       private void removeControls(ICdmFormElement element){\r
+               if(element instanceof Section){\r
+                       ((Section) element).dispose();\r
+                       element = null;\r
+               }else{\r
+                       for(Control control : element.getControls()){\r
+                               // we added the layoutComposite of the parental element as the layout composite to this formElement\r
+                               // but we do not want to destroy it.\r
+                               if(control.equals(element.getLayoutComposite())){\r
+                                       continue;\r
+                               }else{\r
+                                       control.dispose();\r
+                                       control = null;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * <p>Getter for the field <code>layoutComposite</code>.</p>\r
+        *\r
+        * @return a {@link org.eclipse.swt.widgets.Composite} object.\r
+        */\r
+       @Override\r
+    public Composite getLayoutComposite() {\r
+               return layoutComposite;\r
+       }\r
+\r
+       /**\r
+        * <p>Setter for the field <code>layoutComposite</code>.</p>\r
+        *\r
+        * @param layoutComposite a {@link org.eclipse.swt.widgets.Composite} object.\r
+        */\r
+       public void setLayoutComposite(Composite layoutComposite){\r
+               this.layoutComposite = layoutComposite;\r
+       }\r
+\r
+       public void addIndent(int indent)\r
+       {  this.layoutComposite = formFactory.createComposite(layoutComposite);\r
+\r
+           if (this.layoutComposite.getParent().getLayoutData() instanceof TableWrapData){\r
+               TableWrapData tableWrap = (TableWrapData)this.layoutComposite.getParent().getLayoutData();\r
+               tableWrap.indent = indent;\r
+\r
+               this.layoutComposite.setLayoutData(tableWrap);\r
+           }\r
+           if (this.layoutComposite.getLayoutData() instanceof GridData){\r
+               GridData gridData = new GridData();\r
+               gridData.verticalIndent = indent;\r
+            this.layoutComposite.setLayoutData(gridData);\r
+\r
+        }\r
+       }\r
+       /**\r
+        * <p>Getter for the field <code>propertyChangeListeners</code>.</p>\r
+        *\r
+        * @return a {@link java.util.Set} object.\r
+        */\r
+       @Override\r
+    public List<IPropertyChangeListener> getPropertyChangeListeners() {\r
+               return propertyChangeListeners;\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+    public void setPropertyChangeListeners(List<IPropertyChangeListener> propertyChangeListeners){\r
+               this.propertyChangeListeners = propertyChangeListeners;\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+    public void firePropertyChangeEvent(CdmPropertyChangeEvent event) {\r
+           //TODO: replace propertyChangeListeners with formFactory.getPropertyChangeListeners() and remove member propertyChangeListeners from AbstractCdmFormElement\r
+               Assert.isNotNull(propertyChangeListeners, "Property change listeners are not present");\r
+\r
+               try{\r
+                       for(Object listener : propertyChangeListeners){\r
+                               ((IPropertyChangeListener)listener).propertyChange(event);\r
+                       }\r
+               }catch(ConcurrentModificationException e){\r
+                       // There are two cases that produce a CME.\r
+                       // Described here: http://dev.e-taxonomy.eu/trac/ticket/2363#comment:2\r
+                       // and here: http://dev.e-taxonomy.eu/trac/ticket/2438\r
+                       // Ignoring the CME because nothing bad is happening\r
+                       MessagingUtils.warn(getClass(), "ConcurrentModificationException. Can be ignored.");\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source.\r
+        *\r
+        * @param object the object on which the property changed\r
+        */\r
+       public void firePropertyChangeEvent(Object object){\r
+               firePropertyChangeEvent(object, null);\r
+       }\r
+\r
+       /**\r
+        * Fires a {@link CdmPropertyChangeEvent} with the given object as source also containing the\r
+        * originating event\r
+        *\r
+        * @param object the object on which the property changed\r
+        * @param originatingEvent the originating event\r
+        */\r
+       public void firePropertyChangeEvent(Object object, PropertyChangeEvent originatingEvent){\r
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(object, originatingEvent));\r
+       }\r
+\r
+\r
+       /**\r
+        * {@inheritDoc}\r
+        *\r
+        * This method gets called whenever the toolkit this composite was created with gets a property change notification.\r
+        *\r
+        * It is good advice to check whether the PropertyChangeEvent is destined for the implementing composite.\r
+        * Implementations should also check for null PropertyChangeEvents and return immediately in that case.\r
+        * @see eu.etaxonomy.taxeditor.ui.element.ICdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)\r
+        */\r
+       @Override\r
+    public void propertyChange(PropertyChangeEvent event) {\r
+               // implement in subclasses\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+    public boolean containsFormElement(ICdmFormElement formElement){\r
+               if(formElement == this){\r
+                       return true;\r
+               }else{\r
+                       for(ICdmFormElement element : getElements()){\r
+                               boolean contains = element.containsFormElement(formElement);\r
+                               if(contains == true){\r
+                                       return true;\r
+                               }\r
+                       }\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       @Override\r
+    public void refresh() {\r
+               // empty default implementation\r
+       }\r
+\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public void setBackground(Color color) {\r
+               for(ICdmFormElement element : getElements()){\r
+                   element.setBackground(color);\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void setPersistentBackground(Color color) {\r
+               persistentBackgroundColor = color;\r
+               setBackground(color);\r
+       }\r
+\r
+       @Override\r
+       public Color getPersistentBackground() {\r
+               return persistentBackgroundColor;\r
+       }\r
+\r
+       public Color getColor(String colorId){\r
+               return AbstractUtility.getColor(colorId);\r
+       }\r
+}\r