@Override public FinalizingFieldAccessPostAggregator decorate(final Map<String, AggregatorFactory> aggregators) { final Comparator<Object> theComparator; final Function<Object, Object> theFinalizer; if (aggregators != null && aggregators.containsKey(fieldName)) { //noinspection unchecked theComparator = aggregators.get(fieldName).getComparator(); } else { //noinspection unchecked theComparator = (Comparator) Comparators.naturalNullsFirst(); } if (aggregators != null && aggregators.containsKey(fieldName)) { theFinalizer = aggregators.get(fieldName)::finalizeComputation; } else { theFinalizer = Function.identity(); } return new FinalizingFieldAccessPostAggregator( name, fieldName, theComparator, theFinalizer ); }
private static FinalizingFieldAccessPostAggregator buildDecorated( String name, String fieldName, Map<String, AggregatorFactory> aggregators ) { FinalizingFieldAccessPostAggregator ret = new FinalizingFieldAccessPostAggregator(name, fieldName); return ret.decorate(aggregators); } }
@Test public void testSerde() throws IOException { final FinalizingFieldAccessPostAggregator original = new FinalizingFieldAccessPostAggregator("foo", "bar"); final FinalizingFieldAccessPostAggregator decorated = original.decorate( ImmutableMap.of("bar", new CountAggregatorFactory("bar")) ); final ObjectMapper objectMapper = TestHelper.makeJsonMapper(); Assert.assertEquals( original, objectMapper.readValue(objectMapper.writeValueAsString(decorated), PostAggregator.class) ); }
@Test(expected = UnsupportedOperationException.class) public void testComputeWithoutFinalizing() { String aggName = "rows"; Aggregator agg = new CountAggregator(); agg.aggregate(); agg.aggregate(); agg.aggregate(); Map<String, Object> metricValues = new HashMap<>(); metricValues.put(aggName, agg.get()); FinalizingFieldAccessPostAggregator postAgg = new FinalizingFieldAccessPostAggregator("final_rows", aggName); Assert.assertEquals(new Long(3L), postAgg.compute(metricValues)); }
@Override public FinalizingFieldAccessPostAggregator decorate(final Map<String, AggregatorFactory> aggregators) { final Comparator<Object> theComparator; final Function<Object, Object> theFinalizer; if (aggregators != null && aggregators.containsKey(fieldName)) { //noinspection unchecked theComparator = aggregators.get(fieldName).getComparator(); } else { //noinspection unchecked theComparator = (Comparator) Comparators.naturalNullsFirst(); } if (aggregators != null && aggregators.containsKey(fieldName)) { theFinalizer = aggregators.get(fieldName)::finalizeComputation; } else { theFinalizer = Function.identity(); } return new FinalizingFieldAccessPostAggregator( name, fieldName, theComparator, theFinalizer ); }