r2083 - in trunk: jaxx-compiler/src/main/java/jaxx/compiler/finalizers jaxx-compiler/src/main/java/jaxx/compiler/tags/validator jaxx-runtime/src/main/java/jaxx/runtime jaxx-runtime/src/main/java/jaxx/runtime/validator/swing
Author: tchemit Date: 2010-09-11 14:24:05 +0200 (Sat, 11 Sep 2010) New Revision: 2083 Url: http://nuiton.org/repositories/revision/jaxx/2083 Log: Anomalie #864: Validator fields are not refresh when validation changes his context name Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/ValidatorFinalizer.java trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/validator/BeanValidatorHandler.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/JAXXValidator.java trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/ValidatorFinalizer.java =================================================================== --- trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/ValidatorFinalizer.java 2010-09-09 09:33:37 UTC (rev 2082) +++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/finalizers/ValidatorFinalizer.java 2010-09-11 12:24:05 UTC (rev 2083) @@ -103,6 +103,8 @@ builder.append(validators.size()); builder.append(" validator(s)"); builder.append(eol); + builder.append("registerValidatorFields();"); + StringBuilder registerValidatorFieldsMethod = new StringBuilder(); for (CompiledBeanValidator validator : validators) { String id = TypeManager.getJavaCode(validator.getId()); builder.append("validatorIds.add("); @@ -117,10 +119,19 @@ builder.append(id); builder.append(").reloadBean();"); builder.append(eol); + // init fields + validator.addFieldRepresentations(compiler, registerValidatorFieldsMethod); } builder.append("validatorIds = java.util.Collections.unmodifiableList(validatorIds);"); builder.append(eol); compiler.appendLateInitializer(builder.toString()); + compiler.getJavaFile().addMethod(JavaFileGenerator.newMethod( + Modifier.PUBLIC, + "void", + "registerValidatorFields", + registerValidatorFieldsMethod.toString(), + true) + ); } @Override Modified: trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/validator/BeanValidatorHandler.java =================================================================== --- trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/validator/BeanValidatorHandler.java 2010-09-09 09:33:37 UTC (rev 2082) +++ trunk/jaxx-compiler/src/main/java/jaxx/compiler/tags/validator/BeanValidatorHandler.java 2010-09-11 12:24:05 UTC (rev 2083) @@ -35,6 +35,7 @@ import jaxx.compiler.reflect.ClassDescriptorHelper; import jaxx.compiler.tags.DefaultObjectHandler; import jaxx.compiler.types.TypeManager; +import jaxx.runtime.JAXXValidator; import jaxx.runtime.validator.swing.SwingValidator; import jaxx.runtime.validator.swing.SwingValidatorUtil; import jaxx.runtime.validator.swing.ui.AbstractBeanValidatorUI; @@ -755,7 +756,7 @@ if (getBeanDescriptor(compiler) != null) { // add fieldrepresentation invocations - addFieldRepresentations(tag, compiler); +// addFieldRepresentations(tag, compiler); // register the validator in compiler registerValidator(compiler, this); @@ -782,6 +783,13 @@ ids.addAll(compiledBeanValidator.getFields().values()); } + /** + * + * @param tag + * @param compiler + * @deprecated since 2.2.1, prefer use the methdo {@link #addFieldRepresentations(JAXXCompiler, StringBuilder)} + */ + @Deprecated protected void addFieldRepresentations(Element tag, JAXXCompiler compiler) { for (Entry<String, String> entry : fields.entrySet()) { @@ -801,6 +809,35 @@ } } + /** + * Register in buffer all field representation to init (and to record in method {@link JAXXValidator#registerValidatorFields()} + * + * @param compiler the compiler used + * @param buffer the buffer where to add code + * @since 2.2.1 + */ + public void addFieldRepresentations(JAXXCompiler compiler, StringBuilder buffer) { + for (Entry<String, String> entry : fields.entrySet()) { + String propertyName = entry.getKey(); + String component = entry.getValue(); + if (!checkBeanProperty(compiler, propertyName)) { + // property not find on bean + continue; + } +// if (!compiler.checkReference(tag, component, true, null)) { +// // editor component not find on ui +// continue; +// } + String keyCode = TypeManager.getJavaCode(propertyName); + buffer.append(getJavaCode()); + buffer.append(".setFieldRepresentation("); + buffer.append(keyCode); + buffer.append(", "); + buffer.append(component); + buffer.append(");\n"); + } + } + protected void registerAutoFieldBean(Element tag, JAXXCompiler compiler, JAXXBeanInfo beanInfo) { Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/JAXXValidator.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/JAXXValidator.java 2010-09-09 09:33:37 UTC (rev 2082) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/JAXXValidator.java 2010-09-11 12:24:05 UTC (rev 2083) @@ -25,9 +25,12 @@ package jaxx.runtime; -import java.util.List; import jaxx.runtime.validator.BeanValidator; +import jaxx.runtime.validator.swing.SwingValidator; +import javax.swing.JComponent; +import java.util.List; + /** * The contract of a validator-able object. * @@ -46,4 +49,17 @@ /** @return the list of ids of all registred validator */ List<String> getValidatorIds(); + /** + * Init the fields representation. + * <p/> + * This method is generated and should be called each time the context name + * of a validator has changed, since when using method + * {@link SwingValidator#setFieldRepresentation(String, JComponent)} + * is invoked at init, if a field is not watched for the selected context, + * then after when changing context name, the field will not be notified of any changed... + * + * @since 2.2.1 + */ + void registerValidatorFields(); + } \ No newline at end of file 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-09-09 09:33:37 UTC (rev 2082) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2010-09-11 12:24:05 UTC (rev 2083) @@ -135,7 +135,7 @@ * permet de faire le lien en un champs du bean et l'objet qui permet de * l'editer */ - protected Map<String, JComponent> fieldRepresentation; + protected final Map<String, JComponent> fieldRepresentation; /** Object servant a contenir la liste des erreurs */ protected SwingValidatorMessageListModel errorListModel; @@ -205,12 +205,9 @@ public void setContextName(String contextName) { super.setContextName(contextName); + // must reinstall ui - if (fieldRepresentation != null) { - - // can not install uis while field are not still init... - installUIs(); - } + installUIs(); } /** @@ -228,9 +225,9 @@ "' is not defined in validator (no rules on it)"); return; } - if (log.isDebugEnabled()) { - log.debug("register field [" + fieldname + "] with component : " + - c.getName() + if (log.isInfoEnabled()) { + log.info("register field [" + fieldname + "] with component : " + + c.getName() ); } fieldRepresentation.put(fieldname, c); @@ -254,11 +251,11 @@ /** install ui on required components */ public void installUIs() { - if (fieldRepresentation == null) { - throw new NullPointerException( - "fieldRepresentation is null, must init before " + - "invoking installUIs method..."); - } +// if (fieldRepresentation == null) { +// throw new NullPointerException( +// "fieldRepresentation is null, must init before " + +// "invoking installUIs method..."); +// } SwingUtilities.invokeLater(new Runnable() { @Override
participants (1)
-
tchemit@users.nuiton.org