You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2011/06/02 22:05:10 UTC

svn commit: r1130772 - in /incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic: extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/ extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/ extval-shared/src/main/java/or...

Author: mbenson
Date: Thu Jun  2 20:05:10 2011
New Revision: 1130772

URL: http://svn.apache.org/viewvc?rev=1130772&view=rev
Log:
interpret dynamic NullValue constraints per requiredness

Added:
    incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java   (with props)
    incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/
    incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/
    incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java   (with props)
Modified:
    incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java

Added: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java?rev=1130772&view=auto
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java (added)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java Thu Jun  2 20:05:10 2011
@@ -0,0 +1,157 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.bval.jsr303.dynamic.extval;
+
+import static org.apache.bval.constraints.dynamic.NullValue.Rule.ALLOW;
+import static org.apache.bval.constraints.dynamic.NullValue.Rule.DENY;
+import static org.apache.bval.constraints.dynamic.NullValue.Rule.REQUIRE;
+
+import org.apache.bval.constraints.dynamic.NullValue;
+import org.apache.myfaces.extensions.validator.beanval.annotation.ModelValidation;
+import org.apache.myfaces.extensions.validator.core.DefaultExtValCoreConfiguration;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * 
+ * 
+ * @version $Rev$ $Date$
+ */
+public class NullValueValidationTestCase extends
+    BaseDynamicBeanValPropertyValidationTestCase<NullValueValidationTestCase.TestBean> {
+
+    @ModelValidation
+    public static class TestBean {
+        @NullValue(DENY)
+        String denyNull;
+        @NullValue(ALLOW)
+        String allowNull;
+        @NullValue(REQUIRE)
+        String requireNull;
+
+        public String getDenyNull() {
+            return denyNull;
+        }
+
+        public void setDenyNull(String denyNull) {
+            this.denyNull = denyNull;
+        }
+
+        public String getAllowNull() {
+            return allowNull;
+        }
+
+        public void setAllowNull(String allowNull) {
+            this.allowNull = allowNull;
+        }
+
+        public String getRequireNull() {
+            return requireNull;
+        }
+
+        public void setRequireNull(String requireNull) {
+            this.requireNull = requireNull;
+        }
+    }
+
+    @Override
+    protected void setUpTestCase() {
+        super.setUpTestCase();
+        DefaultExtValCoreConfiguration.overruleActivateRequiredInitialization(true, true);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected TestBean getBeanToTest() {
+        return new TestBean();
+    }
+
+    @Test
+    public void testDenyNullValidation() {
+        createValueBindingForComponent(inputComponent1, "#{testBean.denyNull}");
+        setValueToValidate(inputComponent1, "foo");
+        validateComponents();
+
+        assertComponentValid(this.inputComponent1);
+        assertNavigationBlocked(false);
+
+        checkMessageCount(0);
+
+        setValueToValidate(inputComponent1, "");
+        validateComponents();
+
+        assertComponentInvalid(this.inputComponent1);
+        assertNavigationBlocked(true);
+
+        checkMessageCount(1);
+    }
+
+    @Test
+    public void testAllowNullValidation() {
+        createValueBindingForComponent(inputComponent1, "#{testBean.allowNull}");
+        setValueToValidate(inputComponent1, "");
+        validateComponents();
+
+        assertComponentValid(this.inputComponent1);
+        assertNavigationBlocked(false);
+
+        checkMessageCount(0);
+
+        setValueToValidate(inputComponent1, "foo");
+        validateComponents();
+
+        assertComponentValid(this.inputComponent1);
+        assertNavigationBlocked(false);
+
+        checkMessageCount(0);
+    }
+
+    @Test
+    public void testRequireNullValidation() {
+        createValueBindingForComponent(inputComponent1, "#{testBean.requireNull}");
+        setValueToValidate(inputComponent1, "");
+        validateComponents();
+
+        assertComponentValid(this.inputComponent1);
+        assertNavigationBlocked(false);
+
+        checkMessageCount(0);
+        setValueToValidate(inputComponent1, "foo");
+        validateComponents();
+
+        assertComponentInvalid(this.inputComponent1);
+        assertNavigationBlocked(true);
+
+        checkMessageCount(1);
+    }
+
+    @Test
+    public void testInitialization() throws Exception {
+        // This will trigger Component initialization
+        createValueBindingForComponent(inputComponent1, "#{testBean.denyNull}");
+        createValueBindingForComponent(inputComponent2, "#{testBean.allowNull}");
+        createValueBindingForComponent(inputComponent3, "#{testBean.requireNull}");
+        inputComponent1.encodeAll(facesContext);
+        inputComponent2.encodeAll(facesContext);
+        inputComponent3.encodeAll(facesContext);
+        Assert.assertTrue(inputComponent1.isRequired());
+        Assert.assertFalse(inputComponent2.isRequired());
+        Assert.assertFalse(inputComponent3.isRequired());
+    }
+}

Propchange: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared-tests/src/main/java/org/apache/bval/jsr303/dynamic/extval/NullValueValidationTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java?rev=1130772&r1=1130771&r2=1130772&view=diff
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java (original)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/DynamicBeanValidationStartupListener.java Thu Jun  2 20:05:10 2011
@@ -18,12 +18,14 @@ package org.apache.bval.jsr303.dynamic.e
 
 import javax.validation.ValidatorFactory;
 
+import org.apache.bval.jsr303.dynamic.extval.metadata.transformer.NullValueMetaDataTransformer;
 import org.apache.myfaces.extensions.validator.beanval.BeanValidationModuleValidationInterceptor;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
 import org.apache.myfaces.extensions.validator.core.el.AbstractELHelperFactory;
 import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
 import org.apache.myfaces.extensions.validator.core.interceptor.RendererInterceptor;
 import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 import org.apache.myfaces.extensions.validator.util.JsfUtils;
 
 /**
@@ -51,6 +53,10 @@ public class DynamicBeanValidationStartu
 
         swap(extValContext, BeanValidationModuleValidationInterceptor.class,
             new DynamicBeanValidationModuleValidationInterceptor());
+
+        // handle NullValue constraints:
+        ExtValUtils
+            .registerValidationStrategyToMetaDataTransformerNameMapper(new NullValueMetaDataTransformer.NameMapper());
     }
 
     private <R extends RendererInterceptor, S extends R> void swap(ExtValContext extValContext,

Added: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java?rev=1130772&view=auto
==============================================================================
--- incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java (added)
+++ incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java Thu Jun  2 20:05:10 2011
@@ -0,0 +1,64 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.bval.jsr303.dynamic.extval.metadata.transformer;
+
+import java.util.Collections;
+import java.util.Map;
+
+import javax.validation.metadata.ConstraintDescriptor;
+
+import org.apache.bval.constraints.dynamic.NullValue;
+import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.AbstractBeanValidationMetaDataTransformer;
+import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper.AbstractBeanValidationVirtualValidationStrategyToMetaDataTransformerNameMapper;
+import org.apache.myfaces.extensions.validator.beanval.validation.strategy.BeanValidationVirtualValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
+import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+
+/**
+ * {@code NullValue} {@code MetaDataTransformer}.
+ * 
+ * @version $Rev$ $Date$
+ */
+public class NullValueMetaDataTransformer extends AbstractBeanValidationMetaDataTransformer<NullValue> {
+    /**
+     * {@code NullValue} {@code MetaDataTransformer} {@code NameMapper}.
+     */
+    public static class NameMapper extends
+        AbstractBeanValidationVirtualValidationStrategyToMetaDataTransformerNameMapper {
+
+        /**
+         * {@inheritDoc}
+         */
+        @Override
+        protected String createBeanValidationTransformerName(BeanValidationVirtualValidationStrategy validationStrategy) {
+            return validationStrategy.getConstraintDescriptor().getAnnotation().annotationType().getName()
+                .equals(NullValue.class.getName()) ? NullValueMetaDataTransformer.class.getName() : null;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected Map<String, Object> transformMetaData(ConstraintDescriptor<NullValue> constraintDescriptor) {
+        if (constraintDescriptor.getAnnotation().value() == NullValue.Rule.DENY
+            && ExtValUtils.interpretEmptyStringValuesAsNull()) {
+            return Collections.<String, Object> singletonMap(CommonMetaDataKeys.WEAK_REQUIRED, Boolean.TRUE);
+        }
+        return Collections.emptyMap();
+    }
+}

Propchange: incubator/bval/sandbox/lang3-work/bval-jsr303-dynamic/extval-shared/src/main/java/org/apache/bval/jsr303/dynamic/extval/metadata/transformer/NullValueMetaDataTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native