package org.radargun.stats;
/**
* Multiplexes calls to several undelying "real" {@link OperationStats}.
*
* @author Radim Vansa <rvansa@redhat.com>
*/
public class MultiOperationStats implements OperationStats {
private final OperationStats[] impls;
public MultiOperationStats(OperationStats... impls) {
this.impls = impls;
}
@Override
public OperationStats newInstance() {
OperationStats[] instances = new OperationStats[impls.length];
for (int i = 0; i < impls.length; ++i)
instances[i] = impls[i].newInstance();
return new MultiOperationStats(instances);
}
@Override
public OperationStats copy() {
OperationStats[] copies = new OperationStats[impls.length];
for (int i = 0; i < impls.length; ++i)
copies[i] = impls[i].copy();
return new MultiOperationStats(copies);
}
@Override
public void merge(OperationStats other) {
if (!(other instanceof MultiOperationStats)) throw new IllegalArgumentException();
MultiOperationStats multi = (MultiOperationStats) other;
for (int i = 0; i < impls.length; ++i)
impls[i].merge(multi.impls[i]);
}
@Override
public void record(Request request) {
for (OperationStats impl : impls) {
impl.record(request);
}
}
@Override
public void record(Message message) {
for (OperationStats impl : impls) {
impl.record(message);
}
}
@Override
public void record(RequestSet requestSet) {
for (OperationStats impl : impls) {
impl.record(requestSet);
}
}
@Override
public <T> T getRepresentation(Class<T> clazz, Statistics ownerStatistics, Object... args) {
for (OperationStats impl : impls) {
T representation = impl.getRepresentation(clazz, ownerStatistics, args);
if (representation != null) return representation;
}
return null;
}
@Override
public boolean isEmpty() {
for (OperationStats impl : impls) {
if (!impl.isEmpty()) return false;
}
return true;
}
}