blob: 9ca08b5ea08532edd1861a19ce014c5c8827fea4 [file] [log] [blame]
The Android Open Source Projectedbf3b62009-03-03 19:31:44 -08001/*
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 org.apache.harmony.x.imageio.metadata.IIOMetadataUtils;
25
26import 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 */
34public 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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
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 */
341 public boolean isStandardStreamMetadataFormatSupported() {
342 return supportsStandardStreamMetadataFormat;
343 }
344}