Revision 44871 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureManager.java
FeatureManager.java | ||
---|---|---|
37 | 37 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
38 | 38 |
import org.gvsig.fmap.dal.feature.FeatureType; |
39 | 39 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeature; |
40 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
|
|
40 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
|
|
41 | 41 |
|
42 |
|
|
43 | 42 |
public class FeatureManager { |
44 | 43 |
|
45 | 44 |
private int deltaSize; |
... | ... | |
201 | 200 |
return added.size() > 0 || modifiedFromOriginal.size() > 0 || deleted.size() > 0; |
202 | 201 |
} |
203 | 202 |
|
204 |
public Iterator getDeleted() { |
|
205 |
return new DeletedIterator(); |
|
206 |
|
|
207 |
} |
|
208 |
|
|
209 | 203 |
public long getPendingChangesCount() { |
210 | 204 |
long count = 0; |
211 | 205 |
if( this.added!=null ) { |
... | ... | |
220 | 214 |
return count; |
221 | 215 |
} |
222 | 216 |
|
223 |
private class DeletedIterator implements Iterator { |
|
217 |
public Iterator<FeatureReference> getDeleted() { |
|
218 |
return new DeletedsFeatureReferencesIterator(); |
|
224 | 219 |
|
220 |
} |
|
221 |
|
|
222 |
private class DeletedsFeatureReferencesIterator implements Iterator<FeatureReference> { |
|
223 |
|
|
225 | 224 |
private Boolean hasnext = null; |
226 | 225 |
private final Iterator iter; |
227 |
private DefaultFeatureReference obj;
|
|
226 |
private FeatureReference reference;
|
|
228 | 227 |
|
229 |
public DeletedIterator() { |
|
228 |
public DeletedsFeatureReferencesIterator() {
|
|
230 | 229 |
iter = deleted.iterator(); |
231 | 230 |
} |
232 | 231 |
|
... | ... | |
237 | 236 |
} |
238 | 237 |
hasnext = false; |
239 | 238 |
while (iter.hasNext()) { |
240 |
obj = (DefaultFeatureReference) iter.next(); |
|
241 |
if (obj.isNewFeature()) { |
|
242 |
continue; |
|
239 |
reference = (FeatureReference) iter.next(); |
|
240 |
if (!reference.isNewFeature()) { |
|
241 |
hasnext = true; |
|
242 |
break; |
|
243 | 243 |
} |
244 |
hasnext = true; |
|
245 |
break; |
|
246 | 244 |
} |
247 | 245 |
return hasnext; |
248 | 246 |
} |
249 | 247 |
|
250 | 248 |
@Override |
251 |
public Object next() {
|
|
249 |
public FeatureReference next() {
|
|
252 | 250 |
if (!hasNext()) { |
253 | 251 |
throw new NoSuchElementException(); |
254 | 252 |
} |
255 | 253 |
hasnext = null; |
256 |
return obj;
|
|
254 |
return reference;
|
|
257 | 255 |
} |
258 | 256 |
|
259 | 257 |
@Override |
... | ... | |
263 | 261 |
|
264 | 262 |
} |
265 | 263 |
|
266 |
public Iterator getInserted() { |
|
267 |
return new InsertedIterator(); |
|
264 |
public Iterator<FeatureProvider> getInserted() { |
|
265 |
Iterator<Feature> it = new InsertedFeaturesIterator(); |
|
266 |
return new Iterator<FeatureProvider>() { |
|
267 |
@Override |
|
268 |
public boolean hasNext() { |
|
269 |
return it.hasNext(); |
|
270 |
} |
|
271 |
|
|
272 |
@Override |
|
273 |
public FeatureProvider next() { |
|
274 |
return ((DefaultFeature)it.next()).getData(); |
|
275 |
} |
|
276 |
}; |
|
268 | 277 |
} |
269 | 278 |
|
270 |
private class InsertedIterator implements Iterator { |
|
279 |
public Iterator<Feature> getInsertedFeatures() { |
|
280 |
return new InsertedFeaturesIterator(); |
|
281 |
} |
|
271 | 282 |
|
283 |
private class InsertedFeaturesIterator implements Iterator<Feature> { |
|
284 |
|
|
272 | 285 |
private final Iterator addedIter; |
273 |
private DefaultFeature obj;
|
|
286 |
private Feature feature;
|
|
274 | 287 |
private Boolean hasnext = null; |
275 | 288 |
|
276 |
public InsertedIterator() { |
|
289 |
public InsertedFeaturesIterator() {
|
|
277 | 290 |
addedIter = added.values().iterator(); |
278 | 291 |
} |
279 | 292 |
|
... | ... | |
286 | 299 |
int pos; |
287 | 300 |
while (addedIter.hasNext()) { |
288 | 301 |
pos = ((Integer) addedIter.next()); |
289 |
obj = (DefaultFeature) expansionAdapter.getObject(pos);
|
|
290 |
if (!deleted.contains(obj.getReference())) {
|
|
302 |
feature = (Feature) expansionAdapter.getObject(pos);
|
|
303 |
if (!deleted.contains(feature.getReference())) {
|
|
291 | 304 |
hasnext = true; |
292 | 305 |
break; |
293 | 306 |
} |
... | ... | |
296 | 309 |
} |
297 | 310 |
|
298 | 311 |
@Override |
299 |
public Object next() {
|
|
312 |
public Feature next() {
|
|
300 | 313 |
if (!hasNext()) { |
301 | 314 |
throw new NoSuchElementException(); |
302 | 315 |
} |
303 | 316 |
hasnext = null; |
304 |
return obj.getData();
|
|
317 |
return feature;
|
|
305 | 318 |
} |
306 | 319 |
|
307 | 320 |
@Override |
... | ... | |
311 | 324 |
|
312 | 325 |
} |
313 | 326 |
|
314 |
public Iterator getUpdated() {
|
|
315 |
return new UpdatedIterator(); |
|
327 |
public Iterator<Feature> getUpdatedFeatures() {
|
|
328 |
return new UpdatedFeaturesIterator();
|
|
316 | 329 |
} |
317 | 330 |
|
318 |
private class UpdatedIterator implements Iterator { |
|
331 |
public Iterator<FeatureProvider> getUpdated() { |
|
332 |
Iterator<Feature> it = new UpdatedFeaturesIterator(); |
|
333 |
return new Iterator<FeatureProvider>() { |
|
334 |
@Override |
|
335 |
public boolean hasNext() { |
|
336 |
return it.hasNext(); |
|
337 |
} |
|
319 | 338 |
|
339 |
@Override |
|
340 |
public FeatureProvider next() { |
|
341 |
return ((DefaultFeature)it.next()).getData(); |
|
342 |
} |
|
343 |
}; |
|
344 |
} |
|
345 |
|
|
346 |
private class UpdatedFeaturesIterator implements Iterator<Feature> { |
|
347 |
|
|
320 | 348 |
private Boolean hasnext = null; |
321 | 349 |
private final Iterator iter; |
322 |
private DefaultFeature obj;
|
|
350 |
private Feature feature;
|
|
323 | 351 |
private int pos; |
324 | 352 |
|
325 |
public UpdatedIterator() { |
|
353 |
public UpdatedFeaturesIterator() {
|
|
326 | 354 |
iter = expansionAdapter.iterator(); |
327 | 355 |
pos = -1; |
328 | 356 |
} |
... | ... | |
335 | 363 |
hasnext = false; |
336 | 364 |
while (iter.hasNext()) { |
337 | 365 |
pos++; |
338 |
obj = (DefaultFeature) iter.next(); |
|
339 |
if (deleted.contains(obj.getReference())) { |
|
340 |
continue; |
|
341 |
} else if (!modifiedFromOriginal.containsValue(pos)) { |
|
342 |
continue; |
|
343 |
} else { |
|
366 |
feature = (Feature) iter.next(); |
|
367 |
if ( !deleted.contains(feature.getReference()) && |
|
368 |
modifiedFromOriginal.containsValue(pos)) { |
|
344 | 369 |
hasnext = true; |
345 | 370 |
break; |
346 | 371 |
} |
... | ... | |
349 | 374 |
} |
350 | 375 |
|
351 | 376 |
@Override |
352 |
public Object next() {
|
|
377 |
public Feature next() {
|
|
353 | 378 |
if (!hasNext()) { |
354 | 379 |
throw new NoSuchElementException(); |
355 | 380 |
} |
356 | 381 |
hasnext = null; |
357 |
return obj.getData();
|
|
382 |
return feature;
|
|
358 | 383 |
} |
359 | 384 |
|
360 | 385 |
@Override |
Also available in: Unified diff