Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / FilterProcess.java @ 14533

History | View | Annotate | Download (7.64 KB)

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

    
21
import java.io.IOException;
22
import java.util.ArrayList;
23

    
24
import org.gvsig.gui.beans.incrementabletask.IIncrementable;
25
import org.gvsig.gui.beans.incrementabletask.IncrementableEvent;
26
import org.gvsig.gui.beans.incrementabletask.IncrementableListener;
27
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
28
import org.gvsig.raster.buffer.BufferFactory;
29
import org.gvsig.raster.dataset.GeoRasterWriter;
30
import org.gvsig.raster.dataset.IBuffer;
31
import org.gvsig.raster.dataset.IRasterDataSource;
32
import org.gvsig.raster.dataset.NotSupportedExtensionException;
33
import org.gvsig.raster.dataset.RasterDriverException;
34
import org.gvsig.raster.grid.Grid;
35
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
36
import org.gvsig.raster.grid.filter.RasterFilterList;
37
import org.gvsig.raster.grid.filter.RasterFilterListManager;
38
import org.gvsig.raster.util.RasterToolsUtil;
39
import org.gvsig.rastertools.cutting.WriterBufferServer;
40
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
41

    
42
import com.iver.andami.PluginServices;
43
/**
44
 * Clase donde se hara todo el proceso de aplicar un filtro a una capa. Muestra
45
 * una ventana de dialogo de incremento informativa.
46
 *
47
 * @version 24/05/2007
48
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
49
 */
50
public class FilterProcess implements Runnable, IIncrementable, IncrementableListener {
51
        private IncrementableTask       incrementableTask = null;
52
        private FilterListener          filterListener = null;
53
        private RasterFilterList        rasterFilterList = null;
54
        private String                  filename = "";
55
        private volatile Thread         blinker = null;
56
        private IRasterDataSource       raster = null;
57
        private GeoRasterWriter         grw = null;
58
        private boolean                 cancel = false;
59
        private WriterBufferServer      writerBufferServer = null;
60
        private ArrayList               listFilterUsed = null;
61

    
62
        /**
63
         * Construye un FilterProcess
64
         * @param filterListener
65
         */
66
        public FilterProcess(FilterListener filterListener, String filename, IRasterDataSource raster, ArrayList listFilterUsed) {
67
                this.filterListener = filterListener;
68
                this.filename = filename;
69
                this.raster = raster;
70
                this.listFilterUsed = listFilterUsed;
71
        }
72

    
73
        /**
74
         * Lanzar el Thread del proceso de calculo de histograma.
75
         */
76
        public void start() {
77
                cancel = false;
78
                blinker = new Thread(this);
79
                blinker.start();
80
        }
81

    
82
        /*
83
         * (non-Javadoc)
84
         * @see java.lang.Runnable#run()
85
         */
86
        public void run() {
87
                try {
88
                        lastLine = PluginServices.getText(this, "aplicando_filtros");
89
                        log = PluginServices.getText(this, "leyendo_raster") + "\n";
90

    
91
                        BufferFactory bufferFactory = new BufferFactory(raster);
92
                        bufferFactory.setAllDrawableBands();
93
                        if (cancel) return;
94

    
95
                        IBuffer buffer = null;
96

    
97
                        writerBufferServer = new WriterBufferServer();
98

    
99
                        bufferFactory.setAreaOfInterest();
100
                        
101
                        Grid grid = new Grid(bufferFactory, true);
102
                        rasterFilterList = grid.getFilterList();
103
                        addSelectedFilters(rasterFilterList, listFilterUsed);
104
                        
105
                        insertLineLog(PluginServices.getText(this, "aplicando_filtros"));
106
                        
107
                        grid.applyFilters();
108

    
109
                        insertLineLog(PluginServices.getText(this, "guardando_capa"));
110

    
111
                        buffer = grid.getRasterBuf();
112

    
113
                        writerBufferServer.setBuffer(buffer, -1);
114
                        if (cancel) return;
115
                        
116
                        //TODO: FUNCIONALIDAD: Poner los gerWriter con la proyecci?n del fichero fuente
117
                        grw = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), raster.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
118

    
119
                        grw.dataWrite();
120
                        grw.writeClose();
121
                        filterListener.loadLayerInToc(filename);
122
                } catch (NotSupportedExtensionException e) {
123
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer_notsupportedextension"), this, e);
124
                } catch (RasterDriverException e) {
125
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e);
126
                } catch (IOException e) {
127
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e);
128
                } catch (InterruptedException e1) {
129
                } finally {
130
                        if (incrementableTask != null)
131
                                incrementableTask.processFinalize();
132
                }
133
        }
134

    
135
        /**
136
         * Definir el IncrementableTask
137
         * @param value
138
         */
139
        public void setIncrementableTask(IncrementableTask value) {
140
                incrementableTask = value;
141
                incrementableTask.addIncrementableListener(this);
142
        }
143

    
144
        /**
145
         * Sustituye la lista de filtros de filterList por la que le pasamos en forma
146
         * de ArrayList
147
         * @param filterList
148
         * @param listFilterUsed
149
         */
150
        public static void addSelectedFilters(RasterFilterList filterList, ArrayList listFilterUsed) {
151
                filterList.clear();
152
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
153

    
154
                for (int i=0; i<listFilterUsed.size(); i++) {
155
                        ParamStruct aux = (ParamStruct) listFilterUsed.get(i);
156
                        IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(aux.getFilterClass());
157
                        filterManager.addFilter(aux.getFilterClass(), aux.getFilterParam());
158
                }
159

    
160
                filterList.resetPercent();
161
        }
162

    
163
        String log = "";
164
        String lastLine = "";
165
        private void insertLineLog(String line) {
166
                lastLine = line;
167
                log = log + line + "\n";
168
        }
169

    
170
        /*
171
         * (non-Javadoc)
172
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLabel()
173
         */
174
        public String getLabel() {
175
                return lastLine;
176
        }
177

    
178
        /*
179
         * (non-Javadoc)
180
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLog()
181
         */
182
        public String getLog() {
183
                return log;
184
        }
185

    
186
        /*
187
         * (non-Javadoc)
188
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getPercent()
189
         */
190
        public int getPercent() {
191
                if (rasterFilterList == null)
192
                        return 0;
193

    
194
                if (rasterFilterList.getPercent() < 100)
195
                        return rasterFilterList.getPercent();
196

    
197
                if (grw == null)
198
                        return 0;
199

    
200
                return grw.getPercent();
201
        }
202

    
203
        /*
204
         * (non-Javadoc)
205
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getTitle()
206
         */
207
        public String getTitle() {
208
                return PluginServices.getText(this, "aplicando_filtros");
209
        }
210

    
211
        /*
212
         * (non-Javadoc)
213
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
214
         */
215
        public void actionCanceled(IncrementableEvent e) {
216
                blinker.interrupt();
217
                cancel = true;
218
                if (rasterFilterList != null)
219
                        rasterFilterList.setCanceled(true);
220
                /*if (writerBufferServer != null)
221
                        writerBufferServer.setCanceled(true, 0);*/
222
                if (grw != null)
223
                        grw.writeCancel();
224
        }
225

    
226
        /*
227
         * (non-Javadoc)
228
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionResumed(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
229
         */
230
        public void actionResumed(IncrementableEvent e) {
231
        }
232

    
233
        /*
234
         * (non-Javadoc)
235
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionSuspended(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
236
         */
237
        public void actionSuspended(IncrementableEvent e) {
238
        }
239
}