From f8e77d4ff102e34141b428d2aa450cf5c98b3959 Mon Sep 17 00:00:00 2001 From: "Mark R. Diggory" Date: Tue, 1 Jun 2004 22:10:17 +0000 Subject: [PATCH] Moving BeanTransformer to Experimental git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/math/trunk@141260 13f79535-47bb-0310-9956-ffa450edef68 --- .../commons/math/util/BeanTransformer.java | 79 ++++++++++++++++ .../math/util/BeanTransformerTest.java | 94 +++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 src/experimental/org/apache/commons/math/util/BeanTransformer.java create mode 100644 src/experimental/org/apache/commons/math/util/BeanTransformerTest.java diff --git a/src/experimental/org/apache/commons/math/util/BeanTransformer.java b/src/experimental/org/apache/commons/math/util/BeanTransformer.java new file mode 100644 index 000000000..28a53cc8f --- /dev/null +++ b/src/experimental/org/apache/commons/math/util/BeanTransformer.java @@ -0,0 +1,79 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed 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.math.util; + +import java.lang.reflect.InvocationTargetException; +import org.apache.commons.math.MathException; +import org.apache.commons.beanutils.PropertyUtils; + +/** + * Uses PropertyUtils to map a Bean getter to a double value. + * @version $Revision: 1.1 $ $Date: 2004/06/01 22:10:17 $ + */ +public class BeanTransformer implements NumberTransformer { + + /** + * The propertyName for this Transformer + */ + private String propertyName; + + /** + * Create a BeanTransformer + */ + public BeanTransformer() { + this(null); + } + + /** + * Create a BeanTransformer with a specific PropertyName. + * @param property The property. + */ + public BeanTransformer(final String property) { + super(); + setPropertyName(property); + } + + /** + * Get the property String + * @return the Property Name String + */ + public String getPropertyName() { + return propertyName; + } + + /** + * Set the propertyString + * @param string The string to set the property to. + */ + public void setPropertyName(final String string) { + propertyName = string; + } + + /** + * @see org.apache.commons.math.util.NumberTransformer#transform(java.lang.Object) + */ + public double transform(final Object o) throws MathException { + try { + return ((Number) PropertyUtils.getProperty(o, getPropertyName())).doubleValue(); + } catch (IllegalAccessException e) { + throw new MathException("IllegalAccessException in Transformation: " + e.getMessage(), e); + } catch (InvocationTargetException e) { + throw new MathException("InvocationTargetException in Transformation: " + e.getMessage(), e); + } catch (NoSuchMethodException e) { + throw new MathException("oSuchMethodException in Transformation: " + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/experimental/org/apache/commons/math/util/BeanTransformerTest.java b/src/experimental/org/apache/commons/math/util/BeanTransformerTest.java new file mode 100644 index 000000000..42680ea1c --- /dev/null +++ b/src/experimental/org/apache/commons/math/util/BeanTransformerTest.java @@ -0,0 +1,94 @@ +/* + * Copyright 2003-2004 The Apache Software Foundation. + * + * Licensed 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.math.util; + +import org.apache.commons.math.MathException; +import org.apache.commons.math.TestUtils; + +import junit.framework.TestCase; + +/** + * @version $Revision: 1.1 $ $Date: 2004/06/01 22:10:17 $ + */ +public class BeanTransformerTest extends TestCase { + + /** + * + */ + public void testConstructor(){ + BeanTransformer b = new BeanTransformer(); + assertNull(b.getPropertyName()); + } + + /** + * + */ + public void testConstructorString(){ + String name = "property"; + BeanTransformer b = new BeanTransformer(name); + assertEquals(name, b.getPropertyName()); + } + + /** + * + */ + public void testSetPropertyName(){ + String name = "property"; + BeanTransformer b = new BeanTransformer(); + b.setPropertyName(name); + assertEquals(name, b.getPropertyName()); + } + + /** + * + */ + public void testTransformNoSuchMethod(){ + BeanTransformer b = new BeanTransformer("z"); + TestBean target = new TestBean(); + try { + b.transform(target); + fail("Expecting MathException"); + } catch (MathException e) { + // expected + } + } + + /** + * + */ + public void testTransform() throws Exception { + BeanTransformer b = new BeanTransformer("x"); + TestBean target = new TestBean(); + double value = Double.NaN; + value = b.transform(target); + TestUtils.assertEquals(1.0, value, 1.0e-2); + } + + /** + * + */ + public void testTransformInvalidType() throws Exception { + BeanTransformer b = new BeanTransformer("y"); + TestBean target = new TestBean(); + try { + b.transform(target); + fail("Expecting ClassCastException"); + } catch(ClassCastException ex){ + // success + } + } +}