1 23 24 package org.infoglue.cms.applications.common.actions; 25 26 import java.util.StringTokenizer ; 27 28 import org.infoglue.cms.exception.ConfigurationError; 29 30 import webwork.util.ServletValueStack; 31 32 36 37 public class ExtendedRedirect extends InfoGlueAbstractAction 38 { 39 40 private static final long serialVersionUID = -8254805372363786462L; 41 42 private static final String UNPARSED_PARAMETER_DELIMITER = "#"; 43 44 private String unparsedURL; 45 46 49 50 public void setUrl(String unparsedURL) 51 { 52 this.unparsedURL = unparsedURL; 53 } 54 55 58 59 public String doExecute() throws Exception 60 { 61 validateUnparsedURL(); 62 redirect(); 63 return NONE; 64 } 65 66 67 70 71 private void validateUnparsedURL() 72 { 73 if (this.unparsedURL == null || this.unparsedURL.trim().length() == 0) 74 { 75 throw new ConfigurationError("No url/empty url specified for ExtendedRedirect.action"); 76 } 77 } 78 79 80 83 84 private void redirect() throws Exception 85 { 86 final String url = getResponse().encodeRedirectURL(parse(this.unparsedURL)); 87 getResponse().sendRedirect(url); 88 } 89 90 93 94 private String parse(String unparsedURL) 95 { 96 final StringTokenizer st = new StringTokenizer (unparsedURL.trim(), UNPARSED_PARAMETER_DELIMITER); 97 final StringBuffer sb = new StringBuffer (st.nextToken()); sb.append(st.hasMoreTokens() ? "?" : ""); 99 while (st.hasMoreTokens()) 100 { 101 sb.append(createParameterString(st.nextToken())); 102 sb.append(st.hasMoreTokens() ? "&" : ""); 103 } 104 return sb.toString(); 105 } 106 107 110 111 private String createParameterString(String name) 112 { 113 return name + "=" + getValueFromCallingAction(name); 114 } 115 116 119 120 private String getValueFromCallingAction(String fieldName) 121 { 122 Object value = ServletValueStack.getStack(getRequest()).findValue(fieldName); 123 125 if (value==null) 126 value = getRequest().getParameter(fieldName); 127 128 if (value == null) 129 { 130 throw new ConfigurationError("Unable to find the value for the parameter [" + fieldName + "]."); 131 } 132 133 134 return value.toString(); 135 } 136 137 138 } 139 | Popular Tags |