package com.philemonworks.critter.action; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import com.philemonworks.critter.rule.RuleContext; public class ResponseHeader extends RuleIngredient implements Action { String remove; String add; String value; @Override public void perform(RuleContext context) { if (context.forwardResponse != null) { context.forwardResponse = this.applyTo(Response.fromResponse(context.forwardResponse)).build(); return; } else { context.forwardResponse = this.applyTo(Response.ok()).build(); } } private ResponseBuilder applyTo(ResponseBuilder responseBuilder) { if (remove != null) { // If value is null then all current headers of the same name will be removed. responseBuilder.header(this.remove, null); } if (add != null && value != null) { responseBuilder.header(this.add, this.value); } return responseBuilder; } @Override public String explain() { if (remove != null) return "remove the http header named ["+remove+"]"; else return "add the http header named ["+add+"] with value ["+ value +"]"; } public ResponseHeader with(String name, String value) { this.add = name; this.value = value; return this; } }