Revision 36367

View differences:

branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/featureset/EditedIterator.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
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 2
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
 */
1 22
package org.gvsig.fmap.dal.feature.impl.featureset;
2 23

  
3 24
import java.util.Iterator;
......
3 24

  
4 25
import org.gvsig.fmap.dal.exception.DataException;
5
import org.gvsig.tools.dispose.DisposableIterator;
6 26
import org.gvsig.fmap.dal.feature.FeatureReference;
7 27
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
8 28
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
9 29
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
30
import org.gvsig.tools.dispose.DisposableIterator;
10 31
import org.gvsig.tools.exception.BaseException;
11 32

  
33
/**
34
 * Iterator for stores in edition mode.
35
 * 
36
 * @author gvSIG Team
37
 * @version $Id$
38
 */
12 39
public class EditedIterator extends FilteredIterator {
13 40

  
14
	Iterator newsFeatures;
15
	boolean featureIsNew;
41
    Iterator newsFeatures;
42
    boolean featureIsNew;
16 43

  
44
    public EditedIterator(DefaultFeatureSet featureSet) {
45
        super(featureSet);
46
    }
17 47

  
18
	public EditedIterator(DefaultFeatureSet featureSet) {
19
		super(featureSet);
20
	}
48
    public EditedIterator(DefaultFeatureSet featureSet, long index)
49
        throws DataException {
50
        super(featureSet);
51
        this.newsFeatures = null;
52
        if (index > 0) {
53
            if (featureSet.provider.canIterateFromIndex()) {
54
                try {
55
                    this.iterator = featureSet.provider.iterator(index);
56
                } catch (IllegalArgumentException e) {
57
                    this.iterator = featureSet.provider.iterator();
58
                    skypto(index);
59
                } catch (UnsupportedOperationException e) {
60
                    this.iterator = featureSet.provider.iterator();
61
                    skypto(index);
62
                }
63
            } else {
64
                this.iterator = featureSet.provider.iterator();
65
                skypto(index);
66
            }
67
        } else {
68
            this.iterator = featureSet.provider.iterator();
69
        }
21 70

  
22
	public EditedIterator(DefaultFeatureSet featureSet, long index)
23
			throws DataException {
24
		super(featureSet);
25
		this.newsFeatures = null;
26
		if (index > 0) {
27
			if (featureSet.provider.canIterateFromIndex()) {
28
				try {
29
					this.iterator = featureSet.provider.iterator(index);
30
				} catch (IllegalArgumentException e) {
31
					this.iterator = featureSet.provider.iterator();
32
					skypto(index);
33
				} catch (UnsupportedOperationException e) {
34
					this.iterator = featureSet.provider.iterator();
35
					skypto(index);
36
				}
37
			} else {
38
				this.iterator = featureSet.provider.iterator();
39
				skypto(index);
40
			}
41
		} else {
42
			this.iterator = featureSet.provider.iterator();
43
		}
71
    }
44 72

  
45
	}
73
    protected Iterator getIterator() {
74
        if (this.featureIsNew) {
75
            return this.newsFeatures;
76
        } else
77
            if (this.iterator.hasNext()) {
78
                featureIsNew = false;
79
                return this.iterator;
80
            } else {
81
                featureIsNew = true;
82
                this.newsFeatures =
83
                    this.fset.store.getFeatureManager().getInserted();
84
                return this.newsFeatures;
85
            }
86
    }
46 87

  
47
	protected Iterator getIterator() {
48
		if (this.featureIsNew){
49
			return this.newsFeatures;
50
		} else if (this.iterator.hasNext()) {
51
			featureIsNew=false;
52
			return this.iterator;
53
		} else{
54
			featureIsNew = true;
55
			this.newsFeatures = this.fset.store.getFeatureManager()
56
					.getInserted();
57
			return this.newsFeatures;
58
		}
59
	}
88
    protected DefaultFeature createFeature(FeatureProvider data) {
60 89

  
61
	protected DefaultFeature createFeature(FeatureProvider data) {
90
        DefaultFeature f = null;
91
        data.setNew(featureIsNew);
92
        try {
93
            FeatureReference ref =
94
                new DefaultFeatureReference(fset.store, data);
95
            f =
96
                (DefaultFeature) fset.store.getFeatureManager().get(ref,
97
                    fset.store, data.getType());
98
        } catch (DataException e) {
99
            RuntimeException ex = new RuntimeException();
100
            e.initCause(e);
101
            throw ex;
102
        }
103
        if (f == null) {
104
            // La feature no se ha editado.
105
            f = new DefaultFeature(fset.store, data);
106
        }
107
        return f;
108
    }
62 109

  
63
		DefaultFeature f = null;
64
		data.setNew(featureIsNew);
65
		try {
66
			FeatureReference ref = new DefaultFeatureReference(fset.store, data);
67
			f = (DefaultFeature) fset.store.getFeatureManager().get(ref,
68
					fset.store, data.getType());
69
		} catch (DataException e) {
70
			RuntimeException ex = new RuntimeException();
71
			e.initCause(e);
72
			throw ex;
73
		}
74
		if (f == null) {
75
			// La feature no se ha editado.
76
			f = new DefaultFeature(fset.store, data);
77
		}
78
		return f;
79
	}
110
    protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
80 111

  
81
	protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
112
        // XXX
113
        // si recorriendo los originales nos
114
        // encontramos uno nuevo, no lo devolvemos
115
        // porque se recorrera mas tarde.
116
        // Esto es una interaccion con los indices
117
        // ya que estos contienen todas las features ya
118
        // sea nuevas o no
82 119

  
83
		// XXX
84
		// si recorriendo los originales nos
85
		// encontramos uno nuevo, no lo devolvemos
86
		// porque se recorrera mas tarde.
87
		// Esto es una interaccion con los indices
88
		// ya que estos contienen todas las features ya
89
		// sea nuevas o no
120
        if (data.isNew() && !featureIsNew) {
121
            return true;
122
        }
123
        FeatureReference ref = new DefaultFeatureReference(fset.store, data);
124
        return fset.store.getFeatureManager().isDeleted(ref);
125
    }
90 126

  
91
		if (data.isNew() && !featureIsNew) {
92
			return true;
93
		}
94
		FeatureReference ref = new DefaultFeatureReference(fset.store, data);
95
		return fset.store.getFeatureManager().isDeleted(ref);
96
	}
127
    protected void doDispose() throws BaseException {
128
        super.doDispose();
129
        if (newsFeatures instanceof DisposableIterator) {
130
            ((DisposableIterator) newsFeatures).dispose();
131
        }
132
        newsFeatures = null;
133
    }
97 134

  
98
	protected void doDispose() throws BaseException {
99
		super.doDispose();
100
		if (newsFeatures instanceof DisposableIterator) {
101
			((DisposableIterator) newsFeatures).dispose();
102
		}
103
		newsFeatures = null;
104
	}
105

  
106

  
107 135
}

Also available in: Unified diff