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
[email protected]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel