/*
 * 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: AbstractResourcesDSCComment.java 1804124 2017-08-04 14:13:54Z ssteiner $ */

package org.apache.xmlgraphics.ps.dsc.events;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.xmlgraphics.ps.PSGenerator;
import org.apache.xmlgraphics.ps.PSProcSet;
import org.apache.xmlgraphics.ps.PSResource;

Abstract base class for Resource DSC comments (DocumentNeededResources, DocumentSuppliedResources and PageResources).
/** * Abstract base class for Resource DSC comments (DocumentNeededResources, * DocumentSuppliedResources and PageResources). */
public abstract class AbstractResourcesDSCComment extends AbstractDSCComment { private Set resources;
Creates a new instance.
/** * Creates a new instance. */
public AbstractResourcesDSCComment() { super(); }
Creates a new instance.
Params:
  • resources – a Collection of PSResource instances
/** * Creates a new instance. * @param resources a Collection of PSResource instances */
public AbstractResourcesDSCComment(Collection resources) { addResources(resources); }
{@inheritDoc}
/** {@inheritDoc} */
public boolean hasValues() { return true; } private void prepareResourceSet() { if (this.resources == null) { this.resources = new java.util.TreeSet(); } }
Adds a new resource.
Params:
  • res – the resource
/** * Adds a new resource. * @param res the resource */
public void addResource(PSResource res) { prepareResourceSet(); this.resources.add(res); }
Adds a collection of resources.
Params:
  • resources – a Collection of PSResource instances.
/** * Adds a collection of resources. * @param resources a Collection of PSResource instances. */
public void addResources(Collection resources) { if (resources != null) { prepareResourceSet(); this.resources.addAll(resources); } }
Returns the set of resources associated with this DSC comment.
Returns:the set of resources
/** * Returns the set of resources associated with this DSC comment. * @return the set of resources */
public Set getResources() { return Collections.unmodifiableSet(this.resources); }
Defines the known resource types (font, procset, file, pattern etc.).
/** * Defines the known resource types (font, procset, file, pattern etc.). */
static final Set RESOURCE_TYPES = new java.util.HashSet(); static { RESOURCE_TYPES.add(PSResource.TYPE_FONT); RESOURCE_TYPES.add(PSResource.TYPE_PROCSET); RESOURCE_TYPES.add(PSResource.TYPE_FILE); RESOURCE_TYPES.add(PSResource.TYPE_PATTERN); RESOURCE_TYPES.add(PSResource.TYPE_FORM); RESOURCE_TYPES.add(PSResource.TYPE_ENCODING); }
{@inheritDoc}
/** {@inheritDoc} */
public void parseValue(String value) { List params = splitParams(value); String currentResourceType = null; Iterator iter = params.iterator(); while (iter.hasNext()) { String name = (String)iter.next(); if (RESOURCE_TYPES.contains(name)) { currentResourceType = name; } if (currentResourceType == null) { throw new IllegalArgumentException( "<resources> must begin with a resource type. Found: " + name); } if (PSResource.TYPE_FONT.equals(currentResourceType)) { String fontname = (String)iter.next(); addResource(new PSResource(name, fontname)); } else if (PSResource.TYPE_FORM.equals(currentResourceType)) { String formname = (String)iter.next(); addResource(new PSResource(name, formname)); } else if (PSResource.TYPE_PROCSET.equals(currentResourceType)) { String procname = (String)iter.next(); String version = (String)iter.next(); String revision = (String)iter.next(); addResource(new PSProcSet(procname, Float.parseFloat(version), Integer.parseInt(revision))); } else if (PSResource.TYPE_FILE.equals(currentResourceType)) { String filename = (String)iter.next(); addResource(new PSResource(name, filename)); } else { throw new IllegalArgumentException("Invalid resource type: " + currentResourceType); } } }
{@inheritDoc}
/** {@inheritDoc} */
public void generate(PSGenerator gen) throws IOException { if (resources == null || resources.size() == 0) { return; } StringBuffer sb = new StringBuffer(); sb.append("%%").append(getName()).append(": "); boolean first = true; for (Object resource : resources) { if (!first) { gen.writeln(sb.toString()); sb.setLength(0); sb.append("%%+ "); } PSResource res = (PSResource) resource; sb.append(res.getResourceSpecification()); first = false; } gen.writeln(sb.toString()); } }