NotifyMessagesRenderer.java 4.52 KB
/*
 * JBoss, Home of Professional Open Source
 * Copyright , Red Hat, Inc. and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.richfaces.renderkit.html;

import org.ajax4jsf.renderkit.RendererUtils;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.richfaces.component.UINotify;
import org.richfaces.component.UINotifyMessages;

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

public class NotifyMessagesRenderer extends NotifyRenderer {

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
        UINotifyMessages messagesComponent = (UINotifyMessages) component;
        ResponseWriter writer = context.getResponseWriter();
        writer.startElement(HTML.DIV_ELEM, null);
        writer.writeAttribute(HTML.id_ATTRIBUTE, RendererUtils.getInstance().clientId(context, component), "type");
        Integer delay = messagesComponent.getDelay();
        if (delay == null) {
            delay = 0;
        }
        Integer interval = messagesComponent.getInterval();
        if (interval == null) {
            interval = 0;
        }

        Iterator<FacesMessage> messages = messagesComponent.isGlobalOnly()
                ? context.getMessages(null) : context.getMessages();
        while (messages.hasNext()) {
            FacesMessage msg = messages.next();
            UINotify notify = (UINotify) context.getApplication()
                    .createComponent(UINotify.COMPONENT_TYPE);
            notify.setAnimationSpeed(messagesComponent.getAnimationSpeed());
            notify.setAppearAnimation(messagesComponent.getAppearAnimation());
            notify.setDelay(delay);
            notify.setHideAnimation(messagesComponent.getHideAnimation());
            notify.setNonblocking(messagesComponent.isNonblocking());
            notify.setNonblockingOpacity(messagesComponent.getNonblockingOpacity());
            notify.setShowCloseButton(messagesComponent.isShowCloseButton());
            notify.setShowHistory(messagesComponent.isShowHistory());
            notify.setShowShadow(messagesComponent.isShowShadow());
            notify.setStack(messagesComponent.getStack());
            notify.setStayTime(messagesComponent.getStayTime());
            notify.setSticky(messagesComponent.isSticky());
            if (messagesComponent.isShowSummary()) {
                notify.setTitle(msg.getSummary());
            }
            if (messagesComponent.isShowDetail() && msg.getDetail() != null && !msg.getDetail().equals(msg.getSummary())) {
                notify.setText(msg.getDetail());
            }
            String styleClass = messagesComponent.getStyleClass();
            if (styleClass == null) {
                styleClass = "";
            }
            if (FacesMessage.SEVERITY_INFO.equals(msg.getSeverity())) {
                styleClass += " rf-ny-info";
            } else if (FacesMessage.SEVERITY_WARN.equals(msg.getSeverity())) {
                styleClass += " rf-ny-warn";
            } else if (FacesMessage.SEVERITY_ERROR.equals(msg.getSeverity())) {
                styleClass += " rf-ny-error";
            } else if (FacesMessage.SEVERITY_FATAL.equals(msg.getSeverity())) {
                styleClass += " rf-ny-fatal";
            }
            styleClass = styleClass.trim();
            notify.setStyleClass(styleClass);
            notify.encodeAll(context);
            delay += interval;
        }
        writer.endElement(HTML.DIV_ELEM);
    }

    @Override
    protected Class getComponentClass() {
        return UINotifyMessages.class;
    }
}