Statistics
| Revision:

svn-gvsig-desktop / 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 @ 45739

History | View | Annotate | Download (5.51 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.fmap.dal.feature.impl.featureset;
25

    
26
import java.util.Iterator;
27
import org.gvsig.fmap.dal.exception.DataException;
28
import org.gvsig.fmap.dal.feature.EditableFeature;
29
import org.gvsig.fmap.dal.feature.FeatureReference;
30
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
31
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
32
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
33
import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager;
34
import org.gvsig.fmap.dal.feature.impl.featurereference.FeatureReferenceFactory;
35
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
36
import org.gvsig.tools.exception.BaseException;
37
import org.gvsig.tools.util.ChainedIterator;
38

    
39
/**
40
 * Iterator for stores in edition mode.
41
 * 
42
 * @author gvSIG Team
43
 * @version $Id$
44
 * @deprecated use the {@link FastEditedIterator} instead
45
 */
46
public class EditedIterator extends FilteredIterator {
47

    
48
    private DefaultFeatureStore store;
49
    protected FeatureManager featureManager;
50

    
51
    public EditedIterator(DefaultFeatureSet featureSet) {
52
        super(featureSet);
53
        this.store = featureSet.store;
54
        this.featureManager = this.store.getFeatureManager();
55
    }
56

    
57
    public EditedIterator(DefaultFeatureSet featureSet, long index)
58
        throws DataException {
59
        this(featureSet);
60

    
61
        Iterator<EditableFeature> insertedFeatures = this.featureManager.getInsertedFeatures();//Don't use getInserteds because referenceFeature will be missed
62
        Iterator<EditableFeature> updatedFeatures = this.featureManager.getUpdatedFeatures();
63
        final Iterator<FeatureProvider> providerIterator = featureSet.provider.iterator();
64
        Iterator<FeatureProvider> wrappedProviderIterator = new Iterator<FeatureProvider>() {
65
            @Override
66
            public boolean hasNext() {
67
                return providerIterator.hasNext();
68
            }
69

    
70
            @Override
71
            public FeatureProvider next() {
72
                return providerIterator.next();
73
            }
74

    
75
            @Override
76
            public void remove() {
77
                EditedIterator.super.remove();
78
            }
79
        };
80
        this.iterator = new ChainedIterator(wrappedProviderIterator, insertedFeatures, updatedFeatures);
81
        if (index > 0) {
82
            skypto(index);
83
        }
84
    }
85
    
86
    @Override
87
    public void remove() {
88
        this.iterator.remove();
89
    }
90

    
91
    @Override
92
    public boolean hasNext() {
93
        if (store.isEditing()) {
94
            return super.hasNext();
95
        } else {
96
            throw new ConcurrentDataModificationException(store.getFullName());
97
        }
98
    }
99

    
100
    @Override
101
    public Object next() {
102
        if (store.isEditing()) {
103
            return super.next();
104
        } else {
105
            throw new ConcurrentDataModificationException(store.getFullName());
106
        }
107
    }
108

    
109
    @Override
110
    protected ChainedIterator getIterator() {
111
        return (ChainedIterator) this.iterator;
112
    }
113
    
114
    @Override
115
    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
116

    
117
        DefaultFeature f = this.featureManager.get(data);
118
//        DefaultFeature f = null;
119
//        try {
120
//            FeatureReference ref = new DefaultFeatureReference(store, data);
121
//            f= (DefaultFeature) this.featureManager.get(ref, store, data.getType());
122
//        } catch (DataException e) {
123
//            RuntimeException ex = new RuntimeException();
124
//            e.initCause(e);
125
//            throw ex;
126
//        }
127
        if (f == null) {
128
            // La feature no se ha editado.
129
            f = new DefaultFeature(store, data);
130
        }
131
        if (this.fset.transform.isEmpty()) {
132
            return f;
133
        } else {
134
            return (DefaultFeature) this.fset.transform.applyTransform(
135
                    f, fset.getDefaultFeatureType());
136
        }     
137
    }
138
    
139
    @Override
140
    protected boolean skipFeature(FeatureProvider data) {
141
        try {
142
            if (getIterator().getCurrent() == 0) {
143
                if (this.featureManager.isDeleted(data)) {
144
                    return true;
145
                };
146
                FeatureReference ref = FeatureReferenceFactory.createFromFeatureProvider(store, data);
147
                if (this.featureManager.get(ref, store) != null) {
148
                    return true;
149
                };
150
            }
151
        } catch (Exception ex) {
152
            LOGGER.warn("Can't check if must skip feature.", ex);
153
        }
154
        return false;
155
    }
156

    
157
    @Override
158
    protected void doDispose() throws BaseException {
159
        super.doDispose();
160
        this.featureManager = null;
161
        this.store = null;
162
    }
163

    
164
}