Revision 45522
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/featureset/FastEditedFilteredIterator.java | ||
---|---|---|
36 | 36 |
} |
37 | 37 |
|
38 | 38 |
|
39 |
@Override |
|
39 | 40 |
public boolean match(DefaultFeature feature) throws DataException { |
40 | 41 |
try { |
41 |
return ((Boolean) this.filter.evaluate(feature)).booleanValue();
|
|
42 |
return ((boolean) this.filter.evaluate(feature));
|
|
42 | 43 |
} catch (EvaluatorException e) { |
43 | 44 |
throw new DataEvaluatorException(e); |
44 | 45 |
} |
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/featureset/FastEditedIterator.java | ||
---|---|---|
24 | 24 |
package org.gvsig.fmap.dal.feature.impl.featureset; |
25 | 25 |
|
26 | 26 |
import org.gvsig.fmap.dal.exception.DataException; |
27 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
|
28 |
import org.gvsig.fmap.dal.feature.Feature; |
|
29 | 27 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
30 |
import org.gvsig.fmap.dal.feature.FeatureAttributeGetter; |
|
31 | 28 |
import org.gvsig.fmap.dal.feature.FeatureReference; |
32 | 29 |
import org.gvsig.fmap.dal.feature.FeatureType; |
33 | 30 |
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature; |
... | ... | |
48 | 45 |
|
49 | 46 |
public FastEditedIterator(DefaultFeatureSet featureSet, long index) |
50 | 47 |
throws DataException { |
51 |
super(featureSet); |
|
52 |
this.initializeFeature(); |
|
53 |
if (index > 0) { |
|
54 |
|
|
55 |
this.iterator = featureSet.provider.fastIterator(); |
|
56 |
setNewsFeatures(null); |
|
57 |
skypto(index); |
|
58 |
|
|
59 |
/* |
|
60 |
* This did not work because the provider |
|
61 |
* skips to the index without considering the |
|
62 |
* changes in editing mode. We need the |
|
63 |
* "skypto" method which knows about those |
|
64 |
* changes. |
|
65 |
* |
|
66 |
if (featureSet.provider.canIterateFromIndex()) { |
|
67 |
try { |
|
68 |
this.iterator = featureSet.provider.fastIterator(index); |
|
69 |
} catch (IllegalArgumentException e) { |
|
70 |
this.iterator = featureSet.provider.fastIterator(); |
|
71 |
setNewsFeatures(null); |
|
72 |
skypto(index); |
|
73 |
} catch (UnsupportedOperationException e) { |
|
74 |
this.iterator = featureSet.provider.fastIterator(); |
|
75 |
setNewsFeatures(null); |
|
76 |
skypto(index); |
|
77 |
} |
|
78 |
} else { |
|
79 |
this.iterator = featureSet.provider.fastIterator(); |
|
80 |
setNewsFeatures(null); |
|
81 |
skypto(index); |
|
82 |
} |
|
83 |
*/ |
|
84 |
|
|
85 |
} else { |
|
86 |
this.iterator = featureSet.provider.fastIterator(); |
|
87 |
setNewsFeatures(featureManager.getInserted()); |
|
88 |
} |
|
89 |
|
|
90 |
} |
|
91 |
|
|
92 |
protected void initializeFeature() { |
|
48 |
super(featureSet, index); |
|
93 | 49 |
myFeature = new DefaultFeature(fset.store); |
94 | 50 |
} |
95 | 51 |
|
52 |
@Override |
|
96 | 53 |
protected DefaultFeature createFeature(FeatureProvider data) throws DataException { |
97 | 54 |
|
98 | 55 |
DefaultFeature f = null; |
99 | 56 |
try { |
100 |
data.setNew(isFeatureIsNew()); |
|
101 | 57 |
FeatureReference ref = new DefaultFeatureReference(fset.store, data); |
102 | 58 |
f = (DefaultFeature) featureManager.get(ref, fset.store); |
103 | 59 |
} catch (DataException e) { |
... | ... | |
156 | 112 |
return (DefaultFeature) resp.getNotEditableCopy(); |
157 | 113 |
} |
158 | 114 |
|
115 |
@Override |
|
159 | 116 |
public void remove() { |
160 | 117 |
super.remove(); |
161 |
this.initializeFeature();
|
|
118 |
myFeature = new DefaultFeature(fset.store);
|
|
162 | 119 |
} |
163 | 120 |
|
121 |
@Override |
|
164 | 122 |
protected void doDispose() throws BaseException { |
165 | 123 |
super.doDispose(); |
166 | 124 |
myFeature = null; |
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/featureset/EditedFilteredIterator.java | ||
---|---|---|
36 | 36 |
super(fset, index); |
37 | 37 |
} |
38 | 38 |
|
39 |
@Override |
|
39 | 40 |
public boolean match(DefaultFeature feature) throws DataException { |
40 | 41 |
try { |
41 |
return ((Boolean) this.filter.evaluate(feature)).booleanValue();
|
|
42 |
return ((boolean) this.filter.evaluate(feature));
|
|
42 | 43 |
} catch (EvaluatorException e) { |
43 | 44 |
throw new DataEvaluatorException(e); |
44 | 45 |
} |
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/featureset/EditedIterator.java | ||
---|---|---|
24 | 24 |
package org.gvsig.fmap.dal.feature.impl.featureset; |
25 | 25 |
|
26 | 26 |
import java.util.Iterator; |
27 |
|
|
28 | 27 |
import org.gvsig.fmap.dal.exception.DataException; |
29 | 28 |
import org.gvsig.fmap.dal.feature.FeatureReference; |
30 | 29 |
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException; |
... | ... | |
33 | 32 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore; |
34 | 33 |
import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager; |
35 | 34 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
36 |
import org.gvsig.tools.dispose.DisposableIterator; |
|
37 | 35 |
import org.gvsig.tools.exception.BaseException; |
36 |
import org.gvsig.tools.util.ChainedIterator; |
|
38 | 37 |
|
39 | 38 |
/** |
40 | 39 |
* Iterator for stores in edition mode. |
... | ... | |
45 | 44 |
*/ |
46 | 45 |
public class EditedIterator extends FilteredIterator { |
47 | 46 |
|
48 |
private Iterator newsFeatures; |
|
49 |
private boolean featureIsNew; |
|
50 | 47 |
private DefaultFeatureStore store; |
51 | 48 |
protected FeatureManager featureManager; |
52 | 49 |
|
... | ... | |
59 | 56 |
public EditedIterator(DefaultFeatureSet featureSet, long index) |
60 | 57 |
throws DataException { |
61 | 58 |
this(featureSet); |
62 |
this.newsFeatures = null; |
|
63 |
if (index > 0) { |
|
64 | 59 |
|
65 |
this.iterator = featureSet.provider.iterator(); |
|
66 |
skypto(index); |
|
60 |
Iterator<FeatureProvider> insertedFeatures = this.featureManager.getInserted(); |
|
61 |
Iterator<FeatureProvider> updatedFeatures = this.featureManager.getUpdated(); |
|
62 |
final Iterator<FeatureProvider> providerIterator = featureSet.provider.iterator(); |
|
63 |
Iterator<FeatureProvider> wrappedProviderIterator = new Iterator<FeatureProvider>() { |
|
64 |
@Override |
|
65 |
public boolean hasNext() { |
|
66 |
return providerIterator.hasNext(); |
|
67 |
} |
|
67 | 68 |
|
68 |
/* |
|
69 |
* This did not work because the provider |
|
70 |
* skips to the index without considering the |
|
71 |
* changes in editing mode. We need the |
|
72 |
* "skypto" method which knows about those |
|
73 |
* changes. |
|
74 |
* |
|
75 |
if (featureSet.provider.canIterateFromIndex()) { |
|
76 |
try { |
|
77 |
this.iterator = featureSet.provider.iterator(index); |
|
78 |
} catch (IllegalArgumentException e) { |
|
79 |
this.iterator = featureSet.provider.iterator(); |
|
80 |
skypto(index); |
|
81 |
} catch (UnsupportedOperationException e) { |
|
82 |
this.iterator = featureSet.provider.iterator(); |
|
83 |
skypto(index); |
|
84 |
} |
|
85 |
} else { |
|
86 |
this.iterator = featureSet.provider.iterator(); |
|
87 |
skypto(index); |
|
69 |
@Override |
|
70 |
public FeatureProvider next() { |
|
71 |
return providerIterator.next(); |
|
88 | 72 |
} |
89 |
*/ |
|
90 |
|
|
91 |
} else { |
|
92 |
this.iterator = featureSet.provider.iterator(); |
|
93 |
} |
|
94 | 73 |
|
74 |
@Override |
|
75 |
public void remove() { |
|
76 |
EditedIterator.super.remove(); |
|
77 |
} |
|
78 |
}; |
|
79 |
this.iterator = new ChainedIterator(wrappedProviderIterator, insertedFeatures, updatedFeatures); |
|
80 |
if (index > 0) { |
|
81 |
skypto(index); |
|
82 |
} |
|
95 | 83 |
} |
96 | 84 |
|
85 |
@Override |
|
97 | 86 |
public void remove() { |
98 |
if(this.getIterator() == newsFeatures) { |
|
99 |
newsFeatures.remove(); |
|
100 |
} else { |
|
101 |
super.remove(); |
|
102 |
} |
|
87 |
this.iterator.remove(); |
|
103 | 88 |
} |
104 | 89 |
|
90 |
@Override |
|
105 | 91 |
public boolean hasNext() { |
106 | 92 |
if (store.isEditing()) { |
107 | 93 |
return super.hasNext(); |
... | ... | |
110 | 96 |
} |
111 | 97 |
} |
112 | 98 |
|
99 |
@Override |
|
113 | 100 |
public Object next() { |
114 | 101 |
if (store.isEditing()) { |
115 | 102 |
return super.next(); |
... | ... | |
118 | 105 |
} |
119 | 106 |
} |
120 | 107 |
|
121 |
protected void setNewsFeatures(Iterator newsFeatures) { |
|
122 |
this.newsFeatures = newsFeatures; |
|
108 |
@Override |
|
109 |
protected ChainedIterator getIterator() { |
|
110 |
return (ChainedIterator) this.iterator; |
|
123 | 111 |
} |
124 |
|
|
125 |
protected boolean isFeatureIsNew() { |
|
126 |
return featureIsNew; |
|
127 |
} |
|
128 |
|
|
129 |
protected Iterator getIterator() { |
|
130 |
if (this.featureIsNew) { |
|
131 |
return this.newsFeatures; |
|
132 |
} else |
|
133 |
if (this.iterator.hasNext()) { |
|
134 |
featureIsNew = false; |
|
135 |
return this.iterator; |
|
136 |
} else { |
|
137 |
featureIsNew = true; |
|
138 |
this.newsFeatures = this.featureManager.getInserted(); |
|
139 |
return this.newsFeatures; |
|
140 |
} |
|
141 |
} |
|
142 |
|
|
112 |
|
|
113 |
@Override |
|
143 | 114 |
protected DefaultFeature createFeature(FeatureProvider data) throws DataException { |
144 | 115 |
|
145 | 116 |
DefaultFeature f = null; |
146 |
data.setNew(featureIsNew); |
|
147 | 117 |
try { |
148 | 118 |
FeatureReference ref = new DefaultFeatureReference(store, data); |
149 |
f = |
|
150 |
(DefaultFeature) this.featureManager.get(ref, store, |
|
151 |
data.getType()); |
|
119 |
f= (DefaultFeature) this.featureManager.get(ref, store, data.getType()); |
|
152 | 120 |
} catch (DataException e) { |
153 | 121 |
RuntimeException ex = new RuntimeException(); |
154 | 122 |
e.initCause(e); |
... | ... | |
165 | 133 |
f, fset.getDefaultFeatureType()); |
166 | 134 |
} |
167 | 135 |
} |
136 |
|
|
137 |
@Override |
|
138 |
protected boolean skipFeature(FeatureProvider data) { |
|
168 | 139 |
|
169 |
protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
|
|
170 |
|
|
171 |
// XXX
|
|
172 |
// si recorriendo los originales nos
|
|
173 |
// encontramos uno nuevo, no lo devolvemos
|
|
174 |
// porque se recorrera mas tarde.
|
|
175 |
// Esto es una interaccion con los indices
|
|
176 |
// ya que estos contienen todas las features ya
|
|
177 |
// sea nuevas o no
|
|
178 |
|
|
179 |
if (data.isNew() && !featureIsNew) {
|
|
180 |
return true;
|
|
140 |
try {
|
|
141 |
if (getIterator().getCurrent() == 0) { |
|
142 |
FeatureReference ref = new DefaultFeatureReference(store, data);
|
|
143 |
if (this.featureManager.isDeleted(ref)) {
|
|
144 |
return true;
|
|
145 |
};
|
|
146 |
if (this.featureManager.get(ref, store) != null) {
|
|
147 |
return true;
|
|
148 |
};
|
|
149 |
} |
|
150 |
} catch (DataException ex) {
|
|
151 |
LOGGER.warn("Can't check if must skip feature.", ex);
|
|
181 | 152 |
} |
182 |
FeatureReference ref = new DefaultFeatureReference(store, data); |
|
183 |
return this.featureManager.isDeleted(ref); |
|
153 |
return false; |
|
184 | 154 |
} |
185 | 155 |
|
156 |
@Override |
|
186 | 157 |
protected void doDispose() throws BaseException { |
187 | 158 |
super.doDispose(); |
188 |
if (newsFeatures instanceof DisposableIterator) { |
|
189 |
((DisposableIterator) newsFeatures).dispose(); |
|
190 |
} |
|
191 |
newsFeatures = null; |
|
192 | 159 |
this.featureManager = null; |
193 | 160 |
this.store = null; |
194 | 161 |
} |
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/featureset/FilteredIterator.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import java.util.Iterator; |
27 | 27 |
import java.util.NoSuchElementException; |
28 |
|
|
29 | 28 |
import org.gvsig.fmap.dal.exception.DataEvaluatorException; |
30 | 29 |
import org.gvsig.fmap.dal.exception.DataException; |
31 | 30 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeature; |
... | ... | |
77 | 76 |
Object obj; |
78 | 77 |
while (this.getIterator().hasNext()) { |
79 | 78 |
obj =this.getIterator().next(); |
79 |
if(obj == null){ |
|
80 |
continue; |
|
81 |
} |
|
80 | 82 |
if (obj instanceof FeatureProvider){ |
81 | 83 |
data = (FeatureProvider)obj; |
82 |
if (isDeletedOrHasToSkip(data)) {
|
|
84 |
if (skipFeature(data)) {
|
|
83 | 85 |
continue; |
84 | 86 |
} |
85 | 87 |
feature = this.createFeature(data); |
86 | 88 |
} else { |
87 | 89 |
feature = (DefaultFeature)obj; |
88 |
if (isDeletedOrHasToSkip(feature.getData())) {
|
|
90 |
if (skipFeature(feature.getData())) {
|
|
89 | 91 |
continue; |
90 | 92 |
} |
91 | 93 |
} |
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/featureset/DefaultIterator.java | ||
---|---|---|
25 | 25 |
|
26 | 26 |
import java.util.Iterator; |
27 | 27 |
import java.util.NoSuchElementException; |
28 |
|
|
29 | 28 |
import org.gvsig.fmap.dal.exception.DataException; |
30 |
import org.gvsig.tools.dispose.DisposableIterator; |
|
31 | 29 |
import org.gvsig.fmap.dal.feature.Feature; |
32 | 30 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeature; |
33 | 31 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
32 |
import org.gvsig.tools.dispose.DisposableIterator; |
|
34 | 33 |
import org.gvsig.tools.dispose.DisposeUtils; |
35 | 34 |
import org.gvsig.tools.dispose.impl.AbstractDisposable; |
36 | 35 |
import org.gvsig.tools.exception.BaseException; |
36 |
import org.slf4j.Logger; |
|
37 |
import org.slf4j.LoggerFactory; |
|
37 | 38 |
|
38 | 39 |
|
39 | 40 |
class DefaultIterator extends AbstractDisposable implements DisposableIterator { |
40 | 41 |
|
41 |
protected Iterator iterator; |
|
42 |
protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultIterator.class); |
|
43 |
protected Iterator<FeatureProvider> iterator; |
|
42 | 44 |
protected DefaultFeatureSet fset; |
43 | 45 |
protected Feature lastFeature = null; |
44 | 46 |
|
... | ... | |
145 | 147 |
return this.iterator; |
146 | 148 |
} |
147 | 149 |
|
148 |
protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
|
|
150 |
protected boolean skipFeature(FeatureProvider data) {
|
|
149 | 151 |
return false; |
150 | 152 |
} |
151 | 153 |
|
trunk/org.gvsig.desktop/pom.xml | ||
---|---|---|
2745 | 2745 |
|
2746 | 2746 |
<jython.artifactId>jython-standalone</jython.artifactId> |
2747 | 2747 |
<!-- External project versions --> |
2748 |
<gvsig.tools.version>3.0.269</gvsig.tools.version>
|
|
2748 |
<gvsig.tools.version>3.0.270-SNAPSHOT</gvsig.tools.version>
|
|
2749 | 2749 |
<gvsig.proj.version>1.0.30</gvsig.proj.version> |
2750 | 2750 |
<gvsig.projection.api.version>2.0.54</gvsig.projection.api.version> |
2751 | 2751 |
</properties> |
Also available in: Unified diff