package com.googlecode.jsonrpc4j;
import com.fasterxml.jackson.databind.JsonNode;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* {@link com.googlecode.jsonrpc4j.InvocationListener} that supports the use
* of multiple {@link InvocationListener}s called one after another.
*
* @author Andrew Lindesay
*/
@SuppressWarnings({"unused", "WeakerAccess"})
public class MultipleInvocationListener implements InvocationListener {
private final List<InvocationListener> invocationListeners;
/**
* Creates with the given {@link InvocationListener}s,
* {@link #addInvocationListener(InvocationListener)} can be called to
* add additional {@link InvocationListener}s.
*
* @param invocationListeners the {@link InvocationListener}s
*/
public MultipleInvocationListener(InvocationListener... invocationListeners) {
this.invocationListeners = new LinkedList<>();
Collections.addAll(this.invocationListeners, invocationListeners);
}
/**
* Adds an {@link InvocationListener} to the end of the
* list of invocation listeners.
*
* @param invocationListener the {@link InvocationListener} to add
*/
public void addInvocationListener(InvocationListener invocationListener) {
this.invocationListeners.add(invocationListener);
}
/**
* {@inheritDoc}
*/
public void willInvoke(Method method, List<JsonNode> arguments) {
for (InvocationListener invocationListener : invocationListeners) {
invocationListener.willInvoke(method, arguments);
}
}
/**
* {@inheritDoc}
*/
public void didInvoke(Method method, List<JsonNode> arguments, Object result, Throwable t, long duration) {
for (InvocationListener invocationListener : invocationListeners) {
invocationListener.didInvoke(method, arguments, result, t, duration);
}
}
}