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

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

package de.larmic.butterfaces.component.partrenderer;

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

import javax.faces.application.FacesMessage;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import java.io.IOException;
import java.util.Iterator;

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

    public void renderTooltip(final HtmlInputComponent component, final ResponseWriter writer) throws IOException {
        final UIInput uiComponent = (UIInput) component;
        final String outerComponentId = component.getClientId();

        if (calculateShowTooltip(component)) {
            renderTooltipElement(component, writer, uiComponent);
            RenderUtils.renderJQueryPluginCall(outerComponentId, "butterTooltip()", writer, uiComponent);
        }
    }

    private void renderTooltipElement(final HtmlInputComponent component, final ResponseWriter writer, final UIInput uiComponent) throws IOException {
        writer.startElement("div", uiComponent);
        writer.writeAttribute("class", "butter-component-tooltip butter-component-tooltip-hidden", null);
        writer.startElement("div", uiComponent);
        writer.writeAttribute("class", "butter-component-tooltip-arrow", null);
        writer.endElement("div");
        writer.startElement("div", uiComponent);
        writer.writeAttribute("class", "butter-component-tooltip-text", null);
        if (!StringUtils.isEmpty(component.getTooltip())) {
            writer.writeText(component.getTooltip(), null);
            renderValidationMessages(uiComponent, writer, true);
        } else {
            renderValidationMessages(uiComponent, writer, false);
        }
        writer.endElement("div");


        writer.endElement("div");
    }

    private void renderValidationMessages(final UIInput uiComponent, final ResponseWriter writer, final boolean tooltipExists) throws IOException {
        final FacesContext context = FacesContext.getCurrentInstance();
        final Iterator clientIdsWithMessages = context.getClientIdsWithMessages();

        if (clientIdsWithMessages.hasNext() && tooltipExists) {
            writer.startElement("hr", uiComponent);
            writer.endElement("hr");
        }

        while (clientIdsWithMessages.hasNext()) {
            final String clientIdWithMessages = clientIdsWithMessages.next();
            if (uiComponent.getClientId().equals(clientIdWithMessages)) {
                final Iterator componentMessages = context.getMessages(clientIdWithMessages);

                writer.startElement("div", uiComponent);
                writer.writeAttribute("class", "butter-component-tooltip-validation-error", null);
                writer.startElement("ul", uiComponent);

                while (componentMessages.hasNext()) {
                    writer.startElement("li", uiComponent);
                    writer.writeText(componentMessages.next().getDetail(), null);
                    writer.endElement("li");
                }

                writer.endElement("ul");
                writer.endElement("div");
            }
        }
    }

    private boolean calculateShowTooltip(final HtmlInputComponent component) {
        final boolean tooltipNecessary = this.isTooltipNecessary(component);
        return (tooltipNecessary || !component.isValid()) && !component.isReadonly();
    }

    private boolean isTooltipNecessary(final HtmlInputComponent component) {
        return !StringUtils.isEmpty(component.getTooltip());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy