Mercurial > lada > lada-server
annotate src/main/java/de/intevation/lada/utils/QueryTools.java @ 366:567ce7697fc7 0.5
Code documentation.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 10 Sep 2013 15:55:54 +0200 |
parents | b9295222ff06 |
children | 5c4010659967 |
rev | line source |
---|---|
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.lada.utils; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
2 |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
3 import java.io.IOException; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
4 import java.nio.ByteBuffer; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
5 import java.nio.charset.Charset; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
6 import java.nio.file.Files; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
7 import java.nio.file.Paths; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
8 import java.util.ArrayList; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
9 import java.util.List; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
10 |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
11 import org.json.JSONArray; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
12 import org.json.JSONException; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
13 import org.json.JSONObject; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
14 |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
15 import de.intevation.lada.model.query.QueryConfig; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
16 import de.intevation.lada.model.query.QueryFilter; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
17 import de.intevation.lada.model.query.ResultConfig; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
18 |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
19 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
20 * Utility class to handle the SQL query configuration. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
21 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
22 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
23 */ |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
24 public class QueryTools |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
25 { |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
26 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
27 * Read the config file using the system property |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
28 * "de.intevation.lada.sqlconfig". |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
29 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
30 * @return The file content. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
31 */ |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
32 public static String readConfigFile() { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
33 String file = System.getProperty("de.intevation.lada.sqlconfig"); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
34 try { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
35 byte[] encoded = Files.readAllBytes(Paths.get(file)); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
36 Charset encoding = Charset.defaultCharset(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
37 return encoding.decode(ByteBuffer.wrap(encoded)).toString(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
38 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
39 catch (IOException ioe) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
40 return null; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
41 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
42 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
43 |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
44 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
45 * Get the configuration objects. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
46 * First reads the config file and creates {@link QueryConfig} objects |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
47 * from JSON. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
48 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
49 * @return List of {@link QueryConfig} objects. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
50 */ |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
51 public static List<QueryConfig> getConfig() { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
52 String content = readConfigFile(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
53 if (content == null) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
54 return null; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
55 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
56 List<QueryConfig> configs = new ArrayList<QueryConfig>(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
57 JSONArray queries; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
58 try { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
59 queries = new JSONArray(content); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
60 for (int i = 0; i < queries.length(); i++) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
61 JSONObject query = queries.getJSONObject(i); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
62 QueryConfig qConf = new QueryConfig(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
63 qConf.setId(query.getInt("id")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
64 qConf.setName(query.getString("name")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
65 qConf.setDescription(query.getString("description")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
66 qConf.setSql(query.getString("sql")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
67 JSONArray filters = query.getJSONArray("filters"); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
68 List<QueryFilter> qFilters = new ArrayList<QueryFilter>(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
69 for (int j = 0; j < filters.length(); j++) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
70 JSONObject filter = filters.getJSONObject(j); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
71 QueryFilter qFilter = new QueryFilter(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
72 qFilter.setDataIndex(filter.getString("dataIndex")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
73 qFilter.setType(filter.getString("type")); |
302
71284b42ba39
Added label attribute to the QueryFilter
Torsten Irländer <torsten.irlaender@intevation.de>
parents:
297
diff
changeset
|
74 qFilter.setLabel(filter.getString("label")); |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
75 qFilters.add(qFilter); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
76 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
77 qConf.setFilters(qFilters); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
78 JSONArray results = query.getJSONArray("result"); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
79 List<ResultConfig> sResults = new ArrayList<ResultConfig>(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
80 for (int k = 0; k < results.length(); k++) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
81 JSONObject result = results.getJSONObject(k); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
82 ResultConfig config = new ResultConfig(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
83 config.setDataIndex(result.getString("dataIndex")); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
84 config.setHeader(result.getString("header")); |
304
2d3f293899e8
Set default values for width and flex.
Raimund Renkert <rrenkert@intevation.de>
parents:
297
diff
changeset
|
85 config.setWidth(result.optInt("width", 100)); |
2d3f293899e8
Set default values for width and flex.
Raimund Renkert <rrenkert@intevation.de>
parents:
297
diff
changeset
|
86 config.setFlex(result.optInt("flex", 0)); |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
87 sResults.add(config); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
88 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
89 qConf.setResults(sResults); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
90 configs.add(qConf); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
91 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
92 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
93 catch (JSONException e) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
94 return null; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
95 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
96 return configs; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
97 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
98 |
366
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
99 /** |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
100 * Get a query by id. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
101 * First reads the config file and returns the {@link QueryConfig} |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
102 * identified by the given id. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
103 * |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
104 * @param id {@link QueryConfig} id. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
105 * @return The query config as JSON object or null if no object was found. |
567ce7697fc7
Code documentation.
Raimund Renkert <rrenkert@intevation.de>
parents:
306
diff
changeset
|
106 */ |
297
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
107 public static JSONObject getQueryById(String id) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
108 try { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
109 String content = readConfigFile(); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
110 if (content != null) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
111 JSONArray queries = new JSONArray(content); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
112 for (int i = 0; i < queries.length(); i++) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
113 JSONObject query = queries.getJSONObject(i); |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
114 if (query.getString("id").equals(id)) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
115 return query; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
116 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
117 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
118 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
119 return null; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
120 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
121 catch (JSONException e) { |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
122 return null; |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
123 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
124 } |
dc2e1668a179
New utility class for creating and reading query configs.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff
changeset
|
125 } |