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