Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / DefaultFeatureStoreTransforms.java @ 25361

History | View | Annotate | Download (3.74 KB)

1
package org.gvsig.fmap.dal.feature.impl;
2

    
3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.Iterator;
6
import java.util.List;
7

    
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.feature.EditableFeature;
10
import org.gvsig.fmap.dal.feature.Feature;
11
import org.gvsig.fmap.dal.feature.FeatureStore;
12
import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
13
import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
14
import org.gvsig.fmap.dal.feature.FeatureType;
15
import org.gvsig.tools.persistence.AbstractPersistenceManager;
16
import org.gvsig.tools.persistence.PersistenceException;
17
import org.gvsig.tools.persistence.PersistentState;
18

    
19
public class DefaultFeatureStoreTransforms implements FeatureStoreTransforms,
20
                FeatureStoreTransform {
21

    
22
        private DefaultFeatureStore store;
23
        private List transforms;
24

    
25
        public DefaultFeatureStoreTransforms() {
26
                this.store = null;
27
                this.transforms = new ArrayList();
28
        }
29

    
30
        public DefaultFeatureStoreTransforms(DefaultFeatureStore store) {
31
                this.store = store;
32
                this.transforms = new ArrayList();
33
        }
34

    
35
        private void checkEditingMode() {
36
                if (store == null || store.getMode() != FeatureStore.MODE_QUERY) {
37
                        throw new IllegalStateException();
38
                }
39
        }
40

    
41
        public FeatureStoreTransform add(FeatureStoreTransform transform) throws DataException {
42
                checkEditingMode();
43
                if( ! transform.getFeatureTypes().contains(transform.getDefaultFeatureType())) {
44
                        throw new IllegalArgumentException(); // FIXME: A?adir tipo especifico.
45
                }
46
                this.transforms.add(transform);
47
                return transform;
48
        }
49

    
50

    
51
        public void clear() {
52
                checkEditingMode();
53
                this.transforms.clear();
54
        }
55

    
56
        public FeatureStoreTransform getTransform(int index) {
57
                return (FeatureStoreTransform) this.transforms.get(index);
58
        }
59

    
60
        public Iterator iterator() {
61
                return Collections.unmodifiableList(transforms).iterator();
62
        }
63

    
64
        public Object remove(int index) {
65
                checkEditingMode();
66
                return this.transforms.remove(index);
67
        }
68

    
69
        public boolean remove(FeatureStoreTransform transform) {
70
                checkEditingMode();
71
                return this.transforms.remove(transform);
72
        }
73

    
74
        public int size() {
75
                return this.transforms.size();
76
        }
77

    
78
        public boolean isEmpty() {
79
                return this.transforms.isEmpty();
80
        }
81

    
82
        public void applyTransform(Feature source, EditableFeature target)
83
                        throws DataException {
84
                Iterator it = this.transforms.iterator();
85
                while (it.hasNext()) {
86
                        FeatureStoreTransform transform = (FeatureStoreTransform) it.next();
87
                        transform.applyTransform(source, target);
88
                        source = target.getCopy();
89
                }
90
        }
91

    
92
        public FeatureType getDefaultFeatureType() throws DataException {
93
                if (this.transforms.isEmpty()) {
94
                        return null;
95
                }
96
                FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
97
                                .get(this.transforms.size() - 1);
98
                return transform.getDefaultFeatureType();
99
        }
100

    
101
        public List getFeatureTypes() throws DataException {
102
                if (this.transforms.isEmpty()) {
103
                        return null;
104
                }
105
                FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
106
                                .get(this.transforms.size() - 1);
107
                return transform.getFeatureTypes();
108
        }
109

    
110
        public PersistentState getState() throws PersistenceException {
111
                return AbstractPersistenceManager.getState(this);
112
        }
113

    
114
        public void loadState(PersistentState state) throws PersistenceException {
115
                state.set("transforms", this.iterator());
116
                Iterator iter = this.iterator();
117
                while (iter.hasNext()) {
118
                        ((FeatureStoreTransform) iter.next()).setFeatureStore(store);
119
                }
120
        }
121

    
122
        public void setState(PersistentState state) throws PersistenceException {
123
                // TODO
124
        }
125

    
126
        public FeatureStore getFeatureStore() {
127
                return this.store;
128
        }
129

    
130
        public void setFeatureStore(FeatureStore featureStore) {
131
                if (this.store != null) {
132
                        throw new IllegalStateException();// FIXME: A?adir tipo especifico.
133
                }
134
                this.store = (DefaultFeatureStore) featureStore;
135
        }
136

    
137
}