/* * 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. */ /** * @author Rustem V. Rafikov * @version $Revision: 1.3 $ */ package javax.imageio.spi; import org.apache.harmony.x.imageio.metadata.IIOMetadataUtils; import javax.imageio.metadata.IIOMetadataFormat; /** * The ImageReaderWriterSpi class is a superclass for the ImageReaderSpi and * ImageWriterSpi SPIs. * * @since Android 1.0 */ public abstract class ImageReaderWriterSpi extends IIOServiceProvider implements RegisterableService { /** * The names. */ protected String[] names; /** * The suffixes. */ protected String[] suffixes; /** * The MIME types. */ protected String[] MIMETypes; /** * The plug-in class name. */ protected String pluginClassName; /** * Whether the reader/writer supports standard stream metadata format. */ protected boolean supportsStandardStreamMetadataFormat; /** * The native stream metadata format name. */ protected String nativeStreamMetadataFormatName; /** * The native stream metadata format class name. */ protected String nativeStreamMetadataFormatClassName; /** * The extra stream metadata format names. */ protected String[] extraStreamMetadataFormatNames; /** * The extra stream metadata format class names. */ protected String[] extraStreamMetadataFormatClassNames; /** * Whether the reader/writer supports standard image metadata format. */ protected boolean supportsStandardImageMetadataFormat; /** * The native image metadata format name. */ protected String nativeImageMetadataFormatName; /** * The native image metadata format class name. */ protected String nativeImageMetadataFormatClassName; /** * The extra image metadata format names. */ protected String[] extraImageMetadataFormatNames; /** * The extra image metadata format class names. */ protected String[] extraImageMetadataFormatClassNames; /** * Instantiates a new ImageReaderWriterSpi. * * @param vendorName * the vendor name. * @param version * the version. * @param names * the format names. * @param suffixes * the array of strings representing the file suffixes. * @param MIMETypes * the an array of strings representing MIME types. * @param pluginClassName * the plug-in class name. * @param supportsStandardStreamMetadataFormat * the value indicating if stream metadata can be described by * standard metadata format. * @param nativeStreamMetadataFormatName * the native stream metadata format name, returned by * getNativeStreamMetadataFormatName. * @param nativeStreamMetadataFormatClassName * the native stream metadata format class name, returned by * getNativeStreamMetadataFormat. * @param extraStreamMetadataFormatNames * the extra stream metadata format names, returned by * getExtraStreamMetadataFormatNames. * @param extraStreamMetadataFormatClassNames * the extra stream metadata format class names, returned by * getStreamMetadataFormat. * @param supportsStandardImageMetadataFormat * the value indicating if image metadata can be described by * standard metadata format. * @param nativeImageMetadataFormatName * the native image metadata format name, returned by * getNativeImageMetadataFormatName. * @param nativeImageMetadataFormatClassName * the native image metadata format class name, returned by * getNativeImageMetadataFormat. * @param extraImageMetadataFormatNames * the extra image metadata format names, returned by * getExtraImageMetadataFormatNames. * @param extraImageMetadataFormatClassNames * the extra image metadata format class names, returned by * getImageMetadataFormat. */ 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) { super(vendorName, version); if (names == null || names.length == 0) { throw new NullPointerException("format names array cannot be NULL or empty"); } if (pluginClassName == null) { throw new NullPointerException("Plugin class name cannot be NULL"); } // We clone all the arrays to be consistent with the fact that // some methods of this class must return clones of the arrays // as it is stated in the spec. this.names = names.clone(); this.suffixes = suffixes == null ? null : suffixes.clone(); this.MIMETypes = MIMETypes == null ? null : MIMETypes.clone(); this.pluginClassName = pluginClassName; this.supportsStandardStreamMetadataFormat = supportsStandardStreamMetadataFormat; this.nativeStreamMetadataFormatName = nativeStreamMetadataFormatName; this.nativeStreamMetadataFormatClassName = nativeStreamMetadataFormatClassName; this.extraStreamMetadataFormatNames = extraStreamMetadataFormatNames == null ? null : extraStreamMetadataFormatNames.clone(); this.extraStreamMetadataFormatClassNames = extraStreamMetadataFormatClassNames == null ? null : extraStreamMetadataFormatClassNames.clone(); this.supportsStandardImageMetadataFormat = supportsStandardImageMetadataFormat; this.nativeImageMetadataFormatName = nativeImageMetadataFormatName; this.nativeImageMetadataFormatClassName = nativeImageMetadataFormatClassName; this.extraImageMetadataFormatNames = extraImageMetadataFormatNames == null ? null : extraImageMetadataFormatNames.clone(); this.extraImageMetadataFormatClassNames = extraImageMetadataFormatClassNames == null ? null : extraImageMetadataFormatClassNames.clone(); } /** * Instantiates a new ImageReaderWriterSpi. */ public ImageReaderWriterSpi() { } /** * Gets an array of strings representing names of the formats that can be * used by the ImageReader or ImageWriter implementation associated with * this service provider. * * @return the array of supported format names. */ public String[] getFormatNames() { return names.clone(); } /** * Gets an array of strings representing file suffixes associated with the * formats that can be used by the ImageReader or ImageWriter implementation * of this service provider. * * @return the array of file suffixes. */ public String[] getFileSuffixes() { return suffixes == null ? null : suffixes.clone(); } /** * Gets an array of strings with the names of additional formats of the * image metadata objects produced or consumed by this plug-in. * * @return the array of extra image metadata format names. */ public String[] getExtraImageMetadataFormatNames() { return extraImageMetadataFormatNames == null ? null : extraImageMetadataFormatNames.clone(); } /** * Gets an array of strings with the names of additional formats of the * stream metadata objects produced or consumed by this plug-in. * * @return the array of extra stream metadata format names. */ public String[] getExtraStreamMetadataFormatNames() { return extraStreamMetadataFormatNames == null ? null : extraStreamMetadataFormatNames .clone(); } /** * Gets an IIOMetadataFormat object for the specified image metadata format * name. * * @param formatName * the format name. * @return the IIOMetadataFormat, or null. */ public IIOMetadataFormat getImageMetadataFormat(String formatName) { return IIOMetadataUtils.instantiateMetadataFormat(formatName, supportsStandardImageMetadataFormat, nativeImageMetadataFormatName, nativeImageMetadataFormatClassName, extraImageMetadataFormatNames, extraImageMetadataFormatClassNames); } /** * Gets an IIOMetadataFormat object for the specified stream metadata format * name. * * @param formatName * the format name. * @return the IIOMetadataFormat, or null. */ public IIOMetadataFormat getStreamMetadataFormat(String formatName) { return IIOMetadataUtils.instantiateMetadataFormat(formatName, supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, extraStreamMetadataFormatClassNames); } /** * Gets an array of strings representing the MIME types of the formats that * are supported by the ImageReader or ImageWriter implementation of this * service provider. * * @return the array MIME types. */ public String[] getMIMETypes() { return MIMETypes == null ? null : MIMETypes.clone(); } /** * Gets the name of the native image metadata format for this reader/writer, * which allows for lossless encoding or decoding of the image metadata with * the format. * * @return the string with native image metadata format name, or null. */ public String getNativeImageMetadataFormatName() { return nativeImageMetadataFormatName; } /** * Gets the name of the native stream metadata format for this * reader/writer, which allows for lossless encoding or decoding of the * stream metadata with the format. * * @return the string with native stream metadata format name, or null. */ public String getNativeStreamMetadataFormatName() { return nativeStreamMetadataFormatName; } /** * Gets the class name of the ImageReader or ImageWriter associated with * this service provider. * * @return the class name. */ public String getPluginClassName() { return pluginClassName; } /** * Checks if the standard metadata format is supported by the getAsTree and * setFromTree methods for the image metadata objects produced or consumed * by this reader or writer. * * @return true, if standard image metadata format is supported, false * otherwise. */ public boolean isStandardImageMetadataFormatSupported() { return supportsStandardImageMetadataFormat; } /** * Checks if the standard metadata format is supported by the getAsTree and * setFromTree methods for the stream metadata objects produced or consumed * by this reader or writer. * * @return true, if standard stream metadata format is supported, false * otherwise. */ public boolean isStandardStreamMetadataFormatSupported() { return supportsStandardStreamMetadataFormat; } }