Revision 17718 trunk/extensions/extRasterTools-SE/src/org/gvsig/rastertools/filter/FilterProcess.java

View differences:

FilterProcess.java
21 21
import java.io.IOException;
22 22
import java.util.ArrayList;
23 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 24
import org.gvsig.raster.buffer.BufferFactory;
29 25
import org.gvsig.raster.buffer.RasterBuffer;
30 26
import org.gvsig.raster.dataset.GeoRasterWriter;
......
37 33
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
38 34
import org.gvsig.raster.grid.filter.RasterFilterList;
39 35
import org.gvsig.raster.grid.filter.RasterFilterListManager;
40
import org.gvsig.raster.process.CancelEvent;
41
import org.gvsig.raster.process.RasterTask;
42
import org.gvsig.raster.process.RasterTaskQueue;
43 36
import org.gvsig.raster.util.RasterToolsUtil;
37
import org.gvsig.rastertools.RasterProcess;
44 38
import org.gvsig.rastertools.clipping.WriterBufferServer;
45 39
import org.gvsig.rastertools.filter.FilterListener.ParamStruct;
46 40

  
......
52 46
 * @version 24/05/2007
53 47
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
54 48
 */
55
public class FilterProcess implements Runnable, IIncrementable, IncrementableListener {
56
	private IncrementableTask  incrementableTask  = null;
57
	private FilterListener     filterListener     = null;
58
	private RasterFilterList   rasterFilterList   = null;
59
	private String             filename           = "";
60
	private volatile Thread    blinker            = null;
61
	private IRasterDataSource  raster             = null;
62
	private GeoRasterWriter    grw                = null;
63
	private WriterBufferServer writerBufferServer = null;
64
	private ArrayList          listFilterUsed     = null;
65
	private RasterTask         rasterTask         = new RasterTask(this);
49
public class FilterProcess extends RasterProcess {
50
	private String            filename         = "";
51
	private IRasterDataSource rasterDataSource = null;
52
	private ArrayList         listFilterUsed   = null;
66 53

  
67
	/**
68
	 * Construye un FilterProcess
69
	 * @param filterListener
70
	 */
71
	public FilterProcess(FilterListener filterListener, String filename, IRasterDataSource raster, ArrayList listFilterUsed) {
72
		this.filterListener = filterListener;
73
		this.filename = filename;
74
		this.raster = raster;
75
		this.listFilterUsed = listFilterUsed;
76
	}
54
	private RasterFilterList  rasterFilterList = null;
55
	private GeoRasterWriter   geoRasterWriter  = null;
77 56

  
78
	/**
79
	 * Lanzar el Thread del proceso de calculo de histograma.
57
	/*
58
	 * (non-Javadoc)
59
	 * @see org.gvsig.rastertools.RasterProcess#init()
80 60
	 */
81
	public void start() {
82
		blinker = new Thread(this);
83
		blinker.start();
61
	public void init() {
62
		filename = getStringParam("filename");
63
		rasterDataSource = (IRasterDataSource) getParam("rasterdatasource");
64
		listFilterUsed = (ArrayList) getParam("listfilterused");
84 65
	}
85

  
66
	
86 67
	/*
87 68
	 * (non-Javadoc)
88
	 * @see java.lang.Runnable#run()
69
	 * @see org.gvsig.rastertools.RasterProcess#process()
89 70
	 */
90
	public void run() {
91
		RasterTaskQueue.register(rasterTask);
71
	public void process() throws InterruptedException {
72
		WriterBufferServer writerBufferServer = null;
92 73

  
93 74
		IRasterDataSource dsetCopy = null;
94 75
		try {
95
			lastLine = PluginServices.getText(this, "aplicando_filtros");
96
			log = PluginServices.getText(this, "leyendo_raster") + "\n";
97
			dsetCopy = raster.copy();
76
			insertLineLog(PluginServices.getText(this, "leyendo_raster"));
77
			dsetCopy = rasterDataSource.copy();
98 78
			BufferFactory bufferFactory = new BufferFactory(dsetCopy);
99
			if(!RasterBuffer.loadInMemory(dsetCopy))
79
			if (!RasterBuffer.loadInMemory(dsetCopy))
100 80
				bufferFactory.setReadOnly(true);
101 81
			bufferFactory.setAllDrawableBands();
102 82

  
......
120 100

  
121 101
			writerBufferServer.setBuffer(buffer, -1);
122 102

  
123
			//TODO: FUNCIONALIDAD: Poner los gerWriter con la proyecci?n del fichero fuente
124
			grw = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), raster.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
103
			// TODO: FUNCIONALIDAD: Poner los gerWriter con la proyecci?n del fichero fuente
104
			geoRasterWriter = GeoRasterWriter.getWriter(writerBufferServer, filename, buffer.getBandCount(), rasterDataSource.getAffineTransform(), buffer.getWidth(), buffer.getHeight(), buffer.getDataType(), GeoRasterWriter.getWriter(filename).getParams(), null);
125 105

  
126
			grw.dataWrite();
127
			grw.writeClose();
128
			filterListener.loadLayerInToc(filename);
106
			geoRasterWriter.dataWrite();
107
			geoRasterWriter.writeClose();
108
			externalActions.end(filename);
129 109
		} catch (NotSupportedExtensionException e) {
130 110
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer_notsupportedextension"), this, e);
131 111
		} catch (RasterDriverException e) {
......
134 114
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e);
135 115
		} catch (FilterTypeException e) {
136 116
			RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_filters"), this, e);
137
		} catch (InterruptedException e1) {
138
		} finally {
139
			RasterTaskQueue.remove(rasterTask);
140

  
141
			if(dsetCopy == null)
142
				dsetCopy.close();
143
			if (incrementableTask != null)
144
				incrementableTask.processFinalize();
145 117
		}
146 118
	}
147 119

  
148 120
	/**
149
	 * Definir el IncrementableTask
150
	 * @param value
151
	 */
152
	public void setIncrementableTask(IncrementableTask value) {
153
		incrementableTask = value;
154
		incrementableTask.addIncrementableListener(this);
155
	}
156

  
157
	/**
158 121
	 * Sustituye la lista de filtros de filterList por la que le pasamos en forma
159 122
	 * de ArrayList
160 123
	 * @param filterList
......
165 128
		filterList.clear();
166 129
		RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
167 130

  
168
		for (int i=0; i<listFilterUsed.size(); i++) {
131
		for (int i = 0; i < listFilterUsed.size(); i++) {
169 132
			ParamStruct aux = (ParamStruct) listFilterUsed.get(i);
170 133
			IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(aux.getFilterClass());
171 134
			filterManager.addFilter(aux.getFilterClass(), aux.getFilterParam());
......
174 137
		filterList.resetPercent();
175 138
	}
176 139

  
177
	String log = "";
178
	String lastLine = "";
179
	private void insertLineLog(String line) {
180
		lastLine = line;
181
		log = log + line + "\n";
182
	}
183

  
184 140
	/*
185 141
	 * (non-Javadoc)
186
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLabel()
187
	 */
188
	public String getLabel() {
189
		return lastLine;
190
	}
191

  
192
	/*
193
	 * (non-Javadoc)
194
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getLog()
195
	 */
196
	public String getLog() {
197
		return log;
198
	}
199

  
200
	/*
201
	 * (non-Javadoc)
202 142
	 * @see org.gvsig.gui.beans.incrementabletask.IIncrementable#getPercent()
203 143
	 */
204 144
	public int getPercent() {
......
208 148
		if (rasterFilterList.getPercent() < 100)
209 149
			return rasterFilterList.getPercent();
210 150

  
211
		if (grw == null)
151
		if (geoRasterWriter == null)
212 152
			return 0;
213 153

  
214
		return grw.getPercent();
154
		return geoRasterWriter.getPercent();
215 155
	}
216 156

  
217 157
	/*
......
221 161
	public String getTitle() {
222 162
		return PluginServices.getText(this, "aplicando_filtros");
223 163
	}
224

  
225
	/*
226
	 * (non-Javadoc)
227
	 * @see org.gvsig.gui.beans.incrementabletask.IncrementableListener#actionCanceled(org.gvsig.gui.beans.incrementabletask.IncrementableEvent)
228
	 */
229
	public void actionCanceled(IncrementableEvent e) {
230
		rasterTask.setEvent(new CancelEvent(this));
231
	}
232

  
233
	public void actionResumed(IncrementableEvent e) {}
234
	public void actionSuspended(IncrementableEvent e) {}
235 164
}

Also available in: Unified diff