From: Wolfgang M. M. <wol...@us...> - 2004-08-13 21:28:56
|
Update of /cvsroot/exist/eXist-1.0/src/org/exist/xquery/value In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16322/src/org/exist/xquery/value Modified Files: AbstractSequence.java Log Message: Allow arrays to be passed to Java methods from XQuery. Index: AbstractSequence.java =================================================================== RCS file: /cvsroot/exist/eXist-1.0/src/org/exist/xquery/value/AbstractSequence.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** AbstractSequence.java 2 Jun 2004 11:34:34 -0000 1.5 --- AbstractSequence.java 13 Aug 2004 21:28:48 -0000 1.6 *************** *** 21,24 **** --- 21,25 ---- package org.exist.xquery.value; + import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; *************** *** 129,133 **** if(javaClass.isAssignableFrom(Sequence.class)) return 0; ! else if(javaClass.isAssignableFrom(List.class)) return 1; else if(javaClass == Object.class) --- 130,134 ---- if(javaClass.isAssignableFrom(Sequence.class)) return 0; ! else if(javaClass.isAssignableFrom(List.class) || javaClass.isArray()) return 1; else if(javaClass == Object.class) *************** *** 144,150 **** */ public Object toJavaObject(Class target) throws XPathException { ! if(target.isAssignableFrom(Sequence.class)) return this; ! else if(target.isAssignableFrom(List.class)) { List l = new ArrayList(getLength()); for(SequenceIterator i = iterate(); i.hasNext(); ) { --- 145,180 ---- */ public Object toJavaObject(Class target) throws XPathException { ! if(target.isAssignableFrom(Sequence.class)) { return this; ! } else if(target.isArray()) { ! Class componentType = target.getComponentType(); ! // assume single-dimensional, then double-check that instance really matches desired type ! Object array = Array.newInstance(componentType, getLength()); ! if (!target.isInstance(array)) return null; ! int index = 0; ! for(SequenceIterator i = iterate(); i.hasNext(); index++) { ! Item item = i.nextItem(); ! Object obj = item.toJavaObject(componentType); ! if(target == double.class) ! Array.setDouble(array, index, ((Double)obj).doubleValue()); ! else if(target == float.class) ! Array.setFloat(array, index, ((Float)obj).intValue()); ! else if(target == long.class) ! Array.setLong(array, index, ((Long)obj).intValue()); ! else if(target == int.class) ! Array.setInt(array, index, ((Integer)obj).intValue()); ! else if(target == short.class) ! Array.setShort(array, index, ((Short)obj).shortValue()); ! else if(target == byte.class) ! Array.setByte(array, index, ((Byte)obj).byteValue()); ! else if(target == boolean.class) ! Array.setBoolean(array, index, ((Boolean)obj).booleanValue()); ! else if(target == char.class) ! Array.setChar(array, index, ((Character)obj).charValue()); ! else ! Array.set(array, index, obj); ! } ! return array; ! } else if(target.isAssignableFrom(List.class)) { List l = new ArrayList(getLength()); for(SequenceIterator i = iterate(); i.hasNext(); ) { |