//
ControllerHandler handler = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(target);
//
BaseURL url;
if (handler.getPhase() == Phase.ACTION) {
url = mimeResp.createActionURL();
} else if (handler.getPhase() == Phase.VIEW) {
url = mimeResp.createRenderURL();
} else if (handler.getPhase() == Phase.RESOURCE) {
url = mimeResp.createResourceURL();
} else {
throw new AssertionError();
}
// Set generic parameters
for (ResponseParameter parameter : parameters.values()) {
url.setParameter(parameter.getName(), parameter.toArray());
}
//
boolean escapeXML = false;
if (properties != null) {
Boolean escapeXMLProperty = properties.getValue(PropertyType.ESCAPE_XML);
if (escapeXMLProperty != null && Boolean.TRUE.equals(escapeXMLProperty)) {
escapeXML = true;
}
// Handle portlet mode
PortletMode portletModeProperty = properties.getValue(JuzuPortlet.PORTLET_MODE);
if (portletModeProperty != null) {
if (url instanceof PortletURL) {
try {
((PortletURL)url).setPortletMode(portletModeProperty);
}
catch (PortletModeException e) {
throw new IllegalArgumentException(e);
}
}
else {
throw new IllegalArgumentException();
}
}
// Handle window state
WindowState windowStateProperty = properties.getValue(JuzuPortlet.WINDOW_STATE);
if (windowStateProperty != null) {
if (url instanceof PortletURL) {
try {
((PortletURL)url).setWindowState(windowStateProperty);
}
catch (WindowStateException e) {
throw new IllegalArgumentException(e);
}
}
else {
throw new IllegalArgumentException();
}
}
// Set method id
url.setParameter("juzu.op", handler.getId());
}
//
if (escapeXML) {
StringWriter writer = new StringWriter();
url.write(writer, true);
appendable.append(writer.toString());
}
else {
appendable.append(url.toString());
}
} else {
throw new IllegalStateException("Cannot render an URL during phase " + phase);
}
}