package gov.llnl.nif.dataviz.actionlistener.exceptionhandler;

import java.sql.SQLException;

import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;

import oracle.toplink.essentials.exceptions.DatabaseException;

import org.apache.log4j.Logger;
import org.apache.myfaces.application.ActionListenerImpl;

public class ExceptionHandlingActionListener extends ActionListenerImpl {
         private static Logger log = 
Logger.getLogger(ExceptionHandlingActionListener.class);

          public String oneLiner(String s) {
                  String [] lines = s.split("[\r\n]+");
                  StringBuilder sb = new StringBuilder();
                  for (String line : lines) {
                          sb.append(line);
                  }
                  return sb.toString();
          }
          public void processAction(ActionEvent event) throws 
AbortProcessingException {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            try {

              super.processAction(event);
            } catch (Exception fe) {      
              Throwable databaseException = ExceptionUtils.getException(fe, 
DatabaseException.class);
              if (databaseException != null) {
               FacesMessage facesMessage = new 
FacesMessage(FacesMessage.SEVERITY_ERROR,"Database 
Error",oneLiner(databaseException.getMessage()));
               facesContext.addMessage(null, facesMessage);
              } else {
                  databaseException = ExceptionUtils.getException(fe, 
SQLException.class);
                  if (databaseException != null) {
                          FacesMessage facesMessage = new 
FacesMessage(FacesMessage.SEVERITY_ERROR, "SQL Database error", 
oneLiner(databaseException.getMessage()));
                          facesContext.addMessage(null, facesMessage);
                  } else {
                          throw new FacesException(fe);
                  }
               }
            }
          }

}

Reply via email to