/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics.push;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.core.Context;
import com.sun.jersey.api.core.HttpContext;
import com.sun.jersey.api.model.AbstractMethod;
import com.sun.jersey.api.model.AbstractResourceMethod;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;
import com.sun.jersey.spi.container.ResourceFilter;
import com.sun.jersey.spi.container.ResourceFilterFactory;
/**
* test filter for exploring the data available in the {@code filter} methods.
*/
public class TestFilterFactory implements ResourceFilterFactory {
@Context
HttpContext _httpContext;
@Override
public List<ResourceFilter> create(AbstractMethod abstractMethod) {
List<ResourceFilter> filters = new ArrayList<ResourceFilter>();
filters.add(new TestFilter(abstractMethod));
return filters;
}
class TestFilter implements ResourceFilter {
private final AbstractMethod _method;
public TestFilter(AbstractMethod method) {
_method = method;
}
@Override
public ContainerRequestFilter getRequestFilter() {
return null;
}
@Override
public ContainerResponseFilter getResponseFilter() {
return new TestResponseFilter();
}
class TestResponseFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
AbstractResourceMethod matchedMethod = _httpContext.getUriInfo().getMatchedMethod();
boolean methodsEqual = matchedMethod.equals(_method);
String methodName = methodName(_method);
String matchedMethodName = methodName(matchedMethod);
System.out.println(methodsEqual);
System.out.println(methodName);
System.out.println(matchedMethodName);
return response;
}
}
}
private static String methodName(AbstractMethod abstractMethod) {
Method method = abstractMethod.getMethod();
return method.getDeclaringClass().getSimpleName() + "." + method.getName() + "()";
}
}