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

Modified Files:
        JdoObjectIdGeneratorTagsHandler.java 
Log Message:
Modification by Marc Klinger: refined creation of serialVersionUID in generated 
ObjectID classes, added tag documentation

Index: JdoObjectIdGeneratorTagsHandler.java
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/JdoObjectIdGeneratorTagsHandler.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -r1.8 -r1.9
*** JdoObjectIdGeneratorTagsHandler.java        24 Jul 2007 17:45:07 -0000      
1.8
--- JdoObjectIdGeneratorTagsHandler.java        25 Jul 2007 16:10:51 -0000      
1.9
***************
*** 197,246 ****
          log.debug("enter method forAllPrimaryKeyFields...");
  
!         XClass clazz = getCurrentClass();
! 
!         List pkFields = new ArrayList();
! 
!         for (Iterator it = clazz.getFields().iterator(); it.hasNext(); ) {
!             XField field = (XField) it.next();
!             XDoc fieldDoc = field.getDoc();
! 
!             if (fieldDoc.hasTag("jdo.field")) {
!                 if 
("true".equals(fieldDoc.getTag("jdo.field").getAttributeValue("primary-key")))
!                     pkFields.add(field);
!             }
!         }
! 
!         // sort the pk-fields alphabetically by their name
!         Collections.sort(pkFields, pkFieldComparator);
! 
!         // if there is a desired order specified, we respect it
!         String fieldOrderStr = 
clazz.getDoc().getTagAttributeValue("jdo.create-objectid-class", "field-order");
! 
!         if (fieldOrderStr != null && !"".equals(fieldOrderStr)) {
!             String[] fieldOrder = fieldOrderStr.replaceAll(" ", 
"").split(",");
!             int newIdx = 0;
! 
!             for (int i = 0; i < fieldOrder.length; ++i) {
!                 String field = fieldOrder[i];
!                 int oldIdx = -1;
! 
!                 for (int m = 0; m < pkFields.size(); ++m) {
!                     if (((XField) pkFields.get(m)).getName().equals(field)) {
!                         oldIdx = m;
!                         break;
!                     }
!                 }
! 
!                 if (oldIdx >= 0) {
!                     XField f = (XField) pkFields.remove(oldIdx);
! 
!                     pkFields.add(newIdx, f);
!                     ++newIdx;
!                 }
!                 else
!                     throw new XDocletException("Class \"" + 
clazz.getQualifiedName() + "\" has field \"" + field + "\" specified in 
'@jdo.create-objectid-class field-order', but this field does not exist or is 
not tagged as primary-key-field!");
!             }
!         }
!         // if (fieldsOrderStr != null && !"".equals(fieldsOrderStr)) {
  
          if (log.isDebugEnabled())
--- 197,201 ----
          log.debug("enter method forAllPrimaryKeyFields...");
  
!         List pkFields = getAllPrimaryKeyFields();
  
          if (log.isDebugEnabled())
***************
*** 314,317 ****
--- 269,274 ----
      public String serialVersionUID(Properties attributes) throws 
XDocletException
      {
+         Log log = LogUtil.getLog(this.getClass(), "serialVersionUID");
+ 
          XDoc classDoc = getCurrentClass().getDoc();
          String serialVerisionUID = 
classDoc.getTagAttributeValue("jdo.create-objectid-class", 
"serial-version-uid");
***************
*** 328,346 ****
          else if ("auto".equals(serialVerisionUID)) {
              StringBuffer sb = new StringBuffer();
!             List fields = getCurrentClass().getFields();
  
              for (Iterator iter = fields.iterator(); iter.hasNext(); ) {
                  XField field = (XField) iter.next();
  
!                 if (!field.isStatic() && !field.isTransient()) {
!                     sb.append(field.getModifiers());
!                     sb.append(' ');
!                     sb.append(field.getType());
!                     sb.append(' ');
!                     sb.append(field.getName());
!                     sb.append('?');
!                 }
              }
-             System.out.println("serial version suid String: " + 
sb.toString());
  
              int splitIdx = sb.length() / 2;
--- 285,298 ----
          else if ("auto".equals(serialVerisionUID)) {
              StringBuffer sb = new StringBuffer();
!             List fields = getAllPrimaryKeyFields();
  
              for (Iterator iter = fields.iterator(); iter.hasNext(); ) {
                  XField field = (XField) iter.next();
  
!                 sb.append(field.getType());
!                 sb.append(' ');
!                 sb.append(field.getName());
!                 sb.append(' ');
              }
  
              int splitIdx = sb.length() / 2;
***************
*** 349,357 ****
              long hash = (long) hash1 | (((long) hash2) << 32);
  
-             System.out.println("serial version uid: " + hash);
              number = String.valueOf(hash) + "L";
          }
!         else
!             number = serialVerisionUID;
          return "private static final long serialVersionUID = " + number + ";";
      }
--- 301,317 ----
              long hash = (long) hash1 | (((long) hash2) << 32);
  
              number = String.valueOf(hash) + "L";
          }
!         else {
!             number = serialVerisionUID.trim();
!             if (!number.matches("[+\\-]?\\d+L?"))
!                 throw new XDocletException("Invalid serial version id given: 
" + number);
!             if (!number.endsWith("L"))
!                 number += "L";
!         }
! 
!         if (log.isDebugEnabled())
!             log.debug("Adding serial version uid: " + number);
! 
          return "private static final long serialVersionUID = " + number + ";";
      }
***************
*** 524,526 ****
--- 484,543 ----
  //        return buf.toString();
      }
+ 
+     /**
+      * Get all primary key fields for the current class.
+      *
+      * @return                   The List of primary key fields
+      * @throws XDocletException  If the field order contains fields that do 
not exist
+      */
+     private List getAllPrimaryKeyFields() throws XDocletException
+     {
+         XClass clazz = getCurrentClass();
+ 
+         List pkFields = new ArrayList();
+ 
+         for (Iterator it = clazz.getFields().iterator(); it.hasNext(); ) {
+             XField field = (XField) it.next();
+             XDoc fieldDoc = field.getDoc();
+ 
+             if (fieldDoc.hasTag("jdo.field")) {
+                 if 
("true".equals(fieldDoc.getTag("jdo.field").getAttributeValue("primary-key")))
+                     pkFields.add(field);
+             }
+         }
+ 
+         // sort the pk-fields alphabetically by their name
+         Collections.sort(pkFields, pkFieldComparator);
+ 
+         // if there is a desired order specified, we respect it
+         String fieldOrderStr = 
clazz.getDoc().getTagAttributeValue("jdo.create-objectid-class", "field-order");
+ 
+         if (fieldOrderStr != null && !"".equals(fieldOrderStr)) {
+             String[] fieldOrder = fieldOrderStr.replaceAll(" ", 
"").split(",");
+             int newIdx = 0;
+ 
+             for (int i = 0; i < fieldOrder.length; ++i) {
+                 String field = fieldOrder[i];
+                 int oldIdx = -1;
+ 
+                 for (int m = 0; m < pkFields.size(); ++m) {
+                     if (((XField) pkFields.get(m)).getName().equals(field)) {
+                         oldIdx = m;
+                         break;
+                     }
+                 }
+ 
+                 if (oldIdx >= 0) {
+                     XField f = (XField) pkFields.remove(oldIdx);
+ 
+                     pkFields.add(newIdx, f);
+                     ++newIdx;
+                 }
+                 else
+                     throw new XDocletException("Class \"" + 
clazz.getQualifiedName() + "\" has field \"" + field + "\" specified in 
'@jdo.create-objectid-class field-order', but this field does not exist or is 
not tagged as primary-key-field!");
+             }
+         }
+         // if (fieldsOrderStr != null && !"".equals(fieldsOrderStr)) {
+         return pkFields;
+     }
  }


-------------------------------------------------------------------------
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