X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/68d5a16223db078f5c50fb33e93eb85dda06842a..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 2b897c936..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,192 +1,237 @@ -/** - * 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; - -/** - *

- * DateDetailSection class. - *

- * - * @author n.hoffmann - * @created Mar 31, 2010 - * @version 1.0 - */ -public class DateDetailSection extends AbstractFormSection { - - 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; - } - - /** - *

- * 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); - - 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(); - } - - /** - *

- * 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(); - 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; + +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; + } +}