blob: b3c0f92fa064da3706b370a6f407153d67d2207d [file] [log] [blame]
/*
* 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.
*/
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 plugin 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 plugin class name.
* @param supportsStandardStreamMetadataFormat the value indicating
* if stream metadata can be described by standart 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 an 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 an 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;
}
}