Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / FilterProcess.java @ 12333

History | View | Annotate | Download (6.94 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.MultiRasterDataset;
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.rastertools.cutting.WriterBufferServer;
39
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
40

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

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

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

    
81
        /*
82
         * (non-Javadoc)
83
         * @see java.lang.Runnable#run()
84
         */
85
        public void run() {
86
                try {
87
                        insertLineLog(PluginServices.getText(this, "aplicando_filtros"));
88

    
89
                        BufferFactory bufferFactory = new BufferFactory(rasterMultiDataset);
90
                        bufferFactory.setAllDrawableBands();
91
                        if (cancel) return;
92

    
93
                        IBuffer buffer = null;
94

    
95
                        writerBufferServer = new WriterBufferServer();
96

    
97
                        bufferFactory.setAreaOfInterest();
98

    
99
                        Grid grid = new Grid(bufferFactory, true);
100
                        rasterFilterList = grid.getFilterList();
101
                        addSelectedFilters(rasterFilterList, listFilterUsed);
102
                        grid.applyFilters();
103

    
104
                        insertLineLog(PluginServices.getText(this, "guardando_capa"));
105

    
106
                        buffer = grid.getRasterBuf();
107

    
108
                        writerBufferServer.setBuffer(buffer, -1);
109
                        if (cancel) return;
110

    
111
                        grw = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), rasterMultiDataset.getExtent(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams());
112

    
113
                        grw.dataWrite();
114
                        grw.writeClose();
115
                        filterListener.loadLayerInToc(filename);
116
                } catch (NotSupportedExtensionException e) {
117
                } catch (RasterDriverException e) {
118
                } catch (IOException e) {
119
                } catch (InterruptedException e1) {
120
                        //e1.printStackTrace();
121
                } finally {
122
                        if (incrementableTask != null)
123
                                incrementableTask.processFinalize();
124
                }
125
        }
126

    
127
        /**
128
         * Definir el IncrementableTask
129
         * @param value
130
         */
131
        public void setIncrementableTask(IncrementableTask value) {
132
                incrementableTask = value;
133
                incrementableTask.addIncrementableListener(this);
134
        }
135

    
136
        static public void addSelectedFilters(RasterFilterList filterList, ArrayList listFilterUsed) {
137
                filterList.clear();
138
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
139

    
140
                for (int i=0; i<listFilterUsed.size(); i++) {
141
                        ParamStruct aux = (ParamStruct) listFilterUsed.get(i);
142

    
143
                        IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(aux.getFilterClass());
144

    
145
                        filterManager.addFilter(aux.getFilterClass(), aux.getFilterParam());
146
                }
147

    
148
                filterList.resetPercent();
149
        }
150

    
151
        String log = "";
152
        String lastLine = "";
153
        private void insertLineLog(String line) {
154
                lastLine = line;
155
                log = log + line + "\n";
156
        }
157

    
158
        /*
159
         * (non-Javadoc)
160
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLabel()
161
         */
162
        public String getLabel() {
163
                return lastLine;
164
        }
165

    
166
        /*
167
         * (non-Javadoc)
168
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLog()
169
         */
170
        public String getLog() {
171
                return log;
172
        }
173

    
174
        /*
175
         * (non-Javadoc)
176
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getPercent()
177
         */
178
        public int getPercent() {
179
                if (rasterFilterList == null)
180
                        return 0;
181

    
182
                if (rasterFilterList.getPercent() < 100)
183
                        return rasterFilterList.getPercent();
184

    
185
                if (grw == null)
186
                        return 0;
187

    
188
                return grw.getPercent();
189
        }
190

    
191
        /*
192
         * (non-Javadoc)
193
         * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getTitle()
194
         */
195
        public String getTitle() {
196
                return PluginServices.getText(this, "aplicando_filtros");
197
        }
198

    
199
        /*
200
         * (non-Javadoc)
201
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
202
         */
203
        public void actionCanceled(IncrementableEvent e) {
204
                blinker.interrupt();
205
                cancel = true;
206
                if (rasterFilterList != null)
207
                        rasterFilterList.setCanceled(true);
208
                if (writerBufferServer != null)
209
                        writerBufferServer.setCanceled(true, 0);
210
                if (grw != null)
211
                        grw.writeCancel();
212
        }
213

    
214
        /*
215
         * (non-Javadoc)
216
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionResumed(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
217
         */
218
        public void actionResumed(IncrementableEvent e) {
219
        }
220

    
221
        /*
222
         * (non-Javadoc)
223
         * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionSuspended(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
224
         */
225
        public void actionSuspended(IncrementableEvent e) {
226
        }
227
}