You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cs...@apache.org on 2005/12/15 18:20:17 UTC

svn commit: r357046 - in /beehive/trunk/system-controls: src/webservice/control/org/apache/beehive/controls/system/webservice/utils/ test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/

Author: cschoett
Date: Thu Dec 15 09:20:07 2005
New Revision: 357046

URL: http://svn.apache.org/viewcvs?rev=357046&view=rev
Log:
Removed axis dependency from HolderUtils.  Also updated and added to HolderUtils junit tests.

Modified:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
    beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java?rev=357046&r1=357045&r2=357046&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java Thu Dec 15 09:20:07 2005
@@ -17,61 +17,152 @@
  */
 package org.apache.beehive.controls.system.webservice.utils;
 
-import java.lang.reflect.Field;
 import javax.xml.rpc.holders.Holder;
-
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Utilities for moving values into and out of jaxrpc Holders.
+ */
 public class HolderUtils {
+
+    /**
+     * Stuff a value into a holder class.
+     *
+     * @param holder The holder.
+     * @param value  The value.
+     * @throws NoSuchFieldException
+     * @throws IllegalAccessException
+     */
     public static void stuffHolderValue(Holder holder, Object value)
-        throws NoSuchFieldException, IllegalAccessException {
+            throws NoSuchFieldException, IllegalAccessException {
+
         Field valueField = holder.getClass().getField("value");
         Object curValueInHolder = valueField.get(holder);
         Class classOfValueFieldInHolder;
-        if(curValueInHolder == null) {
+
+        if (curValueInHolder == null) {
             classOfValueFieldInHolder = valueField.getType();
         }
         else {
             classOfValueFieldInHolder = curValueInHolder.getClass();
         }
 
-        if(null == value) {
+        if (value == null) {
             setFieldInObject(valueField, holder, null);
             return;
         }
-        if(classOfValueFieldInHolder.isAssignableFrom(value.getClass())) {
-            setFieldInObject(valueField, holder, value);
-
-        }
-        else { // we need to convert the class to the holder type
-
-            try {
-                Object convertedValue = org.apache.axis.utils.JavaUtils
-                    .convert(value, classOfValueFieldInHolder);
-                setFieldInObject(valueField, holder, convertedValue);
-            }
-            catch(IllegalArgumentException e) {
-
-                e.printStackTrace();
-            }
-            catch(IllegalAccessException e) {
-
-                e.printStackTrace();
-            }
-        }
 
+        Object convertedValue = convertToHolderType(value, classOfValueFieldInHolder);
+        setFieldInObject(valueField, holder, convertedValue);
     }
 
+    /**
+     * Set the field value in the specified object.
+     *
+     * @param valueField Field to set.
+     * @param destObject Object.
+     * @param value      Field value.
+     * @throws IllegalArgumentException
+     * @throws IllegalAccessException
+     */
     private static void setFieldInObject(Field valueField, Object destObject, Object value)
-        throws IllegalArgumentException,
-        IllegalAccessException {
-        if(valueField.getType().isPrimitive()) {
-            if(value == null)
+            throws IllegalArgumentException, IllegalAccessException {
+
+        if (valueField.getType().isPrimitive()) {
+            if (value == null) {
                 ; // Don't need to set anything
-            else
+            }
+            else {
                 valueField.set(destObject, value);
+            }
         }
         else {
             valueField.set(destObject, value);
         }
     }
 
+    /**
+     * Convert value to the class of the holder field value.
+     *
+     * @param value
+     * @param classOfValueFieldInHolder
+     * @return The converted value, null if value cannot be converted.
+     */
+    private static Object convertToHolderType(Object value, Class classOfValueFieldInHolder) {
+
+        if (classOfValueFieldInHolder == null || value == null) {
+            return value;
+        }
+
+        // simple transformation
+        if (classOfValueFieldInHolder.isAssignableFrom(value.getClass())) {
+            return value;
+        }
+
+        // Calendar -> Date
+        if (value instanceof Calendar && classOfValueFieldInHolder == Date.class) {
+            return ((Calendar) value).getTime();
+        }
+        if (value instanceof Date && classOfValueFieldInHolder == Calendar.class) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime((Date) value);
+            return calendar;
+        }
+
+        // Calendar -> java.sql.Date
+        if (value instanceof Calendar && classOfValueFieldInHolder == java.sql.Date.class) {
+            return new java.sql.Date(((Calendar) value).getTime().getTime());
+        }
+
+        // HashMap -> Hashtable
+        if (value instanceof HashMap && classOfValueFieldInHolder == Hashtable.class) {
+            return new Hashtable((HashMap) value);
+        }
+
+        // value -> array transformation
+        if (classOfValueFieldInHolder.isArray() &&
+                !classOfValueFieldInHolder.getComponentType().equals(Object.class) &&
+                classOfValueFieldInHolder.getComponentType().isAssignableFrom(value.getClass())) {
+            Object array = Array.newInstance(classOfValueFieldInHolder.getComponentType(), 1);
+            Array.set(array, 0, value);
+            return array;
+        }
+
+        // list -> array transformation
+        if (classOfValueFieldInHolder.isArray() && value instanceof List) {
+            return convertListToArray((List) value, classOfValueFieldInHolder);
+        }
+
+        // can't convert - return null
+        return null;
+    }
+
+    /**
+     * Convert a java.util.List implementation to an array.
+     *
+     * @param list      List to convert.
+     * @param arrayType Array type to convert to.
+     * @return Array of arrayTYpe, null if can't convert.
+     */
+    private static Object convertListToArray(List list, Class arrayType) {
+        if (list.isEmpty()) {
+            return Array.newInstance(arrayType, 0);
+        }
+
+        Class listComponentClazz = list.get(0).getClass();
+        if (listComponentClazz.isAssignableFrom(arrayType.getComponentType())) {
+            Object[] newArray = (Object[]) Array.newInstance(arrayType.getComponentType(), 1);
+            return list.toArray(newArray);
+        }
+
+        return null;
+    }
 }

Modified: beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java?rev=357046&r1=357045&r2=357046&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java Thu Dec 15 09:20:07 2005
@@ -17,66 +17,126 @@
  */
 package org.apache.beehive.controls.system.webservice.units.holders;
 
-import java.util.ArrayList;
-
-import javax.xml.rpc.holders.Holder;
-import javax.xml.rpc.holders.IntHolder;
-
-import org.apache.beehive.wsm.databinding.GenericHolder;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
 import org.apache.beehive.controls.system.webservice.utils.HolderUtils;
+import org.apache.beehive.wsm.databinding.GenericHolder;
 
-import junit.framework.TestCase;
+import javax.xml.rpc.holders.IntHolder;
+import javax.xml.rpc.holders.BigDecimalHolder;
+import javax.xml.rpc.holders.IntegerWrapperHolder;
+import javax.xml.rpc.holders.CalendarHolder;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.math.BigDecimal;
 
 public class HolderUtilsTest extends TestCase {
 
-	public void testStuffingHolders() throws NoSuchFieldException, IllegalAccessException {
-		 GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
-		 Holder aHolder = myHolder;
-
-		MyClass theValue = new MyClass("AAA");
-		Object anObject = theValue;
-
-				
-		HolderUtils.stuffHolderValue(myHolder, anObject);
-		assertTrue("AAA".equals(myHolder.value.name));
-				
-		// // stuff null
-		HolderUtils.stuffHolderValue(myHolder, null);
-		 System.out.println("After stuffing null to straight holder my name is: " + myHolder.value);
-
-		// stuff object to holder of static array
-		MyClassArrayHolder myStaticArrayHolder = new MyClassArrayHolder();
-		Holder anStaticArrayHolder = myStaticArrayHolder;
-		HolderUtils.stuffHolderValue(anStaticArrayHolder, anObject);
-		MyClass[] myStaticArrayValueResult = myStaticArrayHolder.value;
-		assertTrue("AAA".equals(myStaticArrayValueResult[0].name));
-
-		// holder of array stuff object
-		GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
-		Holder anArrayHolder = myArrayHolder;
-		HolderUtils.stuffHolderValue(anArrayHolder, anObject);
-		MyClass[] myArrayValueResult = myArrayHolder.value;
-		assertTrue("AAA".equals(myArrayValueResult[0].name));
-
-		// holder of array stuff array list of objects.
-		myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
-		anArrayHolder = myArrayHolder;
-		ArrayList myClassList = new ArrayList();
-		myClassList.add(new MyClass("aaaa"));
-		myClassList.add(new MyClass("bbbb"));
-		HolderUtils.stuffHolderValue(anArrayHolder, myClassList);
-		myArrayValueResult = myArrayHolder.value;
-		assertTrue("aaaa".equals(myArrayValueResult[0].name));
-		assertTrue("bbbb".equals( myArrayValueResult[1].name));
-		
-
-		// stuff null to my holder of primitive type
-		IntHolder ih = new IntHolder();
-		HolderUtils.stuffHolderValue(ih, null);
-		assertTrue(0 == ih.value);
-		
-
-	}
+    public void testStuffIntHolder() throws Exception {
+        IntHolder ih = new IntHolder();
+        HolderUtils.stuffHolderValue(ih, null);
+        assertEquals(0, ih.value);
+
+        HolderUtils.stuffHolderValue(ih, new Integer(8));
+        assertEquals(8, ih.value);
+
+        HolderUtils.stuffHolderValue(ih, 9);
+        assertEquals(9, ih.value);
+    }
+
+    public void testStuffIntegerWrapperHolder() throws Exception {
+        IntegerWrapperHolder ih = new IntegerWrapperHolder();
+        HolderUtils.stuffHolderValue(ih, null);
+        assertNull(ih.value);
+
+        HolderUtils.stuffHolderValue(ih, new Integer(5));
+        assertEquals(5, ih.value.intValue());
+
+        HolderUtils.stuffHolderValue(ih, 4);
+        assertEquals(4, ih.value.intValue());
+    }
+
+    public void testStuffBigDecimalHolder() throws Exception {
+        BigDecimalHolder bdh = new BigDecimalHolder();
+        HolderUtils.stuffHolderValue(bdh, null);
+        assertNull(bdh.value);
+
+        HolderUtils.stuffHolderValue(bdh, BigDecimal.TEN);
+        assertEquals(BigDecimal.TEN, bdh.value);
+    }
+
+    public void testStuffCalendarHolder() throws Exception {
+        CalendarHolder ch = new CalendarHolder();
+        Calendar c = new GregorianCalendar();
+        c.setTimeInMillis(123456789);
+        HolderUtils.stuffHolderValue(ch, c);
+        assertEquals(0, c.compareTo(ch.value));
+    }
+
+    public void testGenericHolderComplexValue() throws Exception {
+        GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
+        MyClass theValue = new MyClass("AAA");
+        HolderUtils.stuffHolderValue(myHolder, theValue);
+        assertEquals("AAA", myHolder.value.name);
+    }
+
+    public void testGenericHolderNullValue() throws Exception {
+        GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
+        HolderUtils.stuffHolderValue(myHolder, null);
+        assertNull(myHolder.value);
+    }
+
+    public void testMyClassArrayHolderArrayStuffObject() throws Exception {
+
+        // stuff object to holder of static array
+        MyClassArrayHolder myStaticArrayHolder = new MyClassArrayHolder();
+        MyClass theValue = new MyClass("BBB");
+        HolderUtils.stuffHolderValue(myStaticArrayHolder, theValue);
+        MyClass[] myStaticArrayValueResult = myStaticArrayHolder.value;
+        assertEquals("BBB", myStaticArrayValueResult[0].name);
+    }
+
+    public void testGenericHolderStuffObject() throws Exception {
+        // holder of array stuff object
+        GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
+        MyClass theValue = new MyClass("CCC");
+        HolderUtils.stuffHolderValue(myArrayHolder, theValue);
+        MyClass[] myArrayValueResult = myArrayHolder.value;
+        assertEquals("CCC", myArrayValueResult[0].name);
+    }
+
+    public void testGenericHolderArrayStuffArray() throws Exception {
+        // holder of array stuff array list of objects.
+        GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
+        ArrayList<MyClass> myClassList = new ArrayList<MyClass>();
+        myClassList.add(new MyClass("aaaa"));
+        myClassList.add(new MyClass("bbbb"));
+        HolderUtils.stuffHolderValue(myArrayHolder, myClassList);
+        MyClass[] myArrayValueResult = myArrayHolder.value;
+        assertEquals("aaaa", myArrayValueResult[0].name);
+        assertEquals("bbbb", myArrayValueResult[1].name);
+
+    }
+
+    public void testMyClassListHolderStuffList() throws Exception {
+        MyClassListHolder myHolder = new MyClassListHolder();
+        ArrayList<MyClass> myClassList = new ArrayList<MyClass>();
+        myClassList.add(new MyClass("cccc"));
+        myClassList.add(new MyClass("dddd"));
+        HolderUtils.stuffHolderValue(myHolder, myClassList);
+        assertEquals("cccc", ((MyClass)myHolder.value.get(0)).name);
+        assertEquals("dddd", ((MyClass)myHolder.value.get(1)).name);
+    }
+
+    public static Test suite() {
+        return new TestSuite(org.apache.beehive.controls.system.webservice.units.holders.HolderUtilsTest.class);
+    }
+
+    public static void main(String[] args) {
+        junit.textui.TestRunner.run(suite());
+    }
 }