001 package org.springframework.richclient.exceptionhandling;
002
003 import org.hibernate.validator.InvalidStateException;
004 import org.hibernate.validator.InvalidValue;
005
006 import javax.swing.*;
007 import java.awt.*;
008 import java.util.ArrayList;
009 import java.util.List;
010
011 /**
012 * Displays the validation errors to the user.
013 * @author Geoffrey De Smet
014 * @since 0.3
015 */
016 public class HibernateValidatorDialogExceptionHandler extends AbstractDialogExceptionHandler {
017
018 private static final String CAPTION_KEY = "hibernateValidatorDialogExceptionHandler.caption";
019 private static final String EXPLANATION_KEY = "hibernateValidatorDialogExceptionHandler.explanation";
020
021 public String resolveExceptionCaption(Throwable throwable) {
022 return messageSourceAccessor.getMessage(CAPTION_KEY, CAPTION_KEY);
023 }
024
025 public Object createExceptionContent(Throwable throwable) {
026 if (!(throwable instanceof InvalidStateException)) {
027 String ILLEGAL_THROWABLE_ARGUMENT
028 = "Could not handle exception: throwable is not an InvalidStateException:\n"
029 + throwable.getClass().getName();
030 logger.error(ILLEGAL_THROWABLE_ARGUMENT);
031 return ILLEGAL_THROWABLE_ARGUMENT;
032 }
033 InvalidStateException invalidStateException = (InvalidStateException) throwable;
034 String explanation = messageSourceAccessor.getMessage(EXPLANATION_KEY, EXPLANATION_KEY);
035 JPanel panel = new JPanel(new BorderLayout());
036 JLabel explanationLabel = new JLabel(explanation);
037 panel.add(explanationLabel, BorderLayout.NORTH);
038 List<String> invalidValueMessageList = new ArrayList<String>();
039 for (InvalidValue invalidValue : invalidStateException.getInvalidValues()) {
040 StringBuffer messageBuffer = new StringBuffer();
041 String propertyName = invalidValue.getPropertyName();
042 messageBuffer.append(messageSourceAccessor.getMessage(propertyName + ".label", propertyName));
043 messageBuffer.append(" ");
044 messageBuffer.append(invalidValue.getMessage());
045 invalidValueMessageList.add(messageBuffer.toString());
046 }
047 JList invalidValuesJList = new JList(invalidValueMessageList.toArray());
048 JScrollPane invalidValuesScrollPane = new JScrollPane(invalidValuesJList,
049 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
050 panel.add(invalidValuesScrollPane, BorderLayout.CENTER);
051 return panel;
052 }
053
054 }