import org.primefaces.model.mindmap.MindmapNode;
import org.primefaces.event.SelectEvent;
import java.util.Collection;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import javax.faces.context.FacesContext;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.FacesEvent;
import org.primefaces.util.Constants;
public final static String STYLE_CLASS = "ui-mindmap ui-widget ui-widget-content ui-corner-all";
private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList("select", "dblselect"));
private MindmapNode selectedNode = null;
public MindmapNode getSelectedNode() {
return selectedNode;
}
public String getSelectedNodeKey(FacesContext context) {
return context.getExternalContext().getRequestParameterMap().get(this.getClientId(context) + "_nodeKey");
}
@Override
public Collection<String> getEventNames() {
return EVENT_NAMES;
}
@Override
public void queueEvent(FacesEvent event) {
FacesContext context = getFacesContext();
Map<String,String> params = context.getExternalContext().getRequestParameterMap();
String clientId = this.getClientId(context);
AjaxBehaviorEvent behaviorEvent = (AjaxBehaviorEvent) event;
String eventName = params.get(Constants.RequestParams.PARTIAL_BEHAVIOR_EVENT_PARAM);
if(eventName.equals("select")||eventName.equals("dblselect")) {
String nodeKey = params.get(clientId + "_nodeKey");
MindmapNode node = nodeKey.equals("root") ? this.getValue() : this.findNode(this.getValue(), nodeKey);
this.selectedNode = node;
super.queueEvent(new SelectEvent(this, behaviorEvent.getBehavior(), node));
}
}
protected MindmapNode findNode(MindmapNode searchRoot, String rowKey) {
String[] paths = rowKey.split("_");
if(paths.length == 0)
return null;
int childIndex = Integer.parseInt(paths[0]);
searchRoot = searchRoot.getChildren().get(childIndex);
if(paths.length == 1) {
return searchRoot;
}
else {
String relativeRowKey = rowKey.substring(rowKey.indexOf("_") + 1);
return findNode(searchRoot, relativeRowKey);
}
}
public boolean isNodeSelectRequest(FacesContext context) {
return context.getExternalContext().getRequestParameterMap().containsKey(this.getClientId(context) + "_nodeKey");
}