org.apache.fop.afp.modca.AbstractResourceGroupContainer Maven / Gradle / Ivy
/*
* 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: AbstractResourceGroupContainer.java 1762060 2016-09-23 12:57:46Z ssteiner $ */
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;
/**
* An abstract container of resource objects
*/
public abstract class AbstractResourceGroupContainer extends AbstractPageObject {
/** The container started state */
protected boolean started;
/** the resource group object */
protected ResourceGroup resourceGroup;
/**
* 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} */
@Override
public void writeToStream(OutputStream os) throws IOException {
if (!started) {
writeStart(os);
started = true;
}
writeContent(os);
if (complete) {
writeEnd(os);
}
}
/** {@inheritDoc} */
@Override
protected void writeObjects(Collection objects, OutputStream os)
throws IOException {
writeObjects(objects, os, false);
}
/**
* Writes a collection of {@link AbstractAFPObject}s to the AFP Datastream.
*
* @param objects a list of AFPObjects
* @param os The stream to write to
* @param forceWrite true if writing should happen in any case
* @throws java.io.IOException an I/O exception of some sort has occurred.
*/
protected void writeObjects(Collection objects, OutputStream os,
boolean forceWrite) throws IOException {
if (objects != null && objects.size() > 0) {
Iterator it = objects.iterator();
while (it.hasNext()) {
AbstractAFPObject ao = (AbstractAFPObject)it.next();
if (forceWrite || 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 Completable) {
return ((Completable)obj).isComplete();
} else {
return this.isComplete();
}
}
}