View | Details | Raw Unified | Return to bug 46883
Collapse All | Expand All

(-)src/java/org/apache/fop/afp/goca/AbstractGraphicsDrawingOrderContainer.java (-10 / +28 lines)
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) {

Return to bug 46883