Statistics
| Revision:

svn-gvsig-desktop / tags / v1_0_2_Build_912 / libraries / libCq CMS for java.old / src / org / cresques / io / GeoRasterWriter.java @ 11422

History | View | Annotate | Download (8.23 KB)

1
/*
2
 * Cresques Mapping Suite. Graphic Library for constructing mapping applications.
3
 *
4
 * Copyright (C) 2004-5.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
19
 *
20
 * For more information, contact:
21
 *
22
 * cresques@gmail.com
23
 */
24
package org.cresques.io;
25

    
26
import java.io.IOException;
27
import java.lang.reflect.Constructor;
28
import java.lang.reflect.InvocationTargetException;
29
import java.util.Iterator;
30
import java.util.Map;
31
import java.util.Set;
32
import java.util.TreeMap;
33

    
34
import org.cresques.geo.ViewPortData;
35
import org.cresques.px.PxRaster;
36

    
37

    
38
/**
39
 * Clase abstracta de la que heredan los drivers de escritura. Tiene los
40
 * m?todos abstractos que debe implementar cualquier driver de escritura
41
 * y las funcionalidades y opciones soportadas comunes a todos ellos.
42
 * @author Nacho Brodin (brodin_ign@gva.es)
43
 */
44
public abstract class GeoRasterWriter {
45
    
46
        public static int                        blockSizeDefault = 256;
47
        
48
        private static TreeMap                 supportedExtensions = null;
49
    protected static TreeMap         typeList = new TreeMap();
50
    protected String                         outFileName = null;
51
    protected String                         inFileName = null;
52
    protected int                                 sizeWindowX = 0;
53
    protected int                                 sizeWindowY = 0;
54
    protected int                                 ulX = 0;
55
    protected int                                 ulY = 0;
56
    protected PxRaster                         currentRaster;
57
    protected IDataWriter                 dataWriter = null;
58
    protected int                                 nBands = 0;
59
    protected String                         ident = null;
60
    protected String                         driver = null;
61
    
62
    /**
63
     * Registra un formato de escritura
64
     * @param ext        Extensi?n del fichero registrado
65
     * @param clase        Clase que maneja el formato registrado
66
     */
67
    public static void registerWriterExtension(String ext, Class clase) {
68
        if (supportedExtensions == null) {
69
            supportedExtensions = new TreeMap();
70
        }
71

    
72
        ext = ext.toLowerCase();
73
        System.out.println("Write RASTER: extension '" + ext + "' supported.");
74
        supportedExtensions.put(ext, clase);
75
    }
76

    
77
    /**
78
     * Obtiene la lista de extensiones registradas
79
     * @return Lista de extensiones registradas o null si no hay ninguna
80
     */
81
    public static String[] getDriversExtensions(){
82
            if (supportedExtensions.size() == 0)
83
                    return null;
84
            String[] list = new String[supportedExtensions.size()];
85
            Set values = supportedExtensions.entrySet();
86
            int i = 0;
87
            for (Iterator it=values.iterator(); it.hasNext(); ) {
88
            list[i] = (String)((Map.Entry)it.next()).getKey();
89
            i++;
90
        }
91
            
92
            return list;
93
    }
94
    
95
    /**
96
     * Obtiene la lista de tipos de driver
97
     * @return Lista de tipos de driver registradas o null si no hay ninguno
98
     */
99
    public static String[] getDriversType(){
100
            if (typeList.size() == 0)
101
                    return null;
102
            String[] list = new String[typeList.size()];
103
            Set values = typeList.entrySet();
104
            int i = 0;
105
            for (Iterator it=values.iterator(); it.hasNext(); ) {
106
            list[i] = (String)((Map.Entry)it.next()).getValue();
107
            i++;
108
        }
109
            
110
            return list;
111
    }
112
    
113
    /**
114
     * Obtiene el tipo de driver a partir de la extensi?n
115
     * @param ext        Extensi?n
116
     * @return        Tipo
117
     */
118
    public static String getDriverType(String ext){
119
            return (String)typeList.get(ext);
120
    }
121
    
122
    /**
123
     * Devuelve el n?mero de drivers soportados
124
     * @return N?mero de drivers soportados
125
     */
126
    public static int getNDrivers() {
127
        return supportedExtensions.size();
128
    }
129
    
130
    /**
131
     * Devuelve el n?mero de tipos de driver registrados
132
     * @return N?mero de tipos de driver soportados
133
     */
134
    public static int getNTypes() {
135
        return typeList.size();
136
    }
137

    
138
    /**
139
     * Devuelve el identificador del driver
140
     * @return        Identificador del driver
141
     */
142
    public String getIdent() {
143
        return ident;
144
    }
145

    
146
    /**
147
     * Obtiene el nombre del driver.
148
     * @return        Nombre del driver
149
     */
150
    public String getDriverName() {
151
        return driver;
152
    }
153

    
154
    /**
155
     * 
156
     * @return
157
     */
158
    public String getDriverType() {
159
        return driver;
160
    }
161
    
162
    /**
163
         * Factoria para obtener escritores de los distintos tipos de raster.
164
         * 
165
         * @param fName Nombre del fichero.
166
         * @return GeoRasterWriter, o null si hay problemas.
167
         */
168
        public static GeoRasterWriter getWriter(String fName) {
169
                String ext = fName.toLowerCase().substring(fName.lastIndexOf('.')+1);
170
                GeoRasterWriter grw = null;
171
                
172
                if (!supportedExtensions.containsKey(ext)) 
173
                        return grw;
174
                
175
                Class clase = (Class) supportedExtensions.get(ext);
176
                Class [] args = {String.class};
177
                try {
178
                        Constructor hazNuevo = clase.getConstructor(args);
179
                        Object [] args2 = {fName};
180
                        grw = (GeoRasterWriter) hazNuevo.newInstance(args2);
181
                } catch (SecurityException e) {
182
                        e.printStackTrace();
183
                } catch (NoSuchMethodException e) {
184
                        e.printStackTrace();
185
                } catch (IllegalArgumentException e) {
186
                        e.printStackTrace();
187
                } catch (InstantiationException e) {
188
                        e.printStackTrace();
189
                } catch (IllegalAccessException e) {
190
                        e.printStackTrace();
191
                } catch (InvocationTargetException e) {
192
                        e.printStackTrace();
193
                }
194
                return grw;
195
        }
196
        
197
        /**
198
         * Factoria para obtener escritores de los distintos tipos de raster.
199
         * 
200
         * @param fName Nombre del fichero.
201
         * @return GeoRasterWriter, o null si hay problemas.
202
         */
203
        public static GeoRasterWriter getWriter(IDataWriter dataWriter, 
204
                                                                                     String outFileName, 
205
                                                                                     int blockSize, 
206
                                                                                     int nBands,
207
                                                                                     ViewPortData vp,
208
                                                                                     int compresion,
209
                                                                                     int outSizeX,
210
                                                                                     int outSizeY,
211
                                                                                     int dataType) {
212
                String ext = outFileName.toLowerCase().substring(outFileName.lastIndexOf('.')+1);
213
                GeoRasterWriter grw = null;
214
                
215
                if (!supportedExtensions.containsKey(ext)) 
216
                        return grw;
217
                
218
                Class clase = (Class) supportedExtensions.get(ext);
219
                Class [] args = {IDataWriter.class, String.class, Integer.class, Integer.class, 
220
                                                 ViewPortData.class, Integer.class, Integer.class, Integer.class};
221
                try {
222
                        Constructor hazNuevo = clase.getConstructor(args);
223
                        Object [] args2 = {dataWriter, outFileName, new Integer(blockSize), new Integer(nBands), 
224
                                                                vp, new Integer(compresion), new Integer(outSizeX), new Integer(outSizeY)};
225
                        grw = (GeoRasterWriter) hazNuevo.newInstance(args2);
226
                } catch (SecurityException e) {
227
                        e.printStackTrace();
228
                } catch (NoSuchMethodException e) {
229
                        e.printStackTrace();
230
                } catch (IllegalArgumentException e) {
231
                        e.printStackTrace();
232
                } catch (InstantiationException e) {
233
                        e.printStackTrace();
234
                } catch (IllegalAccessException e) {
235
                        e.printStackTrace();
236
                } catch (InvocationTargetException e) {
237
                        e.printStackTrace();
238
                }
239
                return grw;
240
        }
241
        
242
    /**
243
     * Asigna propiedades al driver a partir de un vector de
244
     * strings donde cada elemento tiene la estructura de
245
     * propiedad=valor.
246
     * @param props        Propiedades
247
     */
248
    public abstract void setProps(String[] props);
249

    
250
    /**
251
     * Realiza la funci?n de compresi?n a partir de un GeoRasterFile.
252
     * @throws IOException
253
     */
254
    public abstract void fileWrite() throws IOException;
255

    
256
    /**
257
     * Realiza la funci?n de compresi?n a partir de los datos pasados por el cliente.
258
     * @throws IOException
259
     */
260
    public abstract void dataWrite() throws IOException;
261

    
262
    /**
263
     * Cierra el driver
264
     */
265
    public abstract void writeClose();
266
    
267
    /**
268
     * Cancela el grabado de datos
269
     */
270
    public abstract void writeCancel();
271

    
272
    /**
273
     * Devuelve la configuraci?n de la ventana de dialogo
274
     * para las propiedades del driver de escritura que se est? tratando.
275
     * @return Texto XML con las propiedades
276
     */
277
    public abstract String getXMLPropertiesDialog();
278
}