Lines 46-57
Link Here
|
46 |
/** object has started */ |
46 |
/** object has started */ |
47 |
private boolean started = false; |
47 |
private boolean started = false; |
48 |
|
48 |
|
|
|
49 |
private int dataLength = 0; |
50 |
private final boolean[] lengthChanged = { true }; |
51 |
|
49 |
/** |
52 |
/** |
50 |
* Default constructor |
53 |
* Default constructor |
51 |
*/ |
54 |
*/ |
52 |
protected AbstractGraphicsDrawingOrderContainer() { |
55 |
protected AbstractGraphicsDrawingOrderContainer() { |
53 |
} |
56 |
} |
54 |
|
57 |
|
|
|
58 |
private void markLengthChanged() { |
59 |
synchronized (this.lengthChanged) { |
60 |
this.lengthChanged[0] = true; |
61 |
} |
62 |
} |
63 |
|
55 |
/** |
64 |
/** |
56 |
* Named constructor |
65 |
* Named constructor |
57 |
* |
66 |
* |
Lines 77-82
Link Here
|
77 |
* @param object the structured data object |
86 |
* @param object the structured data object |
78 |
*/ |
87 |
*/ |
79 |
public void addObject(StructuredData object) { |
88 |
public void addObject(StructuredData object) { |
|
|
89 |
markLengthChanged(); |
80 |
objects.add(object); |
90 |
objects.add(object); |
81 |
} |
91 |
} |
82 |
|
92 |
|
Lines 86-91
Link Here
|
86 |
* @param graphicsContainer a graphics container |
96 |
* @param graphicsContainer a graphics container |
87 |
*/ |
97 |
*/ |
88 |
public void addAll(AbstractGraphicsDrawingOrderContainer graphicsContainer) { |
98 |
public void addAll(AbstractGraphicsDrawingOrderContainer graphicsContainer) { |
|
|
99 |
markLengthChanged(); |
89 |
Collection/*<StructuredDataObject>*/ objects = graphicsContainer.getObjects(); |
100 |
Collection/*<StructuredDataObject>*/ objects = graphicsContainer.getObjects(); |
90 |
objects.addAll(objects); |
101 |
objects.addAll(objects); |
91 |
} |
102 |
} |
Lines 107-116
Link Here
|
107 |
public StructuredData removeLast() { |
118 |
public StructuredData removeLast() { |
108 |
int lastIndex = objects.size() - 1; |
119 |
int lastIndex = objects.size() - 1; |
109 |
StructuredData object = null; |
120 |
StructuredData object = null; |
110 |
if (lastIndex > -1) { |
121 |
if (lastIndex >= 0) { |
111 |
object = (StructuredData)objects.get(lastIndex); |
122 |
object = (StructuredData)objects.remove(lastIndex); |
112 |
objects.remove(lastIndex); |
|
|
113 |
} |
123 |
} |
|
|
124 |
if (object != null) { |
125 |
markLengthChanged(); |
126 |
} |
114 |
return object; |
127 |
return object; |
115 |
} |
128 |
} |
116 |
|
129 |
|
Lines 121-133
Link Here
|
121 |
* all enclosed objects (and their containers) |
134 |
* all enclosed objects (and their containers) |
122 |
*/ |
135 |
*/ |
123 |
public int getDataLength() { |
136 |
public int getDataLength() { |
124 |
int dataLen = 0; |
137 |
synchronized (this.lengthChanged) { |
|
|
138 |
if (this.lengthChanged[0]) { |
139 |
this.dataLength = 0; |
125 |
Iterator it = objects.iterator(); |
140 |
Iterator it = objects.iterator(); |
126 |
while (it.hasNext()) { |
141 |
while (it.hasNext()) { |
127 |
dataLen += ((StructuredData)it.next()).getDataLength(); |
142 |
this.dataLength += ((StructuredData)it.next()).getDataLength(); |
128 |
} |
143 |
} |
129 |
return dataLen; |
144 |
this.lengthChanged[0] = false; |
130 |
} |
145 |
} |
|
|
146 |
return this.dataLength; |
147 |
} |
148 |
} |
131 |
|
149 |
|
132 |
/** {@inheritDoc} */ |
150 |
/** {@inheritDoc} */ |
133 |
public void setComplete(boolean complete) { |
151 |
public void setComplete(boolean complete) { |