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 |
|