All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.larmic.butterfaces.component.partrenderer.InnerComponentWrapperPartRenderer Maven / Gradle / Ivy

package de.larmic.butterfaces.component.partrenderer;

import de.larmic.butterfaces.component.html.HtmlInputComponent;
import de.larmic.butterfaces.component.html.InputComponentFacet;

import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.ResponseWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;

/**
 * Created by larmic on 27.08.14.
 */
public class InnerComponentWrapperPartRenderer {

    public static final String INPUT_GROUP_ADDON_LEFT = "input-group-addon-left";
    public static final String INPUT_GROUP_ADDON_RIGHT = "input-group-addon-right";
    public static final String INPUT_GROUP_BTN_LEFT = "input-group-btn-left";
    public static final String INPUT_GROUP_BTN_RIGHT = "input-group-btn-right";

    public void renderInnerWrapperBegin(final HtmlInputComponent component,
                                        final ResponseWriter writer) throws IOException {
        this.renderInnerWrapperBegin(component, writer, component.isReadonly());
    }

    public void renderInnerWrapperBegin(final HtmlInputComponent component,
                                        final ResponseWriter writer,
                                        final boolean readonly) throws IOException {
        final UIInput uiComponent = (UIInput) component;

        if (!readonly) {
            writer.startElement("div", uiComponent);
            writer.writeAttribute("class", this.createComponentStyleClass(component), null);
        }
    }

    private String createComponentStyleClass(final HtmlInputComponent component) {
        final StringBuilder componentStyleClass = new StringBuilder();
        componentStyleClass.append(this.createDefaultStyleClass(component));

        if (component.getSupportedFacets().contains(InputComponentFacet.BOOTSTRAP_INPUT_GROUP_ADDON)
                && (component.getFacet(INPUT_GROUP_ADDON_LEFT) != null || component.getFacet(INPUT_GROUP_ADDON_RIGHT) != null)
                || component.getSupportedFacets().contains(InputComponentFacet.BOOTSTRAP_INPUT_GROUP_BTN)
                && (component.getFacet(INPUT_GROUP_BTN_LEFT) != null || component.getFacet(INPUT_GROUP_BTN_RIGHT) != null)
                || component.getSupportedFacets().contains(InputComponentFacet.CALENDAR)) {
            componentStyleClass.append(" input-group");
        }

        return componentStyleClass.toString();
    }

    private String createDefaultStyleClass(HtmlInputComponent component) {
        final StringBuilder defaultStyleClass = new StringBuilder();
        if (component.isHideLabel()) {
            defaultStyleClass.append("butter-component-value-hiddenLabel");
        }else {
           defaultStyleClass.append("butter-component-value");
        }
        return defaultStyleClass.toString();
    }

    public void renderInnerWrapperEnd(final HtmlInputComponent component,
                                      final ResponseWriter writer) throws IOException {
        this.renderInnerWrapperEnd((UIComponent) component, writer, component.isReadonly());
    }

    public void renderInnerWrapperEnd(final UIComponent component,
                                      final ResponseWriter writer,
                                      final boolean readonly) throws IOException {
        if (!readonly) {
            final UIInput uiComponent = (UIInput) component;

            writer.endElement("div");

            final Set eventNames = ((UIInput) component).getClientBehaviors().keySet();
            final Iterator eventNamesIterator = eventNames.iterator();

            if (eventNamesIterator.hasNext()) {
                final StringBuilder sb = new StringBuilder("[");

                while (eventNamesIterator.hasNext()) {
                    sb.append("'");
                    sb.append(eventNamesIterator.next());
                    sb.append("'");

                    if (eventNamesIterator.hasNext()) {
                        sb.append(", ");
                    }
                }

                sb.append("]");

                final String function = "butter.fix.updateMojarraScriptSourceId('" + component.getClientId() + "', " + sb.toString() + ");";
                RenderUtils.renderJavaScriptCall(function, writer, uiComponent);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy