Statistics
| Revision:

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 @ 47248

History | View | Annotate | Download (7.69 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 46501 jjdelcerro
import java.util.Iterator;
10 44753 omartinez
import java.util.List;
11 45425 jjdelcerro
import javax.json.JsonObject;
12
import javax.json.JsonValue;
13 44753 omartinez
import org.apache.commons.lang3.StringUtils;
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 46517 fdiaz
            if (StringUtils.equalsIgnoreCase(extraColumn.getName(), columnName)) {
48 44753 omartinez
                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 46501 jjdelcerro
204
    @Override
205
    public Iterator<EditableFeatureAttributeDescriptor> iterator() {
206
        return this.extraColumns.iterator();
207
    }
208 45425 jjdelcerro
209
    private static class TheJsonSerializer implements JsonManager.JsonSerializer {
210
211
        public TheJsonSerializer() {
212
        }
213
214
        @Override
215
        public Class getObjectClass() {
216
            return DefaultFeatureExtraColumns.class;
217
        }
218
219
        @Override
220
        public Object toObject(JsonObject json) {
221
            DefaultFeatureExtraColumns o = new DefaultFeatureExtraColumns();
222
            o.fromJson(json);
223
            return o;
224
        }
225
226
        @Override
227
        public JsonObjectBuilder toJsonBuilder(Object value) {
228
            return ((SupportToJson)value).toJsonBuilder();
229
        }
230
231
    }
232
233
    public static void selfRegister() {
234
        Json.registerSerializer(new TheJsonSerializer());
235
    }
236
237
238 44753 omartinez
}