You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/09/07 06:51:41 UTC

svn commit: r573456 - in /ofbiz/branches/release4.0: applications/content/src/org/ofbiz/content/email/ framework/appserver/src/org/ofbiz/appservers/ framework/base/src/base/org/ofbiz/base/util/template/

Author: jonesde
Date: Thu Sep  6 21:51:40 2007
New Revision: 573456

URL: http://svn.apache.org/viewvc?rev=573456&view=rev
Log:
Applied fix from trunk for revision: 573442

Modified:
    ofbiz/branches/release4.0/applications/content/src/org/ofbiz/content/email/NotificationServices.java
    ofbiz/branches/release4.0/framework/appserver/src/org/ofbiz/appservers/GenerateContainer.java
    ofbiz/branches/release4.0/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java

Modified: ofbiz/branches/release4.0/applications/content/src/org/ofbiz/content/email/NotificationServices.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/applications/content/src/org/ofbiz/content/email/NotificationServices.java?rev=573456&r1=573455&r2=573456&view=diff
==============================================================================
--- ofbiz/branches/release4.0/applications/content/src/org/ofbiz/content/email/NotificationServices.java (original)
+++ ofbiz/branches/release4.0/applications/content/src/org/ofbiz/content/email/NotificationServices.java Thu Sep  6 21:51:40 2007
@@ -205,12 +205,10 @@
                 return ServiceUtil.returnError("Problem finding template; see logs");
             }
                                     
-            InputStreamReader templateReader = new InputStreamReader(templateUrl.openStream());
-                        
             // process the template with the given data and write
             // the email body to the String buffer
             Writer writer = new StringWriter();
-            FreeMarkerWorker.renderTemplate(templateName, templateReader, templateData, writer);
+            FreeMarkerWorker.renderTemplate(templateUrl.toExternalForm(), templateData, writer);
 
             // extract the newly created body for the notification email
             String notificationBody = writer.toString();            

Modified: ofbiz/branches/release4.0/framework/appserver/src/org/ofbiz/appservers/GenerateContainer.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/framework/appserver/src/org/ofbiz/appservers/GenerateContainer.java?rev=573456&r1=573455&r2=573456&view=diff
==============================================================================
--- ofbiz/branches/release4.0/framework/appserver/src/org/ofbiz/appservers/GenerateContainer.java (original)
+++ ofbiz/branches/release4.0/framework/appserver/src/org/ofbiz/appservers/GenerateContainer.java Thu Sep  6 21:51:40 2007
@@ -29,6 +29,7 @@
 import org.ofbiz.base.container.Container;
 import org.ofbiz.base.container.ContainerException;
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilURL;
 import org.ofbiz.base.util.template.FreeMarkerWorker;
 import org.ofbiz.base.start.Classpath;
 import org.ofbiz.base.component.ComponentConfig;
@@ -141,12 +142,6 @@
 
     private void parseTemplate(File templateFile, Map dataMap) throws ContainerException {
         Debug.log("Parsing template : " + templateFile.getAbsolutePath(), module);
-        Reader reader = null;
-        try {
-            reader = new InputStreamReader(new FileInputStream(templateFile));
-        } catch (FileNotFoundException e) {
-            throw new ContainerException(e);
-        }
 
         // create the target file/directory
         String targetDirectoryName = args.length > 1 ? args[1] : null;
@@ -174,7 +169,7 @@
             throw new ContainerException(e);
         }
         try {
-            FreeMarkerWorker.renderTemplate(templateFile.getAbsolutePath(), reader, dataMap, writer);
+            FreeMarkerWorker.renderTemplate(UtilURL.fromFilename(templateFile.getAbsolutePath()).toExternalForm(), dataMap, writer);
         } catch (Exception e) {
             throw new ContainerException(e);
         }

Modified: ofbiz/branches/release4.0/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/release4.0/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java?rev=573456&r1=573455&r2=573456&view=diff
==============================================================================
--- ofbiz/branches/release4.0/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java (original)
+++ ofbiz/branches/release4.0/framework/base/src/base/org/ofbiz/base/util/template/FreeMarkerWorker.java Thu Sep  6 21:51:40 2007
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringReader;
@@ -134,7 +135,7 @@
      * @param outWriter The Writer to render to
      */
     public static void renderTemplateAtLocation(String templateLocation, Map context, Writer outWriter) throws MalformedURLException, TemplateException, IOException {
-        renderTemplate(templateLocation, getTemplateReader(templateLocation), context, outWriter);
+        renderTemplate(templateLocation, context, outWriter);
     }
     
     /**
@@ -144,9 +145,8 @@
      * @param context The context Map
      * @param outWriter The Writer to render to
      */
-    public static void renderTemplate(String templateId, String templateString, Map context, Writer outWriter) throws TemplateException, IOException {
-        Reader templateReader = new StringReader(templateString);
-        renderTemplate(templateId, templateReader, context, outWriter);
+    public static void renderTemplate(String templateLocation, String templateString, Map context, Writer outWriter) throws TemplateException, IOException {
+        renderTemplate(templateLocation, context, outWriter);
     }
     
     /**
@@ -156,8 +156,8 @@
      * @param context The context Map
      * @param outWriter The Writer to render to
      */
-    public static void renderTemplate(String templateId, Reader templateReader, Map context, Writer outWriter) throws TemplateException, IOException {
-        Template template = getTemplate(templateId, templateReader);
+    public static void renderTemplate(String templateLocation, Map context, Writer outWriter) throws TemplateException, IOException {
+        Template template = getTemplate(templateLocation);
         renderTemplate(template, context, outWriter);
     }
  
@@ -227,8 +227,9 @@
         }
         return defaultOfbizConfig;
     }
-
-    public static Reader getTemplateReader(String templateLocation) throws IOException {
+    
+    /** Make sure to close the reader when you're done! That's why this method is private, BTW. */
+    private static Reader makeReader(String templateLocation) throws IOException {
         if (UtilValidate.isEmpty(templateLocation)) {
             throw new IllegalArgumentException("FreeMarker template location null or empty");
         }
@@ -236,14 +237,15 @@
         URL locationUrl = null;
         try {
             locationUrl = FlexibleLocation.resolveLocation(templateLocation);
-        }
-        catch (MalformedURLException e) {
+        } catch (MalformedURLException e) {
             throw new IllegalArgumentException(e.getMessage());
         }
         if (locationUrl == null) {
             throw new IllegalArgumentException("FreeMarker file not found at location: " + templateLocation);
         }
-        Reader templateReader = new InputStreamReader(locationUrl.openStream());
+        
+        InputStream locationIs = locationUrl.openStream();
+        Reader templateReader = new InputStreamReader(locationIs);
         
         String locationProtocol = locationUrl.getProtocol();
         if ("file".equals(locationProtocol) && Debug.verboseOn()) {
@@ -251,35 +253,28 @@
             int lastSlash = locationFile.lastIndexOf("/");
             String locationDir = locationFile.substring(0, lastSlash);
             String filename = locationFile.substring(lastSlash + 1);
-            Debug.logVerbose("FreeMarker render: filename=" + filename + ", locationDir=" + locationDir, module);
+            if (Debug.verboseOn()) Debug.logVerbose("FreeMarker render: filename=" + filename + ", locationDir=" + locationDir, module);
         }
         
         return templateReader;
     }
-    
+
     /**
      * Gets a Template instance from the template cache. If the Template instance isn't
      * found in the cache, then one will be created.
      * @param templateLocation Location of the template - file path or URL
      */
     public static Template getTemplate(String templateLocation) throws TemplateException, IOException {
-        return getTemplate(templateLocation, getTemplateReader(templateLocation));
-    }
-    
-    /**
-     * Gets a Template instance from the template cache. If the Template instance isn't
-     * found in the cache, then one will be created.
-     * @param templateId A unique ID for this template
-     * @param templateReader The Reader that reads the template
-     */
-    public static Template getTemplate(String templateId, Reader templateReader) throws TemplateException, IOException {
-        Template template = (Template) cachedTemplates.get(templateId);
+        Template template = (Template) cachedTemplates.get(templateLocation);
         if (template == null) {
             synchronized (cachedTemplates) {
-                template = (Template) cachedTemplates.get(templateId);
+                template = (Template) cachedTemplates.get(templateLocation);
                 if (template == null) {
-                    template = new Template(templateId, templateReader, getDefaultOfbizConfig());
-                    cachedTemplates.put(templateId, template);
+                    // only make the reader if we need it, and then close it right after!
+                    Reader templateReader = makeReader(templateLocation);
+                    template = new Template(templateLocation, templateReader, getDefaultOfbizConfig());
+                    templateReader.close();
+                    cachedTemplates.put(templateLocation, template);
                 }
             }
         }
@@ -619,12 +614,12 @@
             return new FlexibleTemplateSource(name);
         }
         public long getLastModified(Object templateSource) {
-            FlexibleTemplateSource fts = (FlexibleTemplateSource)templateSource;
+            FlexibleTemplateSource fts = (FlexibleTemplateSource) templateSource;
             return fts.getLastModified();
         }
         public Reader getReader(Object templateSource, String encoding) throws IOException {
-            FlexibleTemplateSource fts = (FlexibleTemplateSource)templateSource;
-            return getTemplateReader(fts.getTemplateLocation());
+            FlexibleTemplateSource fts = (FlexibleTemplateSource) templateSource;
+            return makeReader(fts.getTemplateLocation());
         }
         public void closeTemplateSource(Object templateSource) throws IOException {
             // do nothing