X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/4aebadc96d2ce1ab1f85323e6cc5d9cdbdf4417a..3250b022e92742c19c010e467496392555a32e74:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java
index 01dba2a9c..7e7a74367 100644
--- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/DateDetailSection.java
@@ -1,177 +1,237 @@
-// $Id$
-/**
- * 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;
-import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
-
-/**
- *
- * DateDetailSection class.
- *
- *
- * @author n.hoffmann
- * @created Mar 31, 2010
- * @version 1.0
- */
-public class DateDetailSection extends AbstractFormSection {
-
- private final TextWithLabelElement text_freeText;
- private final PartialElement partialElement_start;
- private final PartialElement partialElement_end;
- private final TextWithLabelElement text_parseText;
- private int cursorPosition;
-
- /**
- *
- * Constructor for DateDetailSection.
- *
- *
- * @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);
-
- text_parseText = formFactory.createTextWithLabelElement(this, "Parse",
- null, style);
- text_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();
- }
-
- /**
- *
- * Setter for the field timePeriod
.
- *
- *
- * @param timePeriod
- * a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
- */
- @Override
- public void setEntity(TimePeriod timePeriod) {
- setEntityInternally(timePeriod);
- updateTitle();
- text_parseText.setText(timePeriod.toString());
- }
-
- /**
- * When setting the entity through parsing we do not want to alter the parse field
- * @param timePeriod
- */
- private void setEntityInternally(TimePeriod timePeriod){
- Partial start = timePeriod.getStart();
- partialElement_start.setPartial(start);
- Partial end = timePeriod.getEnd();
- partialElement_end.setPartial(end);
-
- ((Text) text_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()));
- }
-
- private 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 == text_parseText) {
- cursorPosition = ((Text) text_parseText.getMainControl())
- .getCaretPosition();
- setEntityInternally(TimePeriodParser.parseString(text_parseText.getText()));
- } else if (eventSource == text_freeText) {
- getEntity().setFreeText(text_freeText.getText());
- }
- updateTitle();
- firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
- }
-
- private 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();
- }
-
-}
+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.model.common.VerbatimTimePeriod;
+import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+
+public class DateDetailSection
+ extends AbstractFormSection {
+ protected TextWithLabelElement text_freeText;
+ private PartialElement partialElement_start;
+ private PartialElement partialElement_end;
+ private CheckboxElement period_continue;
+ private TextWithLabelElement text_parseText;
+ private TextWithLabelElement text_VerbatimDate = null;
+ private int cursorPosition;
+ private boolean includeVerbatim;
+
+ public int getCursorPosition() {
+ return cursorPosition;
+ }
+
+ public void setCursorPosition(int cursorPosition) {
+ this.cursorPosition = cursorPosition;
+ }
+
+ /**
+ *
+ * Constructor for DateDetailSection.
+ *
+ *
+ * @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, boolean includeVerbatim, int style) {
+ super(formFactory, parentElement, style);
+
+ this.includeVerbatim = includeVerbatim;
+ text_parseText = formFactory.createTextWithLabelElement(this, "Parse",
+ null, style);
+ text_parseText.getMainControl().setLayoutData(
+ LayoutConstants.FILL_HORIZONTALLY(6, 1));
+ text_parseText.getMainControl().setToolTipText(Messages.DateDetail_parseText_tooltip);
+ partialElement_start = formFactory.createPartialElement(this,
+ "Start ", null, 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);
+
+ if (includeVerbatim){
+ text_VerbatimDate = formFactory.createTextWithLabelElement(this,
+ "Verbatim Date", null, style);
+
+ text_VerbatimDate.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 final T getEntity() {
+ if(super.getEntity() == null){
+ T newInstance = newInstance();
+ this.setEntity(newInstance);
+ }
+ return super.getEntity();
+ }
+
+ @SuppressWarnings("unchecked")
+ protected T newInstance(){
+ if (includeVerbatim){
+ return (T)VerbatimTimePeriod.NewVerbatimInstance();
+ }else{
+ return (T)TimePeriod.NewInstance();
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ protected T parseNewInstance() {
+ if (includeVerbatim){
+ T result = (T)TimePeriodParser.parseStringVerbatim(getText_parseText().getText());
+ return result;
+ }else{
+ T result = (T)TimePeriodParser.parseString(getText_parseText().getText());
+ return result;
+ }
+ }
+
+
+ /**
+ *
+ * Setter for the field timePeriod
.
+ *
+ *
+ * @param timePeriod
+ * a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
+ */
+ @Override
+ public void setEntity(T 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(T timePeriod){
+ Partial start = timePeriod.getStart();
+ partialElement_start.setPartial(start);
+ Partial end = timePeriod.getEnd();
+ partialElement_end.setPartial(end);
+ period_continue.setSelection(timePeriod.isContinued());
+ if (timePeriod.isContinued()){
+ partialElement_end.setEnabled(false);
+
+ }
+ ((Text) getText_parseText().getMainControl()).setSelection(cursorPosition);
+ text_freeText.setText(timePeriod.getFreeText());
+ if (includeVerbatim){
+ ((Text) text_VerbatimDate.getMainControl()).setSelection(cursorPosition);
+ text_VerbatimDate.setText(((VerbatimTimePeriod)timePeriod).getVerbatimDate());
+ }
+
+ 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();
+ T newInstance = parseNewInstance();
+ setEntityInternally(newInstance);
+ } else if (eventSource == text_freeText) {
+ getEntity().setFreeText(text_freeText.getText());
+ }else if (eventSource == period_continue) {
+ boolean continued = period_continue.getSelection();
+ getEntity().setContinued(continued);
+ if (continued){
+ partialElement_end.setAllNull();
+ partialElement_end.setEnabled(false);
+ }else{
+ partialElement_end.setEnabled(true);
+ }
+ }
+ updateTitle();
+ if (!(eventSource == getText_parseText())){
+ updateParseField();
+ }
+ firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
+ }
+
+// protected abstract T parseNewInstance() ;
+
+ protected void updateTitle(){
+ String title = CdmUtils.Nz(getEntity().toString());
+ this.setText(title);
+ layout();
+ }
+ protected void updateParseField(){
+ getText_parseText().setText(getEntity().toString());
+ layout();
+ }
+
+ /** {@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;
+ }
+}