3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.ui
.element
;
13 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
14 import org
.eclipse
.swt
.widgets
.Text
;
15 import org
.joda
.time
.Partial
;
17 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
18 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
19 import eu
.etaxonomy
.cdm
.strategy
.parser
.TimePeriodParser
;
20 import eu
.etaxonomy
.taxeditor
.ui
.campanula
.compatibility
.ICdmFormElement
;
24 * DateDetailSection class.
28 * @created Mar 31, 2010
31 public class DateDetailSection
extends AbstractFormSection
<TimePeriod
> {
33 private final TextWithLabelElement text_freeText
;
34 private final PartialElement partialElement_start
;
35 private final PartialElement partialElement_end
;
36 private final TextWithLabelElement text_parseText
;
37 private int cursorPosition
;
41 * Constructor for DateDetailSection.
45 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
47 * @param parentElement
48 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
53 protected DateDetailSection(CdmFormFactory formFactory
,
54 ICdmFormElement parentElement
, int style
) {
55 super(formFactory
, parentElement
, style
);
57 partialElement_start
= formFactory
.createPartialElement(this,
58 "Start: ", null, style
);
59 partialElement_end
= formFactory
.createPartialElement(this, "End: ",
62 text_parseText
= formFactory
.createTextWithLabelElement(this, "Parse",
64 text_parseText
.getMainControl().setLayoutData(
65 LayoutConstants
.FILL_HORIZONTALLY(6, 1));
67 text_freeText
= formFactory
.createTextWithLabelElement(this,
68 "Freetext", null, style
);
69 text_freeText
.getMainControl().setLayoutData(
70 LayoutConstants
.FILL_HORIZONTALLY(6, 1));
72 formFactory
.addPropertyChangeListener(this);
76 public TimePeriod
getEntity() {
77 if(super.getEntity() == null){
78 setEntity(TimePeriod
.NewInstance());
80 return super.getEntity();
85 * Setter for the field <code>timePeriod</code>.
89 * a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
92 public void setEntity(TimePeriod timePeriod
) {
93 setEntityInternally(timePeriod
);
95 text_parseText
.setText(timePeriod
.toString());
99 * When setting the entity through parsing we do not want to alter the parse field
102 private void setEntityInternally(TimePeriod timePeriod
){
103 Partial start
= timePeriod
.getStart();
104 partialElement_start
.setPartial(start
);
105 Partial end
= timePeriod
.getEnd();
106 partialElement_end
.setPartial(end
);
108 ((Text
) text_parseText
.getMainControl()).setSelection(cursorPosition
);
109 text_freeText
.setText(timePeriod
.getFreeText());
111 super.setEntity(timePeriod
);
116 public void propertyChange(PropertyChangeEvent event
) {
120 Object eventSource
= event
.getSource();
122 if (getElements().contains(eventSource
)) {
123 if (event
instanceof CdmPropertyChangeEvent
) {
124 if (((CdmPropertyChangeEvent
) event
).hasException()) {
125 handleException((CdmPropertyChangeEvent
) event
);
129 handleEvent(eventSource
);
136 private void handleException(CdmPropertyChangeEvent event
) {
137 firePropertyChangeEvent(new CdmPropertyChangeEvent(this,
138 event
.getException()));
141 private void handleEvent(Object eventSource
) {
142 if (eventSource
== partialElement_start
) {
143 Partial start
= partialElement_start
.getPartial();
144 getEntity().setStart(start
);
145 } else if (eventSource
== partialElement_end
) {
146 Partial end
= partialElement_end
.getPartial();
147 getEntity().setEnd(end
);
148 } else if (eventSource
== text_parseText
) {
149 cursorPosition
= ((Text
) text_parseText
.getMainControl())
151 setEntityInternally(TimePeriodParser
.parseString(text_parseText
.getText()));
152 } else if (eventSource
== text_freeText
) {
153 getEntity().setFreeText(text_freeText
.getText());
156 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
159 private void updateTitle(){
160 String title
= CdmUtils
.Nz(getEntity().toString());
168 * @see eu.etaxonomy.taxeditor.forms.AbstractFormSection#dispose()
172 public void dispose() {
173 formFactory
.removePropertyChangeListener(this);