Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForNumber.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,52 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.Min; +import java.math.BigDecimal; +import java.math.BigInteger; + +/** + * Description: validate that number-value of passed object is >= min-value<br/> + */ +public class MinValidatorForNumber implements ConstraintValidator<Min, Number> { + + private long minValue; + + @Override + public void initialize(Min annotation) { + this.minValue = annotation.value(); + } + + @Override + public boolean isValid(Number value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + if (value instanceof BigDecimal) { + return ((BigDecimal) value).compareTo(BigDecimal.valueOf(minValue)) >= 0; + } + if (value instanceof BigInteger) { + return ((BigInteger) value).compareTo(BigInteger.valueOf(minValue)) >= 0; + } + return value.longValue() >= minValue; + } +}
Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/MinValidatorForString.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,50 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.Min; +import java.math.BigDecimal; + +/** + * Check that the String being validated represents a number, and has a value + * more than or equal to the minimum value specified. + */ +public class MinValidatorForString implements ConstraintValidator<Min, String> { + + private long minValue; + + @Override + public void initialize(Min annotation) { + this.minValue = annotation.value(); + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + try { + return new BigDecimal(value).compareTo(BigDecimal.valueOf(minValue)) >= 0; + } catch (NumberFormatException nfe) { + return false; + } + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotBlankValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,34 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.NotBlank; + +/** + * Validate {@link NotBlank} for {@link CharSequence}. + */ +public class NotBlankValidator implements ConstraintValidator<NotBlank, CharSequence> { + + @Override + public boolean isValid(CharSequence value, ConstraintValidatorContext context) { + return value != null && value.length() > 0 && !value.chars().allMatch(Character::isWhitespace); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmpty.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,60 @@ +/* + * 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.constraints; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE_USE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.OverridesAttribute; +import javax.validation.Payload; + +/** + * <pre> + * This class is NOT part of the bean_validation spec and might disappear + * as soon as a final version of the specification contains a similar functionality. + * </pre> + */ +@Documented +@Constraint(validatedBy = {}) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE }) +@Retention(RUNTIME) +@javax.validation.constraints.NotEmpty +@Deprecated +public @interface NotEmpty { + Class<?>[] groups() default {}; + + @OverridesAttribute(constraint = javax.validation.constraints.NotEmpty.class, name = "message") + String message() default "{org.apache.bval.constraints.NotEmpty.message}"; + + Class<? extends Payload>[] payload() default {}; + + public @interface List { + NotEmpty[] value(); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,52 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.lang.reflect.Array; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * Description: Check the non emptiness of an + * any object that has a public isEmpty():boolean or a valid toString() method + */ +public class NotEmptyValidator implements ConstraintValidator<javax.validation.constraints.NotEmpty, Object> { + + @Override + public boolean isValid(Object value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + if (value.getClass().isArray()) { + return Array.getLength(value) > 0; + } + try { + final Method isEmptyMethod = value.getClass().getMethod("isEmpty"); + if (isEmptyMethod != null) { + return !Boolean.TRUE.equals(isEmptyMethod.invoke(value)); + } + } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException iae) { + // do nothing + } + final String s = value.toString(); + return s != null && !s.isEmpty(); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCharSequence.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,34 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +/** + * Description: <br/> + */ +public class NotEmptyValidatorForCharSequence + implements ConstraintValidator<javax.validation.constraints.NotEmpty, CharSequence> { + + @Override + public boolean isValid(CharSequence value, ConstraintValidatorContext context) { + return value == null || value.length() > 0; + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForCollection.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,35 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.Collection; + +/** + * Description: <br/> + */ +public class NotEmptyValidatorForCollection + implements ConstraintValidator<javax.validation.constraints.NotEmpty, Collection<?>> { + + @Override + public boolean isValid(Collection<?> value, ConstraintValidatorContext context) { + return value == null || !value.isEmpty(); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotEmptyValidatorForMap.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,34 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.Map; + +/** + * Description: <br/> + */ +public class NotEmptyValidatorForMap implements ConstraintValidator<javax.validation.constraints.NotEmpty, Map<?, ?>> { + + @Override + public boolean isValid(Map<?, ?> value, ConstraintValidatorContext context) { + return value == null || !value.isEmpty(); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NotNullValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,32 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.NotNull; + +/** valid when object is NOT null */ +public class NotNullValidator implements ConstraintValidator<NotNull, Object> { + + @Override + public boolean isValid(Object value, ConstraintValidatorContext context) { + return value != null; + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NullValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,34 @@ +/* + * 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.constraints; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.Null; + +/** + * Description: valid when object is null<br/> + */ +public class NullValidator implements ConstraintValidator<Null, Object> { + + @Override + public boolean isValid(Object object, ConstraintValidatorContext context) { + return object == null; + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/NumberSignValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,79 @@ +/* + * 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.constraints; + +import java.lang.annotation.Annotation; +import java.util.function.IntPredicate; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.constraints.Negative; +import javax.validation.constraints.NegativeOrZero; +import javax.validation.constraints.Positive; +import javax.validation.constraints.PositiveOrZero; + +import org.apache.bval.util.Validate; + +/** + * Description: validate positive/negative number values. + */ +public abstract class NumberSignValidator<A extends Annotation> implements ConstraintValidator<A, Number> { + public static class ForPositive extends NumberSignValidator<Positive> { + public static class OrZero extends NumberSignValidator<PositiveOrZero> { + public OrZero() { + super(n -> n >= 0); + } + } + + public ForPositive() { + super(n -> n > 0); + } + } + + public static class ForNegative extends NumberSignValidator<Negative> { + public static class OrZero extends NumberSignValidator<NegativeOrZero> { + public OrZero() { + super(n -> n <= 0); + } + } + + public ForNegative() { + super(n -> n < 0); + } + } + + private final IntPredicate comparisonTest; + + protected NumberSignValidator(IntPredicate comparisonTest) { + super(); + this.comparisonTest = Validate.notNull(comparisonTest); + } + + @Override + public boolean isValid(Number value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + final double d = value.doubleValue(); + if (Double.isNaN(d)) { + return false; + } + return comparisonTest.test(Double.compare(d, 0.0)); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastOrPresentValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,146 @@ +/* + * 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.constraints; + +import java.time.Clock; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.MonthDay; +import java.time.OffsetDateTime; +import java.time.OffsetTime; +import java.time.Year; +import java.time.YearMonth; +import java.time.ZonedDateTime; +import java.time.chrono.ChronoLocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.time.chrono.ChronoZonedDateTime; +import java.util.Calendar; +import java.util.Comparator; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.function.Function; +import java.util.function.IntPredicate; + +import javax.validation.ConstraintValidator; +import javax.validation.constraints.PastOrPresent; + +/** + * Defines built-in {@link ConstraintValidator} implementations for {@link PastOrPresent}. + * + * @param <T> + * validated type + */ +public abstract class PastOrPresentValidator<T extends Comparable<T>> extends TimeValidator<PastOrPresent, T> { + + public static class ForDate extends PastOrPresentValidator<Date> { + + public ForDate() { + super(clock -> Date.from(clock.instant())); + } + } + + public static class ForCalendar extends PastOrPresentValidator<Calendar> { + + public ForCalendar() { + super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone()))); + } + } + + public static class ForInstant extends PastOrPresentValidator<Instant> { + + public ForInstant() { + super(Instant::now); + } + } + + public static class ForChronoLocalDate extends PastOrPresentValidator<ChronoLocalDate> { + + public ForChronoLocalDate() { + super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR); + } + } + + public static class ForChronoLocalDateTime extends PastOrPresentValidator<ChronoLocalDateTime<?>> { + + public ForChronoLocalDateTime() { + super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR); + } + } + + public static class ForLocalTime extends PastOrPresentValidator<LocalTime> { + + public ForLocalTime() { + super(LocalTime::now); + } + } + + public static class ForOffsetDateTime extends PastOrPresentValidator<OffsetDateTime> { + + public ForOffsetDateTime() { + super(OffsetDateTime::now); + } + } + + public static class ForOffsetTime extends PastOrPresentValidator<OffsetTime> { + + public ForOffsetTime() { + super(OffsetTime::now); + } + } + + public static class ForChronoZonedDateTime extends PastOrPresentValidator<ChronoZonedDateTime<?>> { + + public ForChronoZonedDateTime() { + super(ZonedDateTime::now, CHRONO_ZONED_DATE_TIME_COMPARATOR); + } + } + + public static class ForMonthDay extends PastOrPresentValidator<MonthDay> { + + public ForMonthDay() { + super(MonthDay::now); + } + } + + public static class ForYear extends PastOrPresentValidator<Year> { + + public ForYear() { + super(Year::now); + } + } + + public static class ForYearMonth extends PastOrPresentValidator<YearMonth> { + + public ForYearMonth() { + super(YearMonth::now); + } + } + + private static final IntPredicate TEST = n -> n <= 0; + + protected PastOrPresentValidator(Function<Clock, T> now) { + super(now, TEST); + } + + protected PastOrPresentValidator(Function<Clock, T> now, Comparator<? super T> cmp) { + super(now, cmp, TEST); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PastValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,146 @@ +/* + * 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.constraints; + +import java.time.Clock; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.MonthDay; +import java.time.OffsetDateTime; +import java.time.OffsetTime; +import java.time.Year; +import java.time.YearMonth; +import java.time.ZonedDateTime; +import java.time.chrono.ChronoLocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.time.chrono.ChronoZonedDateTime; +import java.util.Calendar; +import java.util.Comparator; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.function.Function; +import java.util.function.IntPredicate; + +import javax.validation.ConstraintValidator; +import javax.validation.constraints.Past; + +/** + * Defines built-in {@link ConstraintValidator} implementations for {@link Past}. + * + * @param <T> + * validated type + */ +public abstract class PastValidator<T extends Comparable<T>> extends TimeValidator<Past, T> { + + public static class ForDate extends PastValidator<Date> { + + public ForDate() { + super(clock -> Date.from(clock.instant())); + } + } + + public static class ForCalendar extends PastValidator<Calendar> { + + public ForCalendar() { + super(clock -> GregorianCalendar.from(clock.instant().atZone(clock.getZone()))); + } + } + + public static class ForInstant extends PastValidator<Instant> { + + public ForInstant() { + super(Instant::now); + } + } + + public static class ForChronoLocalDate extends PastValidator<ChronoLocalDate> { + + public ForChronoLocalDate() { + super(LocalDate::now, CHRONO_LOCAL_DATE_COMPARATOR); + } + } + + public static class ForChronoLocalDateTime extends PastValidator<ChronoLocalDateTime<?>> { + + public ForChronoLocalDateTime() { + super(LocalDateTime::now, CHRONO_LOCAL_DATE_TIME_COMPARATOR); + } + } + + public static class ForLocalTime extends PastValidator<LocalTime> { + + public ForLocalTime() { + super(LocalTime::now); + } + } + + public static class ForOffsetDateTime extends PastValidator<OffsetDateTime> { + + public ForOffsetDateTime() { + super(OffsetDateTime::now); + } + } + + public static class ForOffsetTime extends PastValidator<OffsetTime> { + + public ForOffsetTime() { + super(OffsetTime::now); + } + } + + public static class ForChronoZonedDateTime extends PastValidator<ChronoZonedDateTime<?>> { + + public ForChronoZonedDateTime() { + super(ZonedDateTime::now, PastValidator.CHRONO_ZONED_DATE_TIME_COMPARATOR); + } + } + + public static class ForMonthDay extends PastValidator<MonthDay> { + + public ForMonthDay() { + super(MonthDay::now); + } + } + + public static class ForYear extends PastValidator<Year> { + + public ForYear() { + super(Year::now); + } + } + + public static class ForYearMonth extends PastValidator<YearMonth> { + + public ForYearMonth() { + super(YearMonth::now); + } + } + + private static final IntPredicate TEST = n -> n < 0; + + protected PastValidator(Function<Clock, T> now) { + super(now, TEST); + } + + protected PastValidator(Function<Clock, T> now, Comparator<? super T> cmp) { + super(now, cmp, TEST); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,42 @@ +/* + * 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.constraints; + +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Pattern.Flag; + +/** + * validator using a regular expression, based on the jsr Pattern constraint annotation. + */ +public class PatternValidator extends AbstractPatternValidator<Pattern, CharSequence> { + public PatternValidator() { + super(p -> new PatternDescriptor() { + + @Override + public String regexp() { + return p.regexp(); + } + + @Override + public Flag[] flags() { + return p.flags(); + } + }); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/SizeValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/SizeValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/SizeValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/SizeValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,125 @@ +/* + * 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.constraints; + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Map; +import java.util.function.ToIntFunction; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.ValidationException; +import javax.validation.constraints.Size; + +/** + * Description: Abstract validator impl. for @Size annotation. + */ +public abstract class SizeValidator<T> implements ConstraintValidator<Size, T> { + public static class ForArray<T> extends SizeValidator<T> { + public static class OfObject extends ForArray<Object[]> { + } + + public static class OfByte extends ForArray<byte[]> { + } + + public static class OfShort extends ForArray<short[]> { + } + + public static class OfInt extends ForArray<int[]> { + } + + public static class OfLong extends ForArray<long[]> { + } + + public static class OfChar extends ForArray<char[]> { + } + + public static class OfFloat extends ForArray<float[]> { + } + + public static class OfDouble extends ForArray<double[]> { + } + + public static class OfBoolean extends ForArray<boolean[]> { + } + + protected ForArray() { + super(Array::getLength); + } + } + + public static class ForCharSequence extends SizeValidator<CharSequence> { + public ForCharSequence() { + super(CharSequence::length); + } + } + + public static class ForCollection extends SizeValidator<Collection<?>> { + + public ForCollection() { + super(Collection::size); + } + } + + public static class ForMap extends SizeValidator<Map<?, ?>> { + public ForMap() { + super(Map::size); + } + } + + private final ToIntFunction<? super T> sizeOf; + + protected int min; + protected int max; + + protected SizeValidator(ToIntFunction<? super T> sizeOf) { + super(); + this.sizeOf = sizeOf; + } + + /** + * Configure the constraint validator based on the elements specified at the time it was defined. + * + * @param constraint + * the constraint definition + */ + public void initialize(Size constraint) { + min = constraint.min(); + max = constraint.max(); + if (min < 0) { + throw new ValidationException("Min cannot be negative"); + } + if (max < 0) { + throw new ValidationException("Max cannot be negative"); + } + if (max < min) { + throw new ValidationException("Max cannot be less than Min"); + } + } + + @Override + public boolean isValid(T value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + final int size = sizeOf.applyAsInt(value); + return min <= size && size <= max; + } +} \ No newline at end of file Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/constraints/TimeValidator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,63 @@ +/* + * 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.constraints; + +import java.lang.annotation.Annotation; +import java.time.Clock; +import java.time.chrono.ChronoLocalDate; +import java.time.chrono.ChronoLocalDateTime; +import java.time.chrono.ChronoZonedDateTime; +import java.util.Comparator; +import java.util.function.Function; +import java.util.function.IntPredicate; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +public abstract class TimeValidator<A extends Annotation, T> implements ConstraintValidator<A, T> { + protected static final Comparator<ChronoLocalDate> CHRONO_LOCAL_DATE_COMPARATOR = + Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0); + + protected static final Comparator<ChronoLocalDateTime<?>> CHRONO_LOCAL_DATE_TIME_COMPARATOR = + Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0); + + protected static final Comparator<ChronoZonedDateTime<?>> CHRONO_ZONED_DATE_TIME_COMPARATOR = + Comparator.nullsFirst((quid, quo) -> quid.isBefore(quo) ? -1 : quid.isAfter(quo) ? 1 : 0); + + private final Function<Clock, T> now; + private final Comparator<? super T> cmp; + private final IntPredicate test; + + @SuppressWarnings("unchecked") + protected TimeValidator(Function<Clock, T> now, IntPredicate test) { + this(now, (Comparator<T>) Comparator.naturalOrder(), test); + } + + protected TimeValidator(Function<Clock, T> now, Comparator<? super T> cmp,IntPredicate test) { + super(); + this.now = now; + this.cmp = cmp; + this.test = test; + } + + @Override + public final boolean isValid(T value, ConstraintValidatorContext context) { + return value == null || test.test(cmp.compare(value, now.apply(context.getClockProvider().getClock()))); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/ELFacade.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,137 @@ +/* + * 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.el; + +import javax.el.ArrayELResolver; +import javax.el.BeanELResolver; +import javax.el.CompositeELResolver; +import javax.el.ELContext; +import javax.el.ELResolver; +import javax.el.ExpressionFactory; +import javax.el.FunctionMapper; +import javax.el.ListELResolver; +import javax.el.MapELResolver; +import javax.el.ResourceBundleELResolver; +import javax.el.ValueExpression; +import javax.el.VariableMapper; +import java.lang.reflect.Method; +import java.util.Formatter; +import java.util.HashMap; +import java.util.Map; + +// ELProcessor or JavaEE 7 would be perfect too but this impl can be used in javaee 6 +public final class ELFacade implements MessageEvaluator { + private static final ExpressionFactory EXPRESSION_FACTORY; + static { + ExpressionFactory ef; + try { + ef = ExpressionFactory.newInstance(); + } catch (final Exception e) { + ef = null; + } + EXPRESSION_FACTORY = ef; + } + private static final ELResolver RESOLVER = initResolver(); + + @Override + public String interpolate(final String message, final Map<String, Object> annotationParameters, + final Object validatedValue) { + try { + if (EXPRESSION_FACTORY != null) { + final BValELContext context = new BValELContext(); + final VariableMapper variables = context.getVariableMapper(); + annotationParameters.forEach( + (k, v) -> variables.setVariable(k, EXPRESSION_FACTORY.createValueExpression(v, Object.class))); + + variables.setVariable("validatedValue", + EXPRESSION_FACTORY.createValueExpression(validatedValue, Object.class)); + + // #{xxx} shouldn't be evaluated + return EXPRESSION_FACTORY.createValueExpression(context, message.replace("#{", "\\#{"), String.class) + .getValue(context).toString(); + } + } catch (final Exception e) { + // no-op + } + + return message; + } + + private static ELResolver initResolver() { + final CompositeELResolver resolver = new CompositeELResolver(); + resolver.add(new MapELResolver()); + resolver.add(new ListELResolver()); + resolver.add(new ArrayELResolver()); + resolver.add(new ResourceBundleELResolver()); + resolver.add(new BeanELResolver()); + return resolver; + } + + private static class BValELContext extends ELContext { + private final FunctionMapper functions = new BValFunctionMapper(); + private final VariableMapper variables = new BValVariableMapper(); + + @Override + public ELResolver getELResolver() { + return RESOLVER; + } + + @Override + public FunctionMapper getFunctionMapper() { + return functions; + } + + @Override + public VariableMapper getVariableMapper() { + return variables; + } + } + + private static class BValFunctionMapper extends FunctionMapper { + @Override + public Method resolveFunction(final String prefix, final String localName) { + return null; + } + } + + private static class BValVariableMapper extends VariableMapper { + private final Map<String, ValueExpression> variables = new HashMap<String, ValueExpression>(); + + @Override + public ValueExpression resolveVariable(final String variable) { + if ("formatter".equals(variable)) { + return EXPRESSION_FACTORY.createValueExpression(new BValFormatter(), Object.class); + } + return variables.get(variable); + } + + @Override + public ValueExpression setVariable(final String variable, final ValueExpression expression) { + variables.put(variable, expression); + return expression; + } + } + + // used to not expose all method and avoid ambiguity with format(Local, String, Object...) in EL + public static class BValFormatter { + private final Formatter formatter = new Formatter(); + + public Formatter format(final String format, final Object... args) { + return formatter.format(format, args); + } + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/MessageEvaluator.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/MessageEvaluator.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/MessageEvaluator.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/el/MessageEvaluator.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,25 @@ +/* + * 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.el; + +import java.util.Map; + +// just here to ensure we can use Expression Language if at classpath +// but not fail if not here (as before) +public interface MessageEvaluator { + String interpolate(String message, Map<String, Object> annotationParameters, Object validatedValue); +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,184 @@ +/* + * 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.jsr; + +import javax.validation.ClockProvider; +import javax.validation.ConstraintValidatorFactory; +import javax.validation.MessageInterpolator; +import javax.validation.ParameterNameProvider; +import javax.validation.TraversableResolver; +import javax.validation.Validator; +import javax.validation.ValidatorContext; +import javax.validation.valueextraction.ValueExtractor; + +import org.apache.bval.jsr.descriptor.DescriptorManager; +import org.apache.bval.jsr.groups.GroupsComputer; +import org.apache.bval.jsr.valueextraction.ValueExtractors; +import org.apache.bval.util.reflection.Reflection; +import org.apache.commons.weaver.privilizer.Privilizing; +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; + +/** + * Description: Represents the context that is used to create {@link ClassValidator} instances. + */ +@Privilizing(@CallTo(Reflection.class)) +public class ApacheFactoryContext implements ValidatorContext { + private final ApacheValidatorFactory factory; + private final ValueExtractors valueExtractors; + + private MessageInterpolator messageInterpolator; + private TraversableResolver traversableResolver; + private ParameterNameProvider parameterNameProvider; + private ConstraintValidatorFactory constraintValidatorFactory; + private ClockProvider clockProvider; + + /** + * Create a new ApacheFactoryContext instance. + * + * @param factory + * validator factory + * @param metaBeanFinder + * meta finder + */ + public ApacheFactoryContext(ApacheValidatorFactory factory) { + this.factory = factory; + valueExtractors = factory.getValueExtractors().createChild(); + } + + /** + * Discard cached metadata. Calling this method unnecessarily has the effect of severly limiting performance, + * therefore only do so when changes have been made that affect validation metadata, i.e. particularly NOT in + * response to: + * <ul> + * <li>{@link #messageInterpolator(MessageInterpolator)}</li> + * <li>{@link #traversableResolver(TraversableResolver)}</li> + * <li>{@link #constraintValidatorFactory(ConstraintValidatorFactory)</li> + * </ul> + */ + private synchronized void resetMeta() { + getDescriptorManager().clear(); + } + + /** + * {@inheritDoc} + */ + @Override + public ApacheFactoryContext messageInterpolator(MessageInterpolator messageInterpolator) { + this.messageInterpolator = messageInterpolator; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ApacheFactoryContext traversableResolver(TraversableResolver traversableResolver) { + this.traversableResolver = traversableResolver; + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ApacheFactoryContext constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) { + this.constraintValidatorFactory = constraintValidatorFactory; + return this; + } + + @Override + public ApacheFactoryContext parameterNameProvider(ParameterNameProvider parameterNameProvider) { + this.parameterNameProvider = parameterNameProvider; + resetMeta(); // needed since parameter names are a component of validation metadata + return this; + } + + @Override + public ApacheFactoryContext clockProvider(ClockProvider clockProvider) { + this.clockProvider = clockProvider; + return this; + } + + @Override + public ApacheFactoryContext addValueExtractor(ValueExtractor<?> extractor) { + valueExtractors.add(extractor); + return this; + } + + /** + * Get the {@link ConstraintValidatorFactory}. + * + * @return {@link ConstraintValidatorFactory} + */ + public ConstraintValidatorFactory getConstraintValidatorFactory() { + return constraintValidatorFactory == null ? factory.getConstraintValidatorFactory() + : constraintValidatorFactory; + } + + /** + * {@inheritDoc} + */ + @Override + public Validator getValidator() { + return new ValidatorImpl(this); + } + + /** + * Get the {@link MessageInterpolator}. + * + * @return {@link MessageInterpolator} + */ + public MessageInterpolator getMessageInterpolator() { + return messageInterpolator == null ? factory.getMessageInterpolator() : messageInterpolator; + } + + /** + * Get the {@link TraversableResolver}. + * + * @return {@link TraversableResolver} + */ + public TraversableResolver getTraversableResolver() { + return traversableResolver == null ? factory.getTraversableResolver() : traversableResolver; + } + + public ParameterNameProvider getParameterNameProvider() { + return parameterNameProvider == null ? factory.getParameterNameProvider() : parameterNameProvider; + } + + public ClockProvider getClockProvider() { + return clockProvider == null ? factory.getClockProvider() : clockProvider; + } + + public ValueExtractors getValueExtractors() { + return valueExtractors; + } + + public DescriptorManager getDescriptorManager() { + // TODO implementation-specific feature to handle context-local descriptor customizations + return factory.getDescriptorManager(); + } + + public GroupsComputer getGroupsComputer() { + return factory.getGroupsComputer(); + } + + public ConstraintCached getConstraintsCache() { + return factory.getConstraintsCache(); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,105 @@ +/* + * 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.jsr; + +import javax.validation.Configuration; +import javax.validation.ValidationException; +import javax.validation.ValidatorFactory; +import javax.validation.spi.BootstrapState; +import javax.validation.spi.ConfigurationState; +import javax.validation.spi.ValidationProvider; + +import org.apache.bval.util.Exceptions; +import org.apache.bval.util.reflection.Reflection; + +/** + * Description: Implementation of {@link ValidationProvider} for jsr + * implementation of the apache-validation framework. + * <p/> + * <br/> + * User: roman.stumm <br/> + * Date: 29.10.2008 <br/> + * Time: 14:45:41 <br/> + */ +public class ApacheValidationProvider implements ValidationProvider<ApacheValidatorConfiguration> { + + /** + * Learn whether a particular builder class is suitable for this + * {@link ValidationProvider}. + * + * @param builderClass + * @return boolean suitability + */ + public boolean isSuitable(Class<? extends Configuration<?>> builderClass) { + return ApacheValidatorConfiguration.class.equals(builderClass); + } + + /** + * {@inheritDoc} + */ + @Override + public ApacheValidatorConfiguration createSpecializedConfiguration(BootstrapState state) { + return new ConfigurationImpl(state, this); + } + + /** + * {@inheritDoc} + */ + @Override + public Configuration<?> createGenericConfiguration(BootstrapState state) { + return new ConfigurationImpl(state, null); + } + + /** + * {@inheritDoc} + * + * @throws javax.validation.ValidationException + * if the ValidatorFactory cannot be built + */ + @Override + public ValidatorFactory buildValidatorFactory(final ConfigurationState configuration) { + final Class<? extends ValidatorFactory> validatorFactoryClass; + try { + final String validatorFactoryClassname = + configuration.getProperties().get(ApacheValidatorConfiguration.Properties.VALIDATOR_FACTORY_CLASSNAME); + + if (validatorFactoryClassname == null) { + validatorFactoryClass = ApacheValidatorFactory.class; + } else { + validatorFactoryClass = + Reflection.toClass(validatorFactoryClassname).asSubclass(ValidatorFactory.class); + } + } catch (ValidationException ex) { + throw ex; + } catch (Exception ex) { + throw new ValidationException("error building ValidatorFactory", ex); + } + + try { + return validatorFactoryClass.getConstructor(ConfigurationState.class).newInstance(configuration); + } catch (Exception e) { + final Throwable t = Exceptions.causeOf(e); + if (t instanceof ValidationException) { + throw (ValidationException) t; + } + throw Exceptions.create(ValidationException::new, t, "Cannot instantiate %s", + validatorFactoryClass.getName()); + } + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,53 @@ +/* + * 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.jsr; + +import javax.validation.Configuration; +import javax.validation.ValidatorFactory; +import javax.validation.spi.ConfigurationState; + +/** + * Description: Uniquely identify Apache BVal in the Bean Validation bootstrap + * strategy. Also contains Apache BVal specific configurations<br/> + */ +public interface ApacheValidatorConfiguration extends Configuration<ApacheValidatorConfiguration> { + + /** + * Proprietary property keys for {@link ConfigurationImpl} + */ + interface Properties { + /** + * the location where to look for the validation.xml file. + * default: "META-INF/validation.xml" + */ + String VALIDATION_XML_PATH = "apache.bval.validation-xml-path"; + + /** + * Specifies the classname of the {@link ValidatorFactory} to use: this + * class is presumed have a constructor that accepts a single + * {@link ConfigurationState} argument. + */ + String VALIDATOR_FACTORY_CLASSNAME = "apache.bval.validator-factory-classname"; + + /** + * Size to use for caching of constraint-related information. Default is {@code 50}. + */ + String CONSTRAINTS_CACHE_SIZE = "apache.bval.constraints-cache-size"; + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,373 @@ +/* + * 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.jsr; + +import java.io.Closeable; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import javax.validation.ClockProvider; +import javax.validation.ConstraintValidatorFactory; +import javax.validation.MessageInterpolator; +import javax.validation.ParameterNameProvider; +import javax.validation.TraversableResolver; +import javax.validation.Validation; +import javax.validation.ValidationException; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import javax.validation.spi.ConfigurationState; +import javax.validation.valueextraction.ValueExtractor; + +import org.apache.bval.jsr.descriptor.DescriptorManager; +import org.apache.bval.jsr.groups.GroupsComputer; +import org.apache.bval.jsr.metadata.MetadataBuilder; +import org.apache.bval.jsr.metadata.MetadataBuilder.ForBean; +import org.apache.bval.jsr.metadata.MetadataBuilders; +import org.apache.bval.jsr.metadata.MetadataSource; +import org.apache.bval.jsr.util.AnnotationsManager; +import org.apache.bval.jsr.valueextraction.ValueExtractors; +import org.apache.bval.jsr.valueextraction.ValueExtractors.OnDuplicateContainerElementKey; +import org.apache.bval.util.CloseableAble; +import org.apache.bval.util.reflection.Reflection; +import org.apache.commons.weaver.privilizer.Privilizing; +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; + +/** + * Description: a factory is a complete configurated object that can create + * validators.<br/> + * This instance is not thread-safe.<br/> + */ +@Privilizing(@CallTo(Reflection.class)) +public class ApacheValidatorFactory implements ValidatorFactory, Cloneable { + + private static volatile ApacheValidatorFactory DEFAULT_FACTORY; + + /** + * Convenience method to retrieve a default global ApacheValidatorFactory + * + * @return {@link ApacheValidatorFactory} + */ + public static ApacheValidatorFactory getDefault() { + if (DEFAULT_FACTORY == null) { + synchronized (ApacheValidatorFactory.class) { + if (DEFAULT_FACTORY == null) { + DEFAULT_FACTORY = Validation.byProvider(ApacheValidationProvider.class).configure() + .buildValidatorFactory().unwrap(ApacheValidatorFactory.class); + } + } + } + return DEFAULT_FACTORY; + } + + /** + * Set a particular {@link ApacheValidatorFactory} instance as the default. + * + * @param aDefaultFactory + */ + public static void setDefault(ApacheValidatorFactory aDefaultFactory) { + DEFAULT_FACTORY = aDefaultFactory; + } + + private static ValueExtractors createBaseValueExtractors(ParticipantFactory participantFactory) { + final ValueExtractors result = new ValueExtractors(OnDuplicateContainerElementKey.OVERWRITE); + participantFactory.loadServices(ValueExtractor.class).forEach(result::add); + return result; + } + + private final Map<String, String> properties; + private final AnnotationsManager annotationsManager; + private final DescriptorManager descriptorManager = new DescriptorManager(this); + private final MetadataBuilders metadataBuilders = new MetadataBuilders(); + private final ConstraintCached constraintsCache = new ConstraintCached(); + private final Collection<Closeable> toClose = new ArrayList<>(); + private final GroupsComputer groupsComputer = new GroupsComputer(); + private final ParticipantFactory participantFactory; + private final ValueExtractors valueExtractors; + + private MessageInterpolator messageResolver; + private TraversableResolver traversableResolver; + private ConstraintValidatorFactory constraintValidatorFactory; + private ParameterNameProvider parameterNameProvider; + private ClockProvider clockProvider; + + /** + * Create a new ApacheValidatorFactory instance. + */ + public ApacheValidatorFactory(ConfigurationState configuration) { + properties = new HashMap<>(configuration.getProperties()); + parameterNameProvider = configuration.getParameterNameProvider(); + messageResolver = configuration.getMessageInterpolator(); + traversableResolver = configuration.getTraversableResolver(); + constraintValidatorFactory = configuration.getConstraintValidatorFactory(); + clockProvider = configuration.getClockProvider(); + + if (configuration instanceof CloseableAble) { + toClose.add(((CloseableAble) configuration).getCloseable()); + } + participantFactory = new ParticipantFactory(Thread.currentThread().getContextClassLoader(), + ApacheValidatorFactory.class.getClassLoader()); + + toClose.add(participantFactory); + + valueExtractors = createBaseValueExtractors(participantFactory).createChild(); + configuration.getValueExtractors().forEach(valueExtractors::add); + + annotationsManager = new AnnotationsManager(this); + loadAndVerifyUserCustomizations(configuration); + } + + /** + * Get the property map of this {@link ApacheValidatorFactory}. + * + * @return Map<String, String> + */ + public Map<String, String> getProperties() { + return properties; + } + + /** + * Shortcut method to create a new Validator instance with factory's settings + * + * @return the new validator instance + */ + @Override + public Validator getValidator() { + return usingContext().getValidator(); + } + + /** + * {@inheritDoc} + * + * @return the validator factory's context + */ + @Override + public ApacheFactoryContext usingContext() { + return new ApacheFactoryContext(this); + } + + /** + * {@inheritDoc} + */ + @Override + public synchronized ApacheValidatorFactory clone() { + try { + return (ApacheValidatorFactory) super.clone(); + } catch (CloneNotSupportedException e) { + throw new InternalError(); // VM bug. + } + } + + /** + * Set the {@link MessageInterpolator} used. + * + * @param messageResolver + */ + public final void setMessageInterpolator(MessageInterpolator messageResolver) { + if (messageResolver != null) { + this.messageResolver = messageResolver; + } + } + + /** + * {@inheritDoc} + */ + @Override + public MessageInterpolator getMessageInterpolator() { + return messageResolver; + } + + /** + * Set the {@link TraversableResolver} used. + * + * @param traversableResolver + */ + public final void setTraversableResolver(TraversableResolver traversableResolver) { + if (traversableResolver != null) { + this.traversableResolver = traversableResolver; + } + } + + public void setParameterNameProvider(final ParameterNameProvider parameterNameProvider) { + if (parameterNameProvider != null) { + this.parameterNameProvider = parameterNameProvider; + } + } + + public void setClockProvider(final ClockProvider clockProvider) { + if (clockProvider != null) { + this.clockProvider = clockProvider; + } + } + + /** + * {@inheritDoc} + */ + @Override + public TraversableResolver getTraversableResolver() { + return traversableResolver; + } + + /** + * Set the {@link ConstraintValidatorFactory} used. + * + * @param constraintValidatorFactory + */ + public final void setConstraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) { + if (constraintValidatorFactory != null) { + this.constraintValidatorFactory = constraintValidatorFactory; + if (DefaultConstraintValidatorFactory.class.isInstance(constraintValidatorFactory)) { + toClose.add(Closeable.class.cast(constraintValidatorFactory)); + } + } + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintValidatorFactory getConstraintValidatorFactory() { + return constraintValidatorFactory; + } + + @Override + public ParameterNameProvider getParameterNameProvider() { + return parameterNameProvider; + } + + @Override + public ClockProvider getClockProvider() { + return clockProvider; + } + + @Override + public void close() { + try { + for (final Closeable c : toClose) { + c.close(); + } + toClose.clear(); + } catch (final Exception e) { + // no-op + } + } + + /** + * Return an object of the specified type to allow access to the provider-specific API. If the Bean Validation + * provider implementation does not support the specified class, the ValidationException is thrown. + * + * @param type + * the class of the object to be returned. + * @return an instance of the specified class + * @throws ValidationException + * if the provider does not support the call. + */ + @Override + public <T> T unwrap(final Class<T> type) { + if (type.isInstance(this)) { + @SuppressWarnings("unchecked") + final T result = (T) this; + return result; + } + + // FIXME 2011-03-27 jw: + // This code is unsecure. + // It should allow only a fixed set of classes. + // Can't fix this because don't know which classes this method should support. + + if (!(type.isInterface() || Modifier.isAbstract(type.getModifiers()))) { + return newInstance(type); + } + try { + final Class<?> cls = Reflection.toClass(type.getName() + "Impl"); + if (type.isAssignableFrom(cls)) { + @SuppressWarnings("unchecked") + T result = (T) newInstance(cls); + return result; + } + } catch (ClassNotFoundException e) { + // do nothing + } + throw new ValidationException("Type " + type + " not supported"); + } + + private <T> T newInstance(final Class<T> cls) { + try { + return Reflection.newInstance(cls); + } catch (final RuntimeException e) { + throw new ValidationException(e.getCause()); + } + } + + /** + * Get the constraint cache used. + * + * @return {@link ConstraintCached} + */ + public ConstraintCached getConstraintsCache() { + return constraintsCache; + } + + /** + * Get the {@link AnnotationsManager}. + * + * @return {@link AnnotationsManager} + */ + public AnnotationsManager getAnnotationsManager() { + return annotationsManager; + } + + /** + * Get the {@link DescriptorManager}. + * + * @return {@link DescriptorManager} + */ + public DescriptorManager getDescriptorManager() { + return descriptorManager; + } + + /** + * Get the {@link ValueExtractors}. + * + * @return {@link ValueExtractors} + */ + public ValueExtractors getValueExtractors() { + return valueExtractors; + } + + public MetadataBuilders getMetadataBuilders() { + return metadataBuilders; + } + + public GroupsComputer getGroupsComputer() { + return groupsComputer; + } + + private void loadAndVerifyUserCustomizations(ConfigurationState configuration) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + final BiConsumer<Class<?>, ForBean<?>> addBuilder = (t, b) -> { + getMetadataBuilders().registerCustomBuilder((Class) t, (MetadataBuilder.ForBean) b); + }; + participantFactory.loadServices(MetadataSource.class) + .forEach(ms -> ms.process(configuration, getConstraintsCache()::add, addBuilder)); + } +} Added: tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/BootstrapConfigurationImpl.java URL: http://svn.apache.org/viewvc/tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/BootstrapConfigurationImpl.java?rev=1843674&view=auto ============================================================================== --- tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/BootstrapConfigurationImpl.java (added) +++ tomee/deps/branches/bval-2/bval-jsr/src/main/java/org/apache/bval/jsr/BootstrapConfigurationImpl.java Fri Oct 12 15:00:48 2018 @@ -0,0 +1,138 @@ +/* + * 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.jsr; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; + +import javax.validation.BootstrapConfiguration; +import javax.validation.executable.ExecutableType; + +import org.apache.bval.jsr.util.ExecutableTypes; + +public class BootstrapConfigurationImpl implements BootstrapConfiguration { + public static final BootstrapConfigurationImpl DEFAULT = new BootstrapConfigurationImpl(Collections.emptySet(), + true, EnumSet.of(ExecutableType.IMPLICIT), Collections.emptyMap(), Collections.emptySet()); + + private final Set<String> constraintMappingResourcePaths; + private final boolean executableValidationEnabled; + private final Set<ExecutableType> defaultValidatedExecutableTypes; + private final Map<String, String> properties; + private final Set<String> valueExtractorClassNames; + + private String parameterNameProviderClassName; + private String traversableResolverClassName; + private String messageInterpolatorClassName; + private String constraintValidatorFactoryClassName; + private String defaultProviderClassName; + private String clockProviderClassName; + + public BootstrapConfigurationImpl(final String defaultProviderClassName, + final String constraintValidatorFactoryClassName, final String messageInterpolatorClassName, + final String traversableResolverClassName, final String parameterNameProviderClassName, + final Set<String> constraintMappingResourcePaths, final boolean executableValidationEnabled, + final Set<ExecutableType> defaultValidatedExecutableTypes, final Map<String, String> properties, + final String clockProviderClassName, final Set<String> valueExtractorClassNames) { + + this(Collections.unmodifiableSet(constraintMappingResourcePaths), executableValidationEnabled, + defaultValidatedExecutableTypes, Collections.unmodifiableMap(properties), + Collections.unmodifiableSet(valueExtractorClassNames)); + + this.parameterNameProviderClassName = parameterNameProviderClassName; + this.traversableResolverClassName = traversableResolverClassName; + this.messageInterpolatorClassName = messageInterpolatorClassName; + this.constraintValidatorFactoryClassName = constraintValidatorFactoryClassName; + this.defaultProviderClassName = defaultProviderClassName; + this.clockProviderClassName = clockProviderClassName; + } + + private BootstrapConfigurationImpl(final Set<String> constraintMappingResourcePaths, + final boolean executableValidationEnabled, final Set<ExecutableType> defaultValidatedExecutableTypes, + final Map<String, String> properties, final Set<String> valueExtractorClassNames) { + + this.constraintMappingResourcePaths = constraintMappingResourcePaths; + this.executableValidationEnabled = executableValidationEnabled; + this.defaultValidatedExecutableTypes = ExecutableTypes.interpret(defaultValidatedExecutableTypes); + this.properties = properties; + this.valueExtractorClassNames = valueExtractorClassNames; + } + + @Override + public String getDefaultProviderClassName() { + return defaultProviderClassName; + } + + @Override + public String getConstraintValidatorFactoryClassName() { + return constraintValidatorFactoryClassName; + } + + @Override + public String getMessageInterpolatorClassName() { + return messageInterpolatorClassName; + } + + @Override + public String getTraversableResolverClassName() { + return traversableResolverClassName; + } + + @Override + public String getParameterNameProviderClassName() { + return parameterNameProviderClassName; + } + + @Override + public Set<String> getConstraintMappingResourcePaths() { + return Collections.unmodifiableSet(constraintMappingResourcePaths); + } + + @Override + public boolean isExecutableValidationEnabled() { + return executableValidationEnabled; + } + + @Override + public Set<ExecutableType> getDefaultValidatedExecutableTypes() { + return Collections.unmodifiableSet(defaultValidatedExecutableTypes); + } + + @Override + public Map<String, String> getProperties() { + return Collections.unmodifiableMap(properties); + } + + /** + * @since 2.0 + */ + @Override + public String getClockProviderClassName() { + return clockProviderClassName; + } + + /** + * @since 2.0 + */ + @Override + public Set<String> getValueExtractorClassNames() { + return Collections.unmodifiableSet(valueExtractorClassNames); + } +}