123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- /* ImageReaderWriterSpi.java -- Superclass for image reader and writer spis.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
- This file is part of GNU Classpath.
- GNU Classpath is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
- GNU Classpath 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 for more details.
- You should have received a copy of the GNU General Public License
- along with GNU Classpath; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA.
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library. Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module. An independent module is a module which is not derived from
- or based on this library. If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so. If you do not wish to do so, delete this
- exception statement from your version. */
- package javax.imageio.spi;
- import javax.imageio.metadata.IIOMetadataFormat;
- import javax.imageio.metadata.IIOMetadataFormatImpl;
- /**
- * An abstract superclass that contains the common parts of {@link
- * javax.imageio.spi.ImageReaderSpi} and {@link
- * javax.imageio.spi.ImageWriterSpi}.
- *
- * @since 1.4
- *
- * @author Sascha Brawer (brawer@dandelis.ch)
- */
- public abstract class ImageReaderWriterSpi
- extends IIOServiceProvider
- {
- /**
- * The human-readable, localized names of the supported image
- * formats. This value should be non-<code>null</code> after
- * construction.
- *
- * @see #getFormatNames()
- */
- protected String[] names;
- /**
- * The file suffixes of the supported image formats. This value
- * should be non-<code>null</code> after construction.
- *
- * @see #getFileSuffixes()
- */
- protected String[] suffixes;
- /**
- * The MIME types of the supported image formats. This value
- * should be non-<code>null</code> after construction.
- *
- * @see #getMIMETypes()
- */
- protected String[] MIMETypes;
- /**
- * The fully qualified name of the class that implements the {@link
- * javax.imageio.ImageReader} or {@link javax.imageio.ImageWriter}
- * interface. This value should be non-<code>null</code> after
- * construction.
- *
- * @see #getPluginClassName()
- */
- protected String pluginClassName;
- /**
- * Indicates whether the per-stream {@linkplain
- * javax.imageio.metadata.IIOMetadata metadata objects} associated
- * with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- *
- * @see #isStandardStreamMetadataFormatSupported()
- */
- protected boolean supportsStandardStreamMetadataFormat;
- /**
- * The name of the format that allows encoding all stream metadata
- * without loss, or <code>null</code> if this plug-in does not
- * provide a format that preserves all stream metadata.
- */
- protected String nativeStreamMetadataFormatName;
- protected String nativeStreamMetadataFormatClassName;
- /**
- * The names of additional formats for encoding stream metadata,
- * other than the {@linkplain
- * #isStandardStreamMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- */
- protected String[] extraStreamMetadataFormatNames;
- protected String[] extraStreamMetadataFormatClassNames;
- /**
- * Indicates whether the per-image {@linkplain
- * javax.imageio.metadata.IIOMetadata metadata objects} associated
- * with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- *
- * @see #isStandardImageMetadataFormatSupported()
- */
- protected boolean supportsStandardImageMetadataFormat;
- /**
- * The name of the format that allows encoding all image metadata
- * without loss, or <code>null</code> if this plug-in does not
- * provide a format that preserves all image metadata.
- */
- protected String nativeImageMetadataFormatName;
- protected String nativeImageMetadataFormatClassName;
- /**
- * The names of additional formats for encoding image metadata,
- * other than the {@linkplain
- * #isStandardImageMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeImageMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- */
- protected String[] extraImageMetadataFormatNames;
- protected String[] extraImageMetadataFormatClassNames;
- /**
- * Constructs an <code>ImageReaderWriteSpi</code> instance, without
- * specifying a number of parameters. Constructors of concrete
- * subclasses must ensure that they set all inherited fields to
- * meaningful values.
- */
- public ImageReaderWriterSpi()
- {
- }
- /**
- * Constructs an <code>ImageReaderWriteSpi</code> instance,
- * specifying a number of parameters.
- *
- * @param names the human-readable, localized names of the supported
- * image formats, for example <code>[“Tagged Image File
- * Format”, “Portable Network
- * Graphics”]</code>.
- *
- * @param suffixes the file suffixes of the supported image formats,
- * for example <code>[“tiff”, “tif”,
- * “png”]</code>.
- *
- * @param MIMETypes the MIME types of the supported image formats,
- * for example <code>[“image/tiff”,
- * “image/png”]</code>.
- *
- * @param pluginClassName the fully qualified name of the class that
- * implements the {@link javax.imageio.ImageReader} or {@link
- * javax.imageio.ImageWriter} interface.
- *
- * @param supportsStandardStreamMetadataFormat whether the
- * per-stream {@linkplain javax.imageio.metadata.IIOMetadata
- * metadata objects} associated with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- *
- * @param nativeStreamMetadataFormatName the name of the format that
- * allows encoding all stream metadata without loss, or
- * <code>null</code> if this plug-in does not provide a format that
- * preserves all stream metadata.
- *
- * @param extraStreamMetadataFormatNames the names of additional
- * formats for encoding stream metadata, other than the {@linkplain
- * #isStandardStreamMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- *
- * @param supportsStandardImageMetadataFormat whether the per-image
- * {@linkplain javax.imageio.metadata.IIOMetadata metadata objects}
- * associated with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- *
- * @param nativeImageMetadataFormatName the name of the format that
- * allows encoding all image metadata without loss, or
- * <code>null</code> if this plug-in does not provide a format that
- * preserves all image metadata.
- *
- * @param extraImageMetadataFormatNames the names of additional
- * formats for encoding image metadata, other than the {@linkplain
- * #isStandardImageMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeImageMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- *
- * @throws IllegalArgumentException if <code>vendorName</code>
- * or <code>version</code> is <code>null</code>.
- */
- public ImageReaderWriterSpi(String vendorName, String version,
- String[] names, String[] suffixes,
- String[] MIMETypes, String pluginClassName,
- boolean supportsStandardStreamMetadataFormat,
- String nativeStreamMetadataFormatName,
- String nativeStreamMetadataFormatClassName,
- String[] extraStreamMetadataFormatNames,
- String[] extraStreamMetadataFormatClassNames,
- boolean supportsStandardImageMetadataFormat,
- String nativeImageMetadataFormatName,
- String nativeImageMetadataFormatClassName,
- String[] extraImageMetadataFormatNames,
- String[] extraImageMetadataFormatClassNames)
- {
- /* The inherited constructor will throw IllegalArgumentException
- * if one of its arguments is null.
- */
- super(vendorName, version);
- if (names == null || names.length == 0 || pluginClassName == null)
- throw new IllegalArgumentException();
- this.names = names;
- this.suffixes = suffixes;
- this.MIMETypes = MIMETypes;
- this.pluginClassName = pluginClassName;
- this.supportsStandardStreamMetadataFormat
- = supportsStandardStreamMetadataFormat;
- this.nativeStreamMetadataFormatName
- = nativeStreamMetadataFormatName;
- this.nativeStreamMetadataFormatClassName
- = nativeStreamMetadataFormatClassName;
- this.extraStreamMetadataFormatNames
- = extraStreamMetadataFormatNames;
- this.extraStreamMetadataFormatClassNames
- = extraStreamMetadataFormatClassNames;
- this.supportsStandardImageMetadataFormat
- = supportsStandardImageMetadataFormat;
- this.nativeImageMetadataFormatName
- = nativeImageMetadataFormatName;
- this.nativeImageMetadataFormatClassName
- = nativeImageMetadataFormatClassName;
- this.extraImageMetadataFormatNames
- = extraImageMetadataFormatNames;
- this.extraImageMetadataFormatClassNames
- = extraImageMetadataFormatClassNames;
- }
- /**
- * Returns the human-readable, localized names of the supported
- * image formats. For example, a plug-in might return an array with
- * the elements <code>[“Tagged Image File Format”,
- * “Portable Network Graphics”]</code>.
- */
- public String[] getFormatNames()
- {
- return (String[]) names.clone();
- }
- /**
- * Returns the file suffixes of the supported image formats, for
- * example <code>[“tiff”, “tif”,
- * “png”]</code>.
- */
- public String[] getFileSuffixes()
- {
- return suffixes;
- }
- /**
- * Returns the MIME types of the supported image formats, for
- * example <code>[“image/tiff”,
- * “image/png”]</code>.
- *
- * @return an array of MIME type strings, or <code>null</code> if
- * none of the supported formats has an associated MIME type.
- */
- public String[] getMIMETypes()
- {
- return MIMETypes;
- }
- /**
- * Returns the fully qualified name of the class that implements the
- * {@link javax.imageio.ImageReader} or {@link
- * javax.imageio.ImageWriter} interface.
- */
- public String getPluginClassName()
- {
- return pluginClassName;
- }
- /**
- * Returns whether the per-stream {@linkplain
- * javax.imageio.metadata.IIOMetadata metadata objects} associated
- * with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- */
- public boolean isStandardStreamMetadataFormatSupported()
- {
- return supportsStandardStreamMetadataFormat;
- }
- /**
- * Returns the name of the format that allows encoding all stream
- * metadata without loss, or <code>null</code> if this plug-in does
- * not provide a format that preserves all stream metadata.
- *
- * @see #getNativeImageMetadataFormatName()
- */
- public String getNativeStreamMetadataFormatName()
- {
- return nativeStreamMetadataFormatName;
- }
- /**
- * Returns the names of additional formats for encoding stream
- * metadata, other than the {@linkplain
- * #isStandardStreamMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeStreamMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- *
- * @see #getExtraImageMetadataFormatNames()
- */
- public String[] getExtraStreamMetadataFormatNames()
- {
- return extraStreamMetadataFormatNames;
- }
- /**
- * Returns whether the per-image {@linkplain
- * javax.imageio.metadata.IIOMetadata metadata objects} associated
- * with this plug-in support format
- * <code>“javax_imageio_1.0”</code> in their
- * <code>getAsTree</code> and <code>setAsTree</code> methods.
- */
- public boolean isStandardImageMetadataFormatSupported()
- {
- return supportsStandardImageMetadataFormat;
- }
- /**
- * Returns the name of the format that allows encoding all image
- * metadata without loss, or <code>null</code> if this plug-in does
- * not provide a format that preserves all image metadata.
- *
- * @see #getNativeStreamMetadataFormatName()
- */
- public String getNativeImageMetadataFormatName()
- {
- return nativeImageMetadataFormatName;
- }
- /**
- * Returns the names of additional formats for encoding image
- * metadata, other than the {@linkplain
- * #isStandardImageMetadataFormatSupported() standard} and the
- * {@linkplain #getNativeImageMetadataFormatName() native} formats,
- * or <code>null</code> if this plug-in does not provide any extra
- * formats.
- *
- * @see #getExtraStreamMetadataFormatNames()
- */
- public String[] getExtraImageMetadataFormatNames()
- {
- return extraImageMetadataFormatNames;
- }
- /**
- * Returns an IIOMetadataFormat object that represents the requested
- * stream metadata format or null if the given format is supported
- * but no IIOMetadataFormat can be created for it.
- *
- * @param formatName the requested stream metadata format name
- *
- * @return an IIOMetadataFormat object or null
- *
- * @throws IllegalArgumentException if formatName is null or is not
- * one of the standard metadata format or this provider's native or
- * extra stream metadata formats
- */
- public IIOMetadataFormat getStreamMetadataFormat (String formatName)
- {
- if (formatName == null)
- throw new IllegalArgumentException ("null stream metadata format name");
- if (!formatName.equals (getNativeStreamMetadataFormatName())
- && !formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName))
- {
- String[] extraNames = getExtraStreamMetadataFormatNames ();
- boolean foundName = false;
- for (int i = 0; i < extraNames.length; i++)
- {
- if (formatName.equals(extraNames[i]))
- {
- foundName = true;
- break;
- }
- }
- if (!foundName)
- throw new IllegalArgumentException ("unsupported stream metadata format name");
- }
- if (formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName))
- return IIOMetadataFormatImpl.getStandardFormatInstance ();
- else
- // Default implementation returns null.
- return null;
- }
- /**
- * Returns an IIOMetadataFormat object that represents the requested
- * image metadata format or null if the given format is supported
- * but no IIOMetadataFormat can be created for it.
- *
- * @param formatName the requested image metadata format name
- *
- * @return an IIOMetadataFormat object or null
- *
- * @throws IllegalArgumentException if formatName is null or is not
- * one of the standard metadata format or this provider's native or
- * extra image metadata formats
- */
- public IIOMetadataFormat getImageMetadataFormat (String formatName)
- {
- if (formatName == null)
- throw new IllegalArgumentException ("null image metadata format name");
- if (!formatName.equals (getNativeImageMetadataFormatName())
- && !formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName))
- {
- String[] extraNames = getExtraImageMetadataFormatNames ();
- boolean foundName = false;
- for (int i = 0; i < extraNames.length; i++)
- {
- if (formatName.equals(extraNames[i]))
- {
- foundName = true;
- break;
- }
- }
- if (!foundName)
- throw new IllegalArgumentException ("unsupported image metadata format name");
- }
- if (formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName))
- return IIOMetadataFormatImpl.getStandardFormatInstance ();
- else
- // Default implementation returns null.
- return null;
- }
- }
|