Revision 45521
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/test/java/org/gvsig/fmap/dal/feature/DummyFetureStore.java | ||
---|---|---|
927 | 927 |
public FeatureSelection createMemoryFeatureSelection() throws DataException { |
928 | 928 |
return null; |
929 | 929 |
} |
930 |
|
|
931 |
@Override |
|
932 |
public Feature getOriginalFeature(FeatureReference id) { |
|
933 |
return null; |
|
934 |
} |
|
935 |
|
|
936 |
@Override |
|
937 |
public Feature getOriginalFeature(Feature feature) { |
|
938 |
return null; |
|
939 |
} |
|
940 |
|
|
941 |
@Override |
|
942 |
public boolean isFeatureModified(FeatureReference id){ |
|
943 |
return false; |
|
944 |
} |
|
945 |
|
|
946 |
@Override |
|
947 |
public boolean isFeatureModified(Feature feature){ |
|
948 |
return false; |
|
949 |
} |
|
930 | 950 |
|
931 | 951 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java | ||
---|---|---|
1380 | 1380 |
* @return true when support references. |
1381 | 1381 |
*/ |
1382 | 1382 |
public boolean supportReferences(); |
1383 |
|
|
1384 |
public Feature getOriginalFeature(FeatureReference id); |
|
1385 |
|
|
1386 |
public Feature getOriginalFeature(Feature feature); |
|
1387 |
|
|
1388 |
public boolean isFeatureModified(FeatureReference id); |
|
1389 |
|
|
1390 |
public boolean isFeatureModified(Feature feature); |
|
1391 |
|
|
1383 | 1392 |
} |
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 | ||
---|---|---|
47 | 47 |
private final Map<FeatureReference, Integer> added; |
48 | 48 |
private final Map<FeatureReference, Integer> addedAndDeleted; |
49 | 49 |
private final Map<FeatureReference, Integer> modifiedFromOriginal; |
50 |
private final Map<FeatureReference, Integer> original; |
|
50 | 51 |
|
51 | 52 |
public FeatureManager() { |
52 | 53 |
deltaSize = 0; |
... | ... | |
55 | 56 |
added = new LinkedHashMap<>(); |
56 | 57 |
addedAndDeleted = new LinkedHashMap<>(); |
57 | 58 |
modifiedFromOriginal = new HashMap<>(); |
59 |
original = new HashMap<>(); |
|
58 | 60 |
} |
59 | 61 |
|
60 | 62 |
/** |
... | ... | |
64 | 66 |
* @return The deleted feature or null if the feature had not been edited or |
65 | 67 |
* previously added in the editing session |
66 | 68 |
*/ |
67 |
public Feature delete(FeatureReference id) { |
|
69 |
public Feature delete(Feature feature) { |
|
70 |
FeatureReference id = feature.getReference(); |
|
71 |
if(!original.containsKey(id)){ |
|
72 |
int n = expansionAdapter.addObject(feature); |
|
73 |
original.put(id, n); |
|
74 |
} |
|
68 | 75 |
deleted.add(id); |
69 | 76 |
Integer num = added.remove(id); |
70 |
Feature feature = null;
|
|
77 |
Feature previousFeature = null;
|
|
71 | 78 |
if (num == null || num == -1) { |
72 | 79 |
num = modifiedFromOriginal.remove(id); |
73 | 80 |
if (num != null) { |
74 |
feature = (Feature) expansionAdapter.getObject(num);
|
|
81 |
previousFeature = (Feature) expansionAdapter.getObject(num);
|
|
75 | 82 |
} |
76 | 83 |
// if num is null here, method returns null |
77 | 84 |
} else { |
78 |
feature = (Feature) expansionAdapter.getObject(num);
|
|
85 |
previousFeature = (Feature) expansionAdapter.getObject(num);
|
|
79 | 86 |
addedAndDeleted.put(id, num); |
80 | 87 |
} |
81 | 88 |
deltaSize--; |
82 |
return feature;
|
|
89 |
return previousFeature;
|
|
83 | 90 |
} |
84 | 91 |
|
85 | 92 |
public void add(Feature feature) { |
93 |
FeatureReference id = feature.getReference(); |
|
94 |
if(!original.containsKey(id)){ |
|
95 |
original.put(id, null); |
|
96 |
} |
|
97 |
|
|
86 | 98 |
int pos = expansionAdapter.addObject(feature); |
87 | 99 |
added.put(feature.getReference(), pos); |
88 | 100 |
deleted.remove(feature.getReference()); |
... | ... | |
128 | 140 |
// Si no existe feature con ese id... ? retorna null ? |
129 | 141 |
// en EditedDefaultIterator se hace uso de ese comportamiento. |
130 | 142 |
// |
143 |
boolean isNewFeature = false; |
|
131 | 144 |
Integer intNum = (added.get(id)); |
132 | 145 |
if (intNum == null) { |
133 | 146 |
intNum = (modifiedFromOriginal.get(id)); |
... | ... | |
138 | 151 |
return null; |
139 | 152 |
} |
140 | 153 |
} |
154 |
} else { |
|
155 |
isNewFeature = true; |
|
141 | 156 |
} |
142 | 157 |
int num = intNum; |
143 | 158 |
if (num == -1) { |
... | ... | |
147 | 162 |
if (featureType == null) { |
148 | 163 |
featureType = store.getDefaultFeatureType(); |
149 | 164 |
} |
150 |
return new DefaultFeature(featureType, feature); |
|
165 |
DefaultFeature feat = new DefaultFeature(featureType, feature); |
|
166 |
feat.getData().setNew(isNewFeature); |
|
167 |
return feat; |
|
151 | 168 |
} |
152 | 169 |
|
153 | 170 |
public int update(Feature feature, Feature oldFeature) { |
171 |
FeatureReference id = feature.getReference(); |
|
172 |
if(!original.containsKey(id)){ |
|
173 |
int n = expansionAdapter.addObject(oldFeature); |
|
174 |
original.put(id, n); |
|
175 |
} |
|
154 | 176 |
int oldNum = -1; |
155 | 177 |
int num = expansionAdapter.addObject(feature); |
156 |
FeatureReference id = feature.getReference(); |
|
157 | 178 |
if (added.containsKey(id)) { |
158 | 179 |
oldNum = (added.get(id)); |
159 | 180 |
added.put(id, num); |
... | ... | |
364 | 385 |
while (iter.hasNext()) { |
365 | 386 |
pos++; |
366 | 387 |
feature = (Feature) iter.next(); |
367 |
if ( !deleted.contains(feature.getReference()) && |
|
388 |
if ( feature != null && |
|
389 |
!deleted.contains(feature.getReference()) && |
|
368 | 390 |
modifiedFromOriginal.containsValue(pos)) { |
369 | 391 |
hasnext = true; |
370 | 392 |
break; |
... | ... | |
406 | 428 |
//Only deleted features can change order, as added features are added at the end. |
407 | 429 |
return deleted.size() > 0; |
408 | 430 |
} |
431 |
|
|
432 |
public Feature getOriginal(FeatureReference id){ |
|
433 |
Integer n = original.get(id); |
|
434 |
if(n == null){ |
|
435 |
return null; |
|
436 |
} |
|
437 |
return (Feature) this.expansionAdapter.getObject(n); |
|
438 |
} |
|
439 |
|
|
440 |
public boolean isFeatureModified(FeatureReference id) { |
|
441 |
return original.containsKey(id); |
|
442 |
} |
|
443 |
|
|
409 | 444 |
} |
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/MemoryEditingManager.java | ||
---|---|---|
35 | 35 |
|
36 | 36 |
@Override |
37 | 37 |
public void delete(Feature feature) { |
38 |
this.featureManager.delete(feature.getReference());
|
|
38 |
this.featureManager.delete(feature); |
|
39 | 39 |
this.spatialManager.deleteFeature(feature); |
40 | 40 |
} |
41 | 41 |
|
42 |
@Override |
|
43 |
public void delete(FeatureReference featureReference) { |
|
44 |
// ???????? |
|
45 |
this.featureManager.delete(featureReference); |
|
46 |
|
|
47 |
} |
|
42 |
// @Override
|
|
43 |
// public void delete(FeatureReference featureReference) {
|
|
44 |
// // ????????
|
|
45 |
// this.featureManager.delete(featureReference);
|
|
46 |
// |
|
47 |
// }
|
|
48 | 48 |
|
49 | 49 |
@Override |
50 | 50 |
public void add(Feature newFeature) { |
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/DefaultFeatureStore.java | ||
---|---|---|
1440 | 1440 |
} |
1441 | 1441 |
|
1442 | 1442 |
//Update the featureManager and the spatialManager |
1443 |
featureManager.delete(feature.getReference());
|
|
1443 |
featureManager.delete(feature); |
|
1444 | 1444 |
spatialManager.deleteFeature(feature); |
1445 | 1445 |
|
1446 | 1446 |
newVersionOfUpdate(); |
... | ... | |
3607 | 3607 |
return this.propertiesSupportHelper.getProperties(); |
3608 | 3608 |
} |
3609 | 3609 |
|
3610 |
|
|
3610 |
@Override |
|
3611 |
public Feature getOriginalFeature(FeatureReference id){ |
|
3612 |
if(this.featureManager == null){ |
|
3613 |
return null; |
|
3614 |
} |
|
3615 |
return featureManager.getOriginal(id); |
|
3616 |
} |
|
3611 | 3617 |
|
3618 |
@Override |
|
3619 |
public Feature getOriginalFeature(Feature feature){ |
|
3620 |
if(feature == null){ |
|
3621 |
return null; |
|
3622 |
} |
|
3623 |
return getOriginalFeature(feature.getReference()); |
|
3624 |
} |
|
3612 | 3625 |
|
3626 |
@Override |
|
3627 |
public boolean isFeatureModified(FeatureReference id){ |
|
3628 |
if(this.featureManager == null){ |
|
3629 |
return false; |
|
3630 |
} |
|
3631 |
return featureManager.isFeatureModified(id); |
|
3632 |
} |
|
3633 |
|
|
3634 |
@Override |
|
3635 |
public boolean isFeatureModified(Feature feature){ |
|
3636 |
if(feature == null){ |
|
3637 |
return false; |
|
3638 |
} |
|
3639 |
return isFeatureModified(feature.getReference()); |
|
3640 |
} |
|
3641 |
|
|
3642 |
|
|
3613 | 3643 |
} |
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/EditingManager.java | ||
---|---|---|
34 | 34 |
|
35 | 35 |
public void delete(Feature feature); |
36 | 36 |
|
37 |
public void delete(FeatureReference featureReference); |
|
37 |
// public void delete(FeatureReference featureReference);
|
|
38 | 38 |
|
39 | 39 |
public void add(Feature newFeature); |
40 | 40 |
|
Also available in: Unified diff