Author: tchemit Date: 2010-10-26 21:24:51 +0200 (Tue, 26 Oct 2010) New Revision: 2119 Url: http://nuiton.org/repositories/revision/jaxx/2119 Log: Evolution #996: Add new 'fatal' message level in bean validation clean validation package Added: trunk/jaxx-runtime/src/test/resources/jaxx/runtime/validator/SimpleBean-fatal-validation.xml Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidator.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorDetector.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorEvent.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorField.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorScope.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorUtil.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/XWorkBeanValidator.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListMouseListener.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableMouseListener.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/IconValidationUI.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/ImageValidationUI.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/TranslucentValidationUI.java trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-en_GB.properties trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-fr_FR.properties trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/AbstractBeanValidatorDetectorTest.java trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorDetectorTest.java trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorTest.java trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/SimpleBean.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidator.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidator.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidator.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -202,6 +202,15 @@ return null; } + public boolean hasFatalErrors() { + for (BeanValidatorField<B> field : fields) { + if (field.hasFatalErrors()) { + return true; + } + } + return false; + } + public boolean hasErrors() { for (BeanValidatorField<B> field : fields) { if (field.hasErrors()) { @@ -281,8 +290,10 @@ EventSetDescriptor descriptor = getBeanEventDescriptor(oldBean); descriptor.getRemoveListenerMethod().invoke(oldBean, l); } catch (Exception eee) { - log.info("Can't register as listener for bean " + beanClass + - " for reason " + eee.getMessage(), eee); + if (log.isInfoEnabled()) { + log.info("Can't register as listener for bean " + beanClass + + " for reason " + eee.getMessage(), eee); + } } } this.bean = bean; @@ -301,13 +312,15 @@ EventSetDescriptor descriptor = getBeanEventDescriptor(bean); descriptor.getAddListenerMethod().invoke(bean, l); } catch (Exception eee) { - log.info("Can't register as listener for bean " + beanClass + + if (log.isInfoEnabled()) { + log.info("Can't register as listener for bean " + beanClass + " for reason " + eee.getMessage(), eee); + } } validate(); } setChanged(false); - setValid(!hasErrors()); + setValid(!hasFatalErrors() && !hasErrors()); pcs.firePropertyChange(BEAN_PROERTY, oldBean, bean); } @@ -410,7 +423,7 @@ */ public void doValidate() { validate(); - setValid(!hasErrors()); + setValid(!hasFatalErrors() && !hasErrors()); setChanged(true); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorDetector.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorDetector.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorDetector.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -85,8 +85,11 @@ for (Class<?> c : types) { File dir = getClassDir(sourceRoot, c); if (!dir.exists()) { + // pas de repertoire adequate - log.debug("skip non existing directory " + dir); + if (log.isDebugEnabled()) { + log.debug("skip non existing directory " + dir); + } continue; } String[] contexts = getContexts(c, dir); @@ -103,6 +106,7 @@ } if (contextFilter != null) { + // filter contexts realContexts = getFilterContexts(contextFilter, realContexts Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorEvent.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorEvent.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorEvent.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -50,13 +50,13 @@ public BeanValidatorEvent(BeanValidator<?> source, BeanValidatorField<?> field, BeanValidatorScope scope, - String[] toAdd, - String[] toDelete) { + String[] messagestoAdd, + String[] messagestoDelete) { super(source); this.field = field; this.scope = scope; - messagestoAdd = toAdd; - messagestoDelete = toDelete; + this.messagestoAdd = messagestoAdd; + this.messagestoDelete = messagestoDelete; } @Override Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorField.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorField.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorField.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -85,11 +85,11 @@ } /** - * @return <code>true</code> if this field is valid (says is in error scope - * and has errors), <code>false</code> otherwise. + * @return {@code true} if this field is valid : no fatal errors and no + * errors), {@code false} otherwise. */ public boolean isValid() { - return !hasErrors(); + return !hasFatalErrors() && !hasErrors(); } public BeanValidatorScope getScope() { @@ -109,6 +109,10 @@ return messages.keySet(); } + public boolean hasFatalErrors() { + return hasMessages(BeanValidatorScope.FATAL); + } + public boolean hasErrors() { return hasMessages(BeanValidatorScope.ERROR); } @@ -121,6 +125,10 @@ return hasMessages(BeanValidatorScope.INFO); } + public Set<String> getFatalErrors() { + return getMessages(BeanValidatorScope.FATAL); + } + public Set<String> getErrors() { return getMessages(BeanValidatorScope.ERROR); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorScope.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorScope.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorScope.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -31,13 +31,21 @@ * <p/> * The order of the enum defines the severity of validation. * <p/> - * Always begin with error, then if no error found, try warning, then info... + * Always begin with fatal, then error, then if no error found, try warning, then info... * * @author tchemit <chemit@codelutin.com> */ public enum BeanValidatorScope { /** + * the fatal error scope level. + * <p/> + * When a message of a such scope is found on a validator, then the + * validator is invalid and modified. + * @since 2.2.4 + */ + FATAL(n_("validator.scope.fatal.label")), + /** * the error scope level. * <p/> * When a message of a such scope is found on a validator, then the Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorUtil.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorUtil.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/BeanValidatorUtil.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -182,9 +182,11 @@ } } } catch (Exception e) { - log.error("could not obtain beanInfo for " + - valueClass.getClass() + ", reason : " + - e.getMessage(), e); + if (log.isErrorEnabled()) { + log.error("could not obtain beanInfo for " + + valueClass.getClass() + ", reason : " + + e.getMessage(), e); + } } } else { //fixme : conversion failed, we should be able to notify ui Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/XWorkBeanValidator.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/XWorkBeanValidator.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/XWorkBeanValidator.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -133,7 +133,7 @@ container.getInstance(ValueStackFactory.class); vs = stackFactory.createValueStack(); if (log.isDebugEnabled()) { - log.info("create a standalone value stack " + vs); + log.debug("create a standalone value stack " + vs); } } else { if (log.isDebugEnabled()) { @@ -262,8 +262,10 @@ } } catch (ValidationException eee) { - log.warn("Error during validation on " + beanClass + - " for reason : " + eee.getMessage(), eee); + if (log.isWarnEnabled()) { + log.warn("Error during validation on " + beanClass + + " for reason : " + eee.getMessage(), eee); + } } finally { // on nettoye toujours le validateur apres operation Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -226,8 +226,10 @@ BeanValidatorField<B> field = getField(fieldname); if (field == null) { // no field registred in the validator - log.warn("the field '" + fieldname + - "' is not defined in validator (no rules on it)"); + if (log.isWarnEnabled()) { + log.warn("the field '" + fieldname + + "' is not defined in validator (no rules on it)"); + } return; } if (log.isInfoEnabled()) { Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListMouseListener.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListMouseListener.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListMouseListener.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -67,9 +67,11 @@ protected SwingValidatorMessage getSelectedMessage(MouseEvent e) { JList list = (JList) e.getSource(); if (!(list.getModel() instanceof SwingValidatorMessageListModel)) { - log.warn("model must be a " + - SwingValidatorMessageListModel.class + ", but was " + - list.getModel()); + if (log.isWarnEnabled()) { + log.warn("model must be a " + + SwingValidatorMessageListModel.class + ", but was " + + list.getModel()); + } return null; } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableMouseListener.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableMouseListener.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableMouseListener.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -83,11 +83,16 @@ protected SwingValidatorMessage getSelectedMessage(MouseEvent e) { JTable table = (JTable) e.getSource(); if (!(table.getModel() instanceof SwingValidatorMessageTableModel)) { - log.warn("model must be a " + SwingValidatorMessageTableModel.class + ", but was " + table.getModel()); + if (log.isWarnEnabled()) { + log.warn("model must be a " + + SwingValidatorMessageTableModel.class + + ", but was " + table.getModel()); + } return null; } - SwingValidatorMessageTableModel model = (SwingValidatorMessageTableModel) table.getModel(); + SwingValidatorMessageTableModel model = + (SwingValidatorMessageTableModel) table.getModel(); int index = table.getSelectionModel().getMinSelectionIndex(); if (index == -1) { // nothing is selected @@ -107,7 +112,8 @@ pcs.addPropertyChangeListener(listener); } - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + public void addPropertyChangeListener(String propertyName, + PropertyChangeListener listener) { pcs.addPropertyChangeListener(propertyName, listener); } @@ -115,7 +121,8 @@ pcs.removePropertyChangeListener(listener); } - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + public void removePropertyChangeListener(String propertyName, + PropertyChangeListener listener) { pcs.removePropertyChangeListener(propertyName, listener); } Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -51,6 +51,8 @@ */ public class SwingValidatorUtil extends BeanValidatorUtil { + static ImageIcon fatalIcon; + static ImageIcon errorIcon; static ImageIcon warningIcon; @@ -60,6 +62,14 @@ /** Logger */ static private final Log log = LogFactory.getLog(SwingValidatorUtil.class); + + public static ImageIcon getFatalIcon() { + if (errorIcon == null) { + errorIcon = SwingUtil.createImageIcon("fatal.png"); + } + return errorIcon; + } + public static ImageIcon getErrorIcon() { if (errorIcon == null) { errorIcon = SwingUtil.createImageIcon("error.png"); @@ -247,7 +257,10 @@ @Override public void propertyChange(PropertyChangeEvent evt) { SwingValidator<?> validator = (SwingValidator<?>) evt.getSource(); - log.info("Context name changed to [" + evt.getNewValue() + "] for validator " + validator.getBeanClass()); + if (log.isInfoEnabled()) { + log.info("Context name changed to [" + evt.getNewValue() + + "] for validator " + validator.getBeanClass()); + } ui.registerValidatorFields(); } }; Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/IconValidationUI.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/IconValidationUI.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/IconValidationUI.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -46,6 +46,8 @@ // The icon to be shown at the layer's corner + protected static BufferedImage fatalIcon; + protected static BufferedImage errorIcon; protected static BufferedImage warningIcon; @@ -54,6 +56,9 @@ public IconValidationUI(BeanValidatorField<?> field) { super(field); + if (fatalIcon == null) { + fatalIcon = prepareIcon(Color.MAGENTA); + } if (errorIcon == null) { errorIcon = prepareIcon(Color.RED); } @@ -85,6 +90,8 @@ if (scope != null) { BufferedImage icon = null; switch (scope) { + case FATAL: + icon = fatalIcon; case ERROR: icon = errorIcon; break; Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/ImageValidationUI.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/ImageValidationUI.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/ImageValidationUI.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -45,6 +45,8 @@ */ public class ImageValidationUI extends AbstractBeanValidatorUI { + protected static BufferedImage fatalIcon; + protected static BufferedImage errorIcon; protected static BufferedImage warningIcon; @@ -53,6 +55,9 @@ public ImageValidationUI(BeanValidatorField<?> field) { super(field); + if (fatalIcon == null) { + fatalIcon = prepareIcon(SwingUtil.createImageIcon("fatal.png")); + } if (errorIcon == null) { errorIcon = prepareIcon(SwingUtil.createImageIcon("error.png")); } @@ -93,6 +98,9 @@ if (scope != null) { BufferedImage icon = null; switch (scope) { + case FATAL: + icon = fatalIcon; + break; case ERROR: icon = errorIcon; break; Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/TranslucentValidationUI.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/TranslucentValidationUI.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/ui/TranslucentValidationUI.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -44,6 +44,8 @@ */ public class TranslucentValidationUI extends AbstractBeanValidatorUI { + protected Color fatalHightlight; + protected Color errorHightlight; protected Color warningHightlight; @@ -52,6 +54,7 @@ public TranslucentValidationUI(BeanValidatorField<?> field) { super(field); + fatalHightlight = Color.MAGENTA; errorHightlight = Color.RED; warningHightlight = Color.YELLOW; infoHightlight = Color.GREEN; @@ -79,6 +82,9 @@ g2.setColor(Color.WHITE); } else { switch (scope) { + case FATAL: + g2.setColor(fatalHightlight); + break; case ERROR: g2.setColor(errorHightlight); break; Modified: trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-en_GB.properties =================================================================== --- trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-en_GB.properties 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-en_GB.properties 2010-10-26 19:24:51 UTC (rev 2119) @@ -7,6 +7,7 @@ validator.message.header.tip=Message validator.message.tip=Message \: %1$s validator.scope.error.label=Error +validator.scope.fatal.label=Fatal error validator.scope.header=... validator.scope.header.tip=Severity of the message validator.scope.info.label=Information Modified: trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-fr_FR.properties =================================================================== --- trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-fr_FR.properties 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/main/resources/i18n/jaxx-runtime-fr_FR.properties 2010-10-26 19:24:51 UTC (rev 2119) @@ -7,6 +7,7 @@ validator.message.header.tip=Le texte du message validator.message.tip=Message \: %1$s validator.scope.error.label=Erreur +validator.scope.fatal.label=Erreur fatale validator.scope.header=... validator.scope.header.tip=Le de type de message validator.scope.info.label=Information Modified: trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/AbstractBeanValidatorDetectorTest.java =================================================================== --- trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/AbstractBeanValidatorDetectorTest.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/AbstractBeanValidatorDetectorTest.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -85,9 +85,11 @@ this.classes = classes; this.validatorClass = validatorClass; - log.info("sourceRoot " + sourceRoot); + if (log.isInfoEnabled()) { + log.info("sourceRoot " + sourceRoot); log.info("validatorClass " + validatorClass); log.info("classes " + Arrays.toString(classes)); + } } protected AbstractBeanValidatorDetectorTest( @@ -102,7 +104,9 @@ b = new File("").getAbsolutePath(); } basedir = new File(b); - log.info("basedir " + basedir); + if (log.isInfoEnabled()) { + log.info("basedir " + basedir); + } } @Before @@ -119,7 +123,9 @@ @Test public void testDetect() { SortedSet<BeanValidator<?>> result = detect(sourceRoot, classes, null); - log.info(printValidators("testDetect : ", result)); + if (log.isInfoEnabled()) { + log.info(printValidators("testDetect : ", result)); + } assertDetect(result); } Modified: trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorDetectorTest.java =================================================================== --- trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorDetectorTest.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorDetectorTest.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -92,7 +92,7 @@ @Test public void testGetContexts() { - String[] expResult = {"error", "info", "simple", "warning"}; + String[] expResult = {"fatal", "error", "info", "simple", "warning"}; Class<?> clazz = classes[0]; File dir = instance.getClassDir(sourceRoot, clazz); String[] result = instance.getContexts(clazz, dir); Modified: trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorTest.java =================================================================== --- trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorTest.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/BeanValidatorTest.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -31,6 +31,8 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @author tchemit <chemit@codelutin.com> */ @@ -43,6 +45,8 @@ protected SimpleBean bean; + BeanValidatorListenerImpl fatalListener; + BeanValidatorListenerImpl errorListener; BeanValidatorListenerImpl warningListener; @@ -53,6 +57,7 @@ public void setUp() { bean = new SimpleBean(); validator = new BeanValidator<SimpleBean>(SimpleBean.class, null); + validator.addBeanValidatorListener(fatalListener = new BeanValidatorListenerImpl(BeanValidatorScope.FATAL)); validator.addBeanValidatorListener(errorListener = new BeanValidatorListenerImpl(BeanValidatorScope.ERROR)); validator.addBeanValidatorListener(warningListener = new BeanValidatorListenerImpl(BeanValidatorScope.WARNING)); validator.addBeanValidatorListener(infoListener = new BeanValidatorListenerImpl(BeanValidatorScope.INFO)); @@ -67,10 +72,14 @@ } } + private static final String STRING_VALUE_FATAL= "stringValue.fatal"; + private static final String STRING_VALUE_ERROR = "stringValue.error"; private static final String STRING_VALUE_WARNING = "stringValue.warning"; + private static final String INT_VALUE_FATAL = "intValue.fatal"; + private static final String INT_VALUE_ERROR = "intValue.error"; private static final String INT_VALUE_INFO = "intValue.info"; @@ -78,56 +87,84 @@ @Test public void testValidate() { + assertMessages(fatalListener); assertMessages(errorListener); assertMessages(warningListener); assertMessages(infoListener); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } validator.setBean(bean); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, STRING_VALUE_ERROR, INT_VALUE_ERROR); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setStringValue("one"); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, INT_VALUE_ERROR); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setStringValue("oneone"); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, INT_VALUE_ERROR); assertMessages(warningListener); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setIntValue(1); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener); assertMessages(warningListener); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setIntValue(10); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener); assertMessages(warningListener); assertMessages(infoListener); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setStringValue(null); bean.setIntValue(0); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, STRING_VALUE_ERROR, INT_VALUE_ERROR); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } + + bean.setStringValue("5"); + bean.setIntValue(5); + assertMessages(fatalListener); + assertMessages(errorListener); + assertMessages(warningListener,STRING_VALUE_WARNING); + assertMessages(infoListener,INT_VALUE_INFO); } @Test @@ -138,57 +175,77 @@ assertMessages(warningListener); assertMessages(infoListener); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } validator.setBean(bean); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, STRING_VALUE_ERROR, INT_VALUE_ERROR); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } Object value = validator.convert("intValue", "abc", Class.class); Assert.assertNull(value); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, STRING_VALUE_ERROR, "error.convertor.class"); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setStringValue("one"); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, "error.convertor.class"); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } value = validator.convert("intValue", "3", Integer.class); bean.setIntValue((Integer) value); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } bean.setIntValue(-1); + assertMessages(fatalListener,STRING_VALUE_FATAL,INT_VALUE_FATAL); assertMessages(errorListener, INT_VALUE_ERROR); assertMessages(warningListener, STRING_VALUE_WARNING); assertMessages(infoListener, INT_VALUE_INFO); - log.info("-----------------------------------------------"); + if (log.isInfoEnabled()) { + log.info("-----------------------------------------------"); + } } void assertMessages(BeanValidatorListenerImpl listener, String... expected) { List<String> actual = listener.getMessages(); - Assert.assertEquals(" shoudl have " + java.util.Arrays.toString(expected) + " but had " + actual, expected.length, actual.size()); + Assert.assertEquals(" shoudl have " + + Arrays.toString(expected) + " but had " + actual, + expected.length, actual.size()); for (String m : expected) { - Assert.assertEquals("could not find " + m + " in " + actual, true, actual.contains(m)); + Assert.assertEquals("could not find " + m + " in " + actual, + true, actual.contains(m)); } } @@ -200,7 +257,7 @@ this.scope = scope; } - java.util.List<String> messages = new java.util.ArrayList<String>(); + List<String> messages = new ArrayList<String>(); public List<String> getMessages() { return messages; @@ -213,17 +270,19 @@ } String[] messagesToDelete = event.getMessagesToDelete(); if (messagesToDelete != null && messagesToDelete.length > 0) { - log.info(event.getScope() + " messages to delete : " + java.util.Arrays.toString(messagesToDelete)); + if (log.isInfoEnabled()) { + log.info(event.getScope() + " messages to delete : " + Arrays.toString(messagesToDelete)); + } for (String m : messagesToDelete) { messages.remove(m); } } String[] messagesToAdd = event.getMessagesToAdd(); if (messagesToAdd != null && messagesToAdd.length > 0) { - log.info(event.getScope() + " messages to add : " + java.util.Arrays.toString(messagesToAdd)); - for (String m : messagesToAdd) { - messages.add(m); + if (log.isInfoEnabled()) { + log.info(event.getScope() + " messages to add : " + Arrays.toString(messagesToAdd)); } + messages.addAll(Arrays.asList(messagesToAdd)); } } } Modified: trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/SimpleBean.java =================================================================== --- trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/SimpleBean.java 2010-10-26 17:44:57 UTC (rev 2118) +++ trunk/jaxx-runtime/src/test/java/jaxx/runtime/validator/SimpleBean.java 2010-10-26 19:24:51 UTC (rev 2119) @@ -63,7 +63,8 @@ p.addPropertyChangeListener(listener); } - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + public void addPropertyChangeListener(String propertyName, + PropertyChangeListener listener) { p.addPropertyChangeListener(propertyName, listener); } @@ -71,7 +72,8 @@ p.removePropertyChangeListener(listener); } - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + public void removePropertyChangeListener(String propertyName, + PropertyChangeListener listener) { p.removePropertyChangeListener(propertyName, listener); } } \ No newline at end of file Added: trunk/jaxx-runtime/src/test/resources/jaxx/runtime/validator/SimpleBean-fatal-validation.xml =================================================================== --- trunk/jaxx-runtime/src/test/resources/jaxx/runtime/validator/SimpleBean-fatal-validation.xml (rev 0) +++ trunk/jaxx-runtime/src/test/resources/jaxx/runtime/validator/SimpleBean-fatal-validation.xml 2010-10-26 19:24:51 UTC (rev 2119) @@ -0,0 +1,47 @@ +<!-- + #%L + JAXX :: Runtime + + $Id: SimpleBean-error-validation.xml 2118 2010-10-26 17:44:57Z tchemit $ + $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-runtime/src/test/resources/jaxx/ru... $ + %% + Copyright (C) 2008 - 2010 CodeLutin + %% + This program 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 3 of the + License, or (at your option) any later version. + + This program 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 General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + #L% + --> +<!DOCTYPE validators PUBLIC + "-//OpenSymphony Group//XWork Validator 1.0.2//EN" + "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> +<validators> + + <field name="stringValue"> + <field-validator type="fieldexpression"> + <param name="expression"> + <![CDATA[ stringValue != null && stringValue == "5"]]></param> + <message>stringValue.fatal</message> + </field-validator> + </field> + + + <field name="intValue"> + <field-validator type="int"> + <param name="min">5</param> + <param name="max">5</param> + <message>intValue.fatal</message> + </field-validator> + </field> + +</validators> \ No newline at end of file