/* * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.print.attribute; import java.io.Serializable; /** * Class AttributeSetUtilities provides static methods for manipulating * AttributeSets. *
* An unmodifiable view U of an AttributeSet S provides a * client with "read-only" access to S. Query operations on U * "read through" to S; thus, changes in S are reflected in * U. However, any attempt to modify U, * results in an UnmodifiableSetException. * The unmodifiable view object U will be serializable if the * attribute set object S is serializable. *
* A synchronized view V of an attribute set S provides a * client with synchronized (multiple thread safe) access to S. Each * operation of V is synchronized using V itself as the lock * object and then merely invokes the corresponding operation of S. In * order to guarantee mutually exclusive access, it is critical that all * access to S is accomplished through V. The synchronized view * object V will be serializable if the attribute set object S * is serializable. *
* As mentioned in the package description of javax.print, a null reference
* parameter to methods is
* incorrect unless explicitly documented on the method as having a meaningful
* interpretation. Usage to the contrary is incorrect coding and may result in
* a run time exception either immediately
* or at some later time. IllegalArgumentException and NullPointerException
* are examples of typical and acceptable run time exceptions for such cases.
*
* @author Alan Kaminsky
*/
public final class AttributeSetUtilities {
/* Suppress default constructor, ensuring non-instantiability.
*/
private AttributeSetUtilities() {
}
/**
* @serial include
*/
private static class UnmodifiableAttributeSet
implements AttributeSet, Serializable {
private AttributeSet attrset;
/* Unmodifiable view of the underlying attribute set.
*/
public UnmodifiableAttributeSet(AttributeSet attributeSet) {
attrset = attributeSet;
}
public Attribute get(Class> key) {
return attrset.get(key);
}
public boolean add(Attribute attribute) {
throw new UnmodifiableSetException();
}
public synchronized boolean remove(Class> category) {
throw new UnmodifiableSetException();
}
public boolean remove(Attribute attribute) {
throw new UnmodifiableSetException();
}
public boolean containsKey(Class> category) {
return attrset.containsKey(category);
}
public boolean containsValue(Attribute attribute) {
return attrset.containsValue(attribute);
}
public boolean addAll(AttributeSet attributes) {
throw new UnmodifiableSetException();
}
public int size() {
return attrset.size();
}
public Attribute[] toArray() {
return attrset.toArray();
}
public void clear() {
throw new UnmodifiableSetException();
}
public boolean isEmpty() {
return attrset.isEmpty();
}
public boolean equals(Object o) {
return attrset.equals (o);
}
public int hashCode() {
return attrset.hashCode();
}
}
/**
* @serial include
*/
private static class UnmodifiableDocAttributeSet
extends UnmodifiableAttributeSet
implements DocAttributeSet, Serializable {
public UnmodifiableDocAttributeSet(DocAttributeSet attributeSet) {
super (attributeSet);
}
}
/**
* @serial include
*/
private static class UnmodifiablePrintRequestAttributeSet
extends UnmodifiableAttributeSet
implements PrintRequestAttributeSet, Serializable
{
public UnmodifiablePrintRequestAttributeSet
(PrintRequestAttributeSet attributeSet) {
super (attributeSet);
}
}
/**
* @serial include
*/
private static class UnmodifiablePrintJobAttributeSet
extends UnmodifiableAttributeSet
implements PrintJobAttributeSet, Serializable
{
public UnmodifiablePrintJobAttributeSet
(PrintJobAttributeSet attributeSet) {
super (attributeSet);
}
}
/**
* @serial include
*/
private static class UnmodifiablePrintServiceAttributeSet
extends UnmodifiableAttributeSet
implements PrintServiceAttributeSet, Serializable
{
public UnmodifiablePrintServiceAttributeSet
(PrintServiceAttributeSet attributeSet) {
super (attributeSet);
}
}
/**
* Creates an unmodifiable view of the given attribute set.
*
* @param attributeSet Underlying attribute set.
*
* @return Unmodifiable view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null. Null is never a
*/
public static AttributeSet unmodifiableView(AttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new UnmodifiableAttributeSet(attributeSet);
}
/**
* Creates an unmodifiable view of the given doc attribute set.
*
* @param attributeSet Underlying doc attribute set.
*
* @return Unmodifiable view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static DocAttributeSet unmodifiableView
(DocAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new UnmodifiableDocAttributeSet(attributeSet);
}
/**
* Creates an unmodifiable view of the given print request attribute set.
*
* @param attributeSet Underlying print request attribute set.
*
* @return Unmodifiable view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static PrintRequestAttributeSet
unmodifiableView(PrintRequestAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new UnmodifiablePrintRequestAttributeSet(attributeSet);
}
/**
* Creates an unmodifiable view of the given print job attribute set.
*
* @param attributeSet Underlying print job attribute set.
*
* @return Unmodifiable view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static PrintJobAttributeSet
unmodifiableView(PrintJobAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new UnmodifiablePrintJobAttributeSet(attributeSet);
}
/**
* Creates an unmodifiable view of the given print service attribute set.
*
* @param attributeSet Underlying print service attribute set.
*
* @return Unmodifiable view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static PrintServiceAttributeSet
unmodifiableView(PrintServiceAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new UnmodifiablePrintServiceAttributeSet (attributeSet);
}
/**
* @serial include
*/
private static class SynchronizedAttributeSet
implements AttributeSet, Serializable {
private AttributeSet attrset;
public SynchronizedAttributeSet(AttributeSet attributeSet) {
attrset = attributeSet;
}
public synchronized Attribute get(Class> category) {
return attrset.get(category);
}
public synchronized boolean add(Attribute attribute) {
return attrset.add(attribute);
}
public synchronized boolean remove(Class> category) {
return attrset.remove(category);
}
public synchronized boolean remove(Attribute attribute) {
return attrset.remove(attribute);
}
public synchronized boolean containsKey(Class> category) {
return attrset.containsKey(category);
}
public synchronized boolean containsValue(Attribute attribute) {
return attrset.containsValue(attribute);
}
public synchronized boolean addAll(AttributeSet attributes) {
return attrset.addAll(attributes);
}
public synchronized int size() {
return attrset.size();
}
public synchronized Attribute[] toArray() {
return attrset.toArray();
}
public synchronized void clear() {
attrset.clear();
}
public synchronized boolean isEmpty() {
return attrset.isEmpty();
}
public synchronized boolean equals(Object o) {
return attrset.equals (o);
}
public synchronized int hashCode() {
return attrset.hashCode();
}
}
/**
* @serial include
*/
private static class SynchronizedDocAttributeSet
extends SynchronizedAttributeSet
implements DocAttributeSet, Serializable {
public SynchronizedDocAttributeSet(DocAttributeSet attributeSet) {
super(attributeSet);
}
}
/**
* @serial include
*/
private static class SynchronizedPrintRequestAttributeSet
extends SynchronizedAttributeSet
implements PrintRequestAttributeSet, Serializable {
public SynchronizedPrintRequestAttributeSet
(PrintRequestAttributeSet attributeSet) {
super(attributeSet);
}
}
/**
* @serial include
*/
private static class SynchronizedPrintJobAttributeSet
extends SynchronizedAttributeSet
implements PrintJobAttributeSet, Serializable {
public SynchronizedPrintJobAttributeSet
(PrintJobAttributeSet attributeSet) {
super(attributeSet);
}
}
/**
* @serial include
*/
private static class SynchronizedPrintServiceAttributeSet
extends SynchronizedAttributeSet
implements PrintServiceAttributeSet, Serializable {
public SynchronizedPrintServiceAttributeSet
(PrintServiceAttributeSet attributeSet) {
super(attributeSet);
}
}
/**
* Creates a synchronized view of the given attribute set.
*
* @param attributeSet Underlying attribute set.
*
* @return Synchronized view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static AttributeSet synchronizedView
(AttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new SynchronizedAttributeSet(attributeSet);
}
/**
* Creates a synchronized view of the given doc attribute set.
*
* @param attributeSet Underlying doc attribute set.
*
* @return Synchronized view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static DocAttributeSet
synchronizedView(DocAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new SynchronizedDocAttributeSet(attributeSet);
}
/**
* Creates a synchronized view of the given print request attribute set.
*
* @param attributeSet Underlying print request attribute set.
*
* @return Synchronized view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static PrintRequestAttributeSet
synchronizedView(PrintRequestAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new SynchronizedPrintRequestAttributeSet(attributeSet);
}
/**
* Creates a synchronized view of the given print job attribute set.
*
* @param attributeSet Underlying print job attribute set.
*
* @return Synchronized view of attributeSet
.
*
* @exception NullPointerException
* Thrown if attributeSet
is null.
*/
public static PrintJobAttributeSet
synchronizedView(PrintJobAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new SynchronizedPrintJobAttributeSet(attributeSet);
}
/**
* Creates a synchronized view of the given print service attribute set.
*
* @param attributeSet Underlying print service attribute set.
*
* @return Synchronized view of attributeSet
.
*/
public static PrintServiceAttributeSet
synchronizedView(PrintServiceAttributeSet attributeSet) {
if (attributeSet == null) {
throw new NullPointerException();
}
return new SynchronizedPrintServiceAttributeSet(attributeSet);
}
/**
* Verify that the given object is a {@link java.lang.Class Class} that
* implements the given interface, which is assumed to be interface {@link
* Attribute Attribute} or a subinterface thereof.
*
* @param object Object to test.
* @param interfaceName Interface the object must implement.
*
* @return If object
is a {@link java.lang.Class Class}
* that implements interfaceName
,
* object
is returned downcast to type {@link
* java.lang.Class Class}; otherwise an exception is thrown.
*
* @exception NullPointerException
* (unchecked exception) Thrown if object
is null.
* @exception ClassCastException
* (unchecked exception) Thrown if object
is not a
* {@link java.lang.Class Class} that implements
* interfaceName
.
*/
public static Class>
verifyAttributeCategory(Object object, Class> interfaceName) {
Class result = (Class) object;
if (interfaceName.isAssignableFrom (result)) {
return result;
}
else {
throw new ClassCastException();
}
}
/**
* Verify that the given object is an instance of the given interface, which
* is assumed to be interface {@link Attribute Attribute} or a subinterface
* thereof.
*
* @param object Object to test.
* @param interfaceName Interface of which the object must be an instance.
*
* @return If object
is an instance of
* interfaceName
, object
is returned
* downcast to type {@link Attribute Attribute}; otherwise an
* exception is thrown.
*
* @exception NullPointerException
* (unchecked exception) Thrown if object
is null.
* @exception ClassCastException
* (unchecked exception) Thrown if object
is not an
* instance of interfaceName
.
*/
public static Attribute
verifyAttributeValue(Object object, Class> interfaceName) {
if (object == null) {
throw new NullPointerException();
}
else if (interfaceName.isInstance (object)) {
return (Attribute) object;
} else {
throw new ClassCastException();
}
}
/**
* Verify that the given attribute category object is equal to the
* category of the given attribute value object. If so, this method
* returns doing nothing. If not, this method throws an exception.
*
* @param category Attribute category to test.
* @param attribute Attribute value to test.
*
* @exception NullPointerException
* (unchecked exception) Thrown if the category
is
* null or if the attribute
is null.
* @exception IllegalArgumentException
* (unchecked exception) Thrown if the category
is not
* equal to the category of the attribute
.
*/
public static void
verifyCategoryForValue(Class> category, Attribute attribute) {
if (!category.equals (attribute.getCategory())) {
throw new IllegalArgumentException();
}
}
}