ref #8990: add temporal data to editor - adapt date element
authorKatja Luther <k.luther@bgbm.org>
Fri, 12 Jun 2020 20:42:36 +0000 (22:42 +0200)
committerKatja Luther <k.luther@bgbm.org>
Fri, 12 Jun 2020 20:43:24 +0000 (22:43 +0200)
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateDescriptionElementOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/DescriptionHelper.java
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/element/ExtendedTimeDetailSection.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/ExtendedTimePeriodElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/PartialElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/detail/TemporalDataDetailElement.java

index b50a3fea440e8e975405c1a978e30c831c8f7de3..a31b27a828ca58348d831418131f64ddb14c8e7f 100644 (file)
@@ -24,6 +24,7 @@ import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
+import eu.etaxonomy.cdm.model.description.TemporalData;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
@@ -106,6 +107,9 @@ public class CreateDescriptionElementOperation extends AbstractPostTaxonOperatio
                        else if(feature.isSupportsQuantitativeData()){
                                element = QuantitativeData.NewInstance();
                        }
+                       else if(feature.isSupportsTemporalData()){
+                element = TemporalData.NewInstance(null);
+            }
                        else {
                                element = TextData.NewInstance();
                        }
index 3ccbf6c0eea5f9a1e0c20632e1ae779abe44e839..2768fdb7d5911e2a5fe4846769edba68ea72b40d 100644 (file)
@@ -50,6 +50,7 @@ import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
+import eu.etaxonomy.cdm.model.description.TemporalData;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.media.Media;
@@ -767,12 +768,24 @@ public class DescriptionHelper {
                else if (element instanceof TextData) {
                        return getElementText((TextData) element);
                }
+               else if (element instanceof TemporalData) {
+            return getTemporalDataText((TemporalData) element);
+        }
                else{
                        return element.toString();
                }
        }
 
