package org.jboss.test.faces.staging;

import java.lang.reflect.Method;
import java.util.EventObject;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * This event sent from the staging server introspection method to the registered
 * {@link InvocationListener} instance after all calls to {@link HttpServletRequest} , {@link HttpServletResponse}, {@link HttpSession} and {@link ServletContext} objects. 
 * @author asmirnov
 *
 */
@SuppressWarnings("serial")
public class InvocationEvent extends EventObject {
	private Object target;
	private Method method;
	private Object[] args;
	private Object result;

	public InvocationEvent(Object target, Method method, Object[] args,
			Object result) {
		super(target);
		this.target = target;
		this.method = method;
		this.args = args;
		this.result = result;
	}

	/**
	 * @return target object instance.
	 */
	public Object getTarget() {
		return target;
	}

	/**
	 * @return {@link Method} that was called.
	 */
	public Method getMethod() {
		return method;
	}

	/**
	 * @return method arguments.
	 */
	public Object[] getArgs() {
		return args;
	}

	/**
	 * @return value returned from the invoked method.
	 */
	public Object getResult() {
		return result;
	}
}