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

Reply via email to