Statistics
| Revision:

root / trunk / libraries / libRaster / src / org / gvsig / raster / RasterLibrary.java @ 12122

History | View | Annotate | Download (7.29 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.raster;
20

    
21
import java.io.File;
22
import java.util.ArrayList;
23

    
24
import org.gvsig.raster.dataset.io.EcwDriver;
25
import org.gvsig.raster.dataset.io.ErmapperWriter;
26
import org.gvsig.raster.dataset.io.GdalDriver;
27
import org.gvsig.raster.dataset.io.GdalWriter;
28
import org.gvsig.raster.dataset.io.MemoryRasterDriver;
29
import org.gvsig.raster.dataset.io.MrSidDriver;
30
import org.gvsig.raster.grid.filter.bands.ColorTableListManager;
31
import org.gvsig.raster.grid.filter.convolution.ConvolutionListManager;
32
import org.gvsig.raster.grid.filter.correction.MedianListManager;
33
import org.gvsig.raster.grid.filter.enhancement.BrightnessContrastListManager;
34
import org.gvsig.raster.grid.filter.enhancement.EnhancementListManager;
35
import org.gvsig.raster.grid.filter.segmentation.FirstDerivativeListManager;
36
import org.gvsig.raster.util.extensionPoints.ExtensionPoint;
37
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
38
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
39
/**
40
 * Clase principal de la libreria. En ella se definen variables globales con informaci?n
41
 * de uso general, as? como acciones a realizar al arracar la librer?a. El m?todo que
42
 * contiene las acciones de arranque es wakeUp. Las tareas principales de este m?todo
43
 * son de registro de drivers de lectura y escritura y eliminaci?n del directorio de 
44
 * temporales.
45
 * 
46
 * @author Nacho Brodin (nachobrodin@gmail.com)
47
 */
48
public class RasterLibrary {
49
        public static ArrayList readersClassList = new ArrayList();
50
        public static ArrayList writersClassList = new ArrayList();
51

    
52
        /**
53
         * En la generaci?n autom?tica de clases esta variable representa el n?mero de
54
         * clases en las que se hace la divisi?n.
55
         */
56
        public static int defaultNumberOfClasses = 64;
57
        /**
58
         * Tama?o de bloque en los procesos que recorren un raster completo a base de ventanas con recorrido 
59
         * descendente. Esta variable indica la altura de dicho bloque. Por lo tanto cada bloque ser? de 
60
         * raster.width X blockHeight. Tipicamente recorridos de este tipo se usan para el calculo de estad?sticas, 
61
         * histogramas, salvado a raster, etc... Es importante para el buen funcionamiento que este bloque sea 
62
         * potencia de dos.
63
         */
64
        public static int blockHeight = 512;
65

    
66
        //*************CACHE*******************
67
        /**
68
         * Tama?o aproximado de cach? en Megas. Si este valor es alto cabr?n muchas p?ginas en memoria 
69
         * a la vez y si es bajo cabr?n pocas. Hay que tener en cuenta que al instanciar se convertira en bytes
70
         * para su mejor tratamiento. Al llamar al constructor esta variable contendr? el tama?o exacto
71
         * de la cache en bytes. El tama?o aqu? especificado es aproximado. Este variar? dependiendo de los
72
         * par?metros del raster a cachear ya que las p?ginas deben tener una altura potencia de 2.
73
         */
74
        public static long cacheSize = 25;
75
        /**
76
         * Tama?o m?ximo de la p?gina en Megas. Hay que tener en cuenta que al instanciar se convertira en bytes
77
         * para su mejor tratamiento. Al llamar al constructor esta variable contendr? el tama?o exacto
78
         * de la p?gina en bytes
79
         */
80
        public static double pageSize = 4;
81
        /**
82
         * N?mero de p?ginas que tiene cada conjunto de cach?
83
         */
84
        public static int pagsPerGroup = 5;
85

    
86
        //*************PATHS*******************
87

    
88
        /**
89
         * Directorio temporal para la cach?. Si gastamos el mismo que andami este se ocupar? de gestionar su
90
         * destrucci?n al cerrar gvSIG.
91
         */
92
        public static String tempCacheDirectoryPath = System.getProperty("java.io.tmpdir") + "/tmp-andami";
93
        /**
94
         * Ruta o rutas donde busca jars con clases que incorporen elementos nuevos que extiendan
95
         * otros ya existentes. Estos pueden ser drivers o filtros.
96
         */
97
        public static String[] pathExtensions = {"./"};
98
        /**
99
         * Ejecuta las acciones necesarias para arrancar la librer?a.
100
         */
101
        public static void wakeUp() {
102
                //Punto de extensi?n para registro de drivers de lectura
103
                ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
104
                if (!extensionPoints.containsKey("RasterReader"))
105
                        extensionPoints.put( new ExtensionPoint( "RasterReader", "Raster Reader Classes"));
106

    
107
                //Punto de extensi?n para registro de drivers de escritura
108
                if (!extensionPoints.containsKey("RasterWriter"))
109
                        extensionPoints.put(new ExtensionPoint("RasterWriter", "Raster Writer Classes"));
110

    
111
                //Ejecuta el c?digo static de la clase cada driver
112
                GdalDriver.register();
113
                readersClassList.add(GdalDriver.class);
114
                readersClassList.add(EcwDriver.class);
115
                readersClassList.add(MrSidDriver.class);
116
                readersClassList.add(MemoryRasterDriver.class);
117
                writersClassList.add(GdalWriter.class);
118
                writersClassList.add(ErmapperWriter.class);
119

    
120
                //Punto de extensi?n para registro de filtros
121
                if (!extensionPoints.containsKey("RasterFilter")) {
122
                        extensionPoints.put(new ExtensionPoint("RasterFilter", "Raster Filter Classes"));
123
                }
124

    
125
                // Invoca las llamadas estaticas de cada clase para registrarlas en los
126
                // puntos de extensi?n
127
                BrightnessContrastListManager.register();
128
                EnhancementListManager.register();
129
                FirstDerivativeListManager.register();
130
                MedianListManager.register();
131
                ColorTableListManager.register();
132
                ConvolutionListManager.register();
133
                // Registrar los nuevos filtros del directorio
134
                registerExtensions();
135

    
136
                //Limpiamos el directorio temporal
137
                RasterLibrary.cleanUpTempFiles();
138
        }
139

    
140
        /**
141
         * Elimina los ficheros del directorio temporal. Realizamos esta acci?n al
142
         * levantar la librer?a.
143
         */
144
        public static void cleanUpTempFiles() {
145
                try {
146
                        File tempDirectory = new File(tempCacheDirectoryPath);
147

    
148
                        File[] files = tempDirectory.listFiles();
149
                        if (files != null) {
150
                                for (int i = 0; i < files.length; i++) {
151
                                        // s?lo por si en un futuro se necesitan crear directorios temporales
152
                                        if (files[i].isDirectory())
153
                                                deleteDirectory(files[i]);
154
                                        files[i].delete();
155
                                }
156
                        }
157
                        tempDirectory.delete();
158
                } catch (Exception e) {
159
                }
160
        }
161

    
162
        /**
163
         * Recursive directory delete.
164
         * @param f
165
         */
166
        private static void deleteDirectory(File f) {
167
                File[] files = f.listFiles();
168
                for (int i = 0; i < files.length; i++) {
169
                        if (files[i].isDirectory())
170
                                deleteDirectory(files[i]);
171
                        files[i].delete();
172
                }
173
        }
174

    
175
        /**
176
         * Esta funci?n buscar? todos los jars en las rutas de pathExtensions y
177
         * registrar? todos las clases registrables. En este momento hay posibilidad
178
         * de registro de drivers y filtros.
179
         */
180
        private static void registerExtensions() {
181
                for (int iPath = 0; iPath < pathExtensions.length; iPath++) {
182
                        File files = new File(pathExtensions[iPath]);
183
                        if (files.isDirectory()) {
184
                                // TODO:FUNCIONALIDAD: Descubrimiento de drivers y filtros registrables.
185
                        }
186
                }
187
        }
188
}