1 package fr.ifremer.tutti.ui.swing.util.computable;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import fr.ifremer.tutti.util.Numbers;
26 import org.jdesktop.beans.AbstractSerializableBean;
27 import org.nuiton.jaxx.application.bean.JavaBeanObject;
28 import org.nuiton.jaxx.application.bean.JavaBeanObjectPropagateChangeListener;
29
30
31
32
33
34
35
36
37 public class ComputableData<N extends Number> extends AbstractSerializableBean implements JavaBeanObject {
38
39 public static final String PROPERTY_DATA = "data";
40
41 public static final String PROPERTY_COMPUTED_DATA = "computedData";
42
43 private static final long serialVersionUID = 1L;
44
45 protected N data;
46
47 protected N computedData;
48
49 public ComputableData() {
50 data = null;
51 computedData = null;
52 }
53
54 public ComputableData(N data, N computedData) {
55 this.data = data;
56 this.computedData = computedData;
57 }
58
59 public N getData() {
60 return data;
61 }
62
63 public void setData(N data) {
64 Object oldValue = getData();
65 this.data = data;
66 firePropertyChange(PROPERTY_DATA, oldValue, data);
67 }
68
69 public N getComputedData() {
70 return computedData;
71 }
72
73 public void setComputedData(N computedData) {
74 Object oldValue = getComputedData();
75 this.computedData = computedData;
76 firePropertyChange(PROPERTY_COMPUTED_DATA, oldValue, computedData);
77 }
78
79 public N getDataOrComputedData() {
80 return Numbers.getValueOrComputedValue(data, computedData);
81 }
82
83 @Override
84 public String toString() {
85 String result = null;
86 N dataOrComputedData = getDataOrComputedData();
87 if (dataOrComputedData != null) {
88 result = dataOrComputedData.toString();
89 }
90 return result;
91 }
92
93
94
95
96
97
98
99
100
101 public void addPropagateListener(String propertyName,
102 JavaBeanObject otherBean) {
103
104 JavaBeanObjectPropagateChangeListener.listenAndPropagate(this, otherBean, PROPERTY_DATA, propertyName);
105 }
106
107 @Override
108 public void firePropertyChanged(String propertyName, Object oldValue, Object newValue) {
109 super.firePropertyChange(propertyName, oldValue, newValue);
110 }
111
112 }