# HG changeset patch # User Raimund Renkert # Date 1376572742 -7200 # Node ID dc2e1668a17998b892f7ee250c63edf3581f7fc6 # Parent b196ef9d8645f1ca985f4fdedb7d8e107c1b3bb0 New utility class for creating and reading query configs. diff -r b196ef9d8645 -r dc2e1668a179 src/main/java/de/intevation/lada/utils/QueryTools.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/intevation/lada/utils/QueryTools.java Thu Aug 15 15:19:02 2013 +0200 @@ -0,0 +1,99 @@ +package de.intevation.lada.utils; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import de.intevation.lada.model.query.QueryConfig; +import de.intevation.lada.model.query.QueryFilter; +import de.intevation.lada.model.query.ResultConfig; + + +public class QueryTools +{ + public static String readConfigFile() { + String file = System.getProperty("de.intevation.lada.sqlconfig"); + try { + byte[] encoded = Files.readAllBytes(Paths.get(file)); + Charset encoding = Charset.defaultCharset(); + return encoding.decode(ByteBuffer.wrap(encoded)).toString(); + } + catch (IOException ioe) { + return null; + } + } + + public static List getConfig() { + String content = readConfigFile(); + if (content == null) { + return null; + } + List configs = new ArrayList(); + JSONArray queries; + try { + queries = new JSONArray(content); + for (int i = 0; i < queries.length(); i++) { + JSONObject query = queries.getJSONObject(i); + QueryConfig qConf = new QueryConfig(); + qConf.setId(query.getInt("id")); + qConf.setName(query.getString("name")); + qConf.setDescription(query.getString("description")); + qConf.setSql(query.getString("sql")); + JSONArray filters = query.getJSONArray("filters"); + List qFilters = new ArrayList(); + for (int j = 0; j < filters.length(); j++) { + JSONObject filter = filters.getJSONObject(j); + QueryFilter qFilter = new QueryFilter(); + qFilter.setDataIndex(filter.getString("dataIndex")); + qFilter.setType(filter.getString("type")); + qFilters.add(qFilter); + } + qConf.setFilters(qFilters); + JSONArray results = query.getJSONArray("result"); + List sResults = new ArrayList(); + for (int k = 0; k < results.length(); k++) { + JSONObject result = results.getJSONObject(k); + ResultConfig config = new ResultConfig(); + config.setDataIndex(result.getString("dataIndex")); + config.setHeader(result.getString("header")); + config.setWidth(result.optInt("width")); + config.setFlex(result.optInt("flex")); + sResults.add(config); + } + qConf.setResults(sResults); + configs.add(qConf); + } + } + catch (JSONException e) { + return null; + } + return configs; + } + + public static JSONObject getQueryById(String id) { + try { + String content = readConfigFile(); + if (content != null) { + JSONArray queries = new JSONArray(content); + for (int i = 0; i < queries.length(); i++) { + JSONObject query = queries.getJSONObject(i); + if (query.getString("id").equals(id)) { + return query; + } + } + } + return null; + } + catch (JSONException e) { + return null; + } + } +}