package com.c2c.controller; import java.awt.Color; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.measure.quantity.Length; import javax.measure.unit.Unit; import javax.xml.transform.TransformerException; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.styling.FeatureTypeStyle; import org.geotools.styling.Rule; import org.geotools.styling.SLDTransformer; import org.geotools.styling.Stroke; import org.geotools.styling.Style; import org.geotools.styling.StyleBuilder; import org.geotools.styling.Symbolizer; import org.json.JSONArray; import org.json.JSONObject; import com.c2c.data.DataQueryDimension; import com.c2c.data.DataQueryFeatureSource; import com.c2c.data.DataQueryLevel; import com.c2c.data.DataQueryMember; import com.c2c.query.DataQuery; /** * More or less random shared utilities * User: jeichar * Date: Jul 5, 2010 * Time: 11:06:20 AM */ public final class Util { private Util() { } public static enum SYMBOL_TYPE { NONE, PROPORTIONAL_SYMBOLS, BARS, PIES } public static Style createDefaultStyle() { StyleBuilder styleBuilder = new StyleBuilder(); Symbolizer symb = styleBuilder.createLineSymbolizer(Color.BLACK, 2); return styleBuilder.createStyle(symb); } public static Stroke defaultStroke() { return new StyleBuilder().createStroke(Color.BLACK, 2.0); } public static int getDpiFromFormat(String formatOptions) { String[] options = formatOptions.split(";"); for (String option : options) { String[] keyvalue = option.split(":"); if (keyvalue[0].equalsIgnoreCase("dpi")) { int dpi = Integer.parseInt(keyvalue[1]); return dpi; } } return 90; // Standard screen dpi } public static String normalizeName(String str) { String ret = new String(str); ret = ret.trim(); ret = ret.replace("}].[{", "__"); ret = ret.replace("].[", "_"); ret = ret.replace("{[", ""); ret = ret.replace("]}", ""); ret = ret.replace(".", "_"); return ret; } private static List<IndicatorMetadata> getIndicators(List<DataQueryDimension> columns) { List<IndicatorMetadata> indicators = new ArrayList<IndicatorMetadata>(); for (DataQueryDimension c : columns) { List<IndicatorMetadata> newIndicators = new ArrayList<IndicatorMetadata>(); if (indicators.isEmpty()) { for (DataQueryLevel l : c.getLevels()) { for (DataQueryMember m : l.getMembers()) { newIndicators.add(new IndicatorMetadata(m.getName(), DataQuery.getUniqueId(m.getUniqueName()))); } } } else { for (IndicatorMetadata i : indicators) { for (DataQueryLevel l : c.getLevels()) { for (DataQueryMember m : l.getMembers()) { newIndicators.add(new IndicatorMetadata(i.getName() + " / " + m.getName(), i.getDataIndex() + "_" + DataQuery.getUniqueId(m.getUniqueName()))); } } } } indicators = newIndicators; } return indicators; } public static HashMap<String, String> lookupIndicators(DataQueryFeatureSource results) { HashMap<String, String> ret = new HashMap<String, String>(); for (IndicatorMetadata i : getIndicators(results.getColumns())) { ret.put(i.getDataIndex(), i.getName()); } return ret; } public static String[] getHumanReadableIndicators(DataQueryFeatureSource results, String[] indicList) { ArrayList<String> ret = new ArrayList<String>(); HashMap<String, String> indic = lookupIndicators(results); for (int i = 0 ; i < indicList.length ; i++) { ret.add(indic.get(indicList[i])); } return ret.toArray(new String[ret.size()]); } public static String getSymbolsDimensions(DataQueryFeatureSource results) { String dims = ""; for (DataQueryDimension c : results.getColumns()) { if (!dims.equals("")) { dims += " / "; } dims += c.getUniqueName().replace("[", "").replace("]", ""); } return dims; } }