// TODO cleanup: there might be some stuff to remove after tree refactoring
@Override
public void decode(FacesContext facesContext, UIComponent component) {
UITreeNode node = (UITreeNode) component;
super.decode(facesContext, node);
if (ComponentUtils.isOutputOnly(node)) {
return;
}
final AbstractUITree tree = ComponentUtils.findAncestor(node, AbstractUITree.class);
final String treeId = tree.getClientId(facesContext);
final String nodeStateId = node.nodeStateId(facesContext);
final Map<String, String> requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
final String id = node.getClientId(facesContext);
final boolean folder = node.isFolder();
// expand state
if (folder) {
boolean expanded = Boolean.parseBoolean((String) requestParameterMap.get(id + "-expanded"));
if (node.isExpanded() != expanded) {
new TreeExpansionEvent(node, node.isExpanded(), expanded).queue();
}
}
// select
if (tree.getSelectableAsEnum() != TreeSelectable.OFF) { // selection
String selected = (String) requestParameterMap.get(treeId + AbstractUITree.SELECT_STATE);
String searchString = ";" + nodeStateId + ";";
if (StringUtils.contains(selected, searchString)) {
// TODO: add selection to Component
//state.addSelection((DefaultMutableTreeNode) node.getValue());
}
}
// marked
String marked = (String) requestParameterMap.get(treeId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
if (marked != null) {
String searchString = treeId + NamingContainer.SEPARATOR_CHAR + nodeStateId;
boolean markedValue = marked.equals(searchString);
if (node.isMarked() != markedValue) {
new TreeMarkedEvent(node, node.isMarked(), markedValue).queue();
}
} else {
LOG.warn("This log message is help clarifying the occurrence of this else case.");
}
}