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