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 |
} |