package hu.sch.api.providers;
import hu.sch.api.response.PekResponse;
import hu.sch.api.response.PekSuccess;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Provider;
/**
* Wraps a successful response in a {@link PekSuccess}.
*
* @author tomi
*/
@Provider
public class ApplicationResponseWrapper implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
if (!needsWrapping(responseContext)) {
return;
}
Object responseEntity = responseContext.getEntity();
responseContext.setEntity(new PekSuccess(responseEntity));
}
// wrap only bare (not already wrapped in a PekResponse) and
// responses only with application/json content-type
private boolean needsWrapping(ContainerResponseContext responseContext) {
if (responseContext.getEntityClass() == null) {
// do not try to wrap empty responses
return false;
}
return !PekResponse.class.isAssignableFrom(responseContext.getEntityClass())
&& responseContext.getMediaType().equals(MediaType.APPLICATION_JSON_TYPE);
}
}