1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.model.attributes;
19
20 import java.beans.PropertyChangeListener;
21 import java.io.Serializable;
22
23 import pl.edu.agh.cast.data.model.property.IPropertyChangeProvider;
24 import pl.edu.agh.cast.data.model.property.PropertyChangeProviderHelper;
25 import pl.edu.agh.cast.model.ModelUtil;
26 import pl.edu.agh.cast.util.Messages;
27
28 import com.thoughtworks.xstream.annotations.XStreamAlias;
29 import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
30 import com.thoughtworks.xstream.annotations.XStreamOmitField;
31
32
33
34
35
36
37
38
39 @XStreamAlias("attribute")
40 public class Attribute implements Serializable, Comparable<Attribute>, IPropertyChangeProvider {
41
42 private static final long serialVersionUID = -1988514436802189113L;
43
44
45
46
47 public static final String PROPERTY_SHOW_AS_LABEL = "Attribute.ShowAsLabel";
48
49
50
51
52 @XStreamAlias("mergePolicy")
53 @XStreamAsAttribute
54 private AttributeMergePolicy defaultMergePolicy;
55
56
57
58
59 @XStreamAsAttribute
60 private String name;
61
62
63
64
65
66 @XStreamAsAttribute
67 private String ownerTypeName;
68
69
70
71
72
73
74 @XStreamAsAttribute
75 private String modelExtensionId;
76
77
78
79
80 @XStreamAsAttribute
81 private boolean nameIsLocalizable;
82
83 @XStreamAsAttribute
84 private ValueType type;
85
86 @XStreamAsAttribute
87 private Object defaultValue;
88
89 @XStreamAsAttribute
90 private boolean permanent;
91
92 @XStreamAsAttribute
93 private boolean editable;
94
95 @XStreamAsAttribute
96 private boolean showAsLabel;
97
98 private static ModelUtil modelUtil = new ModelUtil();
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 public Attribute(String name, boolean nameIsLocalizable, ValueType type, Object defaultValue, boolean permanent,
126 boolean editable, boolean showAsLabel, String ownerTypeName, String modelExtensionId) {
127 this.name = name;
128 this.nameIsLocalizable = nameIsLocalizable;
129 this.type = type;
130 this.defaultValue = defaultValue;
131 this.permanent = permanent;
132 this.editable = editable;
133 this.showAsLabel = showAsLabel;
134 this.ownerTypeName = ownerTypeName;
135 this.modelExtensionId = modelExtensionId;
136 pcpHelper = new PropertyChangeProviderHelper(this);
137 }
138
139 public ValueType getType() {
140 return type;
141 }
142
143 public boolean isPermanent() {
144 return permanent;
145 }
146
147 public boolean isNameLocalizable() {
148 return nameIsLocalizable;
149 }
150
151 public boolean isEditable() {
152 return editable;
153 }
154
155 public boolean isShowAsLabel() {
156 return showAsLabel;
157 }
158
159 public String getName() {
160 return name;
161 }
162
163 public Object getDefaultValue() {
164 return defaultValue;
165 }
166
167
168
169
170
171
172
173
174 public String getDisplayName() {
175
176
177
178
179
180 if (nameIsLocalizable) {
181 try {
182 if (modelExtensionId != null) {
183 return modelUtil.getAttributeName(modelExtensionId, ownerTypeName, name);
184 } else {
185 return Messages.getByKey(name);
186 }
187 } catch (java.lang.IllegalArgumentException e) {
188
189 }
190
191 }
192 return name;
193 }
194
195
196
197
198
199
200
201
202 public boolean validateValue(Object value) {
203 return type.getValidator().isValidClass(value);
204 }
205
206
207
208
209
210
211
212
213 @Override
214 public boolean equals(Object obj) {
215 if (obj == this) {
216 return true;
217 }
218 if (!(obj instanceof Attribute)) {
219 return false;
220 }
221 Attribute that = (Attribute)obj;
222 return this.name.equalsIgnoreCase(that.name);
223 }
224
225
226
227
228
229
230 @Override
231 public int hashCode() {
232 return name.toLowerCase().hashCode();
233 }
234
235
236
237
238
239
240 public int compareTo(Attribute o) {
241 return this.name.compareToIgnoreCase(o.name);
242 }
243
244
245
246
247
248
249 @Override
250 public String toString() {
251 return name;
252 }
253
254
255
256
257
258
259
260 public void setShowAsLabel(boolean showAsLabel) {
261 Boolean oldValue = Boolean.valueOf(this.showAsLabel);
262 this.showAsLabel = showAsLabel;
263 firePropertyChange(PROPERTY_SHOW_AS_LABEL, oldValue, Boolean.valueOf(showAsLabel));
264 }
265
266
267
268
269
270
271 public Attribute copy() {
272 return new Attribute(name, nameIsLocalizable, type, defaultValue, permanent, editable, showAsLabel,
273 ownerTypeName, modelExtensionId);
274 }
275
276
277
278
279 @XStreamOmitField
280 private transient PropertyChangeProviderHelper pcpHelper;
281
282 protected Object readResolve() {
283 pcpHelper = new PropertyChangeProviderHelper(this);
284 return this;
285 }
286
287
288
289
290
291
292 public void addPropertyChangeListener(PropertyChangeListener l) {
293 pcpHelper.addPropertyChangeListener(l);
294 }
295
296
297
298
299
300
301
302 public void removePropertyChangeListener(PropertyChangeListener l) {
303 pcpHelper.removePropertyChangeListener(l);
304 }
305
306 protected void firePropertyChange(String property, Object oldValue, Object newValue) {
307 pcpHelper.firePropertyChange(property, oldValue, newValue);
308 }
309
310 public AttributeMergePolicy getDefaultMergePolicy() {
311 return defaultMergePolicy;
312 }
313
314 public void setDefaultMergePolicy(AttributeMergePolicy defaultMergePolicy) {
315 this.defaultMergePolicy = defaultMergePolicy;
316 }
317
318 }