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 / DefaultFeatureExtraColumns.java @ 46195
History | View | Annotate | Download (7.55 KB)
1 | 44753 | omartinez | /*
|
---|---|---|---|
2 | * To change this license header, choose License Headers in Project Properties.
|
||
3 | * To change this template file, choose Tools | Templates
|
||
4 | * and open the template in the editor.
|
||
5 | */
|
||
6 | package org.gvsig.fmap.dal.feature.impl; |
||
7 | |||
8 | import java.util.ArrayList; |
||
9 | import java.util.List; |
||
10 | 45425 | jjdelcerro | import javax.json.JsonObject; |
11 | import javax.json.JsonValue; |
||
12 | 44753 | omartinez | import org.apache.commons.lang3.StringUtils; |
13 | import org.gvsig.fmap.dal.DALLocator; |
||
14 | import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
||
15 | 44829 | omartinez | import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
16 | import org.gvsig.tools.ToolsLocator; |
||
17 | import org.gvsig.tools.dynobject.DynStruct; |
||
18 | import org.gvsig.tools.persistence.PersistentState; |
||
19 | import org.gvsig.tools.persistence.exception.PersistenceException; |
||
20 | import org.gvsig.fmap.dal.feature.FeatureExtraColumns; |
||
21 | 46012 | jjdelcerro | import org.gvsig.fmap.dal.impl.DefaultDataManager; |
22 | 45425 | jjdelcerro | import org.gvsig.json.Json; |
23 | import org.gvsig.json.JsonManager; |
||
24 | import org.gvsig.json.JsonObjectBuilder; |
||
25 | import org.gvsig.json.SupportToJson; |
||
26 | 44753 | omartinez | |
27 | /**
|
||
28 | *
|
||
29 | * @author osc
|
||
30 | */
|
||
31 | 44829 | omartinez | public class DefaultFeatureExtraColumns implements FeatureExtraColumns { |
32 | 44753 | omartinez | |
33 | 44801 | omartinez | private List<EditableFeatureAttributeDescriptor> extraColumns; |
34 | 44764 | jjdelcerro | |
35 | 44829 | omartinez | public DefaultFeatureExtraColumns() {
|
36 | 44753 | omartinez | this.extraColumns = new ArrayList(); |
37 | } |
||
38 | 44764 | jjdelcerro | |
39 | 44753 | omartinez | @Override
|
40 | 44764 | jjdelcerro | public boolean isEmpty() { |
41 | return this.extraColumns.isEmpty(); |
||
42 | } |
||
43 | |||
44 | @Override
|
||
45 | 44753 | omartinez | public EditableFeatureAttributeDescriptor get(String columnName) { |
46 | for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) { |
||
47 | if (StringUtils.equals(extraColumn.getName(), columnName)) {
|
||
48 | return extraColumn;
|
||
49 | } |
||
50 | } |
||
51 | return null; |
||
52 | } |
||
53 | |||
54 | @Override
|
||
55 | 46012 | jjdelcerro | public EditableFeatureAttributeDescriptor add(String name, int type) { |
56 | 44753 | omartinez | //TODO que no hayan dos columnas iguales
|
57 | // exi.addExtraColumn()
|
||
58 | 46012 | jjdelcerro | EditableFeatureAttributeDescriptor newAttr = DefaultDataManager.createEditableFeatureAttributeDescriptor( |
59 | 46104 | omartinez | null,
|
60 | 46012 | jjdelcerro | name, |
61 | type |
||
62 | ); |
||
63 | 44753 | omartinez | extraColumns.add(newAttr); |
64 | return newAttr;
|
||
65 | } |
||
66 | |||
67 | @Override
|
||
68 | public List<EditableFeatureAttributeDescriptor> getColumns() { |
||
69 | return this.extraColumns; |
||
70 | } |
||
71 | |||
72 | @Override
|
||
73 | 44829 | omartinez | public void merge(FeatureExtraColumns other) { |
74 | 44753 | omartinez | this.extraColumns.addAll(other.getColumns());
|
75 | } |
||
76 | |||
77 | 44778 | omartinez | @Override
|
78 | public int getIndexOf(String name) { |
||
79 | for (int i = 0; i < extraColumns.size(); i++) { |
||
80 | EditableFeatureAttributeDescriptor extraColumn = extraColumns.get(i); |
||
81 | 45218 | omartinez | if (StringUtils.equalsIgnoreCase(extraColumn.getName(), name)) {
|
82 | 44778 | omartinez | return i;
|
83 | } |
||
84 | } |
||
85 | return -1; |
||
86 | } |
||
87 | |||
88 | @Override
|
||
89 | public EditableFeatureAttributeDescriptor get(int index) { |
||
90 | return extraColumns.get(index);
|
||
91 | } |
||
92 | |||
93 | 44779 | omartinez | @Override
|
94 | public int size() { |
||
95 | return extraColumns.size();
|
||
96 | } |
||
97 | |||
98 | 44791 | omartinez | @Override
|
99 | 44829 | omartinez | public void copyFrom(FeatureExtraColumns extraColumn) { |
100 | 44791 | omartinez | this.extraColumns.clear();
|
101 | for (EditableFeatureAttributeDescriptor col : extraColumn.getColumns()) {
|
||
102 | 45345 | omartinez | //TODO revisar si getCopy o no
|
103 | 44791 | omartinez | this.extraColumns.add(col);
|
104 | } |
||
105 | } |
||
106 | |||
107 | @Override
|
||
108 | public void clear() { |
||
109 | this.extraColumns.clear();
|
||
110 | } |
||
111 | 44801 | omartinez | |
112 | 45345 | omartinez | @Override
|
113 | public FeatureExtraColumns getCopy() {
|
||
114 | 44829 | omartinez | DefaultFeatureExtraColumns other = new DefaultFeatureExtraColumns();
|
115 | 44801 | omartinez | ArrayList otherCols = new ArrayList(); |
116 | for (EditableFeatureAttributeDescriptor extraColumn : this.extraColumns) { |
||
117 | 46012 | jjdelcerro | EditableFeatureAttributeDescriptor newAttr = DefaultDataManager.createEditableFeatureAttributeDescriptor( |
118 | 46104 | omartinez | null,
|
119 | 46012 | jjdelcerro | extraColumn.getName(), |
120 | extraColumn.getType() |
||
121 | ); |
||
122 | 44801 | omartinez | newAttr.copyFrom(extraColumn); |
123 | otherCols.add(newAttr); |
||
124 | } |
||
125 | other.extraColumns = otherCols; |
||
126 | return other;
|
||
127 | } |
||
128 | 44791 | omartinez | |
129 | 44801 | omartinez | @Override
|
130 | 44829 | omartinez | public void saveToState(PersistentState state) throws PersistenceException { |
131 | |||
132 | // ArrayList<DefaultFeatureAttributeDescriptor> extraListCols = new ArrayList<>();
|
||
133 | // for (EditableFeatureAttributeDescriptor extraColumn : extraColumns) {
|
||
134 | // DefaultEditableFeatureAttributeDescriptor mycol = (DefaultEditableFeatureAttributeDescriptor) extraColumn;
|
||
135 | // DefaultFeatureAttributeDescriptor fad = new DefaultFeatureAttributeDescriptor();
|
||
136 | // fad.copyFrom(mycol);
|
||
137 | // extraListCols.add(fad);
|
||
138 | // }
|
||
139 | state.set("extraColumns", extraColumns);
|
||
140 | } |
||
141 | |||
142 | @Override
|
||
143 | public void loadFromState(PersistentState state) throws PersistenceException { |
||
144 | List<DefaultFeatureAttributeDescriptor> extraColumnsDescriptors = (List) state.getList("extraColumns"); |
||
145 | ArrayList<EditableFeatureAttributeDescriptor> cols = new ArrayList<EditableFeatureAttributeDescriptor>(); |
||
146 | for (DefaultFeatureAttributeDescriptor extraColumnsDescriptor : extraColumnsDescriptors) {
|
||
147 | DefaultEditableFeatureAttributeDescriptor myEditableDescriptor = new DefaultEditableFeatureAttributeDescriptor(extraColumnsDescriptor);
|
||
148 | cols.add(myEditableDescriptor); |
||
149 | } |
||
150 | this.extraColumns = cols;
|
||
151 | } |
||
152 | |||
153 | public static void registerPersistent() { |
||
154 | DynStruct definition = |
||
155 | ToolsLocator.getPersistenceManager() |
||
156 | .addDefinition(DefaultFeatureExtraColumns.class, |
||
157 | "DefaultFeatureExtraColumn",
|
||
158 | "DefaultFeatureExtraColumn Persistent definition",
|
||
159 | null,
|
||
160 | null);
|
||
161 | |||
162 | definition.addDynFieldArray("extraColumns")
|
||
163 | .setClassOfItems(FeatureAttributeDescriptor.class) |
||
164 | .setMandatory(false);
|
||
165 | |||
166 | } |
||
167 | 45155 | omartinez | |
168 | @Override
|
||
169 | public void remove(String attribute) { |
||
170 | for (EditableFeatureAttributeDescriptor extraColumn : extraColumns) {
|
||
171 | if (extraColumn.getName().equalsIgnoreCase(attribute)) {
|
||
172 | this.extraColumns.remove(extraColumn);
|
||
173 | break;
|
||
174 | } |
||
175 | } |
||
176 | } |
||
177 | 45425 | jjdelcerro | |
178 | @Override
|
||
179 | public void fromJson(JsonObject json) { |
||
180 | this.clear();
|
||
181 | if( json.containsKey("extraColumns") ) { |
||
182 | for (JsonValue jsonValue : json.getJsonArray("extraColumns")) { |
||
183 | JsonObject value = (JsonObject) jsonValue; |
||
184 | EditableFeatureAttributeDescriptor newAttr = new DefaultEditableFeatureAttributeDescriptor(null, false); |
||
185 | newAttr.fromJson(value); |
||
186 | this.extraColumns.add(newAttr);
|
||
187 | } |
||
188 | } |
||
189 | } |
||
190 | |||
191 | @Override
|
||
192 | public JsonObject toJson() {
|
||
193 | return this.toJsonBuilder().build(); |
||
194 | } |
||
195 | |||
196 | @Override
|
||
197 | public JsonObjectBuilder toJsonBuilder() {
|
||
198 | JsonObjectBuilder builder = Json.createObjectBuilder(); |
||
199 | builder.add_class(this);
|
||
200 | builder.add("extraColumns", Json.createArrayBuilder().addAll(this.extraColumns)); |
||
201 | return builder;
|
||
202 | } |
||
203 | |||
204 | private static class TheJsonSerializer implements JsonManager.JsonSerializer { |
||
205 | |||
206 | public TheJsonSerializer() {
|
||
207 | } |
||
208 | |||
209 | @Override
|
||
210 | public Class getObjectClass() { |
||
211 | return DefaultFeatureExtraColumns.class;
|
||
212 | } |
||
213 | |||
214 | @Override
|
||
215 | public Object toObject(JsonObject json) { |
||
216 | DefaultFeatureExtraColumns o = new DefaultFeatureExtraColumns();
|
||
217 | o.fromJson(json); |
||
218 | return o;
|
||
219 | } |
||
220 | |||
221 | @Override
|
||
222 | public JsonObjectBuilder toJsonBuilder(Object value) { |
||
223 | return ((SupportToJson)value).toJsonBuilder();
|
||
224 | } |
||
225 | |||
226 | } |
||
227 | |||
228 | public static void selfRegister() { |
||
229 | Json.registerSerializer(new TheJsonSerializer());
|
||
230 | } |
||
231 | |||
232 | |||
233 | 44753 | omartinez | } |