Vicent, FileManager does this caching automatically. Or maybe something have changed?
Ara. > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:xdoclet-devel- > [EMAIL PROTECTED]] On Behalf Of Vincent Harcq > Sent: Sunday, April 07, 2002 6:23 PM > To: [EMAIL PROTECTED] > Subject: [Xdoclet-devel] CVS update: xdoclet/core/src/xdoclet/tags > MergeTagsHandler.java > > User: vharcq > Date: 02/04/07 06:53:17 > > Modified: core/src/xdoclet/tags MergeTagsHandler.java > Log: > Cache merg files content when possible (global merge files) > > Revision Changes Path > 1.19 +199 -138 xdoclet/core/src/xdoclet/tags/MergeTagsHandler.java > > Index: MergeTagsHandler.java > =================================================================== > RCS file: > /cvsroot/xdoclet/xdoclet/core/src/xdoclet/tags/MergeTagsHandler.java,v > retrieving revision 1.18 > retrieving revision 1.19 > diff -u -w -r1.18 -r1.19 > --- MergeTagsHandler.java 4 Apr 2002 01:03:05 -0000 1.18 > +++ MergeTagsHandler.java 7 Apr 2002 13:53:17 -0000 1.19 > @@ -23,15 +23,20 @@ > import java.io.IOException; > import java.text.MessageFormat; > import java.util.Properties; > +import java.util.HashMap; > import java.net.MalformedURLException; > import java.net.URL; > > /** > * @author Ara Abrahamian ([EMAIL PROTECTED]) > * @created Oct 15, 2001 > - * @version $Revision: 1.18 $ > + * @version $Revision: 1.19 $ > */ > -public class MergeTagsHandler extends XDocletTagSupport { > +public class MergeTagsHandler extends XDocletTagSupport > +{ > + > + private static HashMap fileCache; > + > /** > * Merge contents of the file designated by the file parameter and > evaluates > * the body if the file is not found. It searches for the file in > the directory > @@ -41,47 +46,55 @@ > * @param attributes The attributes of the template tag > * @exception XDocletException XDocletException if something goes > wrong > * @doc:tag type="block" > - * @doc:param name="file" optional="false" description="The path to > the file to > - * be merged. The value of this parameter can have {0} in it, > if so {0} is > - * replaced with the current class name and system searches for > the file > - * in in mergeDir+packageName directory. {0} is for cases where > you want > - * to define and merge a file per each class." > - * @doc:param name="generateMergedFile" values="true,false" > description="If > - * true then process the merged file also, otherwise only merge > it and do > - * not process it. True if the default." > + * @doc:param name="file" optional="false" > description="The > + * path to the file to be merged. The value of this parameter > can have {0} > + * in it, if so {0} is replaced with the current class name and > system > + * searches for the file in in mergeDir+packageName directory. > {0} is for > + * cases where you want to define and merge a file per each > class." > + * @doc:param name="generateMergedFile" > values="true,false" > + * description="If true then process the merged file also, > otherwise only > + * merge it and do not process it. True if the default." > */ > - public void merge(String template, Properties attributes) throws > XDocletException { > + public void merge( String template, Properties attributes ) throws > XDocletException > + { > + > Category cat = Log.getCategory(MergeTagsHandler.class, > "merge"); > String merge_file_pattern = attributes.getProperty("file"); > > - if (cat.isDebugEnabled()) { > + if( cat.isDebugEnabled() ) > + { > cat.debug("Pattern = " + merge_file_pattern); > } > - > - if (merge_file_pattern != null) { > + if( merge_file_pattern != null ) > + { > String contents = > getMergeFileContents(merge_file_pattern); > > - if (contents != null) { > + if( contents != null ) > + { > String generate_merged_file = > attributes.getProperty("generateMergedFile"); > > - if (generate_merged_file != null && > !generate_merged_file.equalsIgnoreCase("true") && > !generate_merged_file.equalsIgnoreCase("yes")) { > + if( generate_merged_file != null && > !generate_merged_file.equalsIgnoreCase( "true" ) && > !generate_merged_file.equalsIgnoreCase( "yes" ) ) > + { > getEngine().print(contents); > } > - else { > + else > + { > generateUsingMergedFile(merge_file_pattern, > contents); > } > } > - else { > + else > + { > //use body of <XDtMerge:merge> > > generateUsingMergedFile(((TemplateSubTask)getDocletContext().getActi > veSubTask()).getTemplateURL().toString(), template); > } > } > - else { > + else > + { > cat.error("<XDtMerge:merge/> file parameter missing from > template file, ignoring merge command."); > generate(template); > } > - } > > + } > > /** > * A utility method used for merging a file used by > <XDtMerge:merge/>tag. If > @@ -102,65 +115,99 @@ > * @see ClassTagsHandler#symbolicClassName() > * @see xdoclet.util.FileManager > */ > - protected String getMergeFileContents(String merge_file_pattern) { > + protected String getMergeFileContents( String merge_file_pattern ) > + { > Category cat = Log.getCategory(MergeTagsHandler.class, > "merge"); > > - try { > - if (merge_file_pattern.indexOf("{0}") != -1) { > - if (getParser() != null) { > + if( fileCache == null ) > + fileCache = new HashMap(); > + > + String cacheFile = null; > + > + if( merge_file_pattern.indexOf( "{0}" ) == -1 && > fileCache.containsKey( merge_file_pattern ) ) > + { > + cacheFile = ( String ) fileCache.get( merge_file_pattern > ); > + return cacheFile; > + } > + else > + { > + if( cat.isDebugEnabled() ) > + cat.debug( "not cached " + merge_file_pattern ); > + try > + { > + if( merge_file_pattern.indexOf( "{0}" ) != -1 ) > + { > + if( getParser() != null ) > + { > > getParser().addMergeFile(merge_file_pattern); > } > - else { > + else > + { > String ejb_name = > MessageFormat.format(merge_file_pattern, new > Object[]{AbstractProgramElementTagsHandler.getClassNameFor(getCurrentCla ss > ())}); > String merge_file_name = > PackageTagsHandler.packageNameAsPathFor(getCurrentClass().containingPack ag > e()) + File.separator + ejb_name; > File merge_file = new > File(getDocletContext().getActiveSubTask().getMergeDir(), > merge_file_name); > > - if (cat.isDebugEnabled()) { > + if( cat.isDebugEnabled() ) > + { > cat.debug("Search for File " + > merge_file); > } > > - if (merge_file.exists()) { > - if (cat.isDebugEnabled()) { > + if( merge_file.exists() ) > + { > + if( cat.isDebugEnabled() ) > + { > cat.debug("Search for File OK"); > } > > - return > FileManager.getURLContent(merge_file.toURL()); > + cacheFile = > FileManager.getURLContent( merge_file.toURL() ); > } > - else { > - if (cat.isDebugEnabled()) { > + else > + { > + if( cat.isDebugEnabled() ) > + { > cat.debug("Search for File not > OK"); > } > } > } > } > - else { > + else > + { > File merge_file = new > File(getDocletContext().getActiveSubTask().getMergeDir(), > merge_file_pattern); > > - if (getParser() != null) { > + if( getParser() != null ) > + { > > getParser().addMergeFile(merge_file_pattern); > } > > - if (merge_file.exists()) { > - return > FileManager.getURLContent(merge_file.toURL()); > + if( merge_file.exists() ) > + { > + cacheFile = FileManager.getURLContent( > merge_file.toURL() ); > } > } > > //was not found in mergedir, try the jar > - URL jarResource = getClass().getResource("/" + > merge_file_pattern); > + URL jarResource = getClass().getResource( '/' + > merge_file_pattern ); > > - if (jarResource != null) { > - return FileManager.getURLContent(jarResource); > + if( jarResource != null ) > + { > + cacheFile = FileManager.getURLContent( > jarResource ); > } > - else { > + else > + { > // not found on file system or in jar. > - return null; > + cacheFile = null; > } > - } catch (MalformedURLException e) { > + } > + catch( MalformedURLException e ) > + { > cat.error(e.getMessage()); > return null; > } > } > - > + if( merge_file_pattern.indexOf( "{0}" ) == -1 ) > + fileCache.put( merge_file_pattern, cacheFile ); > + return cacheFile; > + } > > /** > * Processes the file specified in merge_file_pattern that has the > text content > @@ -172,8 +219,10 @@ > * @exception XDocletException Description of Exception > * @see xdoclet.template.TemplateEngine#setTemplateURL(java.net.URL) > */ > - protected void generateUsingMergedFile(String merge_file, String > contents) throws XDocletException { > - try { > + protected void generateUsingMergedFile( String merge_file, String > contents ) throws XDocletException > + { > + try > + { > int line_num = getEngine().getCurrentLineNum(); > URL prev_template_url = > ((TemplateSubTask)getDocletContext().getActiveSubTask()).getTemplateURL( ); > > @@ -184,28 +233,33 @@ > > getEngine().setTemplateURL(prev_template_url); > getEngine().setCurrentLineNum(line_num); > - } catch (MalformedURLException e) { > + } > + catch( MalformedURLException e ) > + { > throw new XDocletException(e.getMessage()); > } > } > > - > /** > * A utility method used for generating the dest_file based on > template_file > * template file. > * > - * @param dest_file the path to the destination file prepended by > value of the > - * destDir configuration parameter. > + * @param dest_file the path to the destination file > prepended by > + * value of the destDir configuration parameter. > * @param template_file_name the template file name > * @exception XDocletException Description of Exception > */ > - protected void generateFileUsingTemplate(String dest_file, String > template_file_name) throws XDocletException { > + protected void generateFileUsingTemplate( String dest_file, String > template_file_name ) throws XDocletException > + { > Category cat = Log.getCategory(MergeTagsHandler.class, > "generateFileUsingTemplate"); > XClass[] classes = null; > > - try { > + try > + { > XJavaDoc.getInstance().sourceClasses(); > - } catch (XJavaDocException e) { > + } > + catch( XJavaDocException e ) > + { > throw new XDocletException(e, e.getMessage()); > } > > @@ -224,24 +278,31 @@ > */ > file.getParentFile().mkdirs(); > > - try { > + try > + { > getEngine().setTemplateURL(new > File(template_file_name).toURL()); > > String content = > FileManager.getURLContent(((TemplateSubTask)getDocletContext().getActive Su > bTask()).getTemplateURL()); > > - if (content != null) { > - try { > + if( content != null ) > + { > + try > + { > PrettyPrintWriter out = new > PrettyPrintWriter(new BufferedWriter(new FileWriter(file))); > > getEngine().setWriter(out); > getEngine().setCurrentLineNum(0); > generate(content); > out.close(); > - } catch (IOException ex) { > + } > + catch( IOException ex ) > + { > cat.error("An error occured while writing > output to file " + file, ex); > } > } > - } catch (MalformedURLException e) { > + } > + catch( MalformedURLException e ) > + { > throw new XDocletException(e.getMessage()); > } > } > > > > > _______________________________________________ > Xdoclet-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/xdoclet-devel _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com _______________________________________________ Xdoclet-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-devel
