/* * Copyright (c) 2014, 2015, Dynatrace and/or its affiliates. All rights reserved. * * This file is part of the Lock Contention Tracing Subsystem for the HotSpot * Virtual Machine, which is developed at Christian Doppler Laboratory on * Monitoring and Evolution of Very-Large-Scale Software Systems. Please * contact us at if you need additional information * or have any questions. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work. If not, see . * */ package sun.evtracing.processing.statistics.aggregator; public abstract class AggregatorFactory { private final AggregatorFactory nextFactory; private final AggregationConfiguration configuration; public AggregatorFactory(AggregationConfiguration configuration) { this(null, configuration); } public AggregatorFactory(AggregatorFactory nextFactory, AggregationConfiguration configuration) { this.nextFactory = nextFactory; this.configuration = configuration; } public abstract T create(); public abstract T merge(T x, T y); public AggregationConfiguration configuration() { return configuration; } T mergeChecked(Aggregator x, Aggregator y) { if (x.factory() != this) { throw new IllegalArgumentException("aggregator x not an instance of factory"); } if (y.factory() != this) { throw new IllegalArgumentException("aggregator y not an instance of factory"); } @SuppressWarnings("unchecked") T xt = (T) x; @SuppressWarnings("unchecked") T yt = (T) y; return merge(xt, yt); } AggregatorFactory nextFactory() { return nextFactory; } }