Statistics
| Revision:

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

History | View | Annotate | Download (7.07 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 writersClassList = new ArrayList();
50

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

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

    
85
        //*************PATHS*******************
86

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

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

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

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

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

    
133
                //Limpiamos el directorio temporal
134
                RasterLibrary.cleanUpTempFiles();
135
        }
136

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

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

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

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