-       private static boolean isNotBlank(String str){
+       /**
+     * @param element
+     * @return
+     */
+    private static String getTemporalDataText(TemporalData element) {
+
+        return element.getPeriod().toString();
+    }
+
+    private static boolean isNotBlank(String str){
                return StringUtils.isNotBlank(str);
        }
 
index e493dbb3de571bda42d47fb12d7eb7d9f7c2c51e..1b5e49a3cff4a1dede12d02415d519751cc6563f 100644 (file)
@@ -1499,6 +1499,14 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public PartialElement createPartialElement(ICdmFormElement parentElement, String labelString, Partial partial, boolean showYear,
+            int style) {
+        PartialElement element = new PartialElement(this, parentElement, labelString, style, showYear);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
     /**
      * <p>
      * addSelectionListener
index 86112254ced37b299fbfc0cf733daeffd533ebe3..bd41968f636ee20b51d8e5078f472719fe6cbbee 100755 (executable)
@@ -8,16 +8,23 @@
 */
 package eu.etaxonomy.taxeditor.ui.element;
 
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.joda.time.Partial;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
 
 /**
  * @author k.luther
  * @since Jun 12, 2020
  */
-public class ExtendedTimeDetailSection extends DateDetailSection<ExtendedTimePeriod> {
+public class ExtendedTimeDetailSection extends AbstractFormSection<ExtendedTimePeriod> {
 
     private PartialElement partialElement_extremeStart;
+    private PartialElement partialElement_start;
+    private PartialElement partialElement_end;
     private PartialElement partialElement_extremeEnd;
+//    private TextWithLabelElement text_freeText;
     /**
      * @param formFactory
      * @param parentElement
@@ -26,27 +33,25 @@ public class ExtendedTimeDetailSection extends DateDetailSection<ExtendedTimePer
      */
     protected ExtendedTimeDetailSection(CdmFormFactory formFactory, ICdmFormElement parentElement,
              int style) {
-        super(formFactory, parentElement, false, style);
+        super(formFactory, parentElement, style);
 
 //        this.includeVerbatim = includeVerbatim;
 
 
-        partialElement_extremeStart = formFactory.createPartialElement(this, "Extreme Start", null, style);
-        partialElement_start = formFactory.createPartialElement(this,
-                "Start ", null, style);
+        partialElement_extremeStart = formFactory.createPartialElement(this, "Extreme Start ", null, false, style);
+
+        partialElement_start = formFactory.createPartialElement(this, "Start ", null, false, style);
+
 
-        period_continue = formFactory.createCheckbox(this, "Continue", false, style);
-        period_continue.getMainControl().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(6,1));
-        partialElement_end = formFactory.createPartialElement(this, "End ",
-                null, style);
+        partialElement_end = formFactory.createPartialElement(this, "End ", null, false, style);
 
         partialElement_extremeEnd = formFactory.createPartialElement(this, "Extreme End ",
-                null, style);
+                null, false, style);
 
-        text_freeText = formFactory.createTextWithLabelElement(this,
-                "Freetext", null, style);
-        text_freeText.getMainControl().setLayoutData(
-                LayoutConstants.FILL_HORIZONTALLY(6, 1));
+//        text_freeText = formFactory.createTextWithLabelElement(this,
+//                "Freetext", null,  style);
+//        text_freeText.getMainControl().setLayoutData(
+//                LayoutConstants.FILL_HORIZONTALLY(5, 1));
 
 
         formFactory.addPropertyChangeListener(this);
@@ -54,10 +59,76 @@ public class ExtendedTimeDetailSection extends DateDetailSection<ExtendedTimePer
     }
 
     @Override
-    @SuppressWarnings("unchecked")
-    protected ExtendedTimePeriod newInstance(){
-        return ExtendedTimePeriod.NewExtendedInstance();
+    public void setEntity(ExtendedTimePeriod timePeriod) {
+        Partial extremeStart = timePeriod.getExtremeStart();
+        partialElement_extremeStart.setPartial(extremeStart);
+        Partial start = timePeriod.getStart();
+        partialElement_start.setPartial(start);
+        Partial end = timePeriod.getEnd();
+        partialElement_end.setPartial(end);
+
+        Partial extremeEnd = timePeriod.getExtremeEnd();
+        partialElement_extremeEnd.setPartial(extremeEnd);
+
+//        text_freeText.setText(timePeriod.getFreeText());
+
+        super.setEntity(timePeriod);
 
     }
 
+    @Override
+    public void propertyChange(PropertyChangeEvent event) {
+        if (event == null) {
+            return;
+        }
+        Object eventSource = event.getSource();
+
+        if (getElements().contains(eventSource)) {
+            if (event instanceof CdmPropertyChangeEvent) {
+                if (((CdmPropertyChangeEvent) event).hasException()) {
+                    handleException((CdmPropertyChangeEvent) event);
+                    return;
+                }
+            }
+            handleEvent(eventSource);
+        }
+    }
+
+    /**
+     * @param event
+     */
+    private void handleException(CdmPropertyChangeEvent event) {
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this,
+                event.getException()));
+    }
+
+    protected void handleEvent(Object eventSource) {
+        if (eventSource == partialElement_start) {
+            Partial start = partialElement_start.getPartial();
+            getEntity().setStart(start);
+        } else if (eventSource == partialElement_end) {
+            Partial end = partialElement_end.getPartial();
+            getEntity().setEnd(end);
+        } else if (eventSource == partialElement_extremeEnd) {
+            Partial extremeEnd = partialElement_extremeEnd.getPartial();
+            getEntity().setExtremeEnd(extremeEnd);
+        } else if (eventSource == partialElement_extremeStart) {
+            Partial extremeStart = partialElement_extremeStart.getPartial();
+            getEntity().setExtremeStart(extremeStart);
+//        } else if (eventSource == text_freeText) {
+//            getEntity().setFreeText(text_freeText.getText());
+        }
+//        updateTitle();
+
+
+        firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+    }
+
+    protected void updateTitle(){
+        String title = CdmUtils.Nz(getEntity().toString());
+        this.setText(title);
+        layout();
+    }
+
+
 }
index d12b2548fe6b3c6561db115156cf7acd21c71f04..6f36d4824eec191787ea0cdcb3c875962fb056fe 100755 (executable)
@@ -8,9 +8,9 @@
 */
 package eu.etaxonomy.taxeditor.ui.element;
 
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.forms.widgets.Section;
 
 import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
 
@@ -48,7 +48,7 @@ public class ExtendedTimePeriodElement extends AbstractCdmFormElement implements
 
     protected ExtendedTimeDetailSection createDateDetailSection() {
         return formFactory.createExtendedTimeDetailSection(this,
-                Section.TWISTIE);
+                SWT.NULL);
     }
 
     @Override
index bc1d89257f54fa7826b445abf141e31e381de07c..c9962acfe9a1bec8bb3c9018555f6d9d6fa12166 100644 (file)
@@ -14,6 +14,7 @@ import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.TableWrapData;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 import org.joda.time.IllegalFieldValueException;
 import org.joda.time.Partial;
@@ -33,9 +34,14 @@ public class PartialElement extends AbstractCdmFormElement implements ISelectabl
        private Label label;
        private FloatWithLabelElement number_day;
        private FloatWithLabelElement number_month;
-       private FloatWithLabelElement number_year;
+       private FloatWithLabelElement number_year = null;
        private Partial partial;
 
+       public PartialElement(CdmFormFactory formFactory,
+            ICdmFormElement formElement, String labelString, int style){
+           this(formFactory, formElement, labelString, style, true);
+       }
+
        /**
         * <p>Constructor for PartialElement.</p>
         *
@@ -45,17 +51,31 @@ public class PartialElement extends AbstractCdmFormElement implements ISelectabl
         * @param style a int.
         */
        public PartialElement(CdmFormFactory formFactory,
-                       ICdmFormElement formElement, String labelString, int style) {
+                       ICdmFormElement formElement, String labelString, int style, boolean showYear) {
                super(formFactory, formElement);
 
-               TableWrapLayout layout = LayoutConstants.LAYOUT(7, false);
+               int rows = 5;
+               if (showYear){
+                   rows = 7;
+               }
+               TableWrapLayout layout = LayoutConstants.LAYOUT(rows, false);
+//             layout.verticalSpacing = 7;
+               layout.horizontalSpacing = 7;
+
                formElement.getLayoutComposite().setLayout(layout);
 
+               TableWrapData layoutLable = new TableWrapData();
+               layoutLable.valign = TableWrapData.MIDDLE;
+
                label = formFactory.createLabel(getLayoutComposite(), labelString);
+               label.setLayoutData(layoutLable);
                addControl(label);
 
-               number_year = formFactory.createFloatTextWithLabelElement(this, "Year", null, style);
-               number_year.setLimits(4, 0, 9999);
+               if (showYear){
+                   number_year = formFactory.createFloatTextWithLabelElement(this, "Year", null, style);
+                   number_year.setLimits(4, 0, 9999);
+               }
+
 
                number_month = formFactory.createFloatTextWithLabelElement(this, "Month", null, style);
                number_month.setLimits(2, 1, 12);
@@ -78,12 +98,16 @@ public class PartialElement extends AbstractCdmFormElement implements ISelectabl
                if(partial != null){
                        number_day.setNumber(TimePeriod.getPartialValue(partial, TimePeriod.DAY_TYPE));
                        number_month.setNumber(TimePeriod.getPartialValue(partial, TimePeriod.MONTH_TYPE));
-                       number_year.setNumber(TimePeriod.getPartialValue(partial, TimePeriod.YEAR_TYPE));
+                       if (number_year != null) {
+                number_year.setNumber(TimePeriod.getPartialValue(partial, TimePeriod.YEAR_TYPE));
+            }
                }
                else{
                    number_day.setNumber(null);
                    number_month.setNumber(null);
-                   number_year.setNumber(null);
+                   if (number_year != null) {
+                       number_year.setNumber(null);
+                   }
                }
        }
 
@@ -154,13 +178,19 @@ public class PartialElement extends AbstractCdmFormElement implements ISelectabl
        public void setEnabled(boolean enabled){
            this.number_day.setEnabled(enabled);
            this.number_month.setEnabled(enabled);
-           this.number_year.setEnabled(enabled);
+           if (number_year != null){
+               this.number_year.setEnabled(enabled);
+           }
            if (!enabled){
-               this.number_year.getMainControl().setBackground(AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
+               if (number_year != null){
+                   this.number_year.getMainControl().setBackground(AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
+               }
                this.number_month.getMainControl().setBackground(AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
                this.number_day.getMainControl().setBackground(AbstractUtility.getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
            }else{
-               this.number_year.getMainControl().setBackground(getPersistentBackground());
+               if (number_year != null){
+                   this.number_year.getMainControl().setBackground(getPersistentBackground());
+               }
             this.number_month.getMainControl().setBackground(getPersistentBackground());
             this.number_day.getMainControl().setBackground(getPersistentBackground());
            }
@@ -172,7 +202,9 @@ public class PartialElement extends AbstractCdmFormElement implements ISelectabl
     public void setAllNull() {
         this.number_day.setNumber(null);
         this.number_month.setNumber(null);
-        this.number_year.setNumber(null);
+        if (number_year != null){
+            this.number_year.setNumber(null);
+        }
 
     }
 }
index 140def9f5611dcf91e552c8e3a586a3d822febbc..dbd538565f1b64d1b6a95b2347ec70e0bfa2f740 100755 (executable)
@@ -8,6 +8,7 @@
 */
 package eu.etaxonomy.taxeditor.ui.section.description.detail;
 
+import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
 import eu.etaxonomy.cdm.model.description.TemporalData;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.ExtendedTimePeriodElement;
@@ -35,7 +36,12 @@ public class TemporalDataDetailElement extends AbstractDetailedDescriptionDetail
 
     @Override
     protected void createControls(ICdmFormElement formElement, TemporalData entity, int style) {
-        timePeriod = formFactory.createExtendedTimePeriodElement(formElement, "Flowering Season", entity.getPeriod(), style);
+        ExtendedTimePeriod period = entity.getPeriod();
+        if (period == null){
+            period = ExtendedTimePeriod.NewExtendedInstance();
+            entity.setPeriod(period);
+        }
+        timePeriod = formFactory.createExtendedTimePeriodElement(formElement, "", entity.getPeriod(), style);
 
 
     }