Project

General

Profile

Download (6.12 KB) Statistics
| Branch: | Tag: | Revision:
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.singlesource.ui.forms;
12

    
13
import org.apache.log4j.Logger;
14
import org.eclipse.swt.SWT;
15
import org.eclipse.swt.events.ModifyEvent;
16

    
17
import eu.etaxonomy.cdm.common.CdmUtils;
18
import eu.etaxonomy.taxeditor.singlesource.ImplementationLoader;
19
import eu.etaxonomy.taxeditor.singlesource.org.eclipse.swt.widgets.DisplayProxy;
20
import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
21
import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
22

    
23

    
24
/**
25
 * <p>NumberWithLabelElement class.</p>
26
 *
27
 * @author n.hoffmann
28
 * @created Mar 22, 2010
29
 * @version 1.0
30
 */
31
public abstract class NumberWithLabelElementFacade extends TextWithLabelElementFacade {
32
	private static final Logger logger = Logger.getLogger(NumberWithLabelElementFacade.class);
33
	
34
	private static NumberWithLabelElementFacade IMPL;
35
	static{
36
		IMPL = (NumberWithLabelElementFacade) ImplementationLoader.newInstance(NumberWithLabelElementFacade.class);
37
	}
38

    
39
	private Float start;
40
	private Float end;
41
	
42
	private NumberFormatException exception;
43

    
44
	protected NumberWithLabelElementFacade(){
45
	}
46

    
47
	/**
48
	 * <p>Constructor for NumberWithLabelElement.</p>
49
	 *
50
	 * @param toolkit a {@link eu.etaxonomy.taxeditor.singlesource.ui.forms.CdmFormFactoryFacade} object.
51
	 * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
52
	 * @param labelString a {@link java.lang.String} object.
53
	 * @param initialInteger a {@link java.lang.Integer} object.
54
	 * @param style a int.
55
	 */
56
	protected NumberWithLabelElementFacade(CdmFormFactoryFacade toolkit,
57
			ICdmFormElement parentElement, String labelString,
58
			Integer initialInteger, int style) {
59
		super(toolkit, parentElement, labelString, null, null, style);
60
		setInteger(initialInteger);
61
	}
62

    
63
	public static NumberWithLabelElementFacade getInstance( CdmFormFactoryFacade toolkit,
64
			ICdmFormElement parentElement, String labelString,
65
			Integer initialInteger, int style)
66
	{
67
		return (NumberWithLabelElementFacade)IMPL.getInstanceInternal(toolkit, parentElement, labelString, initialInteger, style);
68
	}
69

    
70
	protected abstract Object getInstanceInternal(CdmFormFactoryFacade toolkit,
71
			ICdmFormElement parentElement, String labelString,
72
			Integer initialInteger, int style);
73

    
74
	
75
	/**
76
	 * <p>Constructor for NumberWithLabelElement.</p>
77
	 *
78
	 * @param toolkit a {@link eu.etaxonomy.taxeditor.singlesource.ui.forms.CdmFormFactoryFacade} object.
79
	 * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
80
	 * @param labelString a {@link java.lang.String} object.
81
	 * @param initialFloat a {@link java.lang.Float} object.
82
	 * @param style a int.
83
	 */
84
	protected NumberWithLabelElementFacade(CdmFormFactoryFacade toolkit,
85
			ICdmFormElement parentElement, String labelString,
86
			Float initialFloat, int style) {
87
		super(toolkit, parentElement, labelString, null, null, style);
88
		setFloat(initialFloat);
89
	}
90

    
91
	public static NumberWithLabelElementFacade getInstance( CdmFormFactoryFacade toolkit,
92
			ICdmFormElement parentElement, String labelString,
93
			Float initialFloat, int style)
94
	{
95
		return (NumberWithLabelElementFacade)IMPL.getInstanceInternal(toolkit, parentElement, labelString, initialFloat, style);
96
	}
97

    
98
	protected abstract Object getInstanceInternal(CdmFormFactoryFacade toolkit,
99
			ICdmFormElement parentElement, String labelString,
100
			Float initialFloat, int style);
101

    
102
	/**
103
	 * <p>setInteger</p>
104
	 *
105
	 * @param number a {@link java.lang.Integer} object.
106
	 */
107
	public void setInteger(Integer number) {
108
		super.setText(getStringRepresentation(number));
109
	}
110
	
111
	/**
112
	 * <p>setFloat</p>
113
	 *
114
	 * @param number a {@link java.lang.Float} object.
115
	 */
116
	public void setFloat(Float number) {
117
		super.setText(getStringRepresentation(number));
118
	}
119
	
120
	/**
121
	 * <p>getInteger</p>
122
	 *
123
	 * @return a {@link java.lang.Integer} object.
124
	 */
125
	public Integer getInteger() {
126
		String text = super.getText().trim();
127
		return text.equals("") ? 0 : new Integer(text);
128
	}
129
	
130
	/**
131
	 * <p>getFloat</p>
132
	 *
133
	 * @return a {@link java.lang.Float} object.
134
	 */
135
	public Float getFloat(){
136
		String text = super.getText();
137
		return new Float(text);
138
	}
139
	
140
	private String getStringRepresentation(Object number){
141
		if(number != null){
142
			return number.toString();
143
		}		
144
		return null;
145
	}
146
	
147
	/* (non-Javadoc)
148
	 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
149
	 */
150
	/** {@inheritDoc} */
151
	@Override
152
	public void modifyText(ModifyEvent event) {
153
		String value = text.getText();
154
		if(CdmUtils.isEmpty(value)){
155
			text.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_WHITE));
156
			return;
157
		}
158
		
159
		try{
160
			
161
			Float number = Float.parseFloat(value);
162
			
163
			if((start != null && number < start) || (end != null && number > end)){
164
				throw new NumberFormatException("You entered a number that is not within the allowed bounds.");
165
			}
166
			
167
		}catch(NumberFormatException e){
168
			text.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_RED));
169
			firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
170
			return;
171
		}
172
		
173
		exception = null;
174
		text.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_WHITE));
175
		
176
		super.modifyText(event);
177
	}
178
	
179
	/**
180
	 * <p>setLimits</p>
181
	 *
182
	 * @param numberOfDigits a int.
183
	 * @param start a {@link java.lang.Integer} object.
184
	 * @param end a {@link java.lang.Integer} object.
185
	 */
186
	public void setLimits(int numberOfDigits, Integer start, Integer end){
187
		setLimits(numberOfDigits, start.floatValue(), end.floatValue());
188
	}
189
	
190
	/**
191
	 * <p>setLimits</p>
192
	 *
193
	 * @param numberOfDigits a int.
194
	 * @param start a {@link java.lang.Float} object.
195
	 * @param end a {@link java.lang.Float} object.
196
	 */
197
	public void setLimits(int numberOfDigits, Float start, Float end){
198
		text.setTextLimit(numberOfDigits);
199
		this.start = start;
200
		this.end = end;
201
	}
202
	
203
	/**
204
	 * <p>Getter for the field <code>exception</code>.</p>
205
	 *
206
	 * @return the exception
207
	 */
208
	public NumberFormatException getException() {
209
		return exception;
210
	}
211
}
(2-2/4)