@JsonCreator public ArithmeticPostAggregator( @JsonProperty("name") String name, @JsonProperty("fn") String fnName, @JsonProperty("fields") List<PostAggregator> fields) { this.name = name; this.fnName = fnName; this.fields = fields; if (fields.size() <= 1) { throw new IAE("Illegal number of fields[%s], must be > 1", fields.size()); } this.op = Ops.lookup(fnName); if (op == null) { throw new IAE("Unknown operation[%s], known operations[%s]", fnName, Ops.getFns()); } }
@Override public Object compute(Map<String, Object> values) { Iterator<PostAggregator> fieldsIter = fields.iterator(); double retVal = 0.0; if (fieldsIter.hasNext()) { retVal = ((Number) fieldsIter.next().compute(values)).doubleValue(); while (fieldsIter.hasNext()) { retVal = op.compute(retVal, ((Number) fieldsIter.next().compute(values)).doubleValue()); } } return retVal; }
/** Process results in the UI Thread. */ protected void onPostExecute(Result result) { mOps.onPostExecute(result, mParam); }
static { for (Ops op : Ops.values()) { lookupMap.put(op.getFn(), op); } }
/** Run in a background thread to avoid blocking the UI thread. */ @SuppressWarnings("unchecked") protected Result doInBackground(Params... params) { mParam = params[0]; return mOps.doInBackground(mParam); }