r2449 - in trunk: jaxx-demo/src/main/java/jaxx/demo/feature/validation/list jaxx-validator/src/main/java/jaxx/runtime/validator/swing
Author: tchemit Date: 2012-07-30 13:07:06 +0200 (Mon, 30 Jul 2012) New Revision: 2449 Url: http://nuiton.org/repositories/revision/jaxx/2449 Log: improve BeanListValidator stuff Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java =================================================================== --- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-30 08:04:01 UTC (rev 2448) +++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-30 11:07:06 UTC (rev 2449) @@ -58,29 +58,34 @@ // register validator BeanListValidator<People> validator = ui.getValidator(); - ui.getErrorTableModel().registerValidator(validator); // customize error table JTable errorTable = ui.getErrorTable(); - IdentityValidatorDataLocator dataLocator = new IdentityValidatorDataLocator(); + PeopleValidatorDataLocator dataLocator = new PeopleValidatorDataLocator(); - SwingValidatorUtil.installUI( - validator, dataTable, errorTable, dataLocator, - new SwingListValidatorMessageTableRenderer() { + SwingValidatorUtil.installUI(errorTable, + new SwingListValidatorMessageTableRenderer() { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - Decorator<People> decorator - = new DemoDecoratorProvider().getDecoratorByType(People.class); + Decorator<People> decorator + = new DemoDecoratorProvider().getDecoratorByType(People.class); - @Override - protected String decorateBean(Object bean) { - return decorator.toString(bean); - } - }); + @Override + protected String decorateBean(Object bean) { + return decorator.toString(bean); + } + }); + SwingValidatorUtil.registerListValidator( + validator, + ui.getErrorTableModel(), + dataTable, + errorTable, + dataLocator); + SwingValidatorUtil.addHightLighterOnEditor( validator, dataTable, dataLocator, NuitonValidatorScope.ERROR, @@ -121,9 +126,14 @@ ui.getOk().setEnabled(valid); } - private static class IdentityValidatorDataLocator implements SwingListValidatorDataLocator<People> { + private static class PeopleValidatorDataLocator implements SwingListValidatorDataLocator<People> { @Override + public boolean acceptType(Class<?> beanType) { + return People.class.isAssignableFrom(beanType); + } + + @Override public Pair<Integer, Integer> locateDataCell(TableModel tableModel, People bean, String fieldName) { Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java =================================================================== --- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java 2012-07-30 08:04:01 UTC (rev 2448) +++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java 2012-07-30 11:07:06 UTC (rev 2449) @@ -14,6 +14,17 @@ public interface SwingListValidatorDataLocator<O> { /** + * Tests if the given type can be managed by this locator. + * <p/> + * Useful if there is more than one locator used for a same list + * validation table model. + * + * @param beanType the type of bean to test + * @return {@code true} if this locator can manage this bean type. + */ + boolean acceptType(Class<?> beanType); + + /** * Locate the cell of the given data. * * @param tableModel the table model where data are edited @@ -21,7 +32,9 @@ * @param fieldName the field to locate * @return the cell where to find data */ - Pair<Integer, Integer> locateDataCell(TableModel tableModel, O bean, String fieldName); + Pair<Integer, Integer> locateDataCell(TableModel tableModel, + O bean, + String fieldName); /** * Locate the index of the row of the given bean. Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java =================================================================== --- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java 2012-07-30 08:04:01 UTC (rev 2448) +++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java 2012-07-30 11:07:06 UTC (rev 2449) @@ -66,12 +66,16 @@ return; } - Pair<Integer, Integer> cell = dataLocator.locateDataCell( - editor.getModel(), - entry.getBean(), - entry.getField()); + if (dataLocator.acceptType(entry.getBean().getClass())) { - SwingUtil.editCell(editor, cell.getLeft(), cell.getRight()); + Pair<Integer, Integer> cell = dataLocator.locateDataCell( + editor.getModel(), + entry.getBean(), + entry.getField()); + + SwingUtil.editCell(editor, cell.getLeft(), cell.getRight()); + } + } } Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java =================================================================== --- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-30 08:04:01 UTC (rev 2448) +++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-30 11:07:06 UTC (rev 2449) @@ -27,8 +27,9 @@ private BeanListValidator<O> validator; - public SwingListValidatorTableEditorModelListener(BeanListValidator<O> validator, - SwingListValidatorDataLocator<O> dataLocator) { + public SwingListValidatorTableEditorModelListener( + BeanListValidator<O> validator, + SwingListValidatorDataLocator<O> dataLocator) { this.dataLocator = dataLocator; this.validator = validator; } Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java =================================================================== --- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 08:04:01 UTC (rev 2448) +++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 11:07:06 UTC (rev 2449) @@ -295,10 +295,7 @@ * @param render renderer to use * @since 2.5.3 */ - public static <O> void installUI(BeanListValidator<O> validator, - JTable dataTable, - JTable errorTable, - SwingListValidatorDataLocator<O> dataLocator, + public static void installUI(JTable errorTable, SwingListValidatorMessageTableRenderer render) { errorTable.setDefaultRenderer(Object.class, render); @@ -316,6 +313,26 @@ n_("validator.message.header.tip")); SwingUtil.fixTableColumnWidth(errorTable, 0, 25); + } + + /** + * Prepare the ui where to display the validators messages. + * + * + * @param errorTableModel + * @param errorTable the table where to display validators messages + * @since 2.5.3 + */ + public static <O> void registerListValidator(BeanListValidator<O> validator, + SwingListValidatorMessageTableModel errorTableModel, + JTable dataTable, + JTable errorTable, + SwingListValidatorDataLocator<O> dataLocator) { + + // register the validator to the error table model + errorTableModel.registerValidator(validator); + + // add click listener to go to cell errorTable.addMouseListener(new SwingListValidatorMessageTableMouseListener( dataTable,
participants (1)
-
tchemit@users.nuiton.org