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

History | View | Annotate | Download (5.53 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.ByteArrayOutputStream;
10
import java.io.InputStream;
11
import java.util.ArrayList;
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import javax.json.Json;
16
import javax.json.JsonObject;
17
import javax.json.JsonObjectBuilder;
18
import javax.json.JsonReader;
19
import javax.json.JsonWriter;
20
import org.gvsig.expressionevaluator.Expression;
21
import org.gvsig.fmap.dal.feature.FeatureQuery;
22
import org.gvsig.fmap.dal.swing.searchpanel.SearchParameters;
23
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.dataTypes.DataTypeUtils;
25
import org.gvsig.tools.dynobject.DynStruct;
26
import org.gvsig.tools.persistence.PersistenceManager;
27
import org.gvsig.tools.persistence.PersistentState;
28
import org.gvsig.tools.persistence.exception.PersistenceException;
29

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
132
        }
133
    }
134

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

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

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

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