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