MessageActionListener.java :  » JBoss » gravel-1.0.2.GA » org » jboss » gravel » action » action » Java Open Source

Java Open Source » JBoss » gravel 1.0.2.GA 
gravel 1.0.2.GA » org » jboss » gravel » action » action » MessageActionListener.java
package org.jboss.gravel.action.action;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.jboss.gravel.common.util.MessageUtils;

import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;

/**
 *
 */
public final class MessageActionListener implements ActionListener, Serializable {
    private final ValueExpression clientIdExpression;
    private final ValueExpression targetExpression;
    private final ValueExpression severityExpression;

    private static final long serialVersionUID = 1L;

    public MessageActionListener(final ValueExpression clientIdExpression, final ValueExpression targetExpression, final ValueExpression severityExpression) {
        this.clientIdExpression = clientIdExpression;
        this.targetExpression = targetExpression;
        this.severityExpression = severityExpression;
    }

    public void processAction(ActionEvent event) throws AbortProcessingException {
        final FacesContext facesContext = FacesContext.getCurrentInstance();
        final ELContext elContext = facesContext.getELContext();
        final List<FacesMessage> messageList = new ArrayList<FacesMessage>();
        final Iterator<FacesMessage> messages;
        final Set<FacesMessage.Severity> severities;
        if (severityExpression != null) {
            final Object severityValue = severityExpression.getValue(elContext);
            if (severityValue != null) {
                severities = new HashSet<FacesMessage.Severity>();
                final String severityString = severityValue.toString();
                int idx = 0;
                int commaIdx;
                do {
                    commaIdx = severityString.indexOf(',', idx);
                    final String severity;
                    if (commaIdx == -1) {
                        severity = severityString.substring(idx).trim().toLowerCase();
                    } else {
                        severity = severityString.substring(idx, commaIdx).trim().toLowerCase();
                        idx = commaIdx + 1;
                    }
                    if (severity.length() > 0) {
                        if (MessageUtils.getAllSeverityStrings().contains(severity)) {
                            severities.add(MessageUtils.getSeverityForName(severity));
                        } else {
                            throw new FacesException("Invalid severity specified: '" + severity + "'");
                        }
                    }
                } while (commaIdx != -1);
            } else {
                severities = MessageUtils.getAllSeverities();
            }
        } else {
            severities = MessageUtils.getAllSeverities();
        }
        if (clientIdExpression != null) {
            final Object clientIdValue = clientIdExpression.getValue(elContext);
            if (clientIdValue != null) {
                final String clientIdPath = clientIdValue.toString();
                if (clientIdPath != null && clientIdPath.length() > 0) {
                    final UIComponent component = event.getComponent().findComponent(clientIdPath);
                    if (component != null) {
                        final String actualClientId = component.getClientId(facesContext);
                        if (actualClientId != null) {
                            messages = facesContext.getMessages(clientIdPath);
                        } else {
                            messages = Collections.<FacesMessage>emptyList().iterator();
                        }
                    } else {
                        messages = Collections.<FacesMessage>emptyList().iterator();
                    }
                } else {
                    messages = facesContext.getMessages("");
                }
            } else {
                messages = facesContext.getMessages();
            }
        } else {
            messages = facesContext.getMessages();
        }
        while (messages.hasNext()) {
            final FacesMessage message = messages.next();
            if (severities.contains(message.getSeverity())) {
                messageList.add(message);
            }
        }
        targetExpression.setValue(elContext, messageList);
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.