/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.util.rest;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;
/**
* Servlet filter to handle incoming HTML forms.
* <p>
* HTML only supports GET and POST, so PUT and DELETE must be tunneled.
* This class examines the {@code method} form parameter and uses that if it matches
* {@code PUT} or {@code DELETE}.
*/
public class HttpMethodFilter implements ContainerRequestFilter {
@Override
public ContainerRequest filter(ContainerRequest request) {
if (request.getMethod().equalsIgnoreCase("POST") == false) {
return request;
}
String methodFormParam = request.getFormParameters().getFirst("method"); // getFormParameters() returns empty when not a form
if ("PUT".equals(methodFormParam)) {
request.setMethod("PUT");
} else if ("DELETE".equals(methodFormParam)) {
request.setMethod("DELETE");
} else if ("OPTIONS".equals(methodFormParam)) {
request.setMethod("OPTIONS");
} else if ("HEAD".equals(methodFormParam)) {
request.setMethod("HEAD");
} else if ("POST".equals(methodFormParam)) {
request.setMethod("POST"); // for completeness
} else if ("GET".equals(methodFormParam)) {
request.setMethod("GET"); // for IE
}
return request;
}
}