package me.drton.flightplot.processors; import me.drton.flightplot.processors.tools.LowPassFilter; import net.objecthunter.exp4j.ExpressionBuilder; import java.util.HashMap; import java.util.Map; /** * Created by markw on 1/22/15. */ public class Expression extends PlotProcessor { protected final Map<String, Object> data = new HashMap<String, Object>(); protected LowPassFilter lowPassFilter; private net.objecthunter.exp4j.Expression expr; @Override public Map<String, Object> getDefaultParameters() { Map<String, Object> params = new HashMap<String, Object>(); params.put("Expression", "BATT.C * BATT.V"); params.put("LPF", 0.0); return params; } @Override public void init() { String exprStr = (String) parameters.get("Expression"); expr = null; ExpressionBuilder expBuilder = new ExpressionBuilder(exprStr); if (fieldsList != null) { expBuilder.variables(fieldsList.keySet()); try { expr = expBuilder.build(); } catch (Exception e) { e.printStackTrace(); } } lowPassFilter = new LowPassFilter(); lowPassFilter.setF((Double) parameters.get("LPF")); addSeries(); } @Override public void process(double time, Map<String, Object> update) { if (expr == null) { return; } for (Map.Entry<String, Object> entry : update.entrySet()) { Object val = entry.getValue(); if (val != null && val instanceof Number) { expr.setVariable(entry.getKey(), ((Number) val).doubleValue()); } } double res; try { res = expr.evaluate(); } catch (Exception e) { return; } addPoint(0, time, lowPassFilter.getOutput(time, res)); } }