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
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