Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / histogram / HistogramPersistence.java @ 10799

History | View | Annotate | Download (4.05 KB)

1
package org.gvsig.rastertools.histogram;
2

    
3
import java.io.BufferedReader;
4
import java.io.File;
5
import java.io.FileInputStream;
6
import java.io.FileWriter;
7
import java.io.IOException;
8
import java.io.InputStreamReader;
9
import java.io.Writer;
10

    
11
/**
12
 * Clase con herramientas la persistencia de los histogramas calculados.
13
 * Se implementan m?todos para ecribir y leer en los ficheros .rmf correspondientes
14
 * los histogramas calculados.
15
 * @author Miguel ?ngel Querol Carratal? <querol_mig@gva.es>
16
 *
17
 */
18
public class HistogramPersistence {
19

    
20
        
21
        public HistogramPersistence(){
22
        }
23
        
24
        /**
25
         * Crea o modifica el archivo .rmf asociado al GeoRasterFile del que le pasamos
26
         * el nombre con los valores del histograma.
27
         * @param histogram
28
         * @param grfName
29
         * @throws IOException
30
         */
31
        public void makeRMFHistogram(int histogram[][], String grfName, int numBands)throws IOException{
32
                File rmfFile = null;
33
                File rmfAux = null;
34
                Writer writer = null;
35
                boolean copy = true;
36

    
37
                rmfFile = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "rmf");
38
                if(rmfFile.exists()){
39
                        BufferedReader inGrf = new BufferedReader(new InputStreamReader(new FileInputStream(rmfFile)));
40
                        String str = inGrf.readLine();
41
                        rmfAux = new File(grfName.substring(0, grfName.lastIndexOf(".") + 1) + "aux.rmf");
42
                        rmfAux.createNewFile();
43
                        writer = new FileWriter(rmfAux);
44
                        
45
                        while(str != null){
46
                                if(!str.equals("</RasterMetaFile>")){
47
                                        if(str.equals("<Histogram>"))
48
                                                copy = false;
49
                                        if(str.equals("</Histogram>"))
50
                                                copy = true;
51
                                        if(copy && (!str.equals("</Histogram>")))
52
                                                writer.write(str + "\n");
53
                                }else{
54
                                        writer.write(getRMFHistogramHeader());
55
                                        for (int i = 0; i < numBands ; i++){
56
                                                writer.write(getXMLRasterBandHistogram(histogram, i));
57
                                        }
58
                                        writer.write(getRMFHistogramEnd());
59
                                        writer.write(str + "\n");
60
                                }
61
                                str = inGrf.readLine();
62
                        }
63
                        writer.close();
64
                        
65
                        rmfAux.renameTo(rmfFile);
66
                        
67
                        
68
                }else{
69
                        rmfFile.createNewFile();
70
                        writer = new FileWriter(rmfFile);
71
                        writer.write(getRMFHeader());
72
                        writer.write(getRMFHistogramHeader());
73
                        for (int i = 0; i < numBands ; i++){
74
                                writer.write(getXMLRasterBandHistogram(histogram, i));
75
                        }
76
                        writer.write(getRMFHistogramEnd());
77
                        writer.write(getRMFEnd());
78
                        writer.close();
79
                }
80
        }
81
        
82
        
83
        
84
        /**
85
         * Calcula la cabecera del archivo .rmf asociado a la imagen en el caso
86
         * de que ?ste no exista.
87
         * @return
88
         */
89
        private String getRMFHeader(){
90
                StringBuffer buffer = new StringBuffer();
91
                
92
                buffer.append("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>\n");
93
                buffer.append("<RasterMetaFile xmlns=\"http://www.gvsig.org\">\n");
94
                
95
                return buffer.toString();
96
        }
97
        
98
        /**
99
         * Crea el final del archivo .rmf asociado a la imagen en el caso de que
100
         * ?ste no exista.
101
         * @return
102
         */
103
        private String getRMFEnd(){
104
                StringBuffer buffer = new StringBuffer();
105
                
106
                buffer.append("</RasterMetaFile>\n");
107
                
108
                return buffer.toString();
109
        }
110
        
111
        /**
112
         * Crea la cabecera en XML para el bloque del histograma completo de la
113
         * imagen.
114
         * @return
115
         */
116
        private String getRMFHistogramHeader(){
117
                StringBuffer buffer = new StringBuffer();
118
                
119
                buffer.append("<Histogram>\n");
120
                buffer.append("\t<FullHistogram>\n");
121
                
122
                return buffer.toString();
123
        }
124
        
125
        /**
126
         * Crea el final en XML para el bloque del histograma completo de la
127
         * imagen.
128
         * @return
129
         */
130
        private String getRMFHistogramEnd(){
131
                StringBuffer buffer = new StringBuffer();
132
                
133
                buffer.append("\t</FullHistogram>\n");
134
                buffer.append("</Histogram>\n");
135
                
136
                return buffer.toString();
137
        }
138
        
139
        /**
140
         * Crea el c?digo XML correspondiendte a los datos del histograma de la 
141
         * imagen de la banda correspondiente.
142
         * @param n_band: banda de la que crear el XML con los datos de su histograma.
143
         * @return
144
         */
145
        private String getXMLRasterBandHistogram(int histogram[][], int n_band){
146
                StringBuffer buffer = new StringBuffer();
147
                
148
                buffer.append("\t\t<Band>\n");
149
                buffer.append("\t\t\t<Values>");
150
                for (int i = 0 ; i <= 255 ; i++)
151
                        buffer.append(histogram[n_band][i] + " ");
152
                buffer.append("</Values>\n");
153
                buffer.append("\t\t</Band>\n");
154
                
155
                return buffer.toString();
156
        }
157
        
158
}