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

History | View | Annotate | Download (6.05 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.FeatureQuery;
20
import org.gvsig.fmap.dal.feature.FeatureSet;
21
import org.gvsig.fmap.dal.feature.FeatureStore;
22
import org.gvsig.fmap.dal.feature.FeatureType;
23
import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
24
import org.gvsig.tools.ToolsLocator;
25
import org.gvsig.tools.dispose.DisposeUtils;
26
import org.gvsig.tools.dynobject.DynStruct;
27
import org.gvsig.tools.persistence.PersistenceManager;
28
import org.gvsig.tools.persistence.PersistentState;
29
import org.gvsig.tools.persistence.exception.PersistenceException;
30

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

    
37
    private List<String> resultColumnNames;
38
    private FeatureQuery query;
39
    public String name;
40
    private Map<String, JsonObject> values;
41

    
42
    public DefaultSearchParameters() {
43
        this.resultColumnNames = new ArrayList<>();
44
        this.query = null;
45
        this.values = new HashMap<>();
46
    }
47

    
48
    @Override
49
    public List<String> getResultColumnNames() {
50
        return this.resultColumnNames;
51
    }
52

    
53
    public List<String> getGroupByColumns() {
54
        return this.query.getGroupByColumns();
55
    }
56

    
57
    public Map<String, String> getAggregateFunctions() {
58
        return this.query.getAggregateFunctions();
59
    }
60

    
61
    public void setQuery(FeatureQuery query) {
62
        this.query = query;
63
    }
64

    
65
    public void setFilter(Expression exp) {
66
        this.query.setFilter(exp);
67
    }
68

    
69
    public FeatureQuery getQuery() {
70
        return this.query;
71
    }
72

    
73
    void setResultColumnNames(List<String> selectedNames) {
74
        throw new UnsupportedOperationException("Not supported yet."); 
75
    }
76

    
77
    @Override
78
    public Map<String, JsonObject> getValues() {
79
        return this.values;
80
    }
81

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

    
94
    @Override
95
    public void saveToState(PersistentState state) throws PersistenceException {
96
        state.set("resultColumnNames", this.resultColumnNames);
97
        HashMap<String, String> valuesMap = new HashMap<>();
98
        for (String key : this.values.keySet()) {
99
            JsonObject value = this.values.get(key);
100
            valuesMap.put(key, value.toString());
101
        }
102
        state.set("values", valuesMap);
103
        state.set("query", this.query);
104
        state.set("name", this.name);
105
    }
106

    
107
    @Override
108
    public void loadFromState(PersistentState state) throws PersistenceException {
109
        this.resultColumnNames = new ArrayList<>(state.getList("resultColumnNames"));
110
        Map<String, String> valuesState = state.getMap("values");
111
        HashMap<String, JsonObject> valuesMap = new HashMap<>();
112

    
113
        for (String key : valuesState.keySet()) {
114
            String value = valuesState.get(key);
115
            InputStream targetStream = new ByteArrayInputStream(value.getBytes());
116
            JsonReader reader = Json.createReader(targetStream);
117
            JsonObject jsonObject = reader.readObject();
118
            valuesMap.put(key, jsonObject);
119
        }
120
        
121
        this.values = valuesMap;
122
        this.query = (FeatureQuery) state.get("query");
123
        this.name = state.getString("name");
124
    }
125

    
126
    @Override
127
    public String toString() {
128
        if (this.query != null && this.query.getExpressionFilter() != null) {
129
            return this.query.getExpressionFilter().getPhrase();
130
        } else {
131
            return this.getName();
132

    
133
        }
134
    }
135

    
136
    @Override
137
    public Object clone() throws CloneNotSupportedException {
138
        DefaultSearchParameters clone = (DefaultSearchParameters) super.clone();
139
        clone.query = this.query.getCopy();
140
        clone.resultColumnNames = new ArrayList(this.resultColumnNames);
141
        HashMap<String, JsonObject> cloneValues = new HashMap<>(this.values);
142
        clone.values = cloneValues;
143
        return clone;
144
    }
145
    public DefaultSearchParameters getCopy() {
146
        try {
147
            return (DefaultSearchParameters) this.clone();
148
        } catch (CloneNotSupportedException ex) {
149
            return null;
150
        }
151
    }
152

    
153
    @Override
154
    public void copyFrom(SearchParameters params) {
155
        this.resultColumnNames = params.getResultColumnNames();
156
        this.query = params.getQuery().getCopy();
157
        this.name = params.getName();
158
        this.values = params.getValues();
159
    }
160

    
161
    @Override
162
    public String getName() {
163
        return this.name;
164
    }
165

    
166
    @Override
167
    public void setName(String name) {
168
        this.name= name;
169
    }
170

    
171
    @Override
172
    public FeatureType getFeatureType(FeatureStore store) {
173
        FeatureSet fset = null;
174
        try {
175
            fset = store.getFeatureSet(this.query);
176
            FeatureType ft = fset.getDefaultFeatureType();
177
            return ft;
178
        } catch (DataException ex) {
179
            return store.getDefaultFeatureTypeQuietly();
180
        } finally {
181
            DisposeUtils.disposeQuietly(fset);
182
        }
183
    }
184
}