Fixes #2309
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / forms / DateDetailSection.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.taxeditor.ui.forms;
12
13 import org.eclipse.jface.util.PropertyChangeEvent;
14 import org.eclipse.swt.widgets.Text;
15 import org.joda.time.Partial;
16
17 import eu.etaxonomy.cdm.common.CdmUtils;
18 import eu.etaxonomy.cdm.model.common.TimePeriod;
19
20 /**
21 * <p>
22 * DateDetailSection class.
23 * </p>
24 *
25 * @author n.hoffmann
26 * @created Mar 31, 2010
27 * @version 1.0
28 */
29 public class DateDetailSection extends AbstractFormSection<TimePeriod> {
30
31 private final TextWithLabelElement text_freeText;
32 private final PartialElement partialElement_start;
33 private final PartialElement partialElement_end;
34 private final TextWithLabelElement text_parseText;
35 private int cursorPosition;
36
37 /**
38 * <p>
39 * Constructor for DateDetailSection.
40 * </p>
41 *
42 * @param formFactory
43 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
44 * object.
45 * @param parentElement
46 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
47 * object.
48 * @param style
49 * a int.
50 */
51 protected DateDetailSection(CdmFormFactory formFactory,
52 ICdmFormElement parentElement, int style) {
53 super(formFactory, null, parentElement, style);
54
55 partialElement_start = formFactory.createPartialElement(this,
56 "Start: ", null, style);
57 partialElement_end = formFactory.createPartialElement(this, "End: ",
58 null, style);
59
60 text_parseText = formFactory.createTextWithLabelElement(this, "Parse",
61 null, style);
62 text_parseText.getMainControl().setLayoutData(
63 CdmFormFactory.FILL_HORIZONTALLY(6, 1));
64
65 text_freeText = formFactory.createTextWithLabelElement(this,
66 "Freetext", null, style);
67 text_freeText.getMainControl().setLayoutData(
68 CdmFormFactory.FILL_HORIZONTALLY(6, 1));
69
70 formFactory.addPropertyChangeListener(this);
71 }
72
73 /**
74 * <p>
75 * Setter for the field <code>timePeriod</code>.
76 * </p>
77 *
78 * @param timePeriod
79 * a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
80 */
81 @Override
82 public void setEntity(TimePeriod timePeriod) {
83 Partial start = timePeriod.getStart();
84 partialElement_start.setPartial(start);
85 Partial end = timePeriod.getEnd();
86 partialElement_end.setPartial(end);
87
88 text_parseText.setText(timePeriod.toString());
89 ((Text) text_parseText.getMainControl()).setSelection(cursorPosition);
90 text_freeText.setText(timePeriod.getFreeText());
91
92 this.setText(CdmUtils.Nz(timePeriod.toString()));
93
94 super.setEntity(timePeriod);
95 }
96
97 /** {@inheritDoc} */
98 @Override
99 public void propertyChange(PropertyChangeEvent event) {
100 if (event == null) {
101 return;
102 }
103 Object eventSource = event.getSource();
104
105 if (getElements().contains(eventSource)) {
106 if (event instanceof CdmPropertyChangeEvent) {
107 if (((CdmPropertyChangeEvent) event).hasException()) {
108 handleException((CdmPropertyChangeEvent) event);
109 return;
110 }
111 }
112 handleEvent(eventSource);
113 }
114 }
115
116 /**
117 * @param event
118 */
119 private void handleException(CdmPropertyChangeEvent event) {
120 firePropertyChangeEvent(new CdmPropertyChangeEvent(this,
121 event.getException()));
122 }
123
124 private void handleEvent(Object eventSource) {
125 if (eventSource == partialElement_start) {
126 Partial start = partialElement_start.getPartial();
127 getEntity().setStart(start);
128 } else if (eventSource == partialElement_end) {
129 Partial end = partialElement_end.getPartial();
130 getEntity().setEnd(end);
131 } else if (eventSource == text_parseText) {
132 cursorPosition = ((Text) text_parseText.getMainControl())
133 .getCaretPosition();
134 setEntity(TimePeriod.parseString(text_parseText.getText()));
135 } else if (eventSource == text_freeText) {
136 getEntity().setFreeText(text_freeText.getText());
137 }
138 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
139 }
140
141 /*
142 * (non-Javadoc)
143 *
144 * @see eu.etaxonomy.taxeditor.forms.AbstractFormSection#dispose()
145 */
146 /** {@inheritDoc} */
147 @Override
148 public void dispose() {
149 formFactory.removePropertyChangeListener(this);
150 super.dispose();
151 }
152
153 }