in tobago-core/src/main/java/org/apache/myfaces/tobago/internal/renderkit/renderer/TreeSelectRenderer.java [85:163]
public void encodeBeginInternal(final FacesContext facesContext, final T component) throws IOException {
final AbstractUITree tree = ComponentUtils.findAncestor(component, AbstractUITree.class);
final AbstractUITreeNodeBase node = ComponentUtils.findAncestor(component, AbstractUITreeNodeBase.class);
final AbstractUIData data = ComponentUtils.findAncestor(node, AbstractUIData.class);
final TobagoResponseWriter writer = getResponseWriter(facesContext);
if (data instanceof AbstractUITreeListbox) {
writer.write(StringUtils.defaultString(component.getLabel()));
return;
}
final String id = component.getClientId(facesContext);
final String currentValue = getCurrentValue(facesContext, component);
final boolean checked;
if (component.isValueStoredInState()) {
checked = data.getSelectedState().isSelected(node.getPath());
} else {
checked = "true".equals(currentValue);
}
final boolean folder = data.isFolder();
final Selectable selectable = data.getSelectable();
final boolean showFormCheck = component.isShowCheckbox()
&& selectable != Selectable.none && (!selectable.isLeafOnly() || !folder);
writer.startElement(HtmlElements.TOBAGO_TREE_SELECT);
writer.writeClassAttribute(
component.getCustomClass(),
showFormCheck ? BootstrapClass.FORM_CHECK_INLINE : null,
showFormCheck && selectable.isMulti() ? BootstrapClass.FORM_CHECK : null,
showFormCheck && selectable.isSingle() ? BootstrapClass.FORM_CHECK : null);
HtmlRendererUtils.writeDataAttributes(facesContext, writer, component);
if (showFormCheck) {
writer.startElement(HtmlElements.INPUT);
writer.writeClassAttribute(BootstrapClass.FORM_CHECK_INPUT);
if (selectable.isSingle()) {
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.RADIO);
writer.writeNameAttribute(getClientIdWithoutRowIndex(data, id));
} else {
writer.writeAttribute(HtmlAttributes.TYPE, HtmlInputTypes.CHECKBOX);
writer.writeNameAttribute(id);
}
writer.writeAttribute(HtmlAttributes.VALUE, id, false);
// TODO: ID must be at the outer tag
writer.writeIdAttribute(id);
writer.writeAttribute(HtmlAttributes.CHECKED, checked);
writer.endElement(HtmlElements.INPUT);
}
final String label = component.getLabel();
writer.startElement(HtmlElements.LABEL);
writer.writeClassAttribute(showFormCheck ? BootstrapClass.FORM_CHECK_LABEL : null);
final String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, component);
if (title != null) {
writer.writeAttribute(HtmlAttributes.TITLE, title, true);
}
writer.writeAttribute(HtmlAttributes.FOR, id, false);
writer.writeText(label);
writer.endElement(HtmlElements.LABEL);
if (showFormCheck) {
final CommandMap behaviorCommands = getBehaviorCommands(facesContext, component);
if (behaviorCommands != null) {
Map<ClientBehaviors, Command> other = behaviorCommands.getOther();
if (other != null) {
Command change = other.get(ClientBehaviors.change);
change.setExecute(change.getExecute() + " " + tree.getBaseClientId(facesContext));
change.setRender(change.getRender() + " " + tree.getBaseClientId(facesContext));
}
}
encodeBehavior(writer, behaviorCommands);
}
writer.endElement(HtmlElements.TOBAGO_TREE_SELECT);
}