Revision 8671

View differences:

trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/topology/lineclean/fmap/LineCleanGeoprocess.java
45 45
*
46 46
* $Id$
47 47
* $Log$
48
* Revision 1.4  2006-11-09 21:08:32  azabala
48
* Revision 1.5  2006-11-10 13:22:57  azabala
49
* better syncronization of clean and build network (use of pipetask)
50
*
51
* Revision 1.4  2006/11/09 21:08:32  azabala
49 52
* *** empty log message ***
50 53
*
51 54
* Revision 1.3  2006/10/19 16:06:48  azabala
......
89 92
import com.iver.cit.gvsig.project.documents.view.gui.View;
90 93
import com.iver.utiles.swing.threads.AbstractMonitorableTask;
91 94
import com.iver.utiles.swing.threads.IMonitorableTask;
95
import com.iver.utiles.swing.threads.IPipedTask;
92 96

  
93 97
public class LineCleanGeoprocess extends AbstractGeoprocess {
94 98

  
......
158 162
	}
159 163
	
160 164
	
161
	class LineCleanTask extends AbstractMonitorableTask {
165
	class LineCleanTask extends AbstractMonitorableTask implements IPipedTask{
162 166

  
163 167
		private LineCleanTask() {
164 168
			setInitialStep(0);
......
248 252
			setCanceled(true);
249 253
			LineCleanGeoprocess.this.cancel();
250 254
		}
255

  
256
		/* (non-Javadoc)
257
		 * @see com.iver.utiles.swing.threads.IPipedTask#getResult()
258
		 */
259
		public Object getResult() {
260
			try {
261
				return LineCleanGeoprocess.this.getResult();
262
			} catch (GeoprocessException e) {
263
				return null;
264
			}
265
		}
266

  
267
		/* (non-Javadoc)
268
		 * @see com.iver.utiles.swing.threads.IPipedTask#setEntry(java.lang.Object)
269
		 */
270
		public void setEntry(Object object) {
271
			// TODO Auto-generated method stub
272
			
273
		}
251 274
	}
252 275

  
253 276
	
trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/graph/GenerateNetworkExtension.java
73 73
import com.iver.cit.gvsig.fmap.layers.SingleLayerIterator;
74 74
import com.iver.cit.gvsig.geoprocess.core.fmap.GeoprocessException;
75 75
import com.iver.cit.gvsig.geoprocess.core.fmap.XTypes;
76
import com.iver.cit.gvsig.geoprocess.core.gui.AddResultLayerTask;
77 76
import com.iver.cit.gvsig.graph.core.writers.NetworkFileRedWriter;
78 77
import com.iver.cit.gvsig.graph.core.writers.NetworkGvTableWriter;
79 78
import com.iver.cit.gvsig.graph.gui.wizard.NetWizard;
......
85 84
import com.iver.utiles.SimpleFileFilter;
86 85
import com.iver.utiles.swing.threads.AbstractMonitorableTask;
87 86
import com.iver.utiles.swing.threads.IMonitorableTask;
88
import com.iver.utiles.swing.threads.MonitorableDecoratorMainFirst;
89
import com.iver.utiles.swing.threads.MonitorableTaskQueue;
87
import com.iver.utiles.swing.threads.IPipedTask;
88
import com.iver.utiles.swing.threads.PipeTask;
90 89

  
90

  
91 91
public class GenerateNetworkExtension extends Extension implements
92 92
		IPreferenceExtension {
93 93
	private static final IPreference thePreferencePage = new RoutePage();
......
162 162
				.getText(this, "done"));
163 163
	}
164 164
	
