01: /*
02: * $RCSfile: GZIPTileDecoder.java,v $
03: *
04: * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
05: *
06: * Use is subject to license terms.
07: *
08: * $Revision: 1.1 $
09: * $Date: 2005/02/11 04:56:56 $
10: * $State: Exp $
11: */package com.sun.media.jai.tilecodec;
12:
13: import java.awt.Point;
14: import java.awt.RenderingHints;
15: import java.awt.image.Raster;
16: import java.io.InputStream;
17: import java.io.ObjectInputStream;
18: import java.io.IOException;
19: import java.util.zip.GZIPInputStream;
20: import javax.media.jai.JAI;
21: import javax.media.jai.ParameterListDescriptor;
22: import javax.media.jai.tilecodec.TileDecoderImpl;
23: import javax.media.jai.tilecodec.TileCodecParameterList;
24: import javax.media.jai.util.ImagingListener;
25: import com.sun.media.jai.util.ImageUtil;
26:
27: /**
28: * A concrete implementation of the <code>TileDecoderImpl</code> class
29: * for the gzip tile codec.
30: */
31: public class GZIPTileDecoder extends TileDecoderImpl {
32: /**
33: * Constructs a <code>GZIPTileDecoder</code>.
34: * <code>GZIPTileDecoder</code> may throw a
35: * <code>IllegalArgumentException</code> if <code>param</code>'s
36: * <code>getParameterListDescriptor()</code> method does not return
37: * the same descriptor as that from the associated
38: * <code>TileCodecDescriptor</code>'s
39: * <code>getParameterListDescriptor</code> method for the "tileDecoder"
40: * registry mode.
41: *
42: * <p> If param is null, then the default parameter list for decoding
43: * as defined by the associated <code>TileCodecDescriptor</code>'s
44: * <code>getDefaultParameters()</code> method will be used for decoding.
45: *
46: * @param input The <code>InputStream</code> to decode data from.
47: * @param param The object containing the tile decoding parameters.
48: * @throws IllegalArgumentException if input is null.
49: * @throws IllegalArgumentException if param is not appropriate.
50: */
51: public GZIPTileDecoder(InputStream input,
52: TileCodecParameterList param) {
53: super ("gzip", input, param);
54: }
55:
56: /**
57: * Returns a <code>Raster</code> that contains the decoded contents
58: * of the <code>InputStream</code> associated with this
59: * <code>TileDecoder</code>.
60: *
61: * <p>This method can perform the decoding correctly only when
62: * <code>includesLocationInfo()</code> returns true.
63: *
64: * @throws IOException if an I/O error occurs while reading from the
65: * associated InputStream.
66: * @throws IllegalArgumentException if the associated
67: * TileCodecDescriptor's includesLocationInfo() returns false.
68: */
69: public Raster decode() throws IOException {
70:
71: ObjectInputStream ois = new ObjectInputStream(
72: new GZIPInputStream(inputStream));
73:
74: try {
75: Object object = ois.readObject();
76: return TileCodecUtils.deserializeRaster(object);
77: } catch (ClassNotFoundException e) {
78: ImagingListener listener = ImageUtil
79: .getImagingListener((RenderingHints) null);
80: listener.errorOccurred(JaiI18N.getString("ClassNotFound"),
81: e, this , false);
82:
83: // e.printStackTrace();
84: return null;
85: } finally {
86: ois.close();
87: }
88: }
89:
90: public Raster decode(Point location) throws IOException {
91: return decode();
92: }
93: }
|