Revision 36679 branches/v2_0_0_prep/libraries/org.gvsig.annotation/org.gvsig.annotation.lib/org.gvsig.annotation.lib.impl/src/main/java/org/gvsig/annotation/impl/DefaultAnnotationCreationService.java

View differences:

DefaultAnnotationCreationService.java
22 22
package org.gvsig.annotation.impl;
23 23

  
24 24
import java.io.File;
25
import java.io.FileInputStream;
26 25
import java.io.FileOutputStream;
27 26
import java.io.IOException;
28 27
import java.io.InputStream;
29 28
import java.io.OutputStream;
30 29

  
30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
32

  
31 33
import org.gvsig.annotation.AnnotationCreationException;
32 34
import org.gvsig.annotation.AnnotationCreationFinishAction;
33 35
import org.gvsig.annotation.AnnotationCreationService;
34
import org.gvsig.annotation.AnnotationCreationServiceNotification;
35 36
import org.gvsig.annotation.AnnotationDataTypes;
36 37
import org.gvsig.annotation.AnnotationManager;
37 38
import org.gvsig.annotation.calculator.AnnotationPositionCalculationException;
......
56 57
import org.gvsig.fmap.geom.Geometry;
57 58
import org.gvsig.tools.dispose.DisposableIterator;
58 59
import org.gvsig.tools.dynobject.exception.DynFieldNotFoundException;
59
import org.slf4j.Logger;
60
import org.slf4j.LoggerFactory;
60
import org.gvsig.tools.task.AbstractMonitorableTask;
61 61

  
62 62

  
63 63
/**
......
66 66
 * @author gvSIG Team
67 67
 * @version $Id$
68 68
 */
69
public class DefaultAnnotationCreationService implements AnnotationCreationService {
69
public class DefaultAnnotationCreationService extends AbstractMonitorableTask implements AnnotationCreationService {
70 70
	private static final Logger LOG = LoggerFactory.getLogger(DefaultAnnotationCreationService.class);
71 71
	private static DataManager dataManager = DALLocator.getDataManager();
72 72

  
......
82 82

  
83 83
	private String destinationGeometryAttributeName = null;
84 84

  
85
	private AnnotationCreationServiceNotification annotationCreationServiceNotification = null;
86 85
	private AnnotationCreationFinishAction annotationCreationFinishAction = null; 
87 86

  
88 87
	/**
......
94 93
	 * @throws DataException 
95 94
	 */
96 95
	public DefaultAnnotationCreationService(FeatureStore featureStore, AnnotationManager manager) throws DataException {
97
		this.sourceStore = featureStore; 
96
		super("annotation");
97
	    this.sourceStore = featureStore; 
98 98
		this.manager = manager;
99 99
		destinationGeometryAttributeName = featureStore.getDefaultFeatureType().getDefaultGeometryAttributeName();
100 100
	}
......
206 206

  
207 207
	private void copyFeatureStore(FeatureStore sourceStore,
208 208
			FeatureStore destinationStore, int textAttribute)
209
	throws AnnotationCreationException, DataException {
210
		if (annotationCreationServiceNotification != null){
211
			annotationCreationServiceNotification.initializing();
212
		}
209
	throws AnnotationCreationException, DataException {		
213 210

  
214 211
		//Start the edition
215 212
		destinationStore.edit();
......
217 214
		//Copy data
218 215
		FeatureSet featureSet = sourceStore.getFeatureSet();
219 216
		DisposableIterator iterator = featureSet.iterator();
217
		
218
		taskStatus.setRangeOfValues(0, featureSet.getSize());
220 219

  
221 220
		//Create the attribute inserter's
222 221
		AttributeInserter fontTypeAttributeInserter = createInserter(sourceFontTypeAttribute, manager.getDefaultFontType());		
......
226 225
		AttributeInserter fontHeigthAttributeInserter = createInserter(sourceHeigthAttribute, manager.getDefaultFontHeight());		
227 226

  
228 227
		Feature sourceFeature;
228
		long featureCount = 0;
229 229
		while (iterator.hasNext()) {			
230 230
			sourceFeature = (Feature) iterator.next();
231 231

  
......
243 243
			destinationFeature.set(AnnotationManager.FONTHEGTH_ATTRIBUTE_NAME, fontHeigthAttributeInserter.getValue(sourceFeature));
244 244

  
245 245
			destinationStore.insert(destinationFeature);
246
			if (annotationCreationServiceNotification != null){
247
				annotationCreationServiceNotification.next();
248
				if (annotationCreationServiceNotification.isCanceled()){
249
					break;
250
				}
251
			}
246
    		featureCount++;  
247
    		this.taskStatus.setCurValue(featureCount);
248
    
249
            if (this.taskStatus.isCancellationRequested()) {
250
                return;
251
            }
252 252
		}
253 253

  
254 254
		//Finish the edition
......
256 256

  
257 257
		//Dispose resources
258 258
		iterator.dispose();		
259
		featureSet.dispose();				
260

  
261
		if (annotationCreationServiceNotification != null){
262
			annotationCreationServiceNotification.finished();
263
		}		
259
		featureSet.dispose();
260
		
261
		this.taskStatus.terminate();
262
        this.taskStatus.remove();		
264 263
	}
265 264

  
266 265
	private void copyLegend(FeatureStore destinationStore) throws ValidateDataParametersException, DataException, IOException {
......
268 267
		File target = filesystemServerExplorer.getResourcePath(destinationStore, "gvl");
269 268

  
270 269
		//Copy the template
271
		File source = new File(getClass().getClassLoader().getResource("legend.template.gvl").getFile());
272
		InputStream in = null;
270
		InputStream in = getClass().getClassLoader().getResourceAsStream("legend.template.gvl");
273 271
		OutputStream out = null;
274 272

  
275
		in = new FileInputStream(source);
276 273
		out = new FileOutputStream(target);
277 274

  
278 275
		byte[] buf = new byte[1024];
......
392 389
		return annotationCreationFinishAction;
393 390
	}
394 391

  
395
	public AnnotationCreationServiceNotification getAnnotationCreationServiceNotification() {
396
		return annotationCreationServiceNotification;
397
	}
398 392

  
399 393
	public void setAnnotationCreationFinishAction(
400 394
			AnnotationCreationFinishAction annotationCreationFinishAction) {
401 395
		this.annotationCreationFinishAction = annotationCreationFinishAction;	
402 396
	}
403

  
404
	public void setAnnotationCreationServiceNotification(AnnotationCreationServiceNotification annotationCreationServiceNotification) {
405
		this.annotationCreationServiceNotification = annotationCreationServiceNotification;		
406
	}
407

  
408 397
}

Also available in: Unified diff