You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by st...@apache.org on 2016/10/24 21:02:02 UTC
svn commit: r1766445 [1/3] - in /bval/trunk: ./ bundle/ bval-core/
bval-core/src/main/java/org/apache/bval/
bval-core/src/main/java/org/apache/bval/model/
bval-core/src/main/java/org/apache/bval/util/
bval-core/src/main/java/org/apache/bval/util/reflec...
Author: struberg
Date: Mon Oct 24 21:02:02 2016
New Revision: 1766445
URL: http://svn.apache.org/viewvc?rev=1766445&view=rev
Log:
BVAL-151 trim down external dependencies
Added:
bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java (with props)
bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java (with props)
bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java (with props)
bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/TypeUtils.java (with props)
bval/trunk/bval-core/src/test/java/org/apache/bval/util/
bval/trunk/bval-core/src/test/java/org/apache/bval/util/StringUtilsTest.java (with props)
Modified:
bval/trunk/bundle/pom.xml
bval/trunk/bval-core/pom.xml
bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java
bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java
bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java
bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaAnnotated.java
bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java
bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
bval/trunk/bval-core/src/main/java/org/apache/bval/util/BValVersion.java
bval/trunk/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java
bval/trunk/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java
bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java
bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java
bval/trunk/bval-jsr/pom.xml
bval/trunk/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDescriptorImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/groups/Group.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/util/PathNavigation.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/util/ValidationContextTraversal.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java
bval/trunk/bval-jsr/src/test/java/org/apache/bval/constraints/HasStringValidator.java
bval/trunk/bval-tck11/work-tests-suite.xml
bval/trunk/bval-xstream/src/main/java/org/apache/bval/xml/XMLMetaBeanInfos.java
bval/trunk/bval-xstream/src/main/java/org/apache/bval/xml/XMLMetaElement.java
bval/trunk/pom.xml
Modified: bval/trunk/bundle/pom.xml
URL: http://svn.apache.org/viewvc/bval/trunk/bundle/pom.xml?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bundle/pom.xml (original)
+++ bval/trunk/bundle/pom.xml Mon Oct 24 21:02:02 2016
@@ -74,7 +74,7 @@
<Private-Package />
<Export-Package>org.apache.bval.*</Export-Package>
<Import-Package>
- org.apache.commons.lang3.*;resolution:=optional,javax.annotation.*;resolution:=optional,javax.interceptor.*;resolution:=optional,
+ javax.annotation.*;resolution:=optional,javax.interceptor.*;resolution:=optional,
javax.inject.*;resolution:=optional,javax.enterprise.*;resolution:=optional,javax.persistence.*;resolution:=optional,
org.apache.bval.xml.*;resolution:=optional,javax.validation.*;resolution:=optional,
!org.apache.commons.weaver.*,
Modified: bval/trunk/bval-core/pom.xml
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/pom.xml?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/pom.xml (original)
+++ bval/trunk/bval-core/pom.xml Mon Oct 24 21:02:02 2016
@@ -127,81 +127,44 @@ build.timestamp=${timestamp}
</executions>
</plugin>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <configuration>
- <artifactSet>
- <includes>
- <include>org.apache.commons:commons-lang3</include>
- <include>org.apache.commons:commons-lang3</include>
- </includes>
- </artifactSet>
- <filters>
- <filter>
- <artifact>org.apache.commons:commons-lang3</artifact>
- <excludes>
- <exclude>META-INF/maven/**</exclude>
- </excludes>
- </filter>
- </filters>
- <relocations>
- <relocation>
- <pattern>org.apache.commons</pattern>
- <shadedPattern>org.apache.bval.core._oac</shadedPattern>
- </relocation>
- </relocations>
- <minimizeJar>true</minimizeJar>
- <promoteTransitiveDependencies>true</promoteTransitiveDependencies>
- <createSourcesJar>true</createSourcesJar>
- <shadeSourcesContent>true</shadeSourcesContent>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>shade</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-weaver-maven-plugin</artifactId>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-weaver-maven-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
- <plugins>
- <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
- <plugin>
- <groupId>org.eclipse.m2e</groupId>
- <artifactId>lifecycle-mapping</artifactId>
- <version>1.0.0</version>
- <configuration>
- <lifecycleMappingMetadata>
- <pluginExecutions>
- <pluginExecution>
- <pluginExecutionFilter>
- <groupId>
- org.apache.maven.plugins
- </groupId>
- <artifactId>
- maven-antrun-plugin
- </artifactId>
- <versionRange>
- [1.3,)
- </versionRange>
- <goals>
- <goal>run</goal>
- </goals>
- </pluginExecutionFilter>
- <action>
- <ignore />
- </action>
- </pluginExecution>
- </pluginExecutions>
- </lifecycleMappingMetadata>
- </configuration>
- </plugin>
- </plugins>
+ <plugins>
+ <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+ <plugin>
+ <groupId>org.eclipse.m2e</groupId>
+ <artifactId>lifecycle-mapping</artifactId>
+ <version>1.0.0</version>
+ <configuration>
+ <lifecycleMappingMetadata>
+ <pluginExecutions>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>
+ org.apache.maven.plugins
+ </groupId>
+ <artifactId>
+ maven-antrun-plugin
+ </artifactId>
+ <versionRange>
+ [1.3,)
+ </versionRange>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <ignore />
+ </action>
+ </pluginExecution>
+ </pluginExecutions>
+ </lifecycleMappingMetadata>
+ </configuration>
+ </plugin>
+ </plugins>
</pluginManagement>
</build>
</project>
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/MetaBeanBuilder.java Mon Oct 24 21:02:02 2016
@@ -17,8 +17,7 @@
package org.apache.bval;
import org.apache.bval.model.MetaBean;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.ClassUtils;
+import org.apache.bval.util.reflection.Reflection;
import java.util.HashMap;
import java.util.Map;
@@ -61,7 +60,7 @@ public class MetaBeanBuilder {
* @return {@link MetaBeanFactory} array
*/
public MetaBeanFactory[] getFactories() {
- return ArrayUtils.clone(factories);
+ return factories != null ? factories.clone() : null;
}
/**
@@ -71,7 +70,7 @@ public class MetaBeanBuilder {
* @param factories
*/
public void setFactories(MetaBeanFactory[] factories) {
- this.factories = ArrayUtils.clone(factories);
+ this.factories = factories != null ? factories.clone() : null;
}
/**
@@ -105,9 +104,9 @@ public class MetaBeanBuilder {
protected Class<?> findLocalClass(String className) {
if (className != null) {
try {
- return ClassUtils.getClass(className);
+ return Reflection.toClass(className);
} catch (ClassNotFoundException e) {
- log.log(Level.FINE, String.format("Class not found: %s", className), e);
+ log.log(Level.FINE, String.format("Class not found: %s", className), e);
}
}
return null;
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/model/DynaTypeEnum.java Mon Oct 24 21:02:02 2016
@@ -16,7 +16,6 @@
*/
package org.apache.bval.model;
-import org.apache.commons.lang3.ArrayUtils;
/**
* Description: ("artificial" enum with custom values).<br/>
@@ -85,7 +84,7 @@ public class DynaTypeEnum implements Dyn
* @return Value[]
*/
public Value[] getEnumConstants() {
- return ArrayUtils.clone(enumConstants);
+ return enumConstants != null ? enumConstants.clone() : null;
}
/**
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/model/FeaturesCapable.java Mon Oct 24 21:02:02 2016
@@ -16,8 +16,6 @@
*/
package org.apache.bval.model;
-import org.apache.commons.lang3.ArrayUtils;
-
import java.io.Serializable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -122,7 +120,7 @@ public abstract class FeaturesCapable im
protected void copyInto(FeaturesCapable target) {
target.features = target.createFeaturesMap();
target.features.putAll(features);
- target.validations = ArrayUtils.clone(validations);
+ target.validations = validations != null ? validations.clone() : null;
}
/**
@@ -131,7 +129,7 @@ public abstract class FeaturesCapable im
* @return Validation array
*/
public Validation[] getValidations() {
- return ArrayUtils.clone(validations);
+ return validations != null ? validations.clone() : null;
}
/**
@@ -140,7 +138,7 @@ public abstract class FeaturesCapable im
* @param validations
*/
public void setValidations(Validation[] validations) {
- this.validations = ArrayUtils.clone(validations);
+ this.validations = validations != null ? validations.clone() : null;
}
/**
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaAnnotated.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaAnnotated.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaAnnotated.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaAnnotated.java Mon Oct 24 21:02:02 2016
@@ -17,20 +17,28 @@
package org.apache.bval.model;
import java.lang.annotation.Annotation;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.bval.util.ObjectUtils;
-import org.apache.commons.lang3.ArrayUtils;
public abstract class MetaAnnotated extends Meta {
private static final long serialVersionUID = 1L;
- private Annotation[] annotations = new Annotation[0];
+ private Set<Annotation> annotations = new HashSet<Annotation>();
+ private Annotation[] annArray = null;
public Annotation[] getAnnotations() {
- return annotations;
+ if (annArray == null) {
+ annArray = annotations.isEmpty() ? ObjectUtils.EMPTY_ANNOTATION_ARRAY : annotations.toArray(new Annotation[annotations.size()]);
+ }
+ return annArray;
}
public void addAnnotation(final Annotation annotation) {
- this.annotations = ArrayUtils.add(annotations, annotation);
+ this.annotations.add(annotation);
+ annArray = null;
}
}
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaBean.java Mon Oct 24 21:02:02 2016
@@ -27,7 +27,6 @@ import java.util.Map;
import java.util.TreeMap;
import org.apache.bval.util.reflection.Reflection;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
@@ -287,7 +286,7 @@ public class MetaBean extends FeaturesCa
}
for (final Method m : clazz.getDeclaredMethods()) {
final String name = getPropertyName(m);
- if (StringUtils.isNotEmpty(name)) {
+ if (name != null && !name.isEmpty()) {
if (!fields.containsKey(name)) {
fields.put(name, Integer.valueOf(++i));
}
@@ -320,7 +319,8 @@ public class MetaBean extends FeaturesCa
if (i2 == null) {
// java.util.TreeMap requires that the comparator be consistent with #equals(),
// therefore we must not incorrectly report 0 comparison for different property names
- return StringUtils.compare(o1, o2);
+ // Both o1 and o2 cannot be null as they would have blown up with a NPE in fields.get already
+ return o1.compareTo(o2);
}
return -1;
}
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java Mon Oct 24 21:02:02 2016
@@ -16,10 +16,10 @@
*/
package org.apache.bval.model;
-import org.apache.commons.lang3.reflect.TypeUtils;
-
import java.lang.reflect.Type;
+import org.apache.bval.util.reflection.TypeUtils;
+
/**
* Description: the meta description of a property of a bean. It supports a map
* of features and multiple validations.<br/>
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/util/BValVersion.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/BValVersion.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/BValVersion.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/BValVersion.java Mon Oct 24 21:02:02 2016
@@ -24,7 +24,6 @@ import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.bval.util.reflection.Reflection;
-import org.apache.commons.lang3.StringUtils;
import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java Mon Oct 24 21:02:02 2016
@@ -16,8 +16,6 @@
*/
package org.apache.bval.util;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.reflect.TypeUtils;
import java.lang.annotation.ElementType;
import java.lang.reflect.Array;
@@ -26,6 +24,8 @@ import java.lang.reflect.TypeVariable;
import java.util.List;
import java.util.Map;
+import org.apache.bval.util.reflection.TypeUtils;
+
/**
* {@link AccessStrategy} to get an indexed member of an {@link Iterable} or
* array object.
@@ -46,7 +46,8 @@ public class IndexedAccess extends Acces
}
if (TypeUtils.isAssignable(containerType, Iterable.class)) {
Map<TypeVariable<?>, Type> typeArguments = TypeUtils.getTypeArguments(containerType, Iterable.class);
- return ObjectUtils.defaultIfNull(TypeUtils.unrollVariables(typeArguments, ITERABLE_TYPE), Object.class);
+ Type type = TypeUtils.unrollVariables(typeArguments, ITERABLE_TYPE);
+ return type != null ? type : Object.class;
}
return null;
}
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java Mon Oct 24 21:02:02 2016
@@ -16,8 +16,7 @@
*/
package org.apache.bval.util;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.reflect.TypeUtils;
+import org.apache.bval.util.reflection.TypeUtils;
import java.lang.annotation.ElementType;
import java.lang.reflect.Type;
Added: bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java?rev=1766445&view=auto
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java (added)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java Mon Oct 24 21:02:02 2016
@@ -0,0 +1,96 @@
+/*
+ * 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.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+
+public final class ObjectUtils {
+ public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0];
+ public static final String[] EMPTY_STRING_ARRAY = new String[0];
+ public static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
+
+ private ObjectUtils() {
+ }
+
+ /**
+ * <p>Returns a default value if the object passed is {@code null}.</p>
+ *
+ * <pre>
+ * ObjectUtils.defaultIfNull(null, null) = null
+ * ObjectUtils.defaultIfNull(null, "") = ""
+ * ObjectUtils.defaultIfNull(null, "zz") = "zz"
+ * ObjectUtils.defaultIfNull("abc", *) = "abc"
+ * ObjectUtils.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE
+ * </pre>
+ *
+ * @param <T> the type of the object
+ * @param object the {@code Object} to test, may be {@code null}
+ * @param defaultValue the default value to return, may be {@code null}
+ * @return {@code object} if it is not {@code null}, defaultValue otherwise
+ */
+ public static <T> T defaultIfNull(final T object, final T defaultValue) {
+ return object != null ? object : defaultValue;
+ }
+
+ public static <T> boolean isNotEmpty(final T[] array) {
+ return !isEmpty(array);
+ }
+
+ public static boolean isEmpty(final Object[] array) {
+ return array == null || array.length == 0;
+ }
+
+ /**
+ * <p>Checks if the object is in the given array.
+ *
+ * <p>The method returns {@code false} if a {@code null} array is passed in.
+ *
+ * @param array the array to search through
+ * @param objectToFind the object to find
+ * @return {@code true} if the array contains the object
+ */
+ public static boolean arrayContains(final Object[] array, final Object objectToFind) {
+ if (array == null) {
+ return false;
+ }
+ for (Object o : array) {
+ if (o.equals(objectToFind)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static <T> T[] arrayAdd(T[] array, T objectToAdd) {
+ Class<?> type;
+ if (array != null) {
+ type = array.getClass().getComponentType();
+ } else if (objectToAdd != null) {
+ type = objectToAdd.getClass();
+ } else {
+ throw new IllegalArgumentException("Arguments cannot both be null");
+ }
+ final int arrayLength = Array.getLength(array);
+ T[] newArray = (T[]) Array.newInstance(array.getClass().getComponentType(), arrayLength + 1);
+ System.arraycopy(array, 0, newArray, 0, arrayLength);
+ newArray[newArray.length - 1] = objectToAdd;
+
+ return newArray;
+
+ }
+}
Propchange: bval/trunk/bval-core/src/main/java/org/apache/bval/util/ObjectUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/PropertyAccess.java Mon Oct 24 21:02:02 2016
@@ -59,7 +59,7 @@ public class PropertyAccess extends Acce
final ClassLoader cl = Reflection.getClassLoader(PropertyAccess.class);
boolean useBeanUtils;
try {
- Reflection.getClass(cl, BEANUTILS);
+ Reflection.toClass(BEANUTILS, cl);
useBeanUtils = true;
} catch (Exception e) {
useBeanUtils = false;
@@ -68,7 +68,7 @@ public class PropertyAccess extends Acce
if (useBeanUtils) {
try {
final Class<?> beanUtilsPropertyAccess =
- Reflection.getClass(cl, BEANUTILS_PROPERTY_ACCESS);
+ Reflection.toClass(BEANUTILS_PROPERTY_ACCESS, cl);
ctor = Reflection.getDeclaredConstructor(
beanUtilsPropertyAccess.asSubclass(PropertyAccess.class),
Added: bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java?rev=1766445&view=auto
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java (added)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java Mon Oct 24 21:02:02 2016
@@ -0,0 +1,177 @@
+/*
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+public final class StringUtils {
+ private StringUtils() {
+ }
+
+ /**
+ * Taken from commons-lang3.
+ * <p>
+ * <p>Capitalizes a String changing the first character to title case as
+ * per {@link Character#toTitleCase(char)}. No other characters are changed.</p>
+ * <p>
+ * <p>For a word based algorithm, see {@link org.apache.commons.lang3.text.WordUtils#capitalize(String)}.
+ * A {@code null} input String returns {@code null}.</p>
+ * <p>
+ * <pre>
+ * StringUtils.capitalize(null) = null
+ * StringUtils.capitalize("") = ""
+ * StringUtils.capitalize("cat") = "Cat"
+ * StringUtils.capitalize("cAt") = "CAt"
+ * StringUtils.capitalize("'cat'") = "'cat'"
+ * </pre>
+ *
+ * @param str the String to capitalize, may be null
+ * @return the capitalized String, {@code null} if null String input
+ * @see org.apache.commons.lang3.text.WordUtils#capitalize(String)
+ */
+ public static String capitalize(final String str) {
+ int strLen;
+ if (str == null || (strLen = str.length()) == 0) {
+ return str;
+ }
+
+ final char firstChar = str.charAt(0);
+ final char newChar = Character.toTitleCase(firstChar);
+ if (firstChar == newChar) {
+ // already capitalized
+ return str;
+ }
+
+ char[] newChars = new char[strLen];
+ newChars[0] = newChar;
+ str.getChars(1, strLen, newChars, 1);
+ return String.valueOf(newChars);
+ }
+
+ /**
+ * Taken from commons-lang3.
+ * <p>Checks if a CharSequence is whitespace, empty ("") or null.</p>
+ * <p>
+ * <pre>
+ * StringUtils.isBlank(null) = true
+ * StringUtils.isBlank("") = true
+ * StringUtils.isBlank(" ") = true
+ * StringUtils.isBlank("bob") = false
+ * StringUtils.isBlank(" bob ") = false
+ * </pre>
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is null, empty or whitespace
+ */
+ public static boolean isBlank(final CharSequence cs) {
+ int strLen;
+ if (cs == null || (strLen = cs.length()) == 0) {
+ return true;
+ }
+ for (int i = 0; i < strLen; i++) {
+ if (Character.isWhitespace(cs.charAt(i)) == false) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static String join(Collection<?> values, String joinToken) {
+ if (values == null) {
+ return null;
+ }
+ if (values.size() == 0) {
+ return "";
+ }
+ if (values.size() == 1) {
+ return values.iterator().next().toString();
+ }
+ if (joinToken == null) {
+ joinToken = "null"; // backward compat with commons-lang StringUtils...
+ }
+
+ StringBuilder sb = new StringBuilder(values.size() * (16 + joinToken.length()));
+ Iterator<?> it = values.iterator();
+ sb.append(it.next());
+ while (it.hasNext()) {
+ sb.append(joinToken).append(it.next());
+ }
+ return sb.toString();
+ }
+
+ public static String joinArray(Object[] values, String joinToken) {
+ if (values == null) {
+ return null;
+ }
+ if (values.length == 0) {
+ return "";
+ }
+ if (values.length == 1) {
+ return values[0].toString();
+ }
+ if (joinToken == null) {
+ joinToken = "null"; // backward compat with commons-lang StringUtils...
+ }
+
+ StringBuilder sb = new StringBuilder(values.length * (16 + joinToken.length()));
+ sb.append(values[0]);
+ for (int i = 1; i < values.length; i++) {
+ sb.append(joinToken).append(values[i]);
+ }
+ return sb.toString();
+ }
+
+ /**
+ * <p>Splits the provided text into an array, separator is whitespace.
+ */
+ public static String[] split(String str) {
+ return split(str, null);
+ }
+
+ /**
+ * <p>Splits the provided text into an array, separator is whitespace.
+ */
+ public static String[] split(String str, Character token) {
+ if (str == null || str.length() == 0) {
+ return ObjectUtils.EMPTY_STRING_ARRAY;
+ }
+
+ // split on token
+ List<String> ret = new ArrayList<String>();
+ StringBuilder sb = new StringBuilder(str.length());
+ for (int pos = 0; pos < str.length(); pos++) {
+ char c = str.charAt(pos);
+ if ((token == null && Character.isWhitespace(c)) || (token != null && token.equals(c))) {
+ if (sb.length() > 0) {
+ ret.add(sb.toString());
+ sb.setLength(0); // reset the string
+ }
+ }
+ else {
+ sb.append(c);
+ }
+ }
+ if (sb.length() > 0) {
+ ret.add(sb.toString());
+ }
+ return ret.toArray(new String[ret.size()]);
+ }
+
+}
\ No newline at end of file
Propchange: bval/trunk/bval-core/src/main/java/org/apache/bval/util/StringUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java?rev=1766445&view=auto
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java (added)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java Mon Oct 24 21:02:02 2016
@@ -0,0 +1,46 @@
+/*
+ * 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.util;
+
+
+/**
+ * Some used Validate from commons.
+ *
+ */
+public final class Validate {
+ private Validate() {
+ }
+
+ public static <T> T notNull(final T object) {
+ return notNull(object, "The validated object is null");
+ }
+
+ public static <T> T notNull(final T object, final String message, final Object... values) {
+ if (object == null) {
+ throw new NullPointerException(String.format(message, values));
+ }
+ return object;
+ }
+
+
+ public static void isTrue(final boolean expression, final String message, final Object... values) {
+ if (expression == false) {
+ throw new IllegalArgumentException(String.format(message, values));
+ }
+ }
+
+}
Propchange: bval/trunk/bval-core/src/main/java/org/apache/bval/util/Validate.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java?rev=1766445&r1=1766444&r2=1766445&view=diff
==============================================================================
--- bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java (original)
+++ bval/trunk/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java Mon Oct 24 21:02:02 2016
@@ -24,23 +24,72 @@ import java.lang.reflect.InvocationTarge
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
-import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.weaver.privilizer.Privilizing;
/**
* Security-agnostic "blueprint" class for reflection-related operations. Intended for use by Apache BVal code.
*/
public class Reflection {
+ private static final Object[][] NATIVE_CODES = new Object[][]{
+ {byte.class, "byte", "B"},
+ {char.class, "char", "C"},
+ {double.class, "double", "D"},
+ {float.class, "float", "F"},
+ {int.class, "int", "I"},
+ {long.class, "long", "J"},
+ {short.class, "short", "S"},
+ {boolean.class, "boolean", "Z"},
+ {void.class, "void", "V"}
+ };
+
+ /**
+ * Maps primitive {@code Class}es to their corresponding wrapper {@code Class}.
+ */
+ private static final Map<Class<?>, Class<?>> PRIMITIVE_WRAPPER_MAP = new HashMap<Class<?>, Class<?>>();
+ static {
+ PRIMITIVE_WRAPPER_MAP.put(Boolean.TYPE, Boolean.class);
+ PRIMITIVE_WRAPPER_MAP.put(Byte.TYPE, Byte.class);
+ PRIMITIVE_WRAPPER_MAP.put(Character.TYPE, Character.class);
+ PRIMITIVE_WRAPPER_MAP.put(Short.TYPE, Short.class);
+ PRIMITIVE_WRAPPER_MAP.put(Integer.TYPE, Integer.class);
+ PRIMITIVE_WRAPPER_MAP.put(Long.TYPE, Long.class);
+ PRIMITIVE_WRAPPER_MAP.put(Double.TYPE, Double.class);
+ PRIMITIVE_WRAPPER_MAP.put(Float.TYPE, Float.class);
+ PRIMITIVE_WRAPPER_MAP.put(Void.TYPE, Void.TYPE);
+ }
+
+
+
/**
- * Get the named {@link Class} from the specified {@link ClassLoader}.
- * @param classLoader
- * @param className
- * @return Class
- * @throws Exception
- */
- public static Class<?> getClass(final ClassLoader classLoader, final String className) throws Exception {
- return ClassUtils.getClass(classLoader, className, true);
+ * <p>Converts the specified primitive Class object to its corresponding
+ * wrapper Class object.</p>
+ *
+ * <p>NOTE: From v2.2, this method handles {@code Void.TYPE},
+ * returning {@code Void.TYPE}.</p>
+ *
+ * @param cls the class to convert, may be null
+ * @return the wrapper class for {@code cls} or {@code cls} if
+ * {@code cls} is not a primitive. {@code null} if null input.
+ * @since 2.1
+ */
+ public static Class<?> primitiveToWrapper(final Class<?> cls) {
+ Class<?> convertedClass = cls;
+ if (cls != null && cls.isPrimitive()) {
+ convertedClass = PRIMITIVE_WRAPPER_MAP.get(cls);
+ }
+ return convertedClass;
+ }
+
+ public static Class<?> wrapperToPrimitive(final Class<?> cls) {
+ for (Map.Entry<Class<?>, Class<?>> primitiveEntry : PRIMITIVE_WRAPPER_MAP.entrySet()) {
+ if (primitiveEntry.getValue().equals(cls)) {
+ return primitiveEntry.getKey();
+ }
+ }
+ return null;
}
/**
@@ -80,6 +129,79 @@ public class Reflection {
return cl == null ? clazz.getClassLoader() : cl;
}
+ public static Class<?> toClass(String className) throws ClassNotFoundException
+ {
+ ClassLoader cl = getClassLoader(Reflection.class);
+ return toClass(className, cl);
+ }
+
+ /**
+ * Return the class for the given string, correctly handling
+ * primitive types. If the given class loader is null, the context
+ * loader of the current thread will be used.
+ *
+ * @throws RuntimeException on load error
+ */
+ public static Class toClass(String className, ClassLoader loader) throws ClassNotFoundException {
+ return toClass(className, false, loader);
+ }
+
+ /**
+ * Return the class for the given string, correctly handling
+ * primitive types. If the given class loader is null, the context
+ * loader of the current thread will be used.
+ *
+ * @throws RuntimeException on load error
+ */
+ public static Class toClass(String className, boolean resolve, ClassLoader loader) throws ClassNotFoundException {
+ if (className == null) {
+ throw new NullPointerException("className == null");
+ }
+
+ // array handling
+ int dims = 0;
+ while (className.endsWith("[]")) {
+ dims++;
+ className = className.substring(0, className.length() - 2);
+ }
+
+ // check against primitive types
+ boolean primitive = false;
+ if (className.indexOf('.') == -1) {
+ for (int i = 0; !primitive && (i < NATIVE_CODES.length); i++) {
+ if (NATIVE_CODES[i][1].equals(className)) {
+ if (dims == 0) {
+ return (Class) NATIVE_CODES[i][0];
+ }
+ className = (String) NATIVE_CODES[i][2];
+ primitive = true;
+ }
+ }
+ }
+
+ if (dims > 0) {
+ StringBuilder buf = new StringBuilder(className.length() + dims + 2);
+ for (int i = 0; i < dims; i++) {
+ buf.append('[');
+ }
+ if (!primitive) {
+ buf.append('L');
+ }
+ buf.append(className);
+ if (!primitive) {
+ buf.append(';');
+ }
+ className = buf.toString();
+ }
+
+ if (loader == null) {
+ loader = Thread.currentThread().getContextClassLoader();
+ }
+
+ return Class.forName(className, resolve, loader);
+ }
+
+
/**
* Convenient point for {@link Privilizing} {@link System#getProperty(String)}.
* @param name
@@ -114,7 +236,6 @@ public class Reflection {
/**
* Get the declared constructor from {@code clazz}.
- * @param T generic type
* @param clazz
* @param parameters
* @return {@link Constructor} or {@code null}