merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / NumberWithLabelElement.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.element;
12
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.ModifyEvent;
15 import org.eclipse.swt.widgets.Display;
16
17 import eu.etaxonomy.cdm.common.CdmUtils;
18 import eu.etaxonomy.taxeditor.ui.campanula.compatibility.ICdmFormElement;
19
20
21 /**
22 * <p>NumberWithLabelElement class.</p>
23 *
24 * @author n.hoffmann
25 * @created Mar 22, 2010
26 * @version 1.0
27 */
28 public class NumberWithLabelElement extends TextWithLabelElement {
29
30 private Float start;
31 private Float end;
32
33 private NumberFormatException exception;
34
35 /**
36 * <p>Constructor for NumberWithLabelElement.</p>
37 *
38 * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
39 * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
40 * @param labelString a {@link java.lang.String} object.
41 * @param initialNumber a {@link java.lang.Number} object.
42 * @param style a int.
43 */
44 public NumberWithLabelElement(CdmFormFactory toolkit,
45 ICdmFormElement parentElement, String labelString,
46 Number initialNumber, int style) {
47 super(toolkit, parentElement, labelString, null, null, style);
48 setNumber(initialNumber);
49 }
50
51
52 /**
53 * <p>setNumber</p>
54 *
55 * @param number a {@link java.lang.Number} object.
56 */
57 public void setNumber(Number number) {
58 super.setText(getStringRepresentation(number));
59 }
60
61 /**
62 * <p>getInteger</p>
63 *
64 * @return a {@link java.lang.Integer} object.
65 */
66 public Integer getInteger() {
67 String text = super.getText().trim();
68 return text.equals("") ? 0 : new Integer(text);
69 }
70
71 /**
72 * <p>getFloat</p>
73 *
74 * @return a {@link java.lang.Float} object.
75 */
76 public Float getFloat(){
77 String text = super.getText();
78 return new Float(text);
79 }
80
81 /**
82 * <p>getDouble</p>
83 *
84 * @return a {@link java.lang.Float} object.
85 */
86 public Double getDouble(){
87 String text = super.getText();
88 return new Double(text);
89 }
90
91 private String getStringRepresentation(Object number){
92 if(number != null){
93 return number.toString();
94 }
95 return null;
96 }
97
98 /* (non-Javadoc)
99 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
100 */
101 /** {@inheritDoc} */
102 @Override
103 public void modifyText(ModifyEvent event) {
104 String value = text.getText();
105 if(CdmUtils.isEmpty(value)){
106 text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
107 return;
108 }
109
110 try{
111
112 Float number = Float.parseFloat(value);
113
114 if((start != null && number < start) || (end != null && number > end)){
115 throw new NumberFormatException("You entered a number that is not within the allowed bounds.");
116 }
117
118 }catch(NumberFormatException e){
119 text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
120 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
121 exception = e;
122 return;
123 }
124
125 exception = null;
126 text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
127
128 super.modifyText(event);
129 }
130
131 /**
132 * <p>setLimits</p>
133 *
134 * @param numberOfDigits a int.
135 * @param start a {@link java.lang.Integer} object.
136 * @param end a {@link java.lang.Integer} object.
137 */
138 public void setLimits(int numberOfDigits, Integer start, Integer end){
139 setLimits(numberOfDigits, start.floatValue(), end.floatValue());
140 }
141
142 /**
143 * <p>setLimits</p>
144 *
145 * @param numberOfDigits a int.
146 * @param start a {@link java.lang.Float} object.
147 * @param end a {@link java.lang.Float} object.
148 */
149 public void setLimits(int numberOfDigits, Float start, Float end){
150 text.setTextLimit(numberOfDigits);
151 this.start = start;
152 this.end = end;
153 }
154
155 /**
156 * <p>Getter for the field <code>exception</code>.</p>
157 *
158 * @return the exception
159 */
160 public NumberFormatException getException() {
161 return exception;
162 }
163 }