- added interfaces and classes for MVC pattern
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 15 Apr 2014 08:14:22 +0000 (08:14 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 15 Apr 2014 08:14:22 +0000 (08:14 +0000)
 - implemented/adapted MVC pattern for TextWithLabelElement and EnumTermCombo element

.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/AbstractCdmComposite.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/DerivedUnitGeneralDetailElementMVC.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/GeographicPointElement.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/combo/EnumTermCombo.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/combo/EnumTermComboController.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElement.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElementController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/CdmCompositeController.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/ICdmComposite.java [new file with mode: 0644]

index 5fa1f3c688f67d26669003cc23534cb432796aef..d462c41b949d7f54d772d772a93865a4da1c94bf 100644 (file)
@@ -1386,8 +1386,15 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grant
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityCompositeViewer.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityRow.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/group/grantedauthority/CdmAuthorityTableHeader.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/AbstractCdmComposite.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/DerivedUnitGeneralDetailElementMVC.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/GeographicPointElement.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/combo/EnumTermCombo.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/combo/EnumTermComboController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElement.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElementController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/CdmCompositeController.java -text
+eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/ICdmComposite.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/IOpenUrlEnabled.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlContentProvider.java -text
 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/openurl/OpenUrlLabelProvider.java -text
index 03ce4050ef1b3ed853daf8a006ff0a9dd1124594..a2c1d0718db2933f0e65c39806578e3495ef50c4 100644 (file)
@@ -454,7 +454,7 @@ public class CdmFormFactory extends FormToolkit {
      *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement}
      *            object.
      */
-    public void adapt(AbstractCdmFormElement formElement) {
+    public void adapt(ICdmFormElement formElement) {
         formElement.setPropertyChangeListeners(propertyChangeListeners);
     }
 
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/AbstractCdmComposite.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/AbstractCdmComposite.java
new file mode 100644 (file)
index 0000000..c2767ae
--- /dev/null
@@ -0,0 +1,70 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.mvc.interfaces.ICdmComposite;
+import eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmCompositeController;
+
+/**
+ * @author pplitzner
+ * @date 11.02.2014
+ *
+ */
+public abstract class AbstractCdmComposite extends Composite implements ICdmComposite {
+
+    protected CdmCompositeController controller;
+
+    /**
+     * @param parent
+     * @param style
+     */
+    public AbstractCdmComposite(Composite parent, int style) {
+        super(parent, style);
+    }
+
+    protected void initChildController(CdmFormFactory formFactory, ICdmFormElement parentElement){
+        Control[] children = this.getChildren();
+        for (int i = 0; i < children.length; i++) {
+            if(children[i] instanceof ICdmComposite){
+                ICdmComposite cdmComposite = (ICdmComposite)children[i];
+                cdmComposite.initController(formFactory, parentElement);
+                formFactory.adapt(cdmComposite.getController());
+                parentElement.addElement(cdmComposite.getController());
+            }
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmComposite#initController(eu.etaxonomy.taxeditor.ui.element.CdmFormFactory, eu.etaxonomy.taxeditor.ui.element.ICdmFormElement)
+     */
+    @Override
+    public void initController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
+        initInternalController(formFactory, parentElement);
+        initChildController(formFactory, parentElement);
+    }
+
+    /**
+     * @param formFactory
+     * @param parentElement
+     * @return
+     */
+    protected abstract void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement);
+
+    @Override
+    public CdmCompositeController getController(){
+        return controller;
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/DerivedUnitGeneralDetailElementMVC.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/DerivedUnitGeneralDetailElementMVC.java
new file mode 100644 (file)
index 0000000..c383f1b
--- /dev/null
@@ -0,0 +1,132 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermCombo;
+import eu.etaxonomy.taxeditor.ui.mvc.element.TextWithLabelElement;
+
+/**
+ * @author pplitzner
+ * @date 14.04.2014
+ *
+ */
+public class DerivedUnitGeneralDetailElementMVC extends AbstractCdmComposite {
+
+    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
+    private final TextWithLabelElement textWithLabelElement;
+    private final EnumTermCombo enumTermCombo;
+
+    /**
+     * Create the composite.
+     * @param parent
+     * @param style
+     */
+    public DerivedUnitGeneralDetailElementMVC(Composite parent, int style) {
+        super(parent, style);
+        addDisposeListener(new DisposeListener() {
+            @Override
+            public void widgetDisposed(DisposeEvent e) {
+                toolkit.dispose();
+            }
+        });
+        toolkit.adapt(this);
+        toolkit.paintBordersFor(this);
+        {
+            TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.numColumns = 2;
+            setLayout(tableWrapLayout);
+        }
+
+                Label lblTitleCache = toolkit.createLabel(this, "Title Cache", SWT.NONE);
+                new Label(this, SWT.NONE);
+
+                Label lblSpecorobstype = toolkit.createLabel(this, "Spec./Obs. Type", SWT.NONE);
+
+                enumTermCombo = new EnumTermCombo(this, SWT.NONE, SpecimenOrObservationType.class);
+                TableWrapData twd_enumTermCombo = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1);
+                twd_enumTermCombo.grabHorizontal = true;
+                enumTermCombo.setLayoutData(twd_enumTermCombo);
+                toolkit.adapt(enumTermCombo);
+                toolkit.paintBordersFor(enumTermCombo);
+
+        Label lblCountry = toolkit.createLabel(this, "Country", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblLocality = toolkit.createLabel(this, "Locality", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        GeographicPointElement geographicPointElement = new GeographicPointElement(this, SWT.NONE);
+        geographicPointElement.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 2));
+        toolkit.adapt(geographicPointElement);
+        toolkit.paintBordersFor(geographicPointElement);
+
+        Label lblElevation = toolkit.createLabel(this, "Elevation", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblDate = toolkit.createLabel(this, "Date", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblCollector = toolkit.createLabel(this, "Collector", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblCollectingNumber = toolkit.createLabel(this, "Collecting Number", SWT.NONE);
+
+        TextWithLabelElement textWithLabelElement_1 = new TextWithLabelElement(this, (String) null, (Integer) null, 0);
+        toolkit.adapt(textWithLabelElement_1);
+        toolkit.paintBordersFor(textWithLabelElement_1);
+
+        Label lblCollection = toolkit.createLabel(this, "Collection", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblAccessionNumber = toolkit.createLabel(this, "Accession Number", SWT.NONE);
+
+        textWithLabelElement = new TextWithLabelElement(this, (String) null, (Integer) null, 0);
+        TableWrapLayout tableWrapLayout = (TableWrapLayout) textWithLabelElement.getLayout();
+        tableWrapLayout.verticalSpacing = 0;
+        tableWrapLayout.topMargin = 0;
+        tableWrapLayout.horizontalSpacing = 0;
+        tableWrapLayout.bottomMargin = 0;
+        TableWrapData twd_textWithLabelElement = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1);
+        twd_textWithLabelElement.align = TableWrapData.FILL;
+        twd_textWithLabelElement.grabHorizontal = true;
+        textWithLabelElement.setLayoutData(twd_textWithLabelElement);
+        toolkit.adapt(textWithLabelElement);
+        toolkit.paintBordersFor(textWithLabelElement);
+
+    }
+
+    public TextWithLabelElement getTextWithLabelElement() {
+        return textWithLabelElement;
+    }
+    public EnumTermCombo getEnumTermCombo() {
+        return enumTermCombo;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmComposite#initController(java.lang.Object, eu.etaxonomy.taxeditor.ui.element.CdmFormFactory, eu.etaxonomy.taxeditor.ui.element.ICdmFormElement)
+     */
+    @Override
+    public void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
+        // empty on purpose
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/GeographicPointElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/GeographicPointElement.java
new file mode 100644 (file)
index 0000000..0f73958
--- /dev/null
@@ -0,0 +1,89 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.mvc.element.TextWithLabelElement;
+
+/**
+ * @author pplitzner
+ * @date 15.04.2014
+ *
+ */
+public class GeographicPointElement extends AbstractCdmComposite {
+
+    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
+
+    /**
+     * Create the composite.
+     * @param parent
+     * @param style
+     */
+    public GeographicPointElement(Composite parent, int style) {
+        super(parent, style);
+        addDisposeListener(new DisposeListener() {
+            @Override
+            public void widgetDisposed(DisposeEvent e) {
+                toolkit.dispose();
+            }
+        });
+        toolkit.adapt(this);
+        toolkit.paintBordersFor(this);
+        {
+            TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.rightMargin = 0;
+            tableWrapLayout.leftMargin = 0;
+            tableWrapLayout.bottomMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.numColumns = 2;
+            setLayout(tableWrapLayout);
+        }
+
+        Label lblLatitude = toolkit.createLabel(this, "Latitude", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblLongitude = toolkit.createLabel(this, "Longitude", SWT.NONE);
+        new Label(this, SWT.NONE);
+
+        Label lblErrorRadius = toolkit.createLabel(this, "Error Radius", SWT.NONE);
+
+        TextWithLabelElement textWithLabelElement = new TextWithLabelElement(this, (String) null, (Integer) null, 0);
+        TableWrapData twd_textWithLabelElement = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1);
+        twd_textWithLabelElement.grabHorizontal = true;
+        textWithLabelElement.setLayoutData(twd_textWithLabelElement);
+        toolkit.adapt(textWithLabelElement);
+        toolkit.paintBordersFor(textWithLabelElement);
+
+        Label lblReferenceSystem = toolkit.createLabel(this, "Reference System", SWT.NONE);
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite#initInternalController(eu.etaxonomy.taxeditor.ui.element.CdmFormFactory, eu.etaxonomy.taxeditor.ui.element.ICdmFormElement)
+     */
+    @Override
+    protected void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
+
+    }
+
+}
index ffc9d82bc32f0082645d6a2d820d53cd19a22e5d..aba7b4bd6018451ee34fe49414fa3582c42ddd73 100644 (file)
@@ -22,25 +22,28 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout;
 import eu.etaxonomy.cdm.model.common.IEnumTerm;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite;
 
 /**
  * @author pplitzner
  * @date 29.01.2014
  *
  */
-public class EnumTermCombo extends Combo{
+public class EnumTermCombo extends AbstractCdmComposite {
 
     private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
     private final Combo combo;
-//    private final Label label;
+
+    private final Class<? extends IEnumTerm<?>> enumType;
 
     /**
      * Create the composite.
      * @param parent
      * @param style
      */
-    public EnumTermCombo(Composite parent, int style) {
+    public EnumTermCombo(Composite parent, int style, Class<? extends IEnumTerm<?>> enumType) {
         super(parent, style);
+        this.enumType = enumType;
         addDisposeListener(new DisposeListener() {
             @Override
             public void widgetDisposed(DisposeEvent e) {
@@ -51,17 +54,15 @@ public class EnumTermCombo extends Combo{
         toolkit.paintBordersFor(this);
         {
             TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.bottomMargin = 0;
             tableWrapLayout.rightMargin = 0;
             tableWrapLayout.leftMargin = 0;
-            tableWrapLayout.numColumns = 2;
             setLayout(tableWrapLayout);
         }
 
-//        label = toolkit.createLabel(this, "New Label", SWT.NONE);
-//        TableWrapData twd_label = new TableWrapData(TableWrapData.RIGHT, TableWrapData.TOP, 1, 1);
-//        twd_label.align = TableWrapData.LEFT;
-//        label.setLayoutData(twd_label);
-
         combo = new Combo(this, SWT.READ_ONLY);
         combo.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
         toolkit.adapt(combo);
@@ -71,19 +72,12 @@ public class EnumTermCombo extends Combo{
     public Combo getCombo() {
         return combo;
     }
-//    public Label getLabel() {
-//        return label;
-//    }
-
-    public <T extends IEnumTerm<T>> EnumTermComboController<T> initController(Class<T> enumType, CdmFormFactory formFactory, ICdmFormElement parentElement){
-        return new EnumTermComboController<T>(this, formFactory, parentElement, enumType, 0);
-//        CdmCompositeControllerFactory.createController(this, entity, formFactory, parentElement);
-//        Control[] children = this.getChildren();
-//        for (int i = 0; i < children.length; i++) {
-//            if(children[i] instanceof CdmComposite){
-//                return ((CdmComposite)children[i]).initController(entity, formFactory, parentElement);
-//            }
-//        }
-//        return null;
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmComposite#initController(java.lang.Object, eu.etaxonomy.taxeditor.ui.element.CdmFormFactory, eu.etaxonomy.taxeditor.ui.element.ICdmFormElement)
+     */
+    @Override
+    protected void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
+        controller = new EnumTermComboController(combo, formFactory, parentElement, enumType, SWT.NONE);
     }
+
 }
index 83fe3ab009618d28118118222496897a0d013474..df13e25d1a8359f5506e172dbeb8110621a5016d 100644 (file)
@@ -35,6 +35,7 @@ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
 import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
 import eu.etaxonomy.taxeditor.ui.element.ISelectable;
+import eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmCompositeController;
 
 /**
  * @author pplitzner
@@ -42,7 +43,7 @@ import eu.etaxonomy.taxeditor.ui.element.ISelectable;
  *
  */
 public class EnumTermComboController<T extends IEnumTerm<T>> extends AbstractCdmFormElement implements SelectionListener,
-IEnableableFormElement, ISelectable {
+IEnableableFormElement, ISelectable, CdmCompositeController {
 
     private static CdmEnumDataHolder[] cdmEnumDataHolders = {
         new CdmEnumDataHolder<NomenclaturalCode>(){
@@ -152,18 +153,13 @@ IEnableableFormElement, ISelectable {
         this.enumType = enumType;
         // create combo
         this.combo = combo;
-//        combo.setParent(getLayoutComposite());
-//        combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
         addControl(combo);
-//        combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
         setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
 
         populateTypes();
 
         combo.addSelectionListener(this);
 
-//        formFactory.adapt(this);
-//        parentElement.addElement(this);
     }
 
     private String getDefaultLabelString() {
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElement.java
new file mode 100644 (file)
index 0000000..36530ca
--- /dev/null
@@ -0,0 +1,80 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc.element;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite;
+
+/**
+ * @author pplitzner
+ * @date 11.02.2014
+ *
+ */
+public class TextWithLabelElement extends AbstractCdmComposite {
+
+    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
+    private final Text text;
+    private final String initialText;
+    private final Integer textHeight;
+
+    /**
+     * Create the composite.
+     * @param parent
+     * @param style
+     */
+    public TextWithLabelElement(Composite parent, String initialText, Integer textHeight, int style) {
+        super(parent, SWT.BORDER);
+        this.initialText = initialText;
+        this.textHeight = textHeight;
+        addDisposeListener(new DisposeListener() {
+            @Override
+            public void widgetDisposed(DisposeEvent e) {
+                toolkit.dispose();
+            }
+        });
+        toolkit.adapt(this);
+        toolkit.paintBordersFor(this);
+        {
+            TableWrapLayout tableWrapLayout = new TableWrapLayout();
+            tableWrapLayout.verticalSpacing = 0;
+            tableWrapLayout.topMargin = 0;
+            tableWrapLayout.horizontalSpacing = 0;
+            tableWrapLayout.bottomMargin = 0;
+            tableWrapLayout.rightMargin = 0;
+            tableWrapLayout.leftMargin = 0;
+            setLayout(tableWrapLayout);
+        }
+
+        text = new Text(this, SWT.WRAP);
+        text.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.TOP, 1, 1));
+        toolkit.adapt(text, true, true);
+
+    }
+
+    public Text getText() {
+        return text;
+    }
+
+    @Override
+    protected void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement){
+        controller = new TextWithLabelElementController(this, formFactory, parentElement, this.initialText, this.textHeight, SWT.NONE);
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElementController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/element/TextWithLabelElementController.java
new file mode 100644 (file)
index 0000000..6f8fba8
--- /dev/null
@@ -0,0 +1,217 @@
+/**
+ *
+ */
+package eu.etaxonomy.taxeditor.ui.mvc.element;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.taxeditor.preference.Resources;
+import eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
+import eu.etaxonomy.taxeditor.ui.element.ISelectable;
+import eu.etaxonomy.taxeditor.ui.mvc.interfaces.CdmCompositeController;
+
+/**
+ * <p>
+ * TextWithLabelElement class.
+ * </p>
+ *
+ * @author n.hoffmann
+ * @version $Id: $
+ */
+public class TextWithLabelElementController extends AbstractCdmFormElement implements ModifyListener, IEnableableFormElement,
+        ISelectable, CdmCompositeController {
+
+    protected Text text;
+//    private Label label;
+
+    /** Constant <code>MAX_HEIGHT=0</code> */
+    public static final int MAX_HEIGHT = 0;
+    /** Constant <code>SINGLE=-1</code> */
+    public static final int SINGLE = -1;
+
+    /**
+     * <p>
+     * Constructor for TextWithLabelElement.
+     * </p>
+     *
+     * @param formFactory
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
+     *            object.
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     * @param labelString
+     *            a {@link java.lang.String} object.
+     * @param initialText
+     *            a {@link java.lang.String} object.
+     * @param textHeight
+     *            a {@link java.lang.Integer} object.
+     * @param style
+     *            a int.
+     * @wbp.parser.entryPoint
+     */
+    public TextWithLabelElementController(TextWithLabelElement textWithLabelElement, CdmFormFactory formFactory, ICdmFormElement parentElement,
+            String initialText, Integer textHeight, int style) {
+        super(formFactory, parentElement);
+
+        int scrollStyle = textHeight == null ? SWT.NULL : (SWT.V_SCROLL | SWT.MULTI);
+
+        int combinedStyle = style | SWT.BORDER | scrollStyle;
+
+        // SWT.PASSWORD does not work when SWT.WRAP is set.
+        if (style != SWT.PASSWORD) {
+            combinedStyle = combinedStyle | SWT.WRAP;
+        }
+
+        text = textWithLabelElement.getText();
+
+        addControl(text);
+
+        if (textHeight == null) {
+            text.addKeyListener(new KeyAdapter() {
+                @Override
+                public void keyPressed(KeyEvent e) {
+                    if (e.character == SWT.CR) {
+                        // Don't accept carriage returns as input when in single
+                        // line mode
+                        e.doit = false;
+                    } else if (e.character == SWT.TAB) {
+                        // traverse is not working for wrapped text widgets so
+                        // we reintroduce it here
+                        e.doit = false;
+                        TextWithLabelElementController.this.text.traverse(SWT.TRAVERSE_TAB_NEXT);
+                    }
+                }
+            });
+        }
+
+        text.addModifyListener(this);
+    }
+
+    /**
+     * Get the text of this composites text composite
+     *
+     * @return a {@link java.lang.String} object.
+     */
+    public String getText() {
+        return text.getText();
+    }
+
+    /**
+     * Set the text of this composites text composite
+     *
+     * @param string
+     *            a {@link java.lang.String} object.
+     */
+    public void setText(String string) {
+        Listener[] listeners = text.getListeners(SWT.Modify);
+
+        for (Listener listener : listeners) {
+            text.removeListener(SWT.Modify, listener);
+        }
+
+        text.setText(CdmUtils.Nz(string));
+
+        for (Listener listener : listeners) {
+            text.addListener(SWT.Modify, listener);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events
+     * .ModifyEvent)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void modifyText(ModifyEvent e) {
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setEnabled(boolean enabled) {
+        text.setEnabled(enabled);
+        String symbolicName = enabled ? Resources.COLOR_FONT_DEFAULT : Resources.COLOR_TEXT_DISABLED;
+        text.setForeground(getColor(symbolicName));
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement#isEnabled()
+     */
+    @Override
+    public boolean isEnabled() {
+        return text.isEnabled();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setIrrelevant(boolean irrelevant) {
+        String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
+
+        Color color = getColor(colorId);
+        text.setBackground(color);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setBackground(Color color) {
+//        if (label != null) {
+//            label.setBackground(color);
+//        }
+    }
+
+    @Override
+    public void setSelected(boolean selected) {
+        setBackground(selected ? SELECTED : getPersistentBackground());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#setFocus()
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void setFocus() {
+        text.setFocus();
+    }
+
+    /**
+     * <p>
+     * getMainControl
+     * </p>
+     *
+     * @return a {@link org.eclipse.swt.widgets.Control} object.
+     */
+    public Control getMainControl() {
+        return text;
+    }
+
+    /**
+     * <p>
+     * setTextLimit
+     * </p>
+     *
+     * @param limit
+     *            a int.
+     */
+    public void setTextLimit(int limit) {
+        text.setTextLimit(limit);
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/CdmCompositeController.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/CdmCompositeController.java
new file mode 100644 (file)
index 0000000..6480429
--- /dev/null
@@ -0,0 +1,24 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc.interfaces;
+
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+
+/**
+ * CdmCompositeController implement the interaction logic for CdmComposites.
+ * They also serve as a compatibility bridge between the current GUI structure
+ * based on {@link ICdmFormElement} and a refactored structure using the MVC pattern.
+ * @author pplitzner
+ * @date 11.02.2014
+ *
+ */
+public interface CdmCompositeController extends ICdmFormElement{
+
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/ICdmComposite.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/mvc/interfaces/ICdmComposite.java
new file mode 100644 (file)
index 0000000..68aeacd
--- /dev/null
@@ -0,0 +1,37 @@
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.ui.mvc.interfaces;
+
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+
+/**
+ * A composite for visualizing CDM objects. ICdmComposites are mere GUI composites but
+ * they initialize a controller which contains the interaction logic.
+ * @author pplitzner
+ * @date 11.02.2014
+ *
+ */
+public interface ICdmComposite {
+
+    /**
+     * Initializes the {@link CdmCompositeController} of this composite.
+     * @param formFactory the factory used for the GUI element
+     * @param parentElement the parent {@link ICdmFormElement}
+     */
+    public void initController(CdmFormFactory formFactory, ICdmFormElement parentElement);
+
+    /**
+     * Returns the {@link CdmCompositeController} of this composite.
+     * @return
+     */
+    public CdmCompositeController getController();
+
+}