1 /*
2 * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton,
3 * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY.
4 *
5 * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS.
6 * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
7 * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND
8 * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
9 * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
10 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
11 * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE
12 * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR
13 * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE.
14 * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
15 * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
16 * OR MODIFICATIONS.
17 * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION,
18 * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS
19 * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY
20 * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM
21 */
22
23 package de.desy.acop.chart.customizer;
24
25 import java.beans.PropertyChangeEvent;
26 import java.beans.PropertyChangeListener;
27 import java.lang.reflect.Method;
28 import java.text.Format;
29 import javax.swing.JFormattedTextField;
30 import de.desy.acop.chart.Acop;
31
32 public class AcopJFormattedTextField extends JFormattedTextField
33 {
34 Acop acopBean;
35 String proper;
36 int dataType; // integer, Double, string
37 boolean checkRange;
38 double lowCheck, highCheck;
39 Class c;
40 Object oldValue, newValue;
41 public AcopJFormattedTextField()
42 {
43 super();
44 // TODO Auto-generated constructor stub
45 }
46 public AcopJFormattedTextField(Object value)
47 {
48 super(value);
49 // TODO Auto-generated constructor stub
50 }
51 public AcopJFormattedTextField(Format format)
52 {
53 super(format);
54 // TODO Auto-generated constructor stub
55 }
56 public AcopJFormattedTextField(AbstractFormatter formatter)
57 {
58 super(formatter);
59 // TODO Auto-generated constructor stub
60 }
61 public AcopJFormattedTextField(AbstractFormatterFactory factory)
62 {
63 super(factory);
64 // TODO Auto-generated constructor stub
65 }
66 public AcopJFormattedTextField(AbstractFormatterFactory factory, Object currentValue)
67 {
68 super(factory, currentValue);
69 // TODO Auto-generated constructor stub
70 }
71 public void setAcopBean(Acop Bean)
72 {
73 acopBean = Bean;
74 try
75 {
76 Method m = acopBean.getClass().getMethod("get" + proper, null);
77 oldValue = m.invoke(acopBean, null);
78
79 // System.out.println("set Text by acopBean: " + oldValue.toString());
80
81 setValue(oldValue); // set text value
82 setText(oldValue.toString());
83 }
84 catch (Exception ex)
85 {
86 ex.printStackTrace();
87 }
88 }
89 public AcopJFormattedTextField(String text, String property, Object value)
90 {
91 super(value);
92 initAcopJFormattedTextField(text, property, value, false, 0, 0);
93 }
94 public AcopJFormattedTextField(String text, String property, Object value, boolean check, double low,
95 double high)
96 {
97 super(value);
98 initAcopJFormattedTextField(text, property, value, check, low, high);
99 }
100 public void initAcopJFormattedTextField(String text, String property, Object value, boolean check,
101 double low, double high)
102 {
103 proper = property;
104 oldValue = value;
105 checkRange = check;
106 this.lowCheck = low;
107 this.highCheck = high;
108 setName(proper);
109 if (value.equals(int.class) || value.equals(short.class))
110 {
111 c = int.class;
112 dataType = 0;
113 }
114 else if (value.equals(float.class) || value.equals(double.class))
115 {
116 c = double.class;
117 dataType = 1;
118 }
119 else
120 {
121 c = String.class;
122 dataType = 2;
123 }
124 // System.out.println("text data Type: " + dataType);
125 this.addPropertyChangeListener(new PropertyChangeListener()
126 {
127 public void propertyChange(PropertyChangeEvent evt)
128 {
129 String name = evt.getPropertyName();
130 if ( name.equals(proper)) {
131 return;
132 }
133 Object source = evt.getSource();
134 newValue = ((JFormattedTextField) source).getValue();
135 // amount = ((Number)amountField.getValue()).doubleValue();
136 // paymentField.setValue(new Double(payment));
137 // System.out.println("text changed: " + proper + " oldValue: " + oldValue + " value: " + newValue); // TODO
138 // Auto-generated
139 // Event
140 // stub
141 // itemStateChanged()
142 if (checkRange)
143 {
144 double conValue = Double.valueOf(newValue.toString());
145 if (conValue < lowCheck || conValue > highCheck)
146 {
147 setValue(oldValue); // set text value
148 setText(oldValue.toString());
149 }
150 }
151 if (acopBean != null && !newValue.equals(oldValue))
152 {
153 try
154 {
155 Method m = acopBean.getClass().getMethod("set" + proper, c);
156 m.invoke(acopBean, newValue);
157 // System.out.println("fire===> text changed: " + proper + " oldValue: " + oldValue + " value: "
158 // + newValue); // TODO Auto-generated Event stub
159 // itemStateChanged()
160 firePropertyChange(proper, oldValue, newValue);
161 // firePropertyChange(null, null, null);
162 oldValue = newValue;
163 }
164 catch (Exception ex)
165 {
166 ex.printStackTrace();
167 }
168 }
169 // }
170 }
171 });
172 }
173 }