Statistics
| Revision:

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

History | View | Annotate | Download (5.1 KB)

1
package org.gvsig.raster;
2

    
3
import java.io.File;
4
import java.util.ArrayList;
5

    
6
import org.gvsig.raster.dataset.io.EcwDriver;
7
import org.gvsig.raster.dataset.io.GdalDriver;
8
import org.gvsig.raster.dataset.io.GdalWriter;
9
import org.gvsig.raster.dataset.io.MemoryRasterDriver;
10
import org.gvsig.raster.util.extensionPoints.ExtensionPoint;
11
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
12
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
13

    
14
/**
15
 * Clase principal de la libreria. En ella se definen variables globales con informaci?n
16
 * de uso general, as? como acciones a realizar al arracar la librer?a. El m?todo que
17
 * contiene las acciones de arranque es wakeUp. Las tareas principales de este m?todo
18
 * son de registro de drivers de lectura y escritura y eliminaci?n del directorio de 
19
 * temporales.
20
 * 
21
 * @author Nacho Brodin (nachobrodin@gmail.com)
22
 *
23
 */
24
public class RasterLibrary {
25
        public static ArrayList readersClassList = new ArrayList();
26
        public static ArrayList writersClassList = new ArrayList();
27
        
28
        /**
29
         * En la generaci?n autom?tica de clases esta variable representa el n?mero de
30
         * clases en las que se hace la divisi?n.
31
         */
32
        public static int defaultNumberOfClasses = 64;
33
        /**
34
         * Tama?o de bloque en los procesos que recorren un raster completo a base de ventanas con recorrido 
35
         * descendente. Esta variable indica la altura de dicho bloque. Por lo tanto cada bloque ser? de 
36
         * raster.width X blockHeight. Tipicamente recorridos de este tipo se usan para el calculo de estad?sticas, 
37
         * histogramas, salvado a raster, etc... Es importante para el buen funcionamiento que este bloque sea 
38
         * potencia de dos.
39
         */
40
        public static int blockHeight = 512;
41
        
42
        //*************CACHE*******************
43
        /**
44
         * Tama?o aproximado de cach? en Megas. Si este valor es alto cabr?n muchas p?ginas en memoria 
45
         * a la vez y si es bajo cabr?n pocas. Hay que tener en cuenta que al instanciar se convertira en bytes
46
         * para su mejor tratamiento. Al llamar al constructor esta variable contendr? el tama?o exacto
47
         * de la cache en bytes. El tama?o aqu? especificado es aproximado. Este variar? dependiendo de los
48
         * par?metros del raster a cachear ya que las p?ginas deben tener una altura potencia de 2.
49
         */
50
        public static long cacheSize = 40;
51
        /**
52
         * Tama?o m?ximo de la p?gina en Megas. Hay que tener en cuenta que al instanciar se convertira en bytes
53
         * para su mejor tratamiento. Al llamar al constructor esta variable contendr? el tama?o exacto
54
         * de la p?gina en bytes
55
         */
56
        public static double pageSize = 4;
57
        /**
58
         * N?mero de p?ginas que tiene cada conjunto de cach?
59
         */
60
        public static int pagsPerGroup = 5;
61
        
62
        //*************PATHS*******************
63
        
64
        /**
65
         * Directorio temporal para la cach?. Si gastamos el mismo que andami este se ocupar? de gestionar su
66
         * destrucci?n al cerrar gvSIG.
67
         */
68
        public static String tempCacheDirectoryPath = System.getProperty("java.io.tmpdir") + "/tmp-andami";
69
        /**
70
         * Ruta o rutas donde busca jars con clases que incorporen elementos nuevos que extiendan
71
         * otros ya existentes. Estos pueden ser drivers o filtros.
72
         */
73
        public static String[] pathExtensions = {"./"};
74
        /**
75
         * Ejecuta las acciones necesarias para arrancar la librer?a.
76
         */
77
        public static void wakeUp(){
78
                //Punto de extensi?n para registro de drivers de lectura
79
                ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
80
                if (!extensionPoints.containsKey("RasterReader")) {
81
                        extensionPoints.put( new ExtensionPoint( "RasterReader", "Raster Reader Classes"));
82
                }
83
                
84
                //Punto de extensi?n para registro de drivers de escritura
85
                if (!extensionPoints.containsKey("RasterWriter")) {
86
                        extensionPoints.put(new ExtensionPoint("RasterWriter", "Raster Writer Classes"));
87
                }
88
                //Ejecuta el c?digo static de la clase cada driver
89
                readersClassList.add(GdalDriver.class);
90
                readersClassList.add(EcwDriver.class);
91
                readersClassList.add(MemoryRasterDriver.class);
92
                writersClassList.add(GdalWriter.class);
93
                
94
                //Limpiamos el directorio temporal
95
                RasterLibrary.cleanUpTempFiles();
96
        }
97
        
98
        /**
99
         * Elimina los ficheros del directorio temporal. Realizamos esta acci?n al levantar la
100
         * librer?a.
101
         */
102
         public static void cleanUpTempFiles() {
103
                    try{
104
                            File tempDirectory = new File(tempCacheDirectoryPath);
105

    
106
                            File[] files = tempDirectory.listFiles();
107
                            if (files!=null) {
108
                                    for (int i = 0; i < files.length; i++) {
109
                                             // s?lo por si en un futuro se necesitan crear directorios temporales
110
                                            if (files[i].isDirectory())        deleteDirectory(files[i]);
111
                                            files[i].delete();
112
                                    }
113
                            }
114
                            tempDirectory.delete();
115
                    } catch (Exception e) {        }
116

    
117
         }
118
         
119
         /**
120
          * Recursive directory delete.
121
          * @param f
122
          */
123
         private static void deleteDirectory(File f) {
124
                 File[] files = f.listFiles();
125
                 for (int i = 0; i < files.length; i++) {
126
                         if (files[i].isDirectory()) deleteDirectory(files[i]);
127
                         files[i].delete();
128
                 }
129

    
130
         }
131
         
132
         /**
133
          * Esta funci?n buscar? todos los jars en las rutas de pathExtensions y registrar?
134
          * todos las clases registrables. En este momento hay posibilidad de registro de
135
          * drivers y filtros.
136
          *
137
          */
138
         private void registerExtensions() {
139
                 
140
         }
141
}