This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-beanutils.git
The following commit(s) were added to refs/heads/master by this push:
new f4467c8 [BEANUTILS-527] Convert from Collections4 to
java.util.function #8.
f4467c8 is described below
commit f4467c84ef3b0586189c2083f038c129525e82ff
Author: Gary Gregory <[email protected]>
AuthorDate: Sun Oct 20 19:04:01 2019 -0400
[BEANUTILS-527] Convert from Collections4 to java.util.function #8.
org.apache.commons.beanutils2.BeanToPropertyValueTransformer implements
java.util.function.Function instead of
org.apache.commons.collections4.Transformer.
---
.../beanutils2/BeanToPropertyValueTransformer.java | 439 +++++++++---------
.../BeanToPropertyValueTransformerTestCase.java | 492 ++++++++++-----------
2 files changed, 467 insertions(+), 464 deletions(-)
diff --git
a/src/main/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformer.java
b/src/main/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformer.java
index f049032..015cf57 100644
---
a/src/main/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformer.java
+++
b/src/main/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformer.java
@@ -1,218 +1,221 @@
-/*
- * 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.commons.beanutils2;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-/**
- * <p><code>Transformer</code> that outputs a property value.</p>
- *
- * <p>An implementation of
<code>org.apache.commons.collections4.Transformer</code> that transforms
- * the object provided by returning the value of a specified property of the
object. The
- * constructor for <code>BeanToPropertyValueTransformer</code> requires the
name of the property
- * that will be used in the transformation. The property can be a simple,
nested, indexed, or
- * mapped property as defined by
<code>org.apache.commons.beanutils2.PropertyUtils</code>. If any
- * object in the property path specified by <code>propertyName</code> is
<code>null</code> then the
- * outcome is based on the value of the <code>ignoreNull</code> attribute.
- * </p>
- *
- * <p>
- * A typical usage might look like:
- * </p>
- * <pre><code>
- * // create the transformer
- * BeanToPropertyValueTransformer transformer = new
BeanToPropertyValueTransformer( "person.address.city" );
- *
- * // transform the Collection
- * Collection peoplesCities = CollectionUtils.collect( peopleCollection,
transformer );
- * </code></pre>
- *
- * <p>
- * This would take a <code>Collection</code> of person objects and return a
<code>Collection</code>
- * of objects which represents the cities in which each person lived.
Assuming...
- * <ul>
- * <li>
- * The top level object in the <code>peeopleCollection</code> is an
object which represents a
- * person.
- * </li>
- * <li>
- * The person object has a <code>getAddress()</code> method which
returns an object which
- * represents a person's address.
- * </li>
- * <li>
- * The address object has a <code>getCity()</code> method which returns
an object which
- * represents the city in which a person lives.
- * </li>
- * </ul>
- *
- * @see org.apache.commons.beanutils2.PropertyUtils
- * @see org.apache.commons.collections4.Transformer
- */
-public class BeanToPropertyValueTransformer implements Transformer {
-
- /** For logging. */
- private final Log log = LogFactory.getLog(this.getClass());
-
- /** The name of the property that will be used in the transformation of
the object. */
- private String propertyName;
-
- /**
- * <p>Should null objects on the property path throw an
<code>IllegalArgumentException</code>?</p>
- * <p>
- * Determines whether <code>null</code> objects in the property path will
genenerate an
- * <code>IllegalArgumentException</code> or not. If set to
<code>true</code> then if any objects
- * in the property path evaluate to <code>null</code> then the
- * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged but
- * not rethrown and <code>null</code> will be returned. If set to
<code>false</code> then if any
- * objects in the property path evaluate to <code>null</code> then the
- * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged and
- * rethrown.
- * </p>
- */
- private boolean ignoreNull;
-
- /**
- * Constructs a Transformer which does not ignore nulls.
- * Constructor which takes the name of the property that will be used in
the transformation and
- * assumes <code>ignoreNull</code> to be <code>false</code>.
- *
- * @param propertyName The name of the property that will be used in the
transformation.
- * @throws IllegalArgumentException If the <code>propertyName</code> is
<code>null</code> or
- * empty.
- */
- public BeanToPropertyValueTransformer(final String propertyName) {
- this(propertyName, false);
- }
-
- /**
- * Constructs a Transformer and sets ignoreNull.
- * Constructor which takes the name of the property that will be used in
the transformation and
- * a boolean which determines whether <code>null</code> objects in the
property path will
- * genenerate an <code>IllegalArgumentException</code> or not.
- *
- * @param propertyName The name of the property that will be used in the
transformation.
- * @param ignoreNull Determines whether <code>null</code> objects in the
property path will
- * genenerate an <code>IllegalArgumentException</code> or not.
- * @throws IllegalArgumentException If the <code>propertyName</code> is
<code>null</code> or
- * empty.
- */
- public BeanToPropertyValueTransformer(final String propertyName, final
boolean ignoreNull) {
- super();
-
- if (propertyName != null && propertyName.length() > 0) {
- this.propertyName = propertyName;
- this.ignoreNull = ignoreNull;
- } else {
- throw new IllegalArgumentException(
- "propertyName cannot be null or empty");
- }
- }
-
- /**
- * Returns the value of the property named in the transformer's
constructor for
- * the object provided. If any object in the property path leading up to
the target property is
- * <code>null</code> then the outcome will be based on the value of the
<code>ignoreNull</code>
- * attribute. By default, <code>ignoreNull</code> is <code>false</code>
and would result in an
- * <code>IllegalArgumentException</code> if an object in the property path
leading up to the
- * target property is <code>null</code>.
- *
- * @param object The object to be transformed.
- * @return The value of the property named in the transformer's
constructor for the object
- * provided.
- * @throws IllegalArgumentException If an IllegalAccessException,
InvocationTargetException, or
- * NoSuchMethodException is thrown when trying to access the property
specified on the object
- * provided. Or if an object in the property path provided is
<code>null</code> and
- * <code>ignoreNull</code> is set to <code>false</code>.
- */
- @Override
- public Object transform(final Object object) {
-
- Object propertyValue = null;
-
- try {
- propertyValue = PropertyUtils.getProperty(object, propertyName);
- } catch (final IllegalArgumentException e) {
- final String errorMsg = "Problem during transformation. Null value
encountered in property path...";
-
- if (ignoreNull) {
- log.warn("WARNING: " + errorMsg + e);
- } else {
- final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
- if (!BeanUtils.initCause(iae, e)) {
- log.error(errorMsg, e);
- }
- throw iae;
- }
- } catch (final IllegalAccessException e) {
- final String errorMsg = "Unable to access the property provided.";
- final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
- if (!BeanUtils.initCause(iae, e)) {
- log.error(errorMsg, e);
- }
- throw iae;
- } catch (final InvocationTargetException e) {
- final String errorMsg = "Exception occurred in property's getter";
- final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
- if (!BeanUtils.initCause(iae, e)) {
- log.error(errorMsg, e);
- }
- throw iae;
- } catch (final NoSuchMethodException e) {
- final String errorMsg = "No property found for name [" +
- propertyName + "]";
- final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
- if (!BeanUtils.initCause(iae, e)) {
- log.error(errorMsg, e);
- }
- throw iae;
- }
-
- return propertyValue;
- }
-
- /**
- * Returns the name of the property that will be used in the
transformation of the bean.
- *
- * @return The name of the property that will be used in the
transformation of the bean.
- */
- public String getPropertyName() {
- return propertyName;
- }
-
- /**
- * Returns the flag which determines whether <code>null</code> objects in
the property path will
- * genenerate an <code>IllegalArgumentException</code> or not. If set to
<code>true</code> then
- * if any objects in the property path evaluate to <code>null</code> then
the
- * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged but
- * not rethrown and <code>null</code> will be returned. If set to
<code>false</code> then if any
- * objects in the property path evaluate to <code>null</code> then the
- * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged and
- * rethrown.
- *
- * @return The flag which determines whether <code>null</code> objects in
the property path will
- * genenerate an <code>IllegalArgumentException</code> or not.
- */
- public boolean isIgnoreNull() {
- return ignoreNull;
- }
-}
+/*
+ * 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.commons.beanutils2;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.function.Function;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+/**
+ * <p><code>Transformer</code> that outputs a property value.</p>
+ *
+ * <p>An implementation of
<code>org.apache.commons.collections4.Transformer</code> that transforms
+ * the object provided by returning the value of a specified property of the
object. The
+ * constructor for <code>BeanToPropertyValueTransformer</code> requires the
name of the property
+ * that will be used in the transformation. The property can be a simple,
nested, indexed, or
+ * mapped property as defined by
<code>org.apache.commons.beanutils2.PropertyUtils</code>. If any
+ * object in the property path specified by <code>propertyName</code> is
<code>null</code> then the
+ * outcome is based on the value of the <code>ignoreNull</code> attribute.
+ * </p>
+ *
+ * <p>
+ * A typical usage might look like:
+ * </p>
+ * <pre><code>
+ * // create the transformer
+ * BeanToPropertyValueTransformer transformer = new
BeanToPropertyValueTransformer( "person.address.city" );
+ *
+ * // transform the Collection
+ * Collection peoplesCities = CollectionUtils.collect( peopleCollection,
transformer );
+ * </code></pre>
+ *
+ * <p>
+ * This would take a <code>Collection</code> of person objects and return a
<code>Collection</code>
+ * of objects which represents the cities in which each person lived.
Assuming...
+ * <ul>
+ * <li>
+ * The top level object in the <code>peeopleCollection</code> is an
object which represents a
+ * person.
+ * </li>
+ * <li>
+ * The person object has a <code>getAddress()</code> method which
returns an object which
+ * represents a person's address.
+ * </li>
+ * <li>
+ * The address object has a <code>getCity()</code> method which returns
an object which
+ * represents the city in which a person lives.
+ * </li>
+ * </ul>
+ *
+ * @param <T> the type of the input to the function
+ * @param <R> the type of the result of the function
+ *
+ * @see org.apache.commons.beanutils2.PropertyUtils
+ * @see java.util.function.Function
+ */
+public class BeanToPropertyValueTransformer<T, R> implements Function<T, R> {
+
+ /** For logging. */
+ private final Log log = LogFactory.getLog(this.getClass());
+
+ /** The name of the property that will be used in the transformation of
the object. */
+ private String propertyName;
+
+ /**
+ * <p>Should null objects on the property path throw an
<code>IllegalArgumentException</code>?</p>
+ * <p>
+ * Determines whether <code>null</code> objects in the property path will
genenerate an
+ * <code>IllegalArgumentException</code> or not. If set to
<code>true</code> then if any objects
+ * in the property path evaluate to <code>null</code> then the
+ * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged but
+ * not rethrown and <code>null</code> will be returned. If set to
<code>false</code> then if any
+ * objects in the property path evaluate to <code>null</code> then the
+ * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged and
+ * rethrown.
+ * </p>
+ */
+ private boolean ignoreNull;
+
+ /**
+ * Constructs a Transformer which does not ignore nulls.
+ * Constructor which takes the name of the property that will be used in
the transformation and
+ * assumes <code>ignoreNull</code> to be <code>false</code>.
+ *
+ * @param propertyName The name of the property that will be used in the
transformation.
+ * @throws IllegalArgumentException If the <code>propertyName</code> is
<code>null</code> or
+ * empty.
+ */
+ public BeanToPropertyValueTransformer(final String propertyName) {
+ this(propertyName, false);
+ }
+
+ /**
+ * Constructs a Transformer and sets ignoreNull.
+ * Constructor which takes the name of the property that will be used in
the transformation and
+ * a boolean which determines whether <code>null</code> objects in the
property path will
+ * genenerate an <code>IllegalArgumentException</code> or not.
+ *
+ * @param propertyName The name of the property that will be used in the
transformation.
+ * @param ignoreNull Determines whether <code>null</code> objects in the
property path will
+ * genenerate an <code>IllegalArgumentException</code> or not.
+ * @throws IllegalArgumentException If the <code>propertyName</code> is
<code>null</code> or
+ * empty.
+ */
+ public BeanToPropertyValueTransformer(final String propertyName, final
boolean ignoreNull) {
+ super();
+
+ if (propertyName != null && propertyName.length() > 0) {
+ this.propertyName = propertyName;
+ this.ignoreNull = ignoreNull;
+ } else {
+ throw new IllegalArgumentException(
+ "propertyName cannot be null or empty");
+ }
+ }
+
+ /**
+ * Returns the value of the property named in the transformer's
constructor for
+ * the object provided. If any object in the property path leading up to
the target property is
+ * <code>null</code> then the outcome will be based on the value of the
<code>ignoreNull</code>
+ * attribute. By default, <code>ignoreNull</code> is <code>false</code>
and would result in an
+ * <code>IllegalArgumentException</code> if an object in the property path
leading up to the
+ * target property is <code>null</code>.
+ *
+ * @param object The object to be transformed.
+ * @return The value of the property named in the transformer's
constructor for the object
+ * provided.
+ * @throws IllegalArgumentException If an IllegalAccessException,
InvocationTargetException, or
+ * NoSuchMethodException is thrown when trying to access the property
specified on the object
+ * provided. Or if an object in the property path provided is
<code>null</code> and
+ * <code>ignoreNull</code> is set to <code>false</code>.
+ */
+ @Override
+ public R apply(final T object) {
+
+ R propertyValue = null;
+
+ try {
+ propertyValue = (R) PropertyUtils.getProperty(object,
propertyName);
+ } catch (final IllegalArgumentException e) {
+ final String errorMsg = "Problem during transformation. Null value
encountered in property path...";
+
+ if (ignoreNull) {
+ log.warn("WARNING: " + errorMsg + e);
+ } else {
+ final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
+ if (!BeanUtils.initCause(iae, e)) {
+ log.error(errorMsg, e);
+ }
+ throw iae;
+ }
+ } catch (final IllegalAccessException e) {
+ final String errorMsg = "Unable to access the property provided.";
+ final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
+ if (!BeanUtils.initCause(iae, e)) {
+ log.error(errorMsg, e);
+ }
+ throw iae;
+ } catch (final InvocationTargetException e) {
+ final String errorMsg = "Exception occurred in property's getter";
+ final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
+ if (!BeanUtils.initCause(iae, e)) {
+ log.error(errorMsg, e);
+ }
+ throw iae;
+ } catch (final NoSuchMethodException e) {
+ final String errorMsg = "No property found for name [" +
+ propertyName + "]";
+ final IllegalArgumentException iae = new
IllegalArgumentException(errorMsg);
+ if (!BeanUtils.initCause(iae, e)) {
+ log.error(errorMsg, e);
+ }
+ throw iae;
+ }
+
+ return propertyValue;
+ }
+
+ /**
+ * Returns the name of the property that will be used in the
transformation of the bean.
+ *
+ * @return The name of the property that will be used in the
transformation of the bean.
+ */
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ /**
+ * Returns the flag which determines whether <code>null</code> objects in
the property path will
+ * genenerate an <code>IllegalArgumentException</code> or not. If set to
<code>true</code> then
+ * if any objects in the property path evaluate to <code>null</code> then
the
+ * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged but
+ * not rethrown and <code>null</code> will be returned. If set to
<code>false</code> then if any
+ * objects in the property path evaluate to <code>null</code> then the
+ * <code>IllegalArgumentException</code> throw by
<code>PropertyUtils</code> will be logged and
+ * rethrown.
+ *
+ * @return The flag which determines whether <code>null</code> objects in
the property path will
+ * genenerate an <code>IllegalArgumentException</code> or not.
+ */
+ public boolean isIgnoreNull() {
+ return ignoreNull;
+ }
+}
diff --git
a/src/test/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformerTestCase.java
b/src/test/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformerTestCase.java
index 6cc7eba..c5c73c6 100644
---
a/src/test/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformerTestCase.java
+++
b/src/test/java/org/apache/commons/beanutils2/BeanToPropertyValueTransformerTestCase.java
@@ -1,246 +1,246 @@
-/*
- * 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.commons.beanutils2;
-
-import junit.framework.TestCase;
-
-
-/**
- * Test cases for <code>BeanToPropertyValueTransformer</code>.
- *
- */
-public class BeanToPropertyValueTransformerTestCase extends TestCase {
-
- private static final Integer expectedIntegerValue = new Integer(123);
- private static final Long expectedLongValue = new Long(123);
- private static final Float expectedFloatValue = new Float(123.123f);
- private static final Double expectedDoubleValue = new
Double(567879.12344d);
- private static final Boolean expectedBooleanValue = Boolean.TRUE;
- private static final Byte expectedByteValue = new Byte("12");
-
- /**
- * Constructor for BeanToPropertyValueTransformerTestCase.
- *
- * @param name Name of this test case.
- */
- public BeanToPropertyValueTransformerTestCase(final String name) {
- super(name);
- }
-
- /**
- * Test transform with simple String property.
- */
- public void testTransformWithSimpleStringProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("stringProperty");
- final TestBean testBean = new TestBean("foo");
- assertEquals("foo", transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple String property and null value.
- *
- */
- public void testTransformWithSimpleStringPropertyAndNullValue() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("stringProperty");
- final TestBean testBean = new TestBean((String) null);
- assertNull(transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple int property.
- */
- public void testTransformWithSimpleIntProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("intProperty");
- final TestBean testBean = new
TestBean(expectedIntegerValue.intValue());
- assertEquals(expectedIntegerValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple long property.
- */
- public void testTransformWithSimpleLongProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("longProperty");
- final TestBean testBean = new TestBean();
- testBean.setLongProperty(expectedLongValue.longValue());
- assertEquals(expectedLongValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple float property.
- */
- public void testTransformWithSimpleFloatProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("floatProperty");
- final TestBean testBean = new
TestBean(expectedFloatValue.floatValue());
- assertEquals(expectedFloatValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple double property.
- */
- public void testTransformWithSimpleDoubleProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("doubleProperty");
- final TestBean testBean = new
TestBean(expectedDoubleValue.doubleValue());
- assertEquals(expectedDoubleValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple byte property.
- */
- public void testTransformWithSimpleByteProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("byteProperty");
- final TestBean testBean = new TestBean();
- testBean.setByteProperty(expectedByteValue.byteValue());
- assertEquals(expectedByteValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with simple boolean property.
- */
- public void testTransformWithSimpleBooleanProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("booleanProperty");
- final TestBean testBean = new
TestBean(expectedBooleanValue.booleanValue());
- assertEquals(expectedBooleanValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with write only property.
- */
- public void testTransformWithWriteOnlyProperty() {
- try {
- new
BeanToPropertyValueTransformer("writeOnlyProperty").transform(new TestBean());
- } catch (final IllegalArgumentException e) {
- /* This is what should happen */
- }
- }
-
- /**
- * Test transform with read only property.
- */
- public void testTransformWithReadOnlyProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("readOnlyProperty");
- final TestBean testBean = new TestBean();
- assertEquals(testBean.getReadOnlyProperty(),
transformer.transform(testBean));
- }
-
- /**
- * Test transform with invalid property.
- */
- public void testTransformWithInvalidProperty() {
- try {
- new BeanToPropertyValueTransformer("bogusProperty").transform(new
TestBean());
- } catch (final IllegalArgumentException e) {
- /* This is what should happen */
- }
- }
-
- /**
- * Test transform with nested property.
- */
- public void testTransformWithNestedProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("anotherNested.stringProperty");
- final TestBean testBean = new TestBean();
- final TestBean nestedBean = new TestBean("foo");
- testBean.setAnotherNested(nestedBean);
- assertEquals("foo", transformer.transform(testBean));
- }
-
- /**
- * Test transform with mapped property.
- */
- public void testTransformWithMappedProperty() {
- BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("mappedProperty(test-key)");
- final TestBean testBean = new TestBean();
-
- // try a valid key
- testBean.setMappedProperty("test-key", "test-value");
- assertEquals("test-value", transformer.transform(testBean));
-
- // now try an invalid key
- transformer = new
BeanToPropertyValueTransformer("mappedProperty(bogus-key)");
- assertEquals(null, transformer.transform(testBean));
- }
-
- /**
- * Test transform with indexed property.
- */
- public void testTransformWithIndexedProperty() {
- BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("intIndexed[0]");
- final TestBean testBean = new TestBean();
- testBean.setIntIndexed(0, expectedIntegerValue.intValue());
- assertEquals(expectedIntegerValue, transformer.transform(testBean));
-
- // test index out of range
- transformer = new BeanToPropertyValueTransformer("intIndexed[9999]");
-
- try {
- transformer.transform(testBean);
- fail("Should have thrown an ArrayIndexOutOfBoundsException");
- } catch (final ArrayIndexOutOfBoundsException e) {
- /* this is what should happen */
- }
- }
-
- /**
- * Test transform with nested indexed property.
- */
- public void testTransformWithNestedIndexedProperty() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("anotherNested.intIndexed[0]");
- final TestBean testBean = new TestBean();
- final TestBean nestedBean = new TestBean();
- nestedBean.setIntIndexed(0, expectedIntegerValue.intValue());
- testBean.setAnotherNested(nestedBean);
- assertEquals(expectedIntegerValue, transformer.transform(testBean));
- }
-
- /**
- * Test transform with null in property path.
- */
- public void testTransformWithNullInPath() {
- final BeanToPropertyValueTransformer transformer =
- new BeanToPropertyValueTransformer("anotherNested.stringProperty");
-
- try {
- transformer.transform(new TestBean());
- fail("Should have throw IllegalArgumentException");
- } catch (final IllegalArgumentException e) {
- /* ignore this is what should happen */
- }
- }
-
- /**
- * Test transform with null in property path and ignore = true.
- */
- public void testTransformWithNullInPathAndIgnoreTrue() {
- final BeanToPropertyValueTransformer transformer =
- new
BeanToPropertyValueTransformer("anotherNested.stringProperty",true);
- assertEquals(null, transformer.transform(new TestBean()));
- }
-}
+/*
+ * 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.commons.beanutils2;
+
+import junit.framework.TestCase;
+
+
+/**
+ * Test cases for <code>BeanToPropertyValueTransformer</code>.
+ *
+ */
+public class BeanToPropertyValueTransformerTestCase extends TestCase {
+
+ private static final Integer expectedIntegerValue = new Integer(123);
+ private static final Long expectedLongValue = new Long(123);
+ private static final Float expectedFloatValue = new Float(123.123f);
+ private static final Double expectedDoubleValue = new
Double(567879.12344d);
+ private static final Boolean expectedBooleanValue = Boolean.TRUE;
+ private static final Byte expectedByteValue = new Byte("12");
+
+ /**
+ * Constructor for BeanToPropertyValueTransformerTestCase.
+ *
+ * @param name Name of this test case.
+ */
+ public BeanToPropertyValueTransformerTestCase(final String name) {
+ super(name);
+ }
+
+ /**
+ * Test transform with simple String property.
+ */
+ public void testTransformWithSimpleStringProperty() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new BeanToPropertyValueTransformer<>("stringProperty");
+ final TestBean testBean = new TestBean("foo");
+ assertEquals("foo", transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple String property and null value.
+ *
+ */
+ public void testTransformWithSimpleStringPropertyAndNullValue() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new BeanToPropertyValueTransformer<>("stringProperty");
+ final TestBean testBean = new TestBean((String) null);
+ assertNull(transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple int property.
+ */
+ public void testTransformWithSimpleIntProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Integer> transformer =
+ new BeanToPropertyValueTransformer<>("intProperty");
+ final TestBean testBean = new
TestBean(expectedIntegerValue.intValue());
+ assertEquals(expectedIntegerValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple long property.
+ */
+ public void testTransformWithSimpleLongProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Long> transformer =
+ new BeanToPropertyValueTransformer<>("longProperty");
+ final TestBean testBean = new TestBean();
+ testBean.setLongProperty(expectedLongValue.longValue());
+ assertEquals(expectedLongValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple float property.
+ */
+ public void testTransformWithSimpleFloatProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Float> transformer =
+ new BeanToPropertyValueTransformer<>("floatProperty");
+ final TestBean testBean = new
TestBean(expectedFloatValue.floatValue());
+ assertEquals(expectedFloatValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple double property.
+ */
+ public void testTransformWithSimpleDoubleProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Double> transformer =
+ new BeanToPropertyValueTransformer<>("doubleProperty");
+ final TestBean testBean = new
TestBean(expectedDoubleValue.doubleValue());
+ assertEquals(expectedDoubleValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple byte property.
+ */
+ public void testTransformWithSimpleByteProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Byte> transformer =
+ new BeanToPropertyValueTransformer<>("byteProperty");
+ final TestBean testBean = new TestBean();
+ testBean.setByteProperty(expectedByteValue.byteValue());
+ assertEquals(expectedByteValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with simple boolean property.
+ */
+ public void testTransformWithSimpleBooleanProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Boolean> transformer =
+ new BeanToPropertyValueTransformer<>("booleanProperty");
+ final TestBean testBean = new
TestBean(expectedBooleanValue.booleanValue());
+ assertEquals(expectedBooleanValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with write only property.
+ */
+ public void testTransformWithWriteOnlyProperty() {
+ try {
+ new
BeanToPropertyValueTransformer<>("writeOnlyProperty").apply(new TestBean());
+ } catch (final IllegalArgumentException e) {
+ /* This is what should happen */
+ }
+ }
+
+ /**
+ * Test transform with read only property.
+ */
+ public void testTransformWithReadOnlyProperty() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new BeanToPropertyValueTransformer<>("readOnlyProperty");
+ final TestBean testBean = new TestBean();
+ assertEquals(testBean.getReadOnlyProperty(),
transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with invalid property.
+ */
+ public void testTransformWithInvalidProperty() {
+ try {
+ new BeanToPropertyValueTransformer<>("bogusProperty").apply(new
TestBean());
+ } catch (final IllegalArgumentException e) {
+ /* This is what should happen */
+ }
+ }
+
+ /**
+ * Test transform with nested property.
+ */
+ public void testTransformWithNestedProperty() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new
BeanToPropertyValueTransformer<>("anotherNested.stringProperty");
+ final TestBean testBean = new TestBean();
+ final TestBean nestedBean = new TestBean("foo");
+ testBean.setAnotherNested(nestedBean);
+ assertEquals("foo", transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with mapped property.
+ */
+ public void testTransformWithMappedProperty() {
+ BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new BeanToPropertyValueTransformer<>("mappedProperty(test-key)");
+ final TestBean testBean = new TestBean();
+
+ // try a valid key
+ testBean.setMappedProperty("test-key", "test-value");
+ assertEquals("test-value", transformer.apply(testBean));
+
+ // now try an invalid key
+ transformer = new
BeanToPropertyValueTransformer<>("mappedProperty(bogus-key)");
+ assertEquals(null, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with indexed property.
+ */
+ public void testTransformWithIndexedProperty() {
+ BeanToPropertyValueTransformer<TestBean, Integer> transformer =
+ new BeanToPropertyValueTransformer<>("intIndexed[0]");
+ final TestBean testBean = new TestBean();
+ testBean.setIntIndexed(0, expectedIntegerValue.intValue());
+ assertEquals(expectedIntegerValue, transformer.apply(testBean));
+
+ // test index out of range
+ transformer = new BeanToPropertyValueTransformer<>("intIndexed[9999]");
+
+ try {
+ transformer.apply(testBean);
+ fail("Should have thrown an ArrayIndexOutOfBoundsException");
+ } catch (final ArrayIndexOutOfBoundsException e) {
+ /* this is what should happen */
+ }
+ }
+
+ /**
+ * Test transform with nested indexed property.
+ */
+ public void testTransformWithNestedIndexedProperty() {
+ final BeanToPropertyValueTransformer<TestBean, Integer> transformer =
+ new
BeanToPropertyValueTransformer<>("anotherNested.intIndexed[0]");
+ final TestBean testBean = new TestBean();
+ final TestBean nestedBean = new TestBean();
+ nestedBean.setIntIndexed(0, expectedIntegerValue.intValue());
+ testBean.setAnotherNested(nestedBean);
+ assertEquals(expectedIntegerValue, transformer.apply(testBean));
+ }
+
+ /**
+ * Test transform with null in property path.
+ */
+ public void testTransformWithNullInPath() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new
BeanToPropertyValueTransformer<>("anotherNested.stringProperty");
+
+ try {
+ transformer.apply(new TestBean());
+ fail("Should have throw IllegalArgumentException");
+ } catch (final IllegalArgumentException e) {
+ /* ignore this is what should happen */
+ }
+ }
+
+ /**
+ * Test transform with null in property path and ignore = true.
+ */
+ public void testTransformWithNullInPathAndIgnoreTrue() {
+ final BeanToPropertyValueTransformer<TestBean, String> transformer =
+ new
BeanToPropertyValueTransformer<>("anotherNested.stringProperty",true);
+ assertEquals(null, transformer.apply(new TestBean()));
+ }
+}