-// $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;
-
-/**
- * <p>
- * DateDetailSection class.
- * </p>
- *
- * @author n.hoffmann
- * @created Mar 31, 2010
- * @version 1.0
- */
-public class DateDetailSection extends AbstractFormSection<TimePeriod> {
-
- private final TextWithLabelElement text_freeText;
- private final PartialElement partialElement_start;
- private final PartialElement partialElement_end;
- private final TextWithLabelElement text_parseText;
- private int 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);
-
- 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();
- }
-
- /**
- * <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();
- 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;\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