1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17/**
18 * @author Rustem V. Rafikov
19 * @version $Revision: 1.3 $
20 */
21
22package javax.imageio.spi;
23
24import javax.imageio.stream.ImageInputStream;
25import javax.imageio.ImageReader;
26import java.io.IOException;
27
28/**
29 * The ImageReaderSpi abstract class is a service provider interface (SPI) for
30 * ImageReaders.
31 *
32 * @since Android 1.0
33 */
34public abstract class ImageReaderSpi extends ImageReaderWriterSpi {
35
36    /**
37     * The STANDARD_INPUT_TYPE contains ImageInputStream.class.
38     */
39    public static final Class[] STANDARD_INPUT_TYPE = new Class[] {
40        ImageInputStream.class
41    };
42
43    /**
44     * The input types.
45     */
46    protected Class[] inputTypes;
47
48    /**
49     * The writer SPI names.
50     */
51    protected String[] writerSpiNames;
52
53    /**
54     * Instantiates a new ImageReaderSpi.
55     */
56    protected ImageReaderSpi() {
57        throw new UnsupportedOperationException("Not supported yet");
58    }
59
60    /**
61     * Instantiates a new ImageReaderSpi.
62     *
63     * @param vendorName
64     *            the vendor name.
65     * @param version
66     *            the version.
67     * @param names
68     *            the format names.
69     * @param suffixes
70     *            the array of strings representing the file suffixes.
71     * @param MIMETypes
72     *            the an array of strings representing MIME types.
73     * @param pluginClassName
74     *            the plug-in class name.
75     * @param inputTypes
76     *            the input types.
77     * @param writerSpiNames
78     *            the array of strings with class names of all associated
79     *            ImageWriters.
80     * @param supportsStandardStreamMetadataFormat
81     *            the value indicating if stream metadata can be described by
82     *            standard metadata format.
83     * @param nativeStreamMetadataFormatName
84     *            the native stream metadata format name, returned by
85     *            getNativeStreamMetadataFormatName.
86     * @param nativeStreamMetadataFormatClassName
87     *            the native stream metadata format class name, returned by
88     *            getNativeStreamMetadataFormat.
89     * @param extraStreamMetadataFormatNames
90     *            the extra stream metadata format names, returned by
91     *            getExtraStreamMetadataFormatNames.
92     * @param extraStreamMetadataFormatClassNames
93     *            the extra stream metadata format class names, returned by
94     *            getStreamMetadataFormat.
95     * @param supportsStandardImageMetadataFormat
96     *            the value indicating if image metadata can be described by
97     *            standard metadata format.
98     * @param nativeImageMetadataFormatName
99     *            the native image metadata format name, returned by
100     *            getNativeImageMetadataFormatName.
101     * @param nativeImageMetadataFormatClassName
102     *            the native image metadata format class name, returned by
103     *            getNativeImageMetadataFormat.
104     * @param extraImageMetadataFormatNames
105     *            the extra image metadata format names, returned by
106     *            getExtraImageMetadataFormatNames.
107     * @param extraImageMetadataFormatClassNames
108     *            the extra image metadata format class names, returned by
109     *            getImageMetadataFormat.
110     */
111    public ImageReaderSpi(String vendorName, String version, String[] names, String[] suffixes,
112            String[] MIMETypes, String pluginClassName, Class[] inputTypes,
113            String[] writerSpiNames, boolean supportsStandardStreamMetadataFormat,
114            String nativeStreamMetadataFormatName, String nativeStreamMetadataFormatClassName,
115            String[] extraStreamMetadataFormatNames, String[] extraStreamMetadataFormatClassNames,
116            boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName,
117            String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames,
118            String[] extraImageMetadataFormatClassNames) {
119        super(vendorName, version, names, suffixes, MIMETypes, pluginClassName,
120                supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName,
121                nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames,
122                extraStreamMetadataFormatClassNames, supportsStandardImageMetadataFormat,
123                nativeImageMetadataFormatName, nativeImageMetadataFormatClassName,
124                extraImageMetadataFormatNames, extraImageMetadataFormatClassNames);
125
126        if (inputTypes == null || inputTypes.length == 0) {
127            throw new NullPointerException("input types array cannot be NULL or empty");
128        }
129        this.inputTypes = inputTypes;
130        this.writerSpiNames = writerSpiNames;
131    }
132
133    /**
134     * Gets an array of Class objects whose types can be used as input for this
135     * reader.
136     *
137     * @return the input types.
138     */
139    public Class[] getInputTypes() {
140        return inputTypes;
141    }
142
143    /**
144     * Returns true if the format of source object is supported by this reader.
145     *
146     * @param source
147     *            the source object to be decoded (for example an
148     *            ImageInputStream).
149     * @return true, if the format of source object is supported by this reader,
150     *         false otherwise.
151     * @throws IOException
152     *             if an I/O exception has occurred.
153     */
154    public abstract boolean canDecodeInput(Object source) throws IOException;
155
156    /**
157     * Returns an instance of the ImageReader implementation for this service
158     * provider.
159     *
160     * @return the ImageReader.
161     * @throws IOException
162     *             if an I/O exception has occurred.
163     */
164    public ImageReader createReaderInstance() throws IOException {
165        return createReaderInstance(null);
166    }
167
168    /**
169     * Returns an instance of the ImageReader implementation for this service
170     * provider.
171     *
172     * @param extension
173     *            the a plug-in specific extension object, or null.
174     * @return the ImageReader.
175     * @throws IOException
176     *             if an I/O exception has occurred.
177     */
178    public abstract ImageReader createReaderInstance(Object extension) throws IOException;
179
180    /**
181     * Checks whether or not the specified ImageReader object is an instance of
182     * the ImageReader associated with this service provider or not.
183     *
184     * @param reader
185     *            the ImageReader.
186     * @return true, if the specified ImageReader object is an instance of the
187     *         ImageReader associated with this service provider, false
188     *         otherwise.
189     */
190    public boolean isOwnReader(ImageReader reader) {
191        throw new UnsupportedOperationException("Not supported yet");
192    }
193
194    /**
195     * Gets an array of strings with names of the ImageWriterSpi classes that
196     * support the internal metadata representation used by the ImageReader of
197     * this service provider, or null if there are no such ImageWriters.
198     *
199     * @return the array of strings with names of the ImageWriterSpi classes.
200     */
201    public String[] getImageWriterSpiNames() {
202        throw new UnsupportedOperationException("Not supported yet");
203    }
204}
205