package org.jboss.seam.security.external; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.security.external.api.ResponseHolder; import org.jboss.seam.security.external.dialogues.DialogueFilter; /** * @author Marcel Kolsteren */ public class ResponseHolderImpl implements ResponseHolder { private HttpServletResponse response; private String dialogueId; public ResponseHolderImpl(HttpServletResponse response, String dialogueId) { this.response = response; this.dialogueId = dialogueId; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } public void redirectWithDialoguePropagation(String url) { if (dialogueId != null) { url = addDialogueIdToUrl(url); } String encodedUrl = response.encodeURL(url); try { response.sendRedirect(encodedUrl); } catch (IOException e) { throw new RuntimeException(e); } } public String addDialogueIdToUrl(String url) { if (dialogueId != null) { String paramName = DialogueFilter.DIALOGUE_ID_PARAM; int queryStringIndex = url.indexOf("?"); if (queryStringIndex < 0 || url.indexOf(paramName + "=", queryStringIndex) < 0) { url = new StringBuilder(url).append(queryStringIndex < 0 ? "?" : "&").append(paramName).append("=").append(dialogueId).toString(); } } return url; } }