mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			512 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			512 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Java
		
	
	
	
/* 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;
 | 
						|
  }
 | 
						|
}
 |