• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
22 package javax.imageio.spi;
23 
24 import org.apache.harmony.x.imageio.metadata.IIOMetadataUtils;
25 
26 import javax.imageio.metadata.IIOMetadataFormat;
27 
28 /**
29  * The ImageReaderWriterSpi class is a superclass for the ImageReaderSpi and
30  * ImageWriterSpi SPIs.
31  *
32  * @since Android 1.0
33  */
34 public abstract class ImageReaderWriterSpi extends IIOServiceProvider implements
35         RegisterableService {
36 
37     /**
38      * The names.
39      */
40     protected String[] names;
41 
42     /**
43      * The suffixes.
44      */
45     protected String[] suffixes;
46 
47     /**
48      * The MIME types.
49      */
50     protected String[] MIMETypes;
51 
52     /**
53      * The plug-in class name.
54      */
55     protected String pluginClassName;
56 
57     /**
58      * Whether the reader/writer supports standard stream metadata format.
59      */
60     protected boolean supportsStandardStreamMetadataFormat;
61 
62     /**
63      * The native stream metadata format name.
64      */
65     protected String nativeStreamMetadataFormatName;
66 
67     /**
68      * The native stream metadata format class name.
69      */
70     protected String nativeStreamMetadataFormatClassName;
71 
72     /**
73      * The extra stream metadata format names.
74      */
75     protected String[] extraStreamMetadataFormatNames;
76 
77     /**
78      * The extra stream metadata format class names.
79      */
80     protected String[] extraStreamMetadataFormatClassNames;
81 
82     /**
83      * Whether the reader/writer supports standard image metadata format.
84      */
85     protected boolean supportsStandardImageMetadataFormat;
86 
87     /**
88      * The native image metadata format name.
89      */
90     protected String nativeImageMetadataFormatName;
91 
92     /**
93      * The native image metadata format class name.
94      */
95     protected String nativeImageMetadataFormatClassName;
96 
97     /**
98      * The extra image metadata format names.
99      */
100     protected String[] extraImageMetadataFormatNames;
101 
102     /**
103      * The extra image metadata format class names.
104      */
105     protected String[] extraImageMetadataFormatClassNames;
106 
107     /**
108      * Instantiates a new ImageReaderWriterSpi.
109      *
110      * @param vendorName
111      *            the vendor name.
112      * @param version
113      *            the version.
114      * @param names
115      *            the format names.
116      * @param suffixes
117      *            the array of strings representing the file suffixes.
118      * @param MIMETypes
119      *            the an array of strings representing MIME types.
120      * @param pluginClassName
121      *            the plug-in class name.
122      * @param supportsStandardStreamMetadataFormat
123      *            the value indicating if stream metadata can be described by
124      *            standard metadata format.
125      * @param nativeStreamMetadataFormatName
126      *            the native stream metadata format name, returned by
127      *            getNativeStreamMetadataFormatName.
128      * @param nativeStreamMetadataFormatClassName
129      *            the native stream metadata format class name, returned by
130      *            getNativeStreamMetadataFormat.
131      * @param extraStreamMetadataFormatNames
132      *            the extra stream metadata format names, returned by
133      *            getExtraStreamMetadataFormatNames.
134      * @param extraStreamMetadataFormatClassNames
135      *            the extra stream metadata format class names, returned by
136      *            getStreamMetadataFormat.
137      * @param supportsStandardImageMetadataFormat
138      *            the value indicating if image metadata can be described by
139      *            standard metadata format.
140      * @param nativeImageMetadataFormatName
141      *            the native image metadata format name, returned by
142      *            getNativeImageMetadataFormatName.
143      * @param nativeImageMetadataFormatClassName
144      *            the native image metadata format class name, returned by
145      *            getNativeImageMetadataFormat.
146      * @param extraImageMetadataFormatNames
147      *            the extra image metadata format names, returned by
148      *            getExtraImageMetadataFormatNames.
149      * @param extraImageMetadataFormatClassNames
150      *            the extra image metadata format class names, returned by
151      *            getImageMetadataFormat.
152      */
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)153     public ImageReaderWriterSpi(String vendorName, String version, String[] names,
154             String[] suffixes, String[] MIMETypes, String pluginClassName,
155             boolean supportsStandardStreamMetadataFormat, String nativeStreamMetadataFormatName,
156             String nativeStreamMetadataFormatClassName, String[] extraStreamMetadataFormatNames,
157             String[] extraStreamMetadataFormatClassNames,
158             boolean supportsStandardImageMetadataFormat, String nativeImageMetadataFormatName,
159             String nativeImageMetadataFormatClassName, String[] extraImageMetadataFormatNames,
160             String[] extraImageMetadataFormatClassNames) {
161         super(vendorName, version);
162 
163         if (names == null || names.length == 0) {
164             throw new NullPointerException("format names array cannot be NULL or empty");
165         }
166 
167         if (pluginClassName == null) {
168             throw new NullPointerException("Plugin class name cannot be NULL");
169         }
170 
171         // We clone all the arrays to be consistent with the fact that
172         // some methods of this class must return clones of the arrays
173         // as it is stated in the spec.
174         this.names = names.clone();
175         this.suffixes = suffixes == null ? null : suffixes.clone();
176         this.MIMETypes = MIMETypes == null ? null : MIMETypes.clone();
177         this.pluginClassName = pluginClassName;
178         this.supportsStandardStreamMetadataFormat = supportsStandardStreamMetadataFormat;
179         this.nativeStreamMetadataFormatName = nativeStreamMetadataFormatName;
180         this.nativeStreamMetadataFormatClassName = nativeStreamMetadataFormatClassName;
181 
182         this.extraStreamMetadataFormatNames = extraStreamMetadataFormatNames == null ? null
183                 : extraStreamMetadataFormatNames.clone();
184 
185         this.extraStreamMetadataFormatClassNames = extraStreamMetadataFormatClassNames == null ? null
186                 : extraStreamMetadataFormatClassNames.clone();
187 
188         this.supportsStandardImageMetadataFormat = supportsStandardImageMetadataFormat;
189         this.nativeImageMetadataFormatName = nativeImageMetadataFormatName;
190         this.nativeImageMetadataFormatClassName = nativeImageMetadataFormatClassName;
191 
192         this.extraImageMetadataFormatNames = extraImageMetadataFormatNames == null ? null
193                 : extraImageMetadataFormatNames.clone();
194 
195         this.extraImageMetadataFormatClassNames = extraImageMetadataFormatClassNames == null ? null
196                 : extraImageMetadataFormatClassNames.clone();
197     }
198 
199     /**
200      * Instantiates a new ImageReaderWriterSpi.
201      */
ImageReaderWriterSpi()202     public ImageReaderWriterSpi() {
203     }
204 
205     /**
206      * Gets an array of strings representing names of the formats that can be
207      * used by the ImageReader or ImageWriter implementation associated with
208      * this service provider.
209      *
210      * @return the array of supported format names.
211      */
getFormatNames()212     public String[] getFormatNames() {
213         return names.clone();
214     }
215 
216     /**
217      * Gets an array of strings representing file suffixes associated with the
218      * formats that can be used by the ImageReader or ImageWriter implementation
219      * of this service provider.
220      *
221      * @return the array of file suffixes.
222      */
getFileSuffixes()223     public String[] getFileSuffixes() {
224         return suffixes == null ? null : suffixes.clone();
225     }
226 
227     /**
228      * Gets an array of strings with the names of additional formats of the
229      * image metadata objects produced or consumed by this plug-in.
230      *
231      * @return the array of extra image metadata format names.
232      */
getExtraImageMetadataFormatNames()233     public String[] getExtraImageMetadataFormatNames() {
234         return extraImageMetadataFormatNames == null ? null : extraImageMetadataFormatNames.clone();
235     }
236 
237     /**
238      * Gets an array of strings with the names of additional formats of the
239      * stream metadata objects produced or consumed by this plug-in.
240      *
241      * @return the array of extra stream metadata format names.
242      */
getExtraStreamMetadataFormatNames()243     public String[] getExtraStreamMetadataFormatNames() {
244         return extraStreamMetadataFormatNames == null ? null : extraStreamMetadataFormatNames
245                 .clone();
246     }
247 
248     /**
249      * Gets an IIOMetadataFormat object for the specified image metadata format
250      * name.
251      *
252      * @param formatName
253      *            the format name.
254      * @return the IIOMetadataFormat, or null.
255      */
getImageMetadataFormat(String formatName)256     public IIOMetadataFormat getImageMetadataFormat(String formatName) {
257         return IIOMetadataUtils.instantiateMetadataFormat(formatName,
258                 supportsStandardImageMetadataFormat, nativeImageMetadataFormatName,
259                 nativeImageMetadataFormatClassName, extraImageMetadataFormatNames,
260                 extraImageMetadataFormatClassNames);
261     }
262 
263     /**
264      * Gets an IIOMetadataFormat object for the specified stream metadata format
265      * name.
266      *
267      * @param formatName
268      *            the format name.
269      * @return the IIOMetadataFormat, or null.
270      */
getStreamMetadataFormat(String formatName)271     public IIOMetadataFormat getStreamMetadataFormat(String formatName) {
272         return IIOMetadataUtils.instantiateMetadataFormat(formatName,
273                 supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName,
274                 nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames,
275                 extraStreamMetadataFormatClassNames);
276     }
277 
278     /**
279      * Gets an array of strings representing the MIME types of the formats that
280      * are supported by the ImageReader or ImageWriter implementation of this
281      * service provider.
282      *
283      * @return the array MIME types.
284      */
getMIMETypes()285     public String[] getMIMETypes() {
286         return MIMETypes == null ? null : MIMETypes.clone();
287     }
288 
289     /**
290      * Gets the name of the native image metadata format for this reader/writer,
291      * which allows for lossless encoding or decoding of the image metadata with
292      * the format.
293      *
294      * @return the string with native image metadata format name, or null.
295      */
getNativeImageMetadataFormatName()296     public String getNativeImageMetadataFormatName() {
297         return nativeImageMetadataFormatName;
298     }
299 
300     /**
301      * Gets the name of the native stream metadata format for this
302      * reader/writer, which allows for lossless encoding or decoding of the
303      * stream metadata with the format.
304      *
305      * @return the string with native stream metadata format name, or null.
306      */
getNativeStreamMetadataFormatName()307     public String getNativeStreamMetadataFormatName() {
308         return nativeStreamMetadataFormatName;
309     }
310 
311     /**
312      * Gets the class name of the ImageReader or ImageWriter associated with
313      * this service provider.
314      *
315      * @return the class name.
316      */
getPluginClassName()317     public String getPluginClassName() {
318         return pluginClassName;
319     }
320 
321     /**
322      * Checks if the standard metadata format is supported by the getAsTree and
323      * setFromTree methods for the image metadata objects produced or consumed
324      * by this reader or writer.
325      *
326      * @return true, if standard image metadata format is supported, false
327      *         otherwise.
328      */
isStandardImageMetadataFormatSupported()329     public boolean isStandardImageMetadataFormatSupported() {
330         return supportsStandardImageMetadataFormat;
331     }
332 
333     /**
334      * Checks if the standard metadata format is supported by the getAsTree and
335      * setFromTree methods for the stream metadata objects produced or consumed
336      * by this reader or writer.
337      *
338      * @return true, if standard stream metadata format is supported, false
339      *         otherwise.
340      */
isStandardStreamMetadataFormatSupported()341     public boolean isStandardStreamMetadataFormatSupported() {
342         return supportsStandardStreamMetadataFormat;
343     }
344 }
345