/*
* Copyright 2011 PrimeFaces Extensions.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: MessagesRenderer.java 491 2011-11-29 13:41:23Z Zoigln@googlemail.com $
*/
package org.primefaces.extensions.component.messages;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.primefaces.extensions.application.TargetableFacesMessage;
import org.primefaces.renderkit.CoreRenderer;
/**
* Renderer for the {@link Messages} component.
*
* @author Thomas Andraschko / last modified by $Author: Zoigln@googlemail.com $
* @version $Revision: 491 $
* @since 0.2
*/
public class MessagesRenderer extends CoreRenderer {
@Override
public void encodeEnd(final FacesContext context, final UIComponent component) throws IOException {
final Messages messagesComponent = (Messages) component;
final ResponseWriter writer = context.getResponseWriter();
final String clientId = messagesComponent.getClientId(context);
final Map<String, List<FacesMessage>> messages = new HashMap<String, List<FacesMessage>>();
messages.put("info", new ArrayList<FacesMessage>());
messages.put("warn", new ArrayList<FacesMessage>());
messages.put("error", new ArrayList<FacesMessage>());
messages.put("fatal", new ArrayList<FacesMessage>());
final Iterator<FacesMessage> messagesIterator =
messagesComponent.isGlobalOnly() ? context.getMessages(null) : context.getMessages();
while (messagesIterator.hasNext()) {
final FacesMessage message = messagesIterator.next();
final boolean shouldRender = messagesComponent.shouldRender(message,
TargetableFacesMessage.Target.ALL, TargetableFacesMessage.Target.MESSAGES);
if (shouldRender) {
final Severity severity = message.getSeverity();
if (message.isRendered() && !messagesComponent.isRedisplay()) {
continue;
}
if (severity.equals(FacesMessage.SEVERITY_INFO)) {
messages.get("info").add(message);
} else if (severity.equals(FacesMessage.SEVERITY_WARN)) {
messages.get("warn").add(message);
} else if (severity.equals(FacesMessage.SEVERITY_ERROR)) {
messages.get("error").add(message);
} else if (severity.equals(FacesMessage.SEVERITY_FATAL)) {
messages.get("fatal").add(message);
}
}
}
writer.startElement("div", messagesComponent);
writer.writeAttribute("id", clientId, "id");
writer.writeAttribute("class", "ui-messages ui-widget", null);
for (final String severity : messages.keySet()) {
final List<FacesMessage> severityMessages = messages.get(severity);
if (severityMessages.size() > 0) {
encodeSeverityMessages(context, messagesComponent, severity, severityMessages);
}
}
writer.endElement("div");
}
protected void encodeSeverityMessages(final FacesContext context, final Messages messagesComponent, final String severity,
final List<FacesMessage> messages) throws IOException {
final ResponseWriter writer = context.getResponseWriter();
String styleClassPrefix = "ui-messages-" + severity;
writer.startElement("div", null);
writer.writeAttribute("class", styleClassPrefix + " ui-corner-all", null);
writer.startElement("span", null);
writer.writeAttribute("class", styleClassPrefix + "-icon", null);
writer.endElement("span");
writer.startElement("ul", null);
for (FacesMessage message : messages) {
writer.startElement("li", null);
final String summary = message.getSummary() != null ? message.getSummary() : "";
final String detail = message.getDetail() != null ? message.getDetail() : summary;
if (messagesComponent.isShowSummary()) {
writer.startElement("span", null);
writer.writeAttribute("class", styleClassPrefix + "-summary", null);
if (messagesComponent.isEscape()) {
writer.writeText(summary, null);
} else {
writer.write(summary);
}
writer.endElement("span");
}
if (messagesComponent.isShowDetail()) {
writer.startElement("span", null);
writer.writeAttribute("class", styleClassPrefix + "-detail", null);
if (messagesComponent.isEscape()) {
writer.writeText(detail, null);
} else {
writer.write(detail);
}
writer.endElement("span");
}
writer.endElement("li");
message.rendered();
}
writer.endElement("ul");
writer.endElement("div");
}
}