1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id: $ */
package org.apache.fop.afp.modca;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Iterator;
import org.apache.fop.afp.Completable;
import org.apache.fop.afp.Factory;
import org.apache.fop.afp.Streamable;
/**
* An abstract container of resource objects
*/
public abstract class AbstractResourceGroupContainer extends AbstractPageObject
implements Streamable {
/** The container started state */
protected boolean started = false;
/** the resource group object */
protected ResourceGroup resourceGroup = null;
/**
* Default constructor
*
* @param factory the object factory
*/
public AbstractResourceGroupContainer(Factory factory) {
super(factory);
}
/**
* Named constructor
*
* @param factory the object factory
* @param name the name of this resource container
*/
public AbstractResourceGroupContainer(Factory factory, String name) {
super(factory, name);
}
/**
* Construct a new page object for the specified name argument, the page
* name should be an 8 character identifier.
*
* @param factory
* the object factory
* @param name
* the name of the page.
* @param width
* the width of the page.
* @param height
* the height of the page.
* @param rotation
* the rotation of the page.
* @param widthRes
* the width resolution of the page.
* @param heightRes
* the height resolution of the page.
*/
public AbstractResourceGroupContainer(Factory factory,
String name, int width, int height, int rotation, int widthRes, int heightRes) {
super(factory, name, width, height, rotation, widthRes, heightRes);
}
/**
* Return the number of resources in this container
*
* @return the number of resources in this container
*/
protected int getResourceCount() {
if (resourceGroup != null) {
return resourceGroup.getResourceCount();
}
return 0;
}
/**
* Returns true if this resource group container contains resources
*
* @return true if this resource group container contains resources
*/
protected boolean hasResources() {
return resourceGroup != null && resourceGroup.getResourceCount() > 0;
}
/**
* Returns the resource group in this resource group container
*
* @return the resource group in this resource group container
*/
public ResourceGroup getResourceGroup() {
if (resourceGroup == null) {
resourceGroup = factory.createResourceGroup();
}
return resourceGroup;
}
// /** {@inheritDoc} */
// protected void writeContent(OutputStream os) throws IOException {
// if (resourceGroup != null) {
// resourceGroup.writeToStream(os);
// }
// super.writeContent(os);
// }
/** {@inheritDoc} */
public void writeToStream(OutputStream os) throws IOException {
if (!started) {
writeStart(os);
started = true;
}
writeContent(os);
if (complete) {
writeEnd(os);
}
}
/** {@inheritDoc} */
protected void writeObjects(Collection/*<AbstractAFPObject>*/ objects, OutputStream os)
throws IOException {
if (objects != null && objects.size() > 0) {
Iterator it = objects.iterator();
while (it.hasNext()) {
AbstractAFPObject ao = (AbstractAFPObject)it.next();
if (canWrite(ao)) {
ao.writeToStream(os);
it.remove();
} else {
break;
}
}
}
}
/**
* Returns true if this object can be written
*
* @param obj an AFP object
* @return true if this object can be written
*/
protected boolean canWrite(AbstractAFPObject obj) {
if (obj instanceof AbstractPageObject) {
return ((Completable)obj).isComplete();
}
else {
return this.isComplete();
}
}
}
|