Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / DefaultFeatureStoreTransforms.java @ 25785

History | View | Annotate | Download (4.17 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.FeatureStoreNotification;
13
import org.gvsig.fmap.dal.feature.FeatureStoreTransform;
14
import org.gvsig.fmap.dal.feature.FeatureStoreTransforms;
15
import org.gvsig.fmap.dal.feature.FeatureType;
16
import org.gvsig.tools.persistence.AbstractPersistenceManager;
17
import org.gvsig.tools.persistence.PersistenceException;
18
import org.gvsig.tools.persistence.PersistentState;
19

    
20
public class DefaultFeatureStoreTransforms implements FeatureStoreTransforms,
21
                FeatureStoreTransform {
22

    
23
        private DefaultFeatureStore store;
24
        private List transforms;
25

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

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

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

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

    
52

    
53
        public void clear() {
54
                checkEditingMode();
55
                this.transforms.clear();
56
                this.store.notifyChange(FeatureStoreNotification.TRANSFORM_CHANGE);
57
        }
58

    
59
        public FeatureStoreTransform getTransform(int index) {
60
                return (FeatureStoreTransform) this.transforms.get(index);
61
        }
62

    
63
        public Iterator iterator() {
64
                return Collections.unmodifiableList(transforms).iterator();
65
        }
66

    
67
        public Object remove(int index) {
68
                checkEditingMode();
69
                Object trans = this.transforms.remove(index);
70
                if (trans != null) {
71
                        this.store.notifyChange(FeatureStoreNotification.TRANSFORM_CHANGE);
72
                }
73
                return trans;
74
        }
75

    
76
        public boolean remove(FeatureStoreTransform transform) {
77
                checkEditingMode();
78
                boolean removed = this.transforms.remove(transform);
79
                if (removed) {
80
                        this.store.notifyChange(FeatureStoreNotification.TRANSFORM_CHANGE);
81
                }
82
                return removed;
83

    
84
        }
85

    
86
        public int size() {
87
                return this.transforms.size();
88
        }
89

    
90
        public boolean isEmpty() {
91
                return this.transforms.isEmpty();
92
        }
93

    
94
        public void applyTransform(Feature source, EditableFeature target)
95
                        throws DataException {
96
                Iterator it = this.transforms.iterator();
97
                while (it.hasNext()) {
98
                        FeatureStoreTransform transform = (FeatureStoreTransform) it.next();
99
                        transform.applyTransform(source, target);
100
                        source = target.getCopy();
101
                }
102
        }
103

    
104
        public FeatureType getDefaultFeatureType() throws DataException {
105
                if (this.transforms.isEmpty()) {
106
                        return null;
107
                }
108
                FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
109
                                .get(this.transforms.size() - 1);
110
                return transform.getDefaultFeatureType();
111
        }
112

    
113
        public List getFeatureTypes() throws DataException {
114
                if (this.transforms.isEmpty()) {
115
                        return null;
116
                }
117
                FeatureStoreTransform transform = (FeatureStoreTransform) this.transforms
118
                                .get(this.transforms.size() - 1);
119
                return transform.getFeatureTypes();
120
        }
121

    
122
        public PersistentState getState() throws PersistenceException {
123
                return AbstractPersistenceManager.getState(this);
124
        }
125

    
126
        public void loadState(PersistentState state) throws PersistenceException {
127
                state.set("transforms", this.iterator());
128
                Iterator iter = this.iterator();
129
                while (iter.hasNext()) {
130
                        ((FeatureStoreTransform) iter.next()).setFeatureStore(store);
131
                }
132
        }
133

    
134
        public void setState(PersistentState state) throws PersistenceException {
135
                // TODO
136
        }
137

    
138
        public FeatureStore getFeatureStore() {
139
                return this.store;
140
        }
141

    
142
        public void setFeatureStore(FeatureStore featureStore) {
143
                if (this.store != null) {
144
                        throw new IllegalStateException();// FIXME: A?adir tipo especifico.
145
                }
146
                this.store = (DefaultFeatureStore) featureStore;
147
        }
148

    
149
}