Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / saveraster / operations / SaveRasterProcess.java @ 11307

History | View | Annotate | Download (6.21 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
*
3
* Copyright (C) 2007 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.rastertools.saveraster.operations;
20

    
21
import java.awt.Component;
22
import java.awt.Dimension;
23
import java.io.File;
24
import java.io.IOException;
25

    
26
import javax.swing.JOptionPane;
27

    
28
import org.cresques.filter.RasterBuf;
29
import org.gvsig.gui.beans.incrementabletask.IncrementableEvent;
30
import org.gvsig.gui.beans.incrementabletask.IncrementableListener;
31
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
32
import org.gvsig.raster.dataset.GeoRasterWriter;
33
import org.gvsig.raster.dataset.IDataWriter;
34
import org.gvsig.raster.dataset.NotSupportedExtensionException;
35
import org.gvsig.raster.dataset.RasterDriverException;
36
import org.gvsig.raster.dataset.WriterParams;
37
import org.gvsig.raster.shared.Extent;
38
import org.gvsig.raster.shared.ViewPortData;
39
import org.gvsig.raster.util.RasterUtilities;
40
import org.gvsig.rastertools.saveraster.ui.info.EndInfoDialog;
41

    
42
import com.iver.andami.PluginServices;
43
import com.iver.cit.gvsig.fmap.ViewPort;
44

    
45
/**
46
 * Thread que se encarga de llamar a los writer para realizar la tarea
47
 * de salvado y/p compresi?n
48
* @author Nacho Brodin (nachobrodin@gmail.com)
49
 */
50
public class SaveRasterProcess implements Runnable, IncrementableListener {
51
                
52
        private GeoRasterWriter                        writer = null;
53
        private ViewPort                                        vp = null;
54
        private Dimension                                         dimension = null;
55
        private RasterizerLayer                        rasterizer = null;
56
        private String                                         fName = "";
57
        private WriterParams                                params = null;
58
        private IncrementableTask                         incrementableTask = null;
59
        private volatile Thread                         blinker = null;
60

    
61
        /**
62
         * Constructor
63
         * @param vp ViewPortData
64
         * @param dimension Dimension
65
         * @param rast Objeto servidor de datos
66
         * @param fName Nombre del fichero de salida
67
         * @param params Par?metros del escritor
68
         */        
69
        public SaveRasterProcess(ViewPort vp, Dimension dimension, RasterizerLayer rast, 
70
                                                        String fName, WriterParams params) {
71
                this.vp = vp;
72
                this.dimension = dimension;
73
                this.rasterizer = rast;
74
                this.fName = fName;
75
                this.params = params;
76
        }
77
                
78
        /**
79
         * Arranca el proceso de salvado a raster
80
         */
81
        public void start() {
82
                blinker = new Thread(this);
83
                blinker.start();
84
        }
85

    
86
        /**
87
         * Detiene el proceso de salvado a raster
88
         */
89
        public synchronized void stop() {
90
                blinker = null;
91
                notify();
92
        }
93
        
94
        /**
95
         * 
96
         */
97
        public void run(){
98
                long t2;
99
        long t1 = new java.util.Date().getTime();
100
                
101
                //Creamos el driver
102
                Extent ex = new Extent(vp.getAdjustedExtent());
103
                Dimension imgSz = vp.getImageSize();
104
                ViewPortData vpData = new ViewPortData(vp.getProjection(), ex, imgSz );
105
                                
106
                try {
107
                        writer = GeoRasterWriter.getWriter((IDataWriter)rasterizer, fName, 
108
                                                                                                3, vpData.getExtent(), dimension.width, 
109
                                                                                                dimension.height, RasterBuf.TYPE_IMAGE, params);
110
                } catch (NotSupportedExtensionException e) {
111
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
112
                                        PluginServices.getText(this, "extension_no_soportada"));
113
                } catch (RasterDriverException e) {
114
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
115
                                        PluginServices.getText(this, "no_driver_escritura"));
116
                }
117
                                
118
                //Ejecutamos el driver con los datos pasados
119
                try {
120
                        writer.dataWrite();
121
                        writer.writeClose(); 
122
                } catch(IOException ev) {
123
                        return;
124
                }
125
                
126
                t2 = new java.util.Date().getTime();
127
                
128
                try {
129
                        this.setEndInfo(fName, (t2 - t1));
130
                } catch(ArrayIndexOutOfBoundsException exc) {
131
                        //Si la ventana se ha cerrado ya es porque ha sido cancelada por lo que
132
                        //producir? esta excepci?n. En este caso no se lanza la ventana de informaci?n
133
                        //de finalizaci?n.
134
                }
135
                
136
                if(incrementableTask != null) {
137
                        while (incrementableTask.isAlive());
138
                        incrementableTask.Hide();
139
                        incrementableTask = null;
140
                }
141
        }
142
        
143
        private void setEndInfo(String fName, long milis){
144
                EndInfoDialog info = new EndInfoDialog();
145
                info.setFileName(" "+fName);
146
                File f = new File(fName);
147
                info.setSize(RasterUtilities.formatFileSize(f.length()));
148
                info.setTime(RasterUtilities.formatTime(milis));
149
                if(        fName.endsWith("ecw") || 
150
                        fName.endsWith("jp2") || 
151
                        fName.endsWith("jpg") ||
152
                        fName.endsWith("jpeg"))
153
                        info.setCompression(true);
154
                else
155
                        info.setCompression(false);
156
                PluginServices.getMDIManager().addWindow(info);
157
        }
158
        
159
        /**
160
         *Detiene la compresi?n
161
         */
162
        synchronized public void stopThread(){
163
                if(writer != null)
164
                        writer.writeCancel();
165
        }
166
        
167
        /**
168
         * Asigna el nombre del fichero
169
         * @param fName        Nombre del fichero
170
         */
171
        public void setFName(String fName){
172
                this.fName = fName;
173
        }
174
        
175
        /**
176
         * Asigna el GeoRasterWriter que se usar? para salvar
177
         * @param writer
178
         */
179
        public void setWriter(GeoRasterWriter writer){
180
                this.writer = writer;
181
        }
182
        
183
        /**
184
         * Asigna la tarea
185
         * @param value
186
         */
187
        public void setIncrementableTask(IncrementableTask value) {
188
                incrementableTask = value;
189
                incrementableTask.addIncrementableListener(this);
190
        }
191

    
192
        /*
193
         *  (non-Javadoc)
194
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionResumed(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
195
         */
196
        public void actionResumed(IncrementableEvent e) {
197
        }
198

    
199
        /*
200
         *  (non-Javadoc)
201
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionSuspended(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
202
         */
203
        public void actionSuspended(IncrementableEvent e) {
204
        }
205

    
206
        /*
207
         *  (non-Javadoc)
208
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
209
         */
210
        public void actionCanceled(IncrementableEvent e) {
211
        }
212
}
213
        
214
        
215

    
216

    
217