FREEMARKER-54: Adding baseLocation property in SpringResourceTemplateLoader for 
convenience.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/85c43214
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/85c43214
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/85c43214

Branch: refs/heads/3
Commit: 85c43214e743eca5b82123ebfb1e2ac4dec1c073
Parents: 2c5a4fd
Author: Woonsan Ko <woon...@apache.org>
Authored: Mon Jun 19 00:52:25 2017 -0400
Committer: Woonsan Ko <woon...@apache.org>
Committed: Mon Jun 19 00:52:25 2017 -0400

----------------------------------------------------------------------
 .../SpringResourceTemplateLoader.java           | 52 +++++++++++++++++++-
 .../SpringResourceTemplateLoaderTest.java       |  5 +-
 2 files changed, 53 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/85c43214/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java
 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java
index 3f96228..3230841 100644
--- 
a/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java
+++ 
b/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java
@@ -39,18 +39,55 @@ public class SpringResourceTemplateLoader implements 
TemplateLoader, ResourceLoa
 
     private static final Logger LOG = _SpringLogs.TEMPLATE_RESOLVER;
 
+    /**
+     * Base template resource location.
+     * <P>
+     * If this property is a non-null string, this is prepended to the 
template name internally when resolving
+     * a resource.
+     * </P>
+     */
+    private String baseLocation;
+
+    /**
+     * Spring Framework resource loader.
+     */
     private ResourceLoader resourceLoader;
 
+    /**
+     * Base resource location which can be prepended to the template name 
internally when resolving a resource.
+     * @return
+     */
+    public String getBaseLocation() {
+        return baseLocation;
+    }
+
+    /**
+     * Set base resource location which can be prepended to the template name 
internally when resolving a resource.
+     * @param baseLocation
+     */
+    public void setBaseLocation(String baseLocation) {
+        this.baseLocation = baseLocation;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void setResourceLoader(ResourceLoader resourceLoader) {
         this.resourceLoader = resourceLoader;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public TemplateLoaderSession createSession() {
         return null;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public TemplateLoadingResult load(String name, TemplateLoadingSource 
ifSourceDiffersFrom,
             Serializable ifVersionDiffersFrom, TemplateLoaderSession session) 
throws IOException {
@@ -58,7 +95,15 @@ public class SpringResourceTemplateLoader implements 
TemplateLoader, ResourceLoa
             throw new IllegalStateException("Spring Framework ResourceLoader 
was not set.");
         }
 
-        Resource resource = resourceLoader.getResource(name);
+        String resourceLocation;
+
+        if (baseLocation == null) {
+            resourceLocation = name;
+        } else {
+            resourceLocation = baseLocation + "/" + name;
+        }
+
+        Resource resource = resourceLoader.getResource(resourceLocation);
 
         if (!resource.exists()) {
             return TemplateLoadingResult.NOT_FOUND;
@@ -74,7 +119,7 @@ public class SpringResourceTemplateLoader implements 
TemplateLoader, ResourceLoa
                 version = lmd;
             }
         } catch (IOException e) {
-            LOG.debug("The last modified timestamp of the resource at '{}' may 
not be resolved.", name, e);
+            LOG.debug("The last modified timestamp of the resource at '{}' may 
not be resolved.", resourceLocation, e);
         }
 
         if (ifSourceDiffersFrom != null && ifSourceDiffersFrom.equals(source)
@@ -85,6 +130,9 @@ public class SpringResourceTemplateLoader implements 
TemplateLoader, ResourceLoa
         return new TemplateLoadingResult(source, version, 
resource.getInputStream(), null);
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
     public void resetState() {
         // Does nothing

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/85c43214/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
index 23f604e..bcf014a 100644
--- 
a/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
+++ 
b/freemarker-spring/src/test/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoaderTest.java
@@ -46,6 +46,7 @@ public class SpringResourceTemplateLoaderTest {
     public void setUp() throws IOException {
         appContext = new GenericApplicationContext();
         templateLoader = new SpringResourceTemplateLoader();
+        templateLoader.setBaseLocation(TEMPLATE_BASE_PATH);
         templateLoader.setResourceLoader(appContext);
         cfg = new 
TestConfigurationBuilder().templateLoader(templateLoader).build();
     }
@@ -62,7 +63,7 @@ public class SpringResourceTemplateLoaderTest {
     @Test
     public void testSuccessful() throws Exception {
         for (int i = 0; i < 2; i++) {
-            assertEquals("foo", cfg.getTemplate(TEMPLATE_BASE_PATH + 
"sub1/sub2/t.ftl").toString());
+            assertEquals("foo", cfg.getTemplate("sub1/sub2/t.ftl").toString());
         }
     }
 
@@ -70,7 +71,7 @@ public class SpringResourceTemplateLoaderTest {
     public void testNotFound() throws Exception {
         for (int i = 0; i < 2; i++) {
             try {
-                cfg.getTemplate(TEMPLATE_BASE_PATH + "sub1X/sub2/t.ftl");
+                cfg.getTemplate("sub1X/sub2/t.ftl");
                 fail();
             } catch (TemplateNotFoundException e) {
                 assertThat(e.getMessage(), containsString("sub1X"));

Reply via email to