165
	class GenerateRedNetworkAfterCleanTask extends AbstractMonitorableTask {
166
		IMonitorableTask cleanTask;
167
		LineCleanGeoprocess cleanGeoprocess;
168

  
165
	class GenerateRedNetworkAfterCleanTask 
166
		extends AbstractMonitorableTask implements IPipedTask{
167
		
169 168
		File redFile;
170

  
171 169
		NetworkFileRedWriter netBuilder;
172 170
		
171
		FLyrVect inputLayer;
173 172
		
174

  
175 173
		/**
176 174
		 * Constructor
177 175
		 */
178
		GenerateRedNetworkAfterCleanTask(FLyrVect layer, File redFile,
179
				NetworkFileRedWriter netBuilder, 
180
				IMonitorableTask cleanTask, LineCleanGeoprocess geoprocess) {
176
		GenerateRedNetworkAfterCleanTask(File redFile,
177
				NetworkFileRedWriter netBuilder) {
181 178
			this.redFile = redFile;
182 179
			this.netBuilder = netBuilder;
183
			this.cleanTask = cleanTask;
184
			this.cleanGeoprocess = geoprocess;
185 180
			setInitialStep(0);
186 181
			setDeterminatedProcess(true);
187 182
			setStatusMessage(PluginServices.getText(this,
......
189 184
		}
190 185

  
191 186
		public void run() throws Exception {
192
			//TODO Esto creo que no vale, porque estamos esperando a que el thread del CLEAN acabe
193
			//y esto come mucho procesador
194
			
195
			//Probar a crear un PluginServices.enqueue(Task1, Task2)
196
			//de forma que el thread de la task2 se quede esperando al de la task1
197
			
198
			while(! cleanTask.isFinished() || ! cleanTask.isCanceled()){
199
				Thread.sleep(1000);
200
			}
201
			if(cleanTask.isCanceled())
202
				return;
203
			FLyrVect layer = (FLyrVect) cleanGeoprocess.getResult();
187
			FLyrVect layer = null;
204 188
			int numShapes;
205 189
			try { 	
206 190
				numShapes = layer.getSource().getShapeCount();
......
229 213
		public void cancel() {
230 214
			setCanceled(true);
231 215
		}
216

  
217
		/* (non-Javadoc)
218
		 * @see com.iver.utiles.swing.threads.IPipedTask#getResult()
219
		 */
220
		public Object getResult() {
221
			// TODO Auto-generated method stub
222
			return null;
223
		}
224

  
225
		/* (non-Javadoc)
226
		 * @see com.iver.utiles.swing.threads.IPipedTask#setEntry(java.lang.Object)
227
		 */
228
		public void setEntry(Object object) {
229
			inputLayer = (FLyrVect) object;
230
		}
232 231
	}
233 232
	
234 233
	
......
283 282
		public void cancel() {
284 283
			setCanceled(true);
285 284
		}
285
		
286
		public Object getResult(){
287
			return null;
288
		
289
		}
290
		public void setEntry(Object object){
291
			this.layer = (FLyrVect) object;
292
		}
286 293
	}
287 294

  
288 295
	/**
......
400 407
		if(clean != null){
401 408
			//we wont start the process of network creation
402 409
			//until clean geoprocess will be finished
403
			IMonitorableTask cleanTask = clean.createTask();
410
			IPipedTask cleanTask = (IPipedTask) clean.createTask();
404 411
			GenerateRedNetworkAfterCleanTask task = new 
405
			GenerateRedNetworkAfterCleanTask(lyr, redFile,
406
					netBuilder, cleanTask, clean );
407
			PluginServices.cancelableBackgroundExecution(cleanTask);
408
			PluginServices.cancelableBackgroundExecution(task);
412
			GenerateRedNetworkAfterCleanTask(redFile, netBuilder);
409 413
			
414
			PipeTask pipe = new PipeTask(cleanTask, (IPipedTask)task);
415
			
416
			PluginServices.cancelableBackgroundExecution(pipe);
417
//			PluginServices.cancelableBackgroundExecution(task);
418
			
410 419
		}else{
411 420
			GenerateRedNetworkTask task = new GenerateRedNetworkTask(lyr, redFile,
412 421
					netBuilder);

Also available in: Unified diff