1
24 package net.sf.jasperreports.engine.base;
25
26 import java.awt.Color;
27 import java.io.Serializable;
28
29 import net.sf.jasperreports.engine.Deduplicable;
30 import net.sf.jasperreports.engine.JRBoxContainer;
31 import net.sf.jasperreports.engine.JRConstants;
32 import net.sf.jasperreports.engine.JRDefaultStyleProvider;
33 import net.sf.jasperreports.engine.JRLineBox;
34 import net.sf.jasperreports.engine.JRPen;
35 import net.sf.jasperreports.engine.JRRuntimeException;
36 import net.sf.jasperreports.engine.JRStyle;
37 import net.sf.jasperreports.engine.design.events.JRChangeEventsSupport;
38 import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport;
39 import net.sf.jasperreports.engine.util.ObjectUtils;
40 import net.sf.jasperreports.engine.util.StyleResolver;
41
42
43
48 public class JRBaseLineBox implements JRLineBox, Serializable, Cloneable, JRChangeEventsSupport, Deduplicable
49 {
50
51
52
55 private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
56
57 public static final String PROPERTY_PADDING = "padding";
58
59 public static final String PROPERTY_TOP_PADDING = "topPadding";
60
61 public static final String PROPERTY_LEFT_PADDING = "leftPadding";
62
63 public static final String PROPERTY_BOTTOM_PADDING = "bottomPadding";
64
65 public static final String PROPERTY_RIGHT_PADDING = "rightPadding";
66
67
68 protected JRBoxContainer boxContainer;
69
70
73 protected JRBoxPen pen;
74 protected JRBoxPen topPen;
75 protected JRBoxPen leftPen;
76 protected JRBoxPen bottomPen;
77 protected JRBoxPen rightPen;
78
79 protected Integer padding;
80 protected Integer topPadding;
81 protected Integer leftPadding;
82 protected Integer bottomPadding;
83 protected Integer rightPadding;
84
85
86
89 public JRBaseLineBox(JRBoxContainer boxContainer)
90 {
91 this.boxContainer = boxContainer;
92
93 pen = new JRBaseBoxPen(this);
94 topPen = new JRBaseBoxTopPen(this);
95 leftPen = new JRBaseBoxLeftPen(this);
96 bottomPen = new JRBaseBoxBottomPen(this);
97 rightPen = new JRBaseBoxRightPen(this);
98 }
99
100
101 @Override
102 public JRDefaultStyleProvider getDefaultStyleProvider()
103 {
104 if (boxContainer != null)
105 {
106 return boxContainer.getDefaultStyleProvider();
107 }
108 return null;
109 }
110
111
114 protected StyleResolver getStyleResolver()
115 {
116 if (getDefaultStyleProvider() != null)
117 {
118 return getDefaultStyleProvider().getStyleResolver();
119 }
120 return StyleResolver.getInstance();
121 }
122
123 @Override
124 public JRStyle getStyle()
125 {
126 if (boxContainer != null)
127 {
128 return boxContainer.getStyle();
129 }
130 return null;
131 }
132
133 @Override
134 public String getStyleNameReference()
135 {
136 if (boxContainer != null)
137 {
138 return boxContainer.getStyleNameReference();
139 }
140 return null;
141 }
142
143 @Override
144 public JRBoxContainer getBoxContainer()
145 {
146 return boxContainer;
147 }
148
149 @Override
150 public Float getDefaultLineWidth()
151 {
152 return JRPen.LINE_WIDTH_0;
153 }
154
155 @Override
156 public Color getDefaultLineColor()
157 {
158 if (boxContainer != null)
159 {
160 return boxContainer.getDefaultLineColor();
161 }
162 return Color.black;
163 }
164
165 @Override
166 public JRBoxPen getPen()
167 {
168 return pen;
169 }
170
171 @Override
172 public void copyPen(JRBoxPen pen)
173 {
174 this.pen = pen.clone(this);
175 }
176
177 @Override
178 public JRBoxPen getTopPen()
179 {
180 return topPen;
181 }
182
183 @Override
184 public void copyTopPen(JRBoxPen topPen)
185 {
186 this.topPen = topPen.clone(this);
187 }
188
189 @Override
190 public JRBoxPen getLeftPen()
191 {
192 return leftPen;
193 }
194
195 @Override
196 public void copyLeftPen(JRBoxPen leftPen)
197 {
198 this.leftPen = leftPen.clone(this);
199 }
200
201 @Override
202 public JRBoxPen getBottomPen()
203 {
204 return bottomPen;
205 }
206
207 @Override
208 public void copyBottomPen(JRBoxPen bottomPen)
209 {
210 this.bottomPen = bottomPen.clone(this);
211 }
212
213 @Override
214 public JRBoxPen getRightPen()
215 {
216 return rightPen;
217 }
218
219 @Override
220 public void copyRightPen(JRBoxPen rightPen)
221 {
222 this.rightPen = rightPen.clone(this);
223 }
224
225 @Override
226 public Integer getPadding()
227 {
228 return getStyleResolver().getPadding(this);
229 }
230
231 @Override
232 public Integer getOwnPadding()
233 {
234 return padding;
235 }
236
237
240 @Override
241 public void setPadding(int padding)
242 {
243 setPadding((Integer)padding);
244 }
245
246 @Override
247 public void setPadding(Integer padding)
248 {
249 Object old = this.padding;
250 this.padding = padding;
251 getEventSupport().firePropertyChange(PROPERTY_PADDING, old, this.padding);
252 }
253
254 @Override
255 public Integer getTopPadding()
256 {
257 return getStyleResolver().getTopPadding(this);
258 }
259
260 @Override
261 public Integer getOwnTopPadding()
262 {
263 return topPadding;
264 }
265
266
269 @Override
270 public void setTopPadding(int topPadding)
271 {
272 setTopPadding((Integer)topPadding);
273 }
274
275 @Override
276 public void setTopPadding(Integer topPadding)
277 {
278 Object old = this.topPadding;
279 this.topPadding = topPadding;
280 getEventSupport().firePropertyChange(PROPERTY_TOP_PADDING, old, this.topPadding);
281 }
282
283 @Override
284 public Integer getLeftPadding()
285 {
286 return getStyleResolver().getLeftPadding(this);
287 }
288
289 @Override
290 public Integer getOwnLeftPadding()
291 {
292 return leftPadding;
293 }
294
295
298 @Override
299 public void setLeftPadding(int leftPadding)
300 {
301 setLeftPadding((Integer)leftPadding);
302 }
303
304 @Override
305 public void setLeftPadding(Integer leftPadding)
306 {
307 Object old = this.leftPadding;
308 this.leftPadding = leftPadding;
309 getEventSupport().firePropertyChange(PROPERTY_LEFT_PADDING, old, this.leftPadding);
310 }
311
312 @Override
313 public Integer getBottomPadding()
314 {
315 return getStyleResolver().getBottomPadding(this);
316 }
317
318 @Override
319 public Integer getOwnBottomPadding()
320 {
321 return bottomPadding;
322 }
323
324
327 @Override
328 public void setBottomPadding(int bottomPadding)
329 {
330 setBottomPadding((Integer)bottomPadding);
331 }
332
333 @Override
334 public void setBottomPadding(Integer bottomPadding)
335 {
336 Object old = this.bottomPadding;
337 this.bottomPadding = bottomPadding;
338 getEventSupport().firePropertyChange(PROPERTY_BOTTOM_PADDING, old, this.bottomPadding);
339 }
340
341 @Override
342 public Integer getRightPadding()
343 {
344 return getStyleResolver().getRightPadding(this);
345 }
346
347 @Override
348 public Integer getOwnRightPadding()
349 {
350 return rightPadding;
351 }
352
353
356 @Override
357 public void setRightPadding(int rightPadding)
358 {
359 setRightPadding((Integer)rightPadding);
360 }
361
362 @Override
363 public void setRightPadding(Integer rightPadding)
364 {
365 Object old = this.rightPadding;
366 this.rightPadding = rightPadding;
367 getEventSupport().firePropertyChange(PROPERTY_RIGHT_PADDING, old, this.rightPadding);
368 }
369
370
371 @Override
372 public JRLineBox clone(JRBoxContainer boxContainer)
373 {
374 JRBaseLineBox clone = null;
375
376 try
377 {
378 clone = (JRBaseLineBox)super.clone();
379 }
380 catch(CloneNotSupportedException e)
381 {
382 throw new JRRuntimeException(e);
383 }
384
385 clone.boxContainer = boxContainer;
386
387 clone.pen = pen.clone(clone);
388 clone.topPen = topPen.clone(clone);
389 clone.leftPen = leftPen.clone(clone);
390 clone.bottomPen = bottomPen.clone(clone);
391 clone.rightPen = rightPen.clone(clone);
392
393 clone.eventSupport = null;
394
395 return clone;
396 }
397
398 private transient JRPropertyChangeSupport eventSupport;
399
400 @Override
401 public JRPropertyChangeSupport getEventSupport()
402 {
403 synchronized (this)
404 {
405 if (eventSupport == null)
406 {
407 eventSupport = new JRPropertyChangeSupport(this);
408 }
409 }
410
411 return eventSupport;
412 }
413
414
415 @Override
416 public int getHashCode()
417 {
418 ObjectUtils.HashCode hash = ObjectUtils.hash();
419 hash.addIdentical(pen);
420 hash.addIdentical(topPen);
421 hash.addIdentical(leftPen);
422 hash.addIdentical(bottomPen);
423 hash.addIdentical(rightPen);
424 hash.add(padding);
425 hash.add(topPadding);
426 hash.add(leftPadding);
427 hash.add(bottomPadding);
428 hash.add(rightPadding);
429 return hash.getHashCode();
430 }
431
432 @Override
433 public boolean isIdentical(Object object)
434 {
435 if (this == object)
436 {
437 return true;
438 }
439
440 if (!(object instanceof JRBaseLineBox))
441 {
442 return false;
443 }
444
445 JRBaseLineBox box = (JRBaseLineBox) object;
446
447 return
448 ObjectUtils.identical(pen, box.pen)
449 && ObjectUtils.identical(topPen, box.topPen)
450 && ObjectUtils.identical(leftPen, box.leftPen)
451 && ObjectUtils.identical(bottomPen, box.bottomPen)
452 && ObjectUtils.identical(rightPen, box.rightPen)
453 && ObjectUtils.equals(padding, box.padding)
454 && ObjectUtils.equals(topPadding, box.topPadding)
455 && ObjectUtils.equals(leftPadding, box.leftPadding)
456 && ObjectUtils.equals(bottomPadding, box.bottomPadding)
457 && ObjectUtils.equals(rightPadding, box.rightPadding);
458 }
459
460 }
461