Merge "Issue #2091 added getFields method to ConvertUtil" into development
Former-commit-id:2383ccc3e0
[formerly 8600b56f3a83eda25c004262a98999d84ab01b89] Former-commit-id:182ae795fc
This commit is contained in:
commit
2f3eeaef80
4 changed files with 186 additions and 2 deletions
|
@ -3,5 +3,6 @@
|
|||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="test/bin" path="test/src"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
|
@ -2,3 +2,4 @@ source.. = src/
|
|||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.
|
||||
src.excludes = test/src/
|
||||
|
|
|
@ -37,6 +37,7 @@ import org.apache.commons.beanutils.Converter;
|
|||
* Mar 19, 2009 njensen Initial creation
|
||||
* Mar 13, 2013 1789 bsteffen Move Calendar and Date parsing out of
|
||||
* ConvertUtil and also fix date parsing.
|
||||
* Jun 11, 2013 2091 bclement added getFields utility/javadoc
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -76,7 +77,7 @@ public class ConvertUtil {
|
|||
* If the string value cannot be converted to the desired class
|
||||
* type
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public static Object convertObject(String value, Class<?> desiredClass) {
|
||||
if (value == null || value.equals("null")) {
|
||||
return null;
|
||||
|
@ -94,12 +95,36 @@ public class ConvertUtil {
|
|||
return ConvertUtils.convert(obj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert value to same class as field of entity.
|
||||
*
|
||||
* @param value
|
||||
* string representation of object
|
||||
* @param entity
|
||||
* @param fieldName
|
||||
* @return
|
||||
* @throws SecurityException
|
||||
* @throws NoSuchFieldException
|
||||
*/
|
||||
public static Object convertAsType(String value, Class<?> entity,
|
||||
String fieldName) throws SecurityException, NoSuchFieldException {
|
||||
Field field = getField(fieldName, entity);
|
||||
return convertObject(value, field.getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert value to same class as addressed field of entity.
|
||||
*
|
||||
* @param value
|
||||
* string representation of object
|
||||
* @param entity
|
||||
* @param fieldPath
|
||||
* path that addresses the target field for conversion. First
|
||||
* field name on path is a field of entity.
|
||||
* @return
|
||||
* @throws SecurityException
|
||||
* @throws NoSuchFieldException
|
||||
*/
|
||||
public static Object convertAsType(String value, Class<?> entity,
|
||||
String[] fieldPath) throws SecurityException, NoSuchFieldException {
|
||||
Field f = getField(fieldPath[0], entity);
|
||||
|
@ -109,7 +134,39 @@ public class ConvertUtil {
|
|||
return convertObject(value, f.getType());
|
||||
}
|
||||
|
||||
protected static Field getField(String fieldName, Class<?> c)
|
||||
/**
|
||||
* Get array of Field objects for nested field path.
|
||||
*
|
||||
* @param entity
|
||||
* @param fieldPath
|
||||
* name of fields in each nested object starting with a field in
|
||||
* entity
|
||||
* @return
|
||||
* @throws SecurityException
|
||||
* @throws NoSuchFieldException
|
||||
*/
|
||||
public static Field[] getFields(Class<?> entity, String[] fieldPath)
|
||||
throws SecurityException, NoSuchFieldException {
|
||||
Field[] rval = new Field[fieldPath.length];
|
||||
rval[0] = getField(fieldPath[0], entity);
|
||||
for (int i = 1; i < fieldPath.length; ++i) {
|
||||
rval[i] = getField(fieldPath[i], rval[i - 1].getType());
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursive method to get Field object from class.
|
||||
*
|
||||
* @param fieldName
|
||||
* name of field in c
|
||||
* @param c
|
||||
* entity that has field
|
||||
* @return
|
||||
* @throws SecurityException
|
||||
* @throws NoSuchFieldException
|
||||
*/
|
||||
public static Field getField(String fieldName, Class<?> c)
|
||||
throws SecurityException, NoSuchFieldException {
|
||||
Field rval;
|
||||
try {
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
// header placeholder 2a20 c8e1
|
||||
package com.raytheon.uf.common.util;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Tests for convert utils
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 11, 2013 bclement Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bclement
|
||||
* @version 1.0
|
||||
*/
|
||||
public class ConvertUtilsTest {
|
||||
|
||||
public static class TestEnity {
|
||||
|
||||
protected int number;
|
||||
|
||||
protected NestedTestEnity nested;
|
||||
|
||||
/**
|
||||
* @param number
|
||||
* @param nested
|
||||
*/
|
||||
public TestEnity(int number, NestedTestEnity nested) {
|
||||
this.number = number;
|
||||
this.nested = nested;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the number
|
||||
*/
|
||||
public int getNumber() {
|
||||
return number;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param number
|
||||
* the number to set
|
||||
*/
|
||||
public void setNumber(int number) {
|
||||
this.number = number;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nested
|
||||
*/
|
||||
public NestedTestEnity getNested() {
|
||||
return nested;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nested
|
||||
* the nested to set
|
||||
*/
|
||||
public void setNested(NestedTestEnity nested) {
|
||||
this.nested = nested;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class NestedTestEnity {
|
||||
|
||||
protected Date time;
|
||||
|
||||
/**
|
||||
* @param time
|
||||
*/
|
||||
public NestedTestEnity(Date time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the time
|
||||
*/
|
||||
public Date getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param time
|
||||
* the time to set
|
||||
*/
|
||||
public void setTime(Date time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws NoSuchFieldException
|
||||
* @throws SecurityException
|
||||
* @throws IllegalAccessException
|
||||
* @throws IllegalArgumentException
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void getFieldsTest() throws SecurityException, NoSuchFieldException,
|
||||
IllegalArgumentException, IllegalAccessException {
|
||||
final Date now = new Date();
|
||||
|
||||
final String[] path = { "nested", "time" };
|
||||
final TestEnity ent = new TestEnity(42, new NestedTestEnity(now));
|
||||
Field[] res = ConvertUtil.getFields(TestEnity.class, path);
|
||||
Assert.assertEquals(path.length, res.length);
|
||||
|
||||
NestedTestEnity resNested = (NestedTestEnity) res[0].get(ent);
|
||||
Date resDate = (Date) res[1].get(resNested);
|
||||
Assert.assertEquals(now, resDate);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue