extract string constant
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / DateDetailSection.java
index 2b897c936253c2f17adc48b97a13a674e94bb0e8..7e7a74367d8e286d3ff9468b84c77c13a89bd292 100644 (file)
-/**
- * Copyright (C) 2007 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.element;
-
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.widgets.Text;
-import org.joda.time.Partial;
-
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.model.common.TimePeriod;
-import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
-
-/**
- * <p>
- * DateDetailSection class.
- * </p>
- *
- * @author n.hoffmann
- * @created Mar 31, 2010
- * @version 1.0
- */
-public class DateDetailSection extends AbstractFormSection<TimePeriod> {
-
-       protected TextWithLabelElement text_freeText;
-       private PartialElement partialElement_start;
-       private PartialElement partialElement_end;
-       private TextWithLabelElement text_parseText;
-       private int cursorPosition;
-
-       public int getCursorPosition() {
-        return cursorPosition;
-    }
-
-    public void setCursorPosition(int cursorPosition) {
-        this.cursorPosition = cursorPosition;
-    }
-
-    /**
-        * <p>
-        * Constructor for DateDetailSection.
-        * </p>
-        *
-        * @param formFactory
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
-        *            object.
-        * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
-        * @param style
-        *            a int.
-        */
-       protected DateDetailSection(CdmFormFactory formFactory,
-                       ICdmFormElement parentElement, int style) {
-               super(formFactory, parentElement, style);
-
-               partialElement_start = formFactory.createPartialElement(this,
-                               "Start ", null, style);
-               partialElement_end = formFactory.createPartialElement(this, "End ",
-                               null, style);
-
-               setText_parseText(formFactory.createTextWithLabelElement(this, "Parse",
-                               null, style));
-               getText_parseText().getMainControl().setLayoutData(
-                               LayoutConstants.FILL_HORIZONTALLY(6, 1));
-
-               text_freeText = formFactory.createTextWithLabelElement(this,
-                               "Freetext", null, style);
-               text_freeText.getMainControl().setLayoutData(
-                               LayoutConstants.FILL_HORIZONTALLY(6, 1));
-
-
-               formFactory.addPropertyChangeListener(this);
-       }
-
-       @Override
-       public TimePeriod getEntity() {
-               if(super.getEntity() == null){
-                       setEntity(TimePeriod.NewInstance());
-               }
-               return super.getEntity();
-       }
-
-       /**
-        * <p>
-        * Setter for the field <code>timePeriod</code>.
-        * </p>
-        *
-        * @param timePeriod
-        *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
-        */
-       @Override
-       public void setEntity(TimePeriod timePeriod) {
-               setEntityInternally(timePeriod);
-               updateTitle();
-               getText_parseText().setText(timePeriod.toString());
-       }
-
-       /**
-        * When setting the entity through parsing we do not want to alter the parse field
-        * @param timePeriod
-        */
-       protected void setEntityInternally(TimePeriod timePeriod){
-               Partial start = timePeriod.getStart();
-               partialElement_start.setPartial(start);
-               Partial end = timePeriod.getEnd();
-               partialElement_end.setPartial(end);
-
-               ((Text) getText_parseText().getMainControl()).setSelection(cursorPosition);
-               text_freeText.setText(timePeriod.getFreeText());
-
-               super.setEntity(timePeriod);
-       }
-
-       /** {@inheritDoc} */
-       @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 == getText_parseText()) {
-                       cursorPosition = ((Text) getText_parseText().getMainControl())
-                                       .getCaretPosition();
-                       setEntityInternally(TimePeriodParser.parseString(getText_parseText().getText()));
-               } 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();
-       }
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see eu.etaxonomy.taxeditor.forms.AbstractFormSection#dispose()
-        */
-       /** {@inheritDoc} */
-       @Override
-       public void dispose() {
-               formFactory.removePropertyChangeListener(this);
-               super.dispose();
-       }
-
-    public TextWithLabelElement getText_parseText() {
-        return text_parseText;
-    }
-
-    public void setText_parseText(TextWithLabelElement text_parseText) {
-        this.text_parseText = text_parseText;
-    }
-
-}
+package eu.etaxonomy.taxeditor.ui.element;\r
+\r
+import org.eclipse.jface.util.PropertyChangeEvent;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.joda.time.Partial;\r
+\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.model.common.TimePeriod;\r
+import eu.etaxonomy.cdm.model.common.VerbatimTimePeriod;\r
+import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;\r
+import eu.etaxonomy.taxeditor.l10n.Messages;\r
+\r
+public class DateDetailSection<T extends TimePeriod>\r
+               extends AbstractFormSection<T> {\r
+       protected TextWithLabelElement text_freeText;\r
+       private PartialElement partialElement_start;\r
+       private PartialElement partialElement_end;\r
+       private CheckboxElement period_continue;\r
+       private TextWithLabelElement text_parseText;\r
+    private TextWithLabelElement text_VerbatimDate = null;\r
+       private int cursorPosition;\r
+       private boolean includeVerbatim;\r
+\r
+       public int getCursorPosition() {\r
+        return cursorPosition;\r
+    }\r
+\r
+    public void setCursorPosition(int cursorPosition) {\r
+        this.cursorPosition = cursorPosition;\r
+    }\r
+\r
+    /**\r
+        * <p>\r
+        * Constructor for DateDetailSection.\r
+        * </p>\r
+        *\r
+        * @param formFactory\r
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}\r
+        *            object.\r
+        * @param parentElement\r
+        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}\r
+        *            object.\r
+        * @param style\r
+        *            a int.\r
+        */\r
+       protected DateDetailSection(CdmFormFactory formFactory,\r
+                       ICdmFormElement parentElement, boolean includeVerbatim, int style) {\r
+               super(formFactory, parentElement, style);\r
+\r
+               this.includeVerbatim = includeVerbatim;\r
+               text_parseText = formFactory.createTextWithLabelElement(this, "Parse",\r
+                null, style);\r
+               text_parseText.getMainControl().setLayoutData(\r
+                LayoutConstants.FILL_HORIZONTALLY(6, 1));\r
+               text_parseText.getMainControl().setToolTipText(Messages.DateDetail_parseText_tooltip);\r
+               partialElement_start = formFactory.createPartialElement(this,\r
+                               "Start ", null, style);\r
+\r
+               period_continue = formFactory.createCheckbox(this, "Continue", false, style);\r
+        period_continue.getMainControl().setLayoutData(LayoutConstants.FILL_HORIZONTALLY(6,1));\r
+               partialElement_end = formFactory.createPartialElement(this, "End ",\r
+                               null, style);\r
+\r
+               if (includeVerbatim){\r
+               text_VerbatimDate = formFactory.createTextWithLabelElement(this,\r
+                       "Verbatim Date", null, style);\r
+\r
+               text_VerbatimDate.getMainControl().setLayoutData(\r
+                       LayoutConstants.FILL_HORIZONTALLY(6, 1));\r
+               }\r
+\r
+\r
+\r
+               text_freeText = formFactory.createTextWithLabelElement(this,\r
+                               "Freetext", null, style);\r
+               text_freeText.getMainControl().setLayoutData(\r
+                               LayoutConstants.FILL_HORIZONTALLY(6, 1));\r
+\r
+\r
+               formFactory.addPropertyChangeListener(this);\r
+       }\r
+\r
+       @Override\r
+       public final T getEntity() {\r
+               if(super.getEntity() == null){\r
+                       T newInstance = newInstance();\r
+                       this.setEntity(newInstance);\r
+               }\r
+               return super.getEntity();\r
+       }\r
+\r
+       @SuppressWarnings("unchecked")\r
+       protected T newInstance(){\r
+               if (includeVerbatim){\r
+                       return (T)VerbatimTimePeriod.NewVerbatimInstance();\r
+               }else{\r
+                       return (T)TimePeriod.NewInstance();\r
+               }\r
+       }\r
+\r
+       @SuppressWarnings("unchecked")\r
+       protected T parseNewInstance() {\r
+               if (includeVerbatim){\r
+                       T result = (T)TimePeriodParser.parseStringVerbatim(getText_parseText().getText());\r
+                       return result;\r
+               }else{\r
+                       T result = (T)TimePeriodParser.parseString(getText_parseText().getText());\r
+                       return result;\r
+               }\r
+       }\r
+\r
+\r
+       /**\r
+        * <p>\r
+        * Setter for the field <code>timePeriod</code>.\r
+        * </p>\r
+        *\r
+        * @param timePeriod\r
+        *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.\r
+        */\r
+       @Override\r
+       public void setEntity(T timePeriod) {\r
+               setEntityInternally(timePeriod);\r
+               updateTitle();\r
+               getText_parseText().setText(timePeriod.toString());\r
+       }\r
+\r
+       /**\r
+        * When setting the entity through parsing we do not want to alter the parse field\r
+        * @param timePeriod\r
+        */\r
+       protected void setEntityInternally(T timePeriod){\r
+               Partial start = timePeriod.getStart();\r
+               partialElement_start.setPartial(start);\r
+               Partial end = timePeriod.getEnd();\r
+               partialElement_end.setPartial(end);\r
+               period_continue.setSelection(timePeriod.isContinued());\r
+               if (timePeriod.isContinued()){\r
+                   partialElement_end.setEnabled(false);\r
+\r
+               }\r
+               ((Text) getText_parseText().getMainControl()).setSelection(cursorPosition);\r
+               text_freeText.setText(timePeriod.getFreeText());\r
+               if (includeVerbatim){\r
+               ((Text) text_VerbatimDate.getMainControl()).setSelection(cursorPosition);\r
+               text_VerbatimDate.setText(((VerbatimTimePeriod)timePeriod).getVerbatimDate());\r
+               }\r
+\r
+               super.setEntity(timePeriod);\r
+       }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public void propertyChange(PropertyChangeEvent event) {\r
+               if (event == null) {\r
+                       return;\r
+               }\r
+               Object eventSource = event.getSource();\r
+\r
+               if (getElements().contains(eventSource)) {\r
+                       if (event instanceof CdmPropertyChangeEvent) {\r
+                               if (((CdmPropertyChangeEvent) event).hasException()) {\r
+                                       handleException((CdmPropertyChangeEvent) event);\r
+                                       return;\r
+                               }\r
+                       }\r
+                       handleEvent(eventSource);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @param event\r
+        */\r
+       private void handleException(CdmPropertyChangeEvent event) {\r
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this,\r
+                               event.getException()));\r
+       }\r
+\r
+       protected void handleEvent(Object eventSource) {\r
+               if (eventSource == partialElement_start) {\r
+                       Partial start = partialElement_start.getPartial();\r
+                       getEntity().setStart(start);\r
+               } else if (eventSource == partialElement_end) {\r
+                       Partial end = partialElement_end.getPartial();\r
+                       getEntity().setEnd(end);\r
+\r
+               } else if (eventSource == getText_parseText()) {\r
+                       cursorPosition = ((Text) getText_parseText().getMainControl())\r
+                                       .getCaretPosition();\r
+                       T newInstance = parseNewInstance();\r
+                       setEntityInternally(newInstance);\r
+               } else if (eventSource == text_freeText) {\r
+                       getEntity().setFreeText(text_freeText.getText());\r
+               }else if (eventSource == period_continue) {\r
+                   boolean continued = period_continue.getSelection();\r
+            getEntity().setContinued(continued);\r
+            if (continued){\r
+                partialElement_end.setAllNull();\r
+                partialElement_end.setEnabled(false);\r
+            }else{\r
+                partialElement_end.setEnabled(true);\r
+            }\r
+        }\r
+               updateTitle();\r
+               if (!(eventSource == getText_parseText())){\r
+                   updateParseField();\r
+               }\r
+               firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));\r
+       }\r
+\r
+//     protected abstract T parseNewInstance() ;\r
+\r
+       protected void updateTitle(){\r
+               String title = CdmUtils.Nz(getEntity().toString());\r
+               this.setText(title);\r
+               layout();\r
+       }\r
+       protected void updateParseField(){\r
+           getText_parseText().setText(getEntity().toString());\r
+           layout();\r
+    }\r
+\r
+       /** {@inheritDoc} */\r
+       @Override\r
+       public void dispose() {\r
+               formFactory.removePropertyChangeListener(this);\r
+               super.dispose();\r
+       }\r
+\r
+    public TextWithLabelElement getText_parseText() {\r
+        return text_parseText;\r
+    }\r
+\r
+    public void setText_parseText(TextWithLabelElement text_parseText) {\r
+        this.text_parseText = text_parseText;\r
+    }\r
+}\r