Update of /cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/resources
In directory 
sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv956/modules/jdo/src/xdoclet/modules/jdo/resources

Modified Files:
        java_objectid.xdt 
Log Message:
The generated JDO object IDs encode their numeric IDs now with the radix 36 by 
default. In order to allow users to still use the previous behaviour, the radix 
can be passed to the jdodoclet task as seen below:

<jdodoclet jdospec="2.0" destdir="${project.dir}/${ejbsrc.dir}">
        <fileset dir="${project.dir}/${src.dir}" defaultexcludes="yes"/>
        <jdometadata project="package" generation="package"/>
        <jdoobjectidgenerator
                radix="10"
                interfaces="org.nightlabs.jdo.ObjectID"/>
</jdodoclet>

Using the radix 36 (i.e. 0..9, a..z) makes the generated Strings much shorter 
(e.g. a 10-digit number in decimal system gets shortened to 6 digits).

Additionally, the field-order for primary-key fields needs to be either 
complete or omitted. To allow partial declarations is error-prone.

Index: java_objectid.xdt
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/resources/java_objectid.xdt,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** java_objectid.xdt   25 Jul 2007 16:10:51 -0000      1.8
--- java_objectid.xdt   31 Jul 2007 14:37:28 -0000      1.9
***************
*** 11,16 ****
  
  import java.io.Serializable;
! import java.io.UnsupportedEncodingException;
! import java.lang.reflect.Constructor;
  import java.lang.reflect.Field;
  import java.lang.reflect.InvocationTargetException;
--- 11,15 ----
  
  import java.io.Serializable;
! import java.io.UnsupportedEncodingException;<XDtComment:comment> import 
java.lang.reflect.Constructor; </XDtComment:comment>
  import java.lang.reflect.Field;
  import java.lang.reflect.InvocationTargetException;
***************
*** 46,50 ****
        protected static final Byte NULLBYTE = new Byte((byte)0);
        protected static final Character NULLCHAR = new Character((char)0);
!       
        <XDtJdoObjectIdGenerator:forAllPrimaryKeyFields>
        /**
--- 45,54 ----
        protected static final Byte NULLBYTE = new Byte((byte)0);
        protected static final Character NULLCHAR = new Character((char)0);
! 
!       /**
!        * The radix that is used for encoding/decoding field values of numeric 
IDs (byte, short, int, long).
!        */
!       protected static final int RADIX = <XDtJdoObjectIdGenerator:getRadix/>;
! 
        <XDtJdoObjectIdGenerator:forAllPrimaryKeyFields>
        /**
***************
*** 137,143 ****
                                                field.set(this, NULLCHAR);
                                        if 
(byte.class.isAssignableFrom(fieldType) ||
                                                        
int.class.isAssignableFrom(fieldType) ||
                                                        
float.class.isAssignableFrom(fieldType) ||
!                                                       
long.class.isAssignableFrom(fieldType)) 
                                                field.set(this, NULLBYTE);      
                                
                                }
--- 141,149 ----
                                                field.set(this, NULLCHAR);
                                        if 
(byte.class.isAssignableFrom(fieldType) ||
+                                                       
short.class.isAssignableFrom(fieldType) ||
                                                        
int.class.isAssignableFrom(fieldType) ||
+                                                       
long.class.isAssignableFrom(fieldType) ||
                                                        
float.class.isAssignableFrom(fieldType) ||
!                                                       
double.class.isAssignableFrom(fieldType))
                                                field.set(this, NULLBYTE);      
                                
                                }
***************
*** 148,155 ****
                                        val = valStr;
                                }
-                               else if 
(Number.class.isAssignableFrom(fieldType)) {
-                                       Constructor c = 
fieldType.getConstructor(new Class[] {String.class});
-                                       val = c.newInstance(new Object[] 
{valStr});
-                               }
                                else if 
(boolean.class.isAssignableFrom(fieldType)) {
                                        val = new Boolean(valStr);
--- 154,157 ----
***************
*** 159,170 ****
                                }
                                else if 
(byte.class.isAssignableFrom(fieldType)) {
!                                       val = new Byte(valStr);
                                }
                                else if (int.class.isAssignableFrom(fieldType)) 
{
!                                       val = new Integer(valStr);
                                }
                                else if 
(long.class.isAssignableFrom(fieldType)) {
!                                       val = new Long(valStr);
!                               }
                                else
                                        throw new 
IllegalArgumentException("Type "+fieldType.getName()+" of member "+key+" is not 
unsupported!");
--- 161,179 ----
                                }
                                else if 
(byte.class.isAssignableFrom(fieldType)) {
!                                       val = new Byte(Byte.parseByte(valStr, 
RADIX));
!                               }
!                               else if 
(short.class.isAssignableFrom(fieldType)) {
!                                       val = new 
Short(Short.parseShort(valStr, RADIX));
                                }
                                else if (int.class.isAssignableFrom(fieldType)) 
{
!                                       val = new 
Integer(Integer.parseInt(valStr, RADIX));
                                }
                                else if 
(long.class.isAssignableFrom(fieldType)) {
!                                       val = new Long(Long.parseLong(valStr, 
RADIX));
!                               }<XDtComment:comment>
! //                            else if 
(Number.class.isAssignableFrom(fieldType)) { // we cannot do this anymore 
because of the radix and I don't think it's necessary, anyway.
! //                                    Constructor c = 
fieldType.getConstructor(new Class[] {String.class});
! //                                    val = c.newInstance(new Object[] 
{valStr});
! //                            }</XDtComment:comment>
                                else
                                        throw new 
IllegalArgumentException("Type "+fieldType.getName()+" of member "+key+" is not 
unsupported!");
***************
*** 174,177 ****
--- 183,214 ----
        }
  
+       protected static final String encodeFieldValue(Object object) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(String.valueOf(object), ENCODING);
+       }
+       protected static final String encodeFieldValue(boolean val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(String.valueOf(val), ENCODING);
+       }
+       protected static final String encodeFieldValue(char val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(String.valueOf(val), ENCODING);
+       }
+       protected static final String encodeFieldValue(byte val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(Integer.toString(val, RADIX), 
ENCODING);
+       }
+       protected static final String encodeFieldValue(short val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(Integer.toString(val, RADIX), 
ENCODING);
+       }
+       protected static final String encodeFieldValue(int val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(Integer.toString(val, RADIX), 
ENCODING);
+       }
+       protected static final String encodeFieldValue(long val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(Long.toString(val, RADIX), ENCODING);
+       }
+       protected static final String encodeFieldValue(float val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(String.valueOf(val), ENCODING);
+       }
+       protected static final String encodeFieldValue(double val) throws 
UnsupportedEncodingException {
+               return URLEncoder.encode(String.valueOf(val), ENCODING);
+       }
+ 
        /**
         * Create a string representation of this object id.
***************
*** 193,198 ****
                try {
                 <XDtJdoObjectIdGenerator:forAllPrimaryKeyFields>
!                
sb.append("<XDtJdoObjectIdGenerator:getCurrentPrimaryKeyFieldName/>=");
!                
sb.append(URLEncoder.encode(String.valueOf(<XDtJdoObjectIdGenerator:getCurrentPrimaryKeyFieldName/>),
 ENCODING));
                 <XDtJdoObjectIdGenerator:ifNotLastPrimaryKeyField>
                 sb.append('&');
--- 230,236 ----
                try {
                 <XDtJdoObjectIdGenerator:forAllPrimaryKeyFields>
!                
sb.append("<XDtJdoObjectIdGenerator:getCurrentPrimaryKeyFieldName/>=");<XDtComment:comment>
 
! //             
sb.append(URLEncoder.encode(String.valueOf(<XDtJdoObjectIdGenerator:getCurrentPrimaryKeyFieldName/>),
 ENCODING)); </XDtComment:comment>
!                
sb.append(encodeFieldValue(<XDtJdoObjectIdGenerator:getCurrentPrimaryKeyFieldName/>));
                 <XDtJdoObjectIdGenerator:ifNotLastPrimaryKeyField>
                 sb.append('&');
***************
*** 238,272 ****
        }
  
!       protected static int primitiveHashCode(boolean val) {
                return val ? 1231 : 1237;
        }
!       
!       protected static int primitiveHashCode(byte val) {
                return val;
        }
!       
!       protected static int primitiveHashCode(char val) {
                return val;
        }
!       
!       protected static int primitiveHashCode(double val) {
!               long bits = Double.doubleToLongBits(val);
!               return (int)(bits ^ (bits >>> 32));
!       }
!       
!       protected static int primitiveHashCode(float val) {
!               return Float.floatToIntBits(val);
        }
!       
!       protected static int primitiveHashCode(int val) {
                return val;
        }
!       
!       protected static int primitiveHashCode(long val) {
                return (int)(val ^ (val >>> 32));
        }
!       
!       protected static int primitiveHashCode(short val) {
!               return val;
        }
  
--- 276,310 ----
        }
  
!       protected static final int primitiveHashCode(boolean val) {
                return val ? 1231 : 1237;
        }
! 
!       protected static final int primitiveHashCode(char val) {
                return val;
        }
! 
!       protected static final int primitiveHashCode(byte val) {
                return val;
        }
! 
!       protected static final int primitiveHashCode(short val) {
!               return val;
        }
! 
!       protected static final int primitiveHashCode(int val) {
                return val;
        }
! 
!       protected static final int primitiveHashCode(long val) {
                return (int)(val ^ (val >>> 32));
        }
! 
!       protected static final int primitiveHashCode(float val) {
!               return Float.floatToIntBits(val);
!       }
! 
!       protected static final int primitiveHashCode(double val) {
!               long bits = Double.doubleToLongBits(val);
!               return (int)(bits ^ (bits >>> 32));
        }
  


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
xdoclet-devel mailing list
xdoclet-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to