Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / searchpanel / DefaultSearchParameters.java @ 45326

History | View | Annotate | Download (9.35 KB)

1
/*
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.swing.impl.searchpanel;
7

    
8
import java.io.ByteArrayInputStream;
9
import java.io.InputStream;
10
import java.util.ArrayList;
11
import java.util.HashMap;
12
import java.util.List;
13
import java.util.Map;
14
import javax.json.Json;
15
import javax.json.JsonObject;
16
import javax.json.JsonReader;
17
import org.gvsig.expressionevaluator.Expression;
18
import org.gvsig.fmap.dal.exception.DataException;
19
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
20
import org.gvsig.fmap.dal.feature.FeatureQuery;
21
import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
22
import org.gvsig.fmap.dal.feature.FeatureSet;
23
import org.gvsig.fmap.dal.feature.FeatureStore;
24
import org.gvsig.fmap.dal.feature.FeatureType;
25
import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
26
import org.gvsig.tools.ToolsLocator;
27
import org.gvsig.tools.dispose.DisposeUtils;
28
import org.gvsig.tools.dynobject.DynStruct;
29
import org.gvsig.tools.persistence.PersistenceManager;
30
import org.gvsig.tools.persistence.PersistentState;
31
import org.gvsig.tools.persistence.exception.PersistenceException;
32

    
33
/**
34
 *
35
 * @author jjdelcerro
36
 */
37
public class DefaultSearchParameters implements SearchParameters, Cloneable {
38

    
39
    private List<String> resultColumnNames;
40
    private FeatureQuery query;
41
    public String name;
42
    private Map<String, JsonObject> values;
43
    private int searchMode;
44

    
45
    public DefaultSearchParameters() {
46
        this.resultColumnNames = new ArrayList<>();
47
        this.query = null;
48
        this.values = new HashMap<>();
49
        this.searchMode = DefaultSearchPanel.PANEL_SIMPLIFIED;
50
    }
51

    
52
    @Override
53
    public List<String> getResultColumnNames() {
54
        return this.resultColumnNames;
55
    }
56

    
57
    public List<String> getGroupByColumns() {
58
        return this.query.getGroupByColumns();
59
    }
60

    
61
    public Map<String, String> getAggregateFunctions() {
62
        return this.query.getAggregateFunctions();
63
    }
64

    
65
    public void setQuery(FeatureQuery query) {
66
        this.query = query;
67
    }
68

    
69
    public void setFilter(Expression exp) {
70
        this.query.setFilter(exp);
71
    }
72

    
73
    public FeatureQuery getQuery() {
74
        return this.query;
75
    }
76

    
77
    void setResultColumnNames(List<String> selectedNames) {
78
        throw new UnsupportedOperationException("Not supported yet.");
79
    }
80

    
81
    @Override
82
    public Map<String, JsonObject> getValues() {
83
        return this.values;
84
    }
85

    
86
    public static void registerPersistence() {
87
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
88
        if (manager.getDefinition("SearchParameters") == null) {
89
            DynStruct definition = manager.addDefinition(DefaultSearchParameters.class,
90
                    "DefaultSearchParameters", "DefaultSearchParameters persistence definition", null, null);
91
            definition.addDynFieldList("resultColumnNames").setClassOfItems(String.class);
92
            definition.addDynFieldMap("values").setClassOfItems(String.class);
93
            definition.addDynFieldObject("query").setClassOfValue(FeatureQuery.class).setMandatory(false);
94
            definition.addDynFieldString("name").setClassOfValue(String.class);
95
            definition.addDynFieldInt("searchMode").setClassOfValue(Integer.class);
96
        }
97
    }
98

    
99
    @Override
100
    public void saveToState(PersistentState state) throws PersistenceException {
101
        state.set("resultColumnNames", this.resultColumnNames);
102
        HashMap<String, String> valuesMap = new HashMap<>();
103
        for (String key : this.values.keySet()) {
104
            JsonObject value = this.values.get(key);
105
            valuesMap.put(key, value.toString());
106
        }
107
        state.set("values", valuesMap);
108
        state.set("query", this.query);
109
        state.set("name", this.name);
110
        state.set("searchMode", this.searchMode);
111
    }
112

    
113
    @Override
114
    public void loadFromState(PersistentState state) throws PersistenceException {
115
        this.resultColumnNames = new ArrayList<>(state.getList("resultColumnNames"));
116
        Map<String, String> valuesState = state.getMap("values");
117
        HashMap<String, JsonObject> valuesMap = new HashMap<>();
118

    
119
        for (String key : valuesState.keySet()) {
120
            String value = valuesState.get(key);
121
            InputStream targetStream = new ByteArrayInputStream(value.getBytes());
122
            JsonReader reader = Json.createReader(targetStream);
123
            JsonObject jsonObject = reader.readObject();
124
            valuesMap.put(key, jsonObject);
125
        }
126

    
127
        this.values = valuesMap;
128
        this.query = (FeatureQuery) state.get("query");
129
        this.name = state.getString("name");
130
        try {
131
            this.searchMode = state.getInt("searchMode");
132
        } catch(Exception ex) {
133
            this.searchMode = DefaultSearchPanel.PANEL_SIMPLIFIED;
134
        }
135
    }
136

    
137
    @Override
138
    public String toString() {
139
        if (this.query != null && this.query.getExpressionFilter() != null) {
140
            try {
141
                StringBuilder builder = new StringBuilder();
142
                builder.append(this.query.getExpressionFilter().getPhrase());
143
                boolean has = true;
144
                for (EditableFeatureAttributeDescriptor col : this.query.getExtraColumn().getColumns()) {
145
                    if (has) {
146
                        builder.append("\n\n");
147
                        builder.append("ExtraColumn: ");
148
                        has=false;
149
                    } else {
150
                        builder.append(", ");
151
                    }
152
                    builder.append(col.getName());
153
                }
154
                
155
                has = true;
156
                for (String attributeName : this.getResultColumnNames()) {
157
                    if (has) {
158
                        builder.append("\n\n");
159
                        builder.append("ShowFields: ");
160
                        has=false;
161
                    } else {
162
                        builder.append(", ");
163
                    }
164
                    builder.append(attributeName);
165
                }
166
                
167
                has = true;
168
                for (String groupByColumn : this.getGroupByColumns()) {
169
                    if (has) {
170
                        builder.append("\n\n");
171
                        builder.append("GroupBy: ");
172
                        has=false;
173
                    } else {
174
                        builder.append(", ");
175
                    }
176
                    builder.append(groupByColumn);
177
                }
178

    
179
                has = true;
180
                for (String key : this.getAggregateFunctions().keySet()) {
181
                    if (has) {
182
                        builder.append("\n\n");
183
                        builder.append("AggregateFunctions: ");
184
                        has=false;
185
                    } else {
186
                        builder.append(", ");
187
                    }
188
                    builder.append(key);
189
                }
190
                
191
                has = true;
192
                for (FeatureQueryOrder.FeatureQueryOrderMember member : this.query.getOrder().members()) {
193
                    if (has) {
194
                        builder.append("\n\n");
195
                        builder.append("Order: ");
196
                        has=false;
197
                    } else {
198
                        builder.append(", ");
199
                    }
200
                    builder.append(member.getAttributeName());
201
                    builder.append("(");
202
                    builder.append(member.getAscending());
203
                    builder.append(")");
204
                }
205

    
206

    
207
                return builder.toString();
208
            } catch (Exception ex) {
209
                return this.getName();
210
            }
211
        } else {
212
            return this.getName();
213

    
214
        }
215
    }
216

    
217
    @Override
218
    public Object clone() throws CloneNotSupportedException {
219
        DefaultSearchParameters clone = (DefaultSearchParameters) super.clone();
220
        clone.query = this.query.getCopy();
221
        clone.resultColumnNames = new ArrayList(this.resultColumnNames);
222
        HashMap<String, JsonObject> cloneValues = new HashMap<>(this.values);
223
        clone.values = cloneValues;
224
        return clone;
225
    }
226

    
227
    public DefaultSearchParameters getCopy() {
228
        try {
229
            return (DefaultSearchParameters) this.clone();
230
        } catch (CloneNotSupportedException ex) {
231
            return null;
232
        }
233
    }
234

    
235
    @Override
236
    public void copyFrom(SearchParameters params) {
237
        this.resultColumnNames = params.getResultColumnNames();
238
        this.query = params.getQuery().getCopy();
239
        this.name = params.getName();
240
        this.values = params.getValues();
241
    }
242

    
243
    @Override
244
    public String getName() {
245
        return this.name;
246
    }
247

    
248
    @Override
249
    public void setName(String name) {
250
        this.name = name;
251
    }
252

    
253
    @Override
254
    public FeatureType getFeatureType(FeatureStore store) {
255
        FeatureSet fset = null;
256
        try {
257
            fset = store.getFeatureSet(this.query);
258
            FeatureType ft = fset.getDefaultFeatureType();
259
            return ft;
260
        } catch (DataException ex) {
261
            return store.getDefaultFeatureTypeQuietly();
262
        } finally {
263
            DisposeUtils.disposeQuietly(fset);
264
        }
265
    }
266
    
267
    public int getSearchMode()  {
268
        return this.searchMode;
269
    }
270
    
271
    public void setSearchMode(int searchMode) {
272
        this.searchMode = searchMode;
273
    }
274
}
275