/*
 * 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
/** * An abstract container of resource objects */
public abstract class AbstractResourceGroupContainer extends AbstractPageObject {
The container started state
/** The container started state */
protected boolean started;
the resource group object
/** the resource group object */
protected ResourceGroup resourceGroup;
Default constructor
Params:
  • factory – the object factory
/** * Default constructor * * @param factory the object factory */
public AbstractResourceGroupContainer(Factory factory) { super(factory); }
Named constructor
Params:
  • factory – the object factory
  • name – the name of this resource container
/** * 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.
Params:
  • factory – the object factory
  • name – the name of the page.
  • width – the width of the page.
  • height – the height of the page.
  • rotation – the rotation of the page.
  • widthRes – the width resolution of the page.
  • heightRes – the height resolution of the page.
/** * 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
Returns:the number of resources in this container
/** * 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
Returns:true if this resource group container contains resources
/** * 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
Returns:the resource group in this resource group container
/** * 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}
/** {@inheritDoc} */
@Override public void writeToStream(OutputStream os) throws IOException { if (!started) { writeStart(os); started = true; } writeContent(os); if (complete) { writeEnd(os); } }
{@inheritDoc}
/** {@inheritDoc} */
@Override protected void writeObjects(Collection objects, OutputStream os) throws IOException { writeObjects(objects, os, false); }
Writes a collection of AbstractAFPObjects to the AFP Datastream.
Params:
  • objects – a list of AFPObjects
  • os – The stream to write to
  • forceWrite – true if writing should happen in any case
Throws:
  • IOException – an I/O exception of some sort has occurred.
/** * 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<AbstractAFPObject> 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
Params:
  • obj – an AFP object
Returns:true if this object can be written
/** * 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(); } } }