this.base = base;
}
@Override
public void handleNavigation(FacesContext context, String fromAction, String outcome) {
RequestContext requestContext = RequestContext.getCurrentInstance();
Map<Object,Object> attrs = requestContext.getAttributes();
String dialogOutcome = (String) attrs.get(Constants.DIALOG_FRAMEWORK.OUTCOME);
if(dialogOutcome != null) {
NavigationCase navCase = getNavigationCase(context, fromAction, dialogOutcome);
String toViewId = navCase.getToViewId(context);
Map<String,Object> options = (Map<String,Object>) attrs.get(Constants.DIALOG_FRAMEWORK.OPTIONS);
Map<String,List<String>> params = (Map<String,List<String>>) attrs.get(Constants.DIALOG_FRAMEWORK.PARAMS);
if (params == null) {
params = Collections.emptyMap();
}
boolean includeViewParams = false;
if (options != null && options.containsKey(Constants.DIALOG_FRAMEWORK.INCLUDE_VIEW_PARAMS)) {
includeViewParams = (Boolean) options.get(Constants.DIALOG_FRAMEWORK.INCLUDE_VIEW_PARAMS);
}
String url = context.getApplication().getViewHandler().getBookmarkableURL(context, toViewId, params, includeViewParams);
StringBuilder sb = new StringBuilder();
String sourceComponentId = (String) attrs.get(Constants.DIALOG_FRAMEWORK.SOURCE_COMPONENT);
String sourceWidget = (String) attrs.get(Constants.DIALOG_FRAMEWORK.SOURCE_WIDGET);
String pfdlgcid = UUID.randomUUID().toString();
sb.append("PrimeFaces.openDialog({url:'").append(url).append("',pfdlgcid:'").append(pfdlgcid)
.append("',sourceComponentId:'").append(sourceComponentId).append("'");
if(sourceWidget != null) {
sb.append(",sourceWidget:PF('").append(sourceWidget).append("')");
}
sb.append(",options:{");
if(options != null && options.size() > 0) {
for(Iterator<String> it = options.keySet().iterator(); it.hasNext();) {
String optionName = it.next();
Object optionValue = options.get(optionName);
sb.append(optionName).append(":").append(optionValue);
if(it.hasNext())
sb.append(",");
}
}
sb.append("}});");
requestContext.execute(sb.toString());
sb.setLength(0);
}
else {
base.handleNavigation(context, fromAction, outcome);
}