}
return context;
}
public final DispatchBridge createDispatch(Phase phase, final MethodHandle target, final Map<String, ResponseParameter> parameters) {
ControllerHandler handler = bridge.getApplication().resolveBean(ControllerService.class).getDescriptor().getMethodByHandle(target);
//
Route route = this.handler.getRoute(handler.getHandle());
if (route == null) {
if (bridge.getApplication().resolveBean(ControllerService.class).getResolver().isIndex(handler)) {
route = this.handler.getRoot();
}
}
//
if (route != null) {
Map<String, String> params;
if (parameters.isEmpty()) {
params = Collections.emptyMap();
} else {
params = new HashMap<String, String>(parameters.size());
for (ResponseParameter parameter : parameters.values()) {
params.put(parameter.getName(), parameter.get(0));
}
}
//
final RouteMatch match = route.matches(params);
if (match != null) {
return new DispatchBridge() {
public MethodHandle getTarget() {
return target;
}
public Map<String, ResponseParameter> getParameters() {
return parameters;
}
public <T> String checkPropertyValidity(PropertyType<T> propertyType, T propertyValue) {
// For now we don't validate anything
return null;
}
public void renderURL(PropertyMap properties, MimeType mimeType, Appendable appendable) throws IOException {
// Render base URL
http.renderRequestURL(appendable);
// Render path
UriBuilder writer = new UriBuilder(appendable, mimeType);
match.render(writer);
// Retain matched parameters for filtering later
Set<String> matched = match.getMatched().isEmpty() ? Collections.<String>emptySet() : new HashSet<String>(match.getMatched().size());
for (PathParam param : match.getMatched().keySet()) {
matched.add(param.getName());
}
// Render remaining parameters which have not been rendered yet
for (ResponseParameter parameter : parameters.values()) {
if (!matched.contains(parameter.getName())) {
for (int i = 0;i < parameter.size();i++) {
writer.appendQueryParameter(parameter.getEncoding(), parameter.getName(), parameter.get(i));
}
}
}
}
};
} else {
throw new IllegalArgumentException("The parameters " + parameters + " are not valid");
}
} else {
throw new UnsupportedOperationException("handle me gracefully method not mapped " + handler.getHandle());
}
}