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().getActiveSubTask()).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(getCurrentClass())});
                                        String merge_file_name = 
PackageTagsHandler.packageNameAsPathFor(getCurrentClass().containingPackage()) + 
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().getActiveSubTask()).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

Reply via email to