Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libRaster / src / org / gvsig / raster / RasterLibrary.java @ 12618

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

    
54
        /**
55
         * En la generaci?n autom?tica de clases esta variable representa el n?mero de
56
         * clases en las que se hace la divisi?n.
57
         */
58
        public static int defaultNumberOfClasses = 64;
59

    
60
        /**
61
         * En la genraci?n de las paletas de color, esta variable representa el n?mero
62
         * de colores en las que se hace la divisi?n para generar la paleta nueva.
63
         * Con esto conseguimos velocidad de procesamiento. Cuanto menor sea, peor
64
         * ser? la calidad representada de la imagen.
65
         */
66
        public static int defaultNumberOfColors = 256;
67
        /**
68
         * Tama?o de bloque en los procesos que recorren un raster completo a base de ventanas con recorrido
69
         * descendente. Esta variable indica la altura de dicho bloque. Por lo tanto cada bloque ser? de
70
         * raster.width X blockHeight. Tipicamente recorridos de este tipo se usan para el calculo de estad?sticas,
71
         * histogramas, salvado a raster, etc... Es importante para el buen funcionamiento que este bloque sea
72
         * potencia de dos.
73
         */
74
        public static int blockHeight = 512;
75

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

    
96
        //*************PATHS*******************
97

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

    
117
                //Punto de extensi?n para registro de drivers de escritura
118
                if (!extensionPoints.containsKey("RasterWriter"))
119
                        extensionPoints.put(new ExtensionPoint("RasterWriter", "Raster Writer Classes"));
120

    
121
                //Ejecuta el c?digo static de la clase cada driver
122
                GdalDriver.register();
123
                EcwDriver.register();
124
                MrSidDriver.register();
125
                MemoryRasterDriver.register();
126
                
127
                GdalWriter.register();
128
                ErmapperWriter.register();
129
                JpegWriter.register();
130

    
131
                //Punto de extensi?n para registro de filtros
132
                if (!extensionPoints.containsKey("RasterFilter")) {
133
                        extensionPoints.put(new ExtensionPoint("RasterFilter", "Raster Filter Classes"));
134
                }
135

    
136
                // Invoca las llamadas est?ticas de cada clase para registrarlas en los
137
                // puntos de extensi?n
138
                BrightnessContrastListManager.register();
139
                EnhancementListManager.register();
140
                FirstDerivativeListManager.register();
141
                MedianListManager.register();
142
                ConvolutionListManager.register();
143
                ColorTableListManager.register();
144
                StatisticsListManager.register();
145
                PanSharpeningListManager.register();
146
                // Registrar los nuevos filtros del directorio
147
                registerExtensions();
148

    
149
                //Limpiamos el directorio temporal
150
                RasterLibrary.cleanUpTempFiles();
151
        }
152

    
153
        /**
154
         * Elimina los ficheros del directorio temporal. Realizamos esta acci?n al
155
         * levantar la librer?a.
156
         */
157
        public static void cleanUpTempFiles() {
158
                try {
159
                        File tempDirectory = new File(tempCacheDirectoryPath);
160

    
161
                        File[] files = tempDirectory.listFiles();
162
                        if (files != null) {
163
                                for (int i = 0; i < files.length; i++) {
164
                                        // s?lo por si en un futuro se necesitan crear directorios temporales
165
                                        if (files[i].isDirectory())
166
                                                deleteDirectory(files[i]);
167
                                        files[i].delete();
168
                                }
169
                        }
170
                        tempDirectory.delete();
171
                } catch (Exception e) {
172
                }
173
        }
174

    
175
        /**
176
         * Recursive directory delete.
177
         * @param f
178
         */
179
        private static void deleteDirectory(File f) {
180
                File[] files = f.listFiles();
181
                for (int i = 0; i < files.length; i++) {
182
                        if (files[i].isDirectory())
183
                                deleteDirectory(files[i]);
184
                        files[i].delete();
185
                }
186
        }
187

    
188
        /**
189
         * Esta funci?n buscar? todos los jars en las rutas de pathExtensions y
190
         * registrar? todos las clases registrables. En este momento hay posibilidad
191
         * de registro de drivers y filtros.
192
         */
193
        private static void registerExtensions() {
194
                for (int iPath = 0; iPath < pathExtensions.length; iPath++) {
195
                        File files = new File(pathExtensions[iPath]);
196
                        if (files.isDirectory()) {
197
                                // TODO:FUNCIONALIDAD: Descubrimiento de drivers y filtros registrables.
198
                        }
199
                }
200
        }
201
}