You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2010/03/22 14:13:36 UTC

svn commit: r926062 - /struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java

Author: lukaszlenart
Date: Mon Mar 22 13:13:35 2010
New Revision: 926062

URL: http://svn.apache.org/viewvc?rev=926062&view=rev
Log:
Resolved WW-3409 - OSGi plugin not properly loading freemarker results from bundles

Modified:
    struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java

Modified: struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java?rev=926062&r1=926061&r2=926062&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java (original)
+++ struts/struts2/trunk/plugins/osgi/src/main/java/org/apache/struts2/osgi/BundleFreemarkerManager.java Mon Mar 22 13:13:35 2010
@@ -21,47 +21,42 @@
 
 package org.apache.struts2.osgi;
 
-import java.io.File;
-import java.io.IOException;
-
-import javax.servlet.ServletContext;
-
-import org.apache.struts2.osgi.loaders.FreeMarkerBundleResourceLoader;
-import org.apache.struts2.views.freemarker.FreemarkerManager;
-import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
-
 import com.opensymphony.xwork2.util.logging.Logger;
 import com.opensymphony.xwork2.util.logging.LoggerFactory;
-
+import freemarker.cache.ClassTemplateLoader;
 import freemarker.cache.FileTemplateLoader;
 import freemarker.cache.MultiTemplateLoader;
 import freemarker.cache.TemplateLoader;
 import freemarker.cache.WebappTemplateLoader;
+import org.apache.struts2.osgi.loaders.FreeMarkerBundleResourceLoader;
+import org.apache.struts2.views.freemarker.FreemarkerManager;
+import org.apache.struts2.views.freemarker.StrutsClassTemplateLoader;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.io.IOException;
 
 /**
  * This class extends FreemarkerManager in core to add a template loader
  * (that finds resources inside bundles) to MultiTemplateLoader
  */
 public class BundleFreemarkerManager extends FreemarkerManager {
+
     private static final Logger LOG = LoggerFactory.getLogger(BundleFreemarkerManager.class);
 
-    protected TemplateLoader getTemplateLoader(ServletContext servletContext) {
-        // construct a FileTemplateLoader for the init-param 'TemplatePath'
-        FileTemplateLoader templatePathLoader = null;
-
-        String templatePath = servletContext.getInitParameter("TemplatePath");
-        if (templatePath == null) {
-            templatePath = servletContext.getInitParameter("templatePath");
-        }
-
-        if (templatePath != null) {
-            try {
-                templatePathLoader = new FileTemplateLoader(new File(templatePath));
-            } catch (IOException e) {
-                if (LOG.isErrorEnabled())
-                    LOG.error("Invalid template path specified: [#0]", e, e.getMessage());
-            }
-        }
+    protected TemplateLoader createTemplateLoader(ServletContext servletContext, String templatePath) {
+        TemplateLoader templatePathLoader = null;
+
+        try {
+             if (templatePath.startsWith("class://")) {
+                 // substring(7) is intentional as we "reuse" the last slash
+                 templatePathLoader = new ClassTemplateLoader(getClass(), templatePath.substring(7));
+             } else if (templatePath.startsWith("file://")) {
+                 templatePathLoader = new FileTemplateLoader(new File(templatePath));
+             }
+         } catch (IOException e) {
+             LOG.error("Invalid template path specified: " + e.getMessage(), e);
+         }
 
         // presume that most apps will require the class and webapp template loader
         // if people wish to