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

Modified Files:
        JdoObjectIdGeneratorTagsHandler.java 
Log Message:
added support of include-files (imports and body) in objectid-creation

Index: JdoObjectIdGeneratorTagsHandler.java
===================================================================
RCS file: 
/cvsroot/xdoclet/xdoclet/modules/jdo/src/xdoclet/modules/jdo/JdoObjectIdGeneratorTagsHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** JdoObjectIdGeneratorTagsHandler.java        29 Aug 2005 22:55:05 -0000      
1.4
--- JdoObjectIdGeneratorTagsHandler.java        31 Aug 2005 19:47:00 -0000      
1.5
***************
*** 5,18 ****
--- 5,26 ----
  package xdoclet.modules.jdo;
  
+ import java.io.File;
+ import java.io.FileReader;
+ import java.io.Reader;
+ import java.nio.CharBuffer;
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.Comparator;
+ import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
+ import java.util.Map;
  import java.util.Properties;
  import java.util.Set;
  
  import org.apache.commons.logging.Log;
+ 
+ import xjavadoc.SourceClass;
  import xjavadoc.XClass;
  import xjavadoc.XDoc;
***************
*** 54,57 ****
--- 62,71 ----
      private static Set primitiveClassNames = null;
  
+     /**
+      * key: String qualifiedClassName<br/>
+      * value: [EMAIL PROTECTED] SourceClass} sourceClass
+      */
+     private Map     sourceFileMap = null;
+ 
      public static XField getCurrentPrimaryKeyField()
      {
***************
*** 294,301 ****
       * @return
       * @exception XDocletException
       */
      public String code(Properties attributes) throws XDocletException
      {
!         return 
getCurrentClass().getDoc().getTagAttributeValue("jdo.create-objectid-class", 
"code");
      }
  
--- 308,366 ----
       * @return
       * @exception XDocletException
+      * @deprecated                  Use [EMAIL PROTECTED] 
#includeBody(Properties)} instead!
       */
      public String code(Properties attributes) throws XDocletException
      {
!         String res = 
getCurrentClass().getDoc().getTagAttributeValue("jdo.create-objectid-class", 
"code");
! 
!         if (res != null) {
!             LogUtil.getLog(JdoObjectIdGeneratorTagsHandler.class, 
"code").warn("The attribute 'code' for the tag '@jdo.create-objectid-class' is 
deprecated! Use 'include-body' (in combination with 'include-imports') instead! 
Class: " + getCurrentClass().getQualifiedName());
!             System.err.println("The attribute 'code' for the tag 
'@jdo.create-objectid-class' is deprecated! Use 'include-body' (in combination 
with 'include-imports') instead! Class: " + 
getCurrentClass().getQualifiedName());
!         }
!         return res;
!     }
! 
!     public String includeImports(Properties attributes) throws 
XDocletException
!     {
!         String fileName = 
getCurrentClass().getDoc().getTagAttributeValue("jdo.create-objectid-class", 
"include-imports");
! 
!         return includeFile(getCurrentClass(), fileName);
!     }
! 
!     public String includeBody(Properties attributes) throws XDocletException
!     {
!         String fileName = 
getCurrentClass().getDoc().getTagAttributeValue("jdo.create-objectid-class", 
"include-body");
! 
!         return includeFile(getCurrentClass(), fileName);
!     }
! 
!     /**
!      * @param className                 The fully qualified name of the class.
!      * @param throwExceptionIfNotFound
!      * @return                          Returns either <tt>null</tt> (if 
<tt>throwExceptionIfNotFound == false</tt> and
!      *      the class is not known) or the searched instance of SourceClass.
!      * @throws XDocletException         If <tt>throwExceptionIfNotFound == 
true</tt> and the specified <tt>className
!      *      </tt> is unknown.
!      */
!     protected SourceClass getSourceClass(String className, boolean 
throwExceptionIfNotFound)
!          throws XDocletException
!     {
!         if (sourceFileMap == null) {
!             Map m = new HashMap();
! 
!             for (Iterator it = getXJavaDoc().getSourceClasses().iterator(); 
it.hasNext(); ) {
!                 SourceClass sc = (SourceClass) it.next();
! 
!                 m.put(sc.getQualifiedName(), sc);
!             }
!             sourceFileMap = m;
!         }
! 
!         SourceClass sc = (SourceClass) sourceFileMap.get(className);
! 
!         if (throwExceptionIfNotFound && sc == null)
!             throw new XDocletException("The class \"" + className + "\" is 
not known!");
! 
!         return sc;
      }
  
***************
*** 331,333 ****
--- 396,442 ----
          return objectIDClass;
      }
+ 
+     /**
+      * @param clazz              The class which is used as anchor if the 
<tt>fileName</tt> is specified relatively.
+      * @param fileName           An absolute or more likely relative (to 
clazz) fileName of the file to be included.
+      * @return                   Returns the content of the specified file or 
<tt>null</tt> if <tt>fileName</tt> is <tt>
+      *      null</tt> or an empty string.
+      * @throws XDocletException  In case, the specified file does not exist 
or cannot be read.
+      */
+     protected String includeFile(XClass clazz, String fileName)
+          throws XDocletException
+     {
+         if (fileName == null || "".equals(fileName))
+             return null;
+ 
+         SourceClass sourceClass = getSourceClass(clazz.getQualifiedName(), 
true);
+         String classFileName = sourceClass.getFile().getPath();
+         File classFile = new File(classFileName);
+         File classDir = classFile.getParentFile();
+         File includeFile = new File(classDir, fileName);
+ 
+         if (includeFile.length() > Integer.MAX_VALUE)
+             throw new XDocletException("File \"" + 
includeFile.getAbsolutePath() + "\" is too big!");
+ 
+         CharBuffer buf = CharBuffer.allocate((int) includeFile.length());
+ 
+         try {
+ 
+             Reader r = new FileReader(includeFile);
+ 
+             try {
+                 r.read(buf);
+             }
+             finally {
+                 r.close();
+             }
+ 
+         }
+         catch (Exception x) {
+             throw new XDocletException(x, "Reading include file failed!");
+         }
+ 
+         buf.flip();
+         return buf.toString();
+     }
  }



-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
xdoclet-devel mailing list
xdoclet-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel

Reply via email to