package me.drton.flightplot.processors; import me.drton.flightplot.MarkersList; import me.drton.flightplot.PlotItem; import me.drton.flightplot.Series; import me.drton.flightplot.XYPoint; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * User: ton Date: 12.06.13 Time: 18:25 */ public abstract class PlotProcessor { protected static final String WHITESPACE_RE = "[ \t]+"; protected Map<String, Object> parameters; protected Map<String, String> fieldsList = new HashMap<String, String>(); private double skipOut = 0.0; private List<PlotItem> seriesList = new ArrayList<PlotItem>(); private List<XYPoint> lastPoints = new ArrayList<XYPoint>(); protected PlotProcessor() { this.parameters = getDefaultParameters(); } public abstract void init(); public void setSkipOut(double skipOut) { this.skipOut = skipOut; } public void setFieldsList(Map<String, String> fieldsList) { this.fieldsList = fieldsList; } private static Object castValue(Object valueOld, Object valueNewObj) { String valueNewStr = valueNewObj.toString(); Object valueNew = valueNewObj; if (valueOld instanceof String) { valueNew = valueNewStr; } else if (valueOld instanceof Double) { valueNew = Double.parseDouble(valueNewStr); } else if (valueOld instanceof Float) { valueNew = Float.parseFloat(valueNewStr); } else if (valueOld instanceof Integer) { valueNew = Integer.parseInt(valueNewStr); } else if (valueOld instanceof Long) { valueNew = Long.parseLong(valueNewStr); } else if (valueOld instanceof Boolean) { char firstChar = valueNewStr.toLowerCase().charAt(0); if (firstChar == 'f' || firstChar == 'n' || "0".equals(valueNewStr)) valueNew = false; else valueNew = true; } return valueNew; } public abstract Map<String, Object> getDefaultParameters(); public Map<String, Object> getParameters() { return parameters; } public void setParameters(Map<String, Object> parametersNew) { for (Map.Entry<String, Object> entry : parametersNew.entrySet()) { String key = entry.getKey(); Object oldValue = parameters.get(key); Object newValue = parametersNew.get(key); if (oldValue != null) { parameters.put(key, castValue(oldValue, newValue)); } } } protected int addSeries() { int idx = seriesList.size(); seriesList.add(new Series("", skipOut)); lastPoints.add(null); return idx; } protected int addSeries(String label) { int idx = seriesList.size(); seriesList.add(new Series(label, skipOut)); lastPoints.add(null); return idx; } protected int addMarkersList() { int idx = seriesList.size(); seriesList.add(new MarkersList("")); return idx; } protected int addMarkersList(String label) { int idx = seriesList.size(); seriesList.add(new MarkersList(label)); return idx; } public List<PlotItem> getSeriesList() { return seriesList; } protected void addPoint(int seriesIdx, double time, double value) { ((Series) seriesList.get(seriesIdx)).addPoint(time, value); } protected void addMarker(int seriesIdx, double time, String label) { ((MarkersList) seriesList.get(seriesIdx)).addMarker(time, label); } public abstract void process(double time, Map<String, Object> update); public String getProcessorType() { return getClass().getSimpleName(); } }