use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.
the class TestActionServlet method testProcessActionExtensionWithForwardConfig.
/**
* Test that an ActionConfig's ForwardConfig can inherit from a
* global ForwardConfig.
*/
public void testProcessActionExtensionWithForwardConfig() throws ServletException {
ForwardConfig forwardConfig = new ForwardConfig();
forwardConfig.setName("sub");
forwardConfig.setExtends("success");
baseAction.addForwardConfig(forwardConfig);
moduleConfig.addActionConfig(baseAction);
moduleConfig.addForwardConfig(baseForward);
actionServlet.processActionConfigExtension(baseAction, moduleConfig);
forwardConfig = baseAction.findForwardConfig("sub");
assertEquals("'sub' forward's inheritance was not processed.", baseForward.getPath(), forwardConfig.getPath());
}
use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.
the class TestActionServlet method testProcessForwardConfigClassSubConfigCustomClass.
/**
* Make sure processForwardConfigClass() returns the same class instance
* if the base config isn't using a custom class.
*/
public void testProcessForwardConfigClassSubConfigCustomClass() throws Exception {
moduleConfig.addForwardConfig(baseForward);
ForwardConfig customSub = new ActionForward();
customSub.setName("failure");
customSub.setExtends("success");
moduleConfig.addForwardConfig(customSub);
ForwardConfig result = actionServlet.processForwardConfigClass(customSub, moduleConfig, null);
assertSame("The instance returned should be the param given it.", customSub, result);
}
use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.
the class TestActionServlet method notestProcessForwardConfigClassError.
/**
* Make sure the code throws the correct exception when it can't create an
* instance of the base config's custom class.
*/
public void notestProcessForwardConfigClassError() throws Exception {
ForwardConfig customBase = new CustomForwardConfigArg("success", "/success.jsp");
moduleConfig.addForwardConfig(customBase);
ForwardConfig customSub = new ActionForward();
customSub.setName("failure");
customSub.setExtends("success");
moduleConfig.addForwardConfig(customSub);
try {
actionServlet.processForwardConfigClass(customSub, moduleConfig, null);
fail("Exception should be thrown");
} catch (UnavailableException e) {
// success
} catch (Exception e) {
fail("Unexpected exception thrown.");
}
}
use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.
the class TagUtils method computeURLWithCharEncoding.
/**
* Compute a hyperlink URL based on the <code>forward</code>,
* <code>href</code>, <code>action</code> or <code>page</code> parameter
* that is not null. The returned URL will have already been passed to
* <code>response.encodeURL()</code> for adding a session identifier.
*
* @param pageContext PageContext for the tag making this call
* @param forward Logical forward name for which to look up the
* context-relative URI (if specified)
* @param href URL to be utilized unmodified (if specified)
* @param page Module-relative page for which a URL should be
* created (if specified)
* @param action Logical action name for which to look up the
* context-relative URI (if specified)
* @param params Map of parameters to be dynamically included
* (if any)
* @param anchor Anchor to be dynamically included (if any)
* @param redirect Is this URL for a <code>response.sendRedirect()</code>?
* @param encodeSeparator This is only checked if redirect is set to
* false (never encoded for a redirect). If true,
* query string parameter separators are encoded
* as >amp;, else & is used.
* @param useLocalEncoding If set to true, urlencoding is done on the
* bytes of character encoding from
* ServletResponse#getCharacterEncoding. Use UTF-8
* otherwise.
* @return URL with session identifier
* @throws java.net.MalformedURLException if a URL cannot be created for
* the specified parameters
*/
public String computeURLWithCharEncoding(PageContext pageContext, String forward, String href, String page, String action, String module, Map params, String anchor, boolean redirect, boolean encodeSeparator, boolean useLocalEncoding) throws MalformedURLException {
String charEncoding = "UTF-8";
if (useLocalEncoding) {
charEncoding = pageContext.getResponse().getCharacterEncoding();
}
// TODO All the computeURL() methods need refactoring!
// Validate that exactly one specifier was included
int n = 0;
if (forward != null) {
n++;
}
if (href != null) {
n++;
}
if (page != null) {
n++;
}
if (action != null) {
n++;
}
if (n != 1) {
throw new MalformedURLException(messages.getMessage("computeURL.specifier"));
}
// Look up the module configuration for this request
ModuleConfig moduleConfig = getModuleConfig(module, pageContext);
// Calculate the appropriate URL
StringBuffer url = new StringBuffer();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
if (forward != null) {
ForwardConfig forwardConfig = moduleConfig.findForwardConfig(forward);
if (forwardConfig == null) {
throw new MalformedURLException(messages.getMessage("computeURL.forward", forward));
}
if (forwardConfig.getPath().startsWith("/")) {
url.append(request.getContextPath());
url.append(RequestUtils.forwardURL(request, forwardConfig, moduleConfig));
} else {
url.append(forwardConfig.getPath());
}
} else if (href != null) {
url.append(href);
} else if (action != null) {
ActionServlet servlet = (ActionServlet) pageContext.getServletContext().getAttribute(Globals.ACTION_SERVLET_KEY);
String actionIdPath = RequestUtils.actionIdURL(action, moduleConfig, servlet);
if (actionIdPath != null) {
action = actionIdPath;
url.append(request.getContextPath());
url.append(actionIdPath);
} else {
url.append(instance.getActionMappingURL(action, module, pageContext, false));
}
} else /* if (page != null) */
{
url.append(request.getContextPath());
url.append(this.pageURL(request, page, moduleConfig));
}
// Add anchor if requested (replacing any existing anchor)
if (anchor != null) {
String temp = url.toString();
int hash = temp.indexOf('#');
if (hash >= 0) {
url.setLength(hash);
}
url.append('#');
url.append(this.encodeURL(anchor, charEncoding));
}
// Add dynamic parameters if requested
if ((params != null) && (params.size() > 0)) {
// Save any existing anchor
String temp = url.toString();
int hash = temp.indexOf('#');
if (hash >= 0) {
anchor = temp.substring(hash + 1);
url.setLength(hash);
temp = url.toString();
} else {
anchor = null;
}
// Define the parameter separator
String separator = null;
if (redirect) {
separator = "&";
} else if (encodeSeparator) {
separator = "&";
} else {
separator = "&";
}
// Add the required request parameters
boolean question = temp.indexOf('?') >= 0;
Iterator keys = params.keySet().iterator();
while (keys.hasNext()) {
String key = (String) keys.next();
Object value = params.get(key);
if (value == null) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(this.encodeURL(key, charEncoding));
// Interpret null as "no value"
url.append('=');
} else if (value instanceof String) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(this.encodeURL(key, charEncoding));
url.append('=');
url.append(this.encodeURL((String) value, charEncoding));
} else if (value instanceof String[]) {
String[] values = (String[]) value;
for (int i = 0; i < values.length; i++) {
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(this.encodeURL(key, charEncoding));
url.append('=');
url.append(this.encodeURL(values[i], charEncoding));
}
} else /* Convert other objects to a string */
{
if (!question) {
url.append('?');
question = true;
} else {
url.append(separator);
}
url.append(this.encodeURL(key, charEncoding));
url.append('=');
url.append(this.encodeURL(value.toString(), charEncoding));
}
}
// Re-add the saved anchor (if any)
if (anchor != null) {
url.append('#');
url.append(this.encodeURL(anchor, charEncoding));
}
}
// but only if url is not an external URL
if ((href == null) && (pageContext.getSession() != null)) {
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
if (redirect) {
return (response.encodeRedirectURL(url.toString()));
}
return (response.encodeURL(url.toString()));
}
return (url.toString());
}
use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.
the class TestRequestUtils method testForwardURL3.
// Third module (custom forwardPattern)
public void testForwardURL3() {
request.setAttribute(Globals.MODULE_KEY, moduleConfig3);
request.setPathElements("/myapp", "/3/action.do", null, null);
ForwardConfig forward = null;
String result = null;
// redirect=false, module=null
forward = moduleConfig3.findForwardConfig("moduleForward");
assertNotNull("moduleForward found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("moduleForward computed", result);
assertEquals("moduleForward value", "/forwarding/3/module/forward", result);
// redirect=true, module=null
forward = moduleConfig3.findForwardConfig("moduleRedirect");
assertNotNull("moduleRedirect found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("moduleRedirect computed", result);
assertEquals("moduleRedirect value", "/forwarding/3/module/redirect", result);
// redirect=false, module=/context
forward = moduleConfig3.findForwardConfig("contextForward");
assertNotNull("contextForward found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("contextForward computed", result);
assertEquals("contextForward value", "/forwarding/context/forward", result);
// redirect=true, module=/context
forward = moduleConfig3.findForwardConfig("contextRedirect");
assertNotNull("contextRedirect found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("contextRedirect computed", result);
assertEquals("contextRedirct value", "/forwarding/context/redirect", result);
// noslash, module=null
forward = moduleConfig3.findForwardConfig("moduleNoslash");
assertNotNull("moduleNoslash found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("moduleNoslash computed", result);
assertEquals("moduleNoslash value", "/forwarding/3/module/noslash", result);
// noslash, module=/
forward = moduleConfig3.findForwardConfig("contextNoslash");
assertNotNull("contextNoslash found", forward);
result = RequestUtils.forwardURL(request, forward, null);
assertNotNull("contextNoslash computed", result);
assertEquals("contextNoslash value", "/forwarding/context/noslash", result);
}
Aggregations