Repository: incubator-freemarker Updated Branches: refs/heads/3 9b31510bb -> 52d114257
FREEMARKER-55: remove unnecessary exposures and package name change. Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/519680ac Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/519680ac Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/519680ac Branch: refs/heads/3 Commit: 519680accbb42aaf48eda1e656008249559d0ae8 Parents: 18e9399 Author: Woonsan Ko <woon...@apache.org> Authored: Wed Jul 5 13:54:01 2017 -0400 Committer: Woonsan Ko <woon...@apache.org> Committed: Wed Jul 5 13:54:01 2017 -0400 ---------------------------------------------------------------------- .../spring/SpringResourceTemplateLoader.java | 168 +++++++++++++++++++ .../SpringResourceTemplateLoader.java | 168 ------------------- .../spring/web/view/FreemarkerViewResolver.java | 32 ---- .../SpringResourceTemplateLoaderTest.java | 1 + .../spring/web/view/FreemarkerViewTest.java | 24 ++- 5 files changed, 188 insertions(+), 205 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/519680ac/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java ---------------------------------------------------------------------- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java new file mode 100644 index 0000000..2607e57 --- /dev/null +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java @@ -0,0 +1,168 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.freemarker.spring; + +import java.io.IOException; +import java.io.Serializable; +import java.util.Objects; + +import org.apache.freemarker.core.templateresolver.TemplateLoader; +import org.apache.freemarker.core.templateresolver.TemplateLoaderSession; +import org.apache.freemarker.core.templateresolver.TemplateLoadingResult; +import org.apache.freemarker.core.templateresolver.TemplateLoadingSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ResourceLoaderAware; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; + +/** + * A {@link TemplateLoader} that uses Spring Framework <code>Resource</code>s which are resolved by locations. + */ +public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoaderAware { + + private static final Logger LOG = LoggerFactory.getLogger(SpringResourceTemplateLoader.class); + + /** + * 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 { + if (resourceLoader == null) { + throw new IllegalStateException("Spring Framework ResourceLoader was not set."); + } + + String resourceLocation; + + if (baseLocation == null) { + resourceLocation = name; + } else { + resourceLocation = baseLocation + "/" + name; + } + + Resource resource = resourceLoader.getResource(resourceLocation); + + if (!resource.exists()) { + return TemplateLoadingResult.NOT_FOUND; + } + + ResourceTemplateLoadingSource source = new ResourceTemplateLoadingSource(resource); + + Long version = null; + + try { + long lmd = resource.lastModified(); + if (lmd != -1) { + version = lmd; + } + } catch (IOException e) { + LOG.debug("The last modified timestamp of the resource at '{}' may not be resolved.", resourceLocation, e); + } + + if (ifSourceDiffersFrom != null && ifSourceDiffersFrom.equals(source) + && Objects.equals(ifVersionDiffersFrom, version)) { + return TemplateLoadingResult.NOT_MODIFIED; + } + + return new TemplateLoadingResult(source, version, resource.getInputStream(), null); + } + + /** + * {@inheritDoc} + */ + @Override + public void resetState() { + // Does nothing + } + + @SuppressWarnings("serial") + private static class ResourceTemplateLoadingSource implements TemplateLoadingSource { + + private final Resource resource; + + ResourceTemplateLoadingSource(Resource resource) { + this.resource = resource; + } + + @Override + public int hashCode() { + return resource.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + return resource.equals(((ResourceTemplateLoadingSource) obj).resource); + } + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/519680ac/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 deleted file mode 100644 index e91fd68..0000000 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/templateresolver/SpringResourceTemplateLoader.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.freemarker.spring.templateresolver; - -import java.io.IOException; -import java.io.Serializable; -import java.util.Objects; - -import org.apache.freemarker.core.templateresolver.TemplateLoader; -import org.apache.freemarker.core.templateresolver.TemplateLoaderSession; -import org.apache.freemarker.core.templateresolver.TemplateLoadingResult; -import org.apache.freemarker.core.templateresolver.TemplateLoadingSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ResourceLoaderAware; -import org.springframework.core.io.Resource; -import org.springframework.core.io.ResourceLoader; - -/** - * A {@link TemplateLoader} that uses Spring Framework <code>Resource</code>s which are resolved by locations. - */ -public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoaderAware { - - private static final Logger LOG = LoggerFactory.getLogger(SpringResourceTemplateLoader.class); - - /** - * 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 { - if (resourceLoader == null) { - throw new IllegalStateException("Spring Framework ResourceLoader was not set."); - } - - String resourceLocation; - - if (baseLocation == null) { - resourceLocation = name; - } else { - resourceLocation = baseLocation + "/" + name; - } - - Resource resource = resourceLoader.getResource(resourceLocation); - - if (!resource.exists()) { - return TemplateLoadingResult.NOT_FOUND; - } - - ResourceTemplateLoadingSource source = new ResourceTemplateLoadingSource(resource); - - Long version = null; - - try { - long lmd = resource.lastModified(); - if (lmd != -1) { - version = lmd; - } - } catch (IOException e) { - LOG.debug("The last modified timestamp of the resource at '{}' may not be resolved.", resourceLocation, e); - } - - if (ifSourceDiffersFrom != null && ifSourceDiffersFrom.equals(source) - && Objects.equals(ifVersionDiffersFrom, version)) { - return TemplateLoadingResult.NOT_MODIFIED; - } - - return new TemplateLoadingResult(source, version, resource.getInputStream(), null); - } - - /** - * {@inheritDoc} - */ - @Override - public void resetState() { - // Does nothing - } - - @SuppressWarnings("serial") - private static class ResourceTemplateLoadingSource implements TemplateLoadingSource { - - private final Resource resource; - - ResourceTemplateLoadingSource(Resource resource) { - this.resource = resource; - } - - @Override - public int hashCode() { - return resource.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - return resource.equals(((ResourceTemplateLoadingSource) obj).resource); - } - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/519680ac/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java ---------------------------------------------------------------------- diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java index 57e6c4c..c3f87a9 100644 --- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java +++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerViewResolver.java @@ -147,36 +147,4 @@ public class FreemarkerViewResolver extends AbstractTemplateViewResolver impleme return view; } - /** - * Get {@link ObjectWrapperAndUnwrapper} that is used in model building. - * @return {@link ObjectWrapperAndUnwrapper} that is used in model building - */ - protected ObjectWrapperAndUnwrapper getObjectWrapper() { - return objectWrapper; - } - - /** - * Get {@link GenericServlet} instance which is a page object in JSP tag library usages. - * @return {@link GenericServlet} instance which is a page object in JSP tag library usages - */ - protected GenericServlet getPageContextServlet() { - return pageContextServlet; - } - - /** - * Get {@link ServletContextHashModel} instance by which templates can access servlet context attributes. - * @return {@link ServletContextHashModel} instance by which templates can access servlet context attributes - */ - protected ServletContextHashModel getServletContextModel() { - return servletContextModel; - } - - /** - * Get {@link TaglibFactory} instance by which templates can use JSP tag libraries. - * @return {@link TaglibFactory} instance by which templates can use JSP tag libraries. - */ - protected TaglibFactory getTaglibFactory() { - return taglibFactory; - } - } http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/519680ac/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 bcf014a..30c7ed7 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 @@ -28,6 +28,7 @@ import java.io.IOException; import org.apache.freemarker.core.Configuration; import org.apache.freemarker.core.TemplateNotFoundException; +import org.apache.freemarker.spring.SpringResourceTemplateLoader; import org.apache.freemarker.test.TestConfigurationBuilder; import org.junit.After; import org.junit.Before; http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/519680ac/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java ---------------------------------------------------------------------- diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java index 32862c5..093472c 100644 --- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java +++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java @@ -24,10 +24,15 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; +import javax.servlet.GenericServlet; import javax.servlet.ServletContext; import org.apache.freemarker.core.Configuration; +import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper; import org.apache.freemarker.core.templateresolver.impl.StringTemplateLoader; +import org.apache.freemarker.servlet.ServletContextHashModel; +import org.apache.freemarker.servlet.jsp.TaglibFactory; +import org.apache.freemarker.servlet.jsp.TaglibFactoryBuilder; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -44,6 +49,10 @@ public class FreemarkerViewTest { private StringTemplateLoader templateLoader; private Configuration configuration; + private ObjectWrapperAndUnwrapper objectWrapper; + + private GenericServlet pageContextServlet; + private TaglibFactory taglibFactory; private FreemarkerViewResolver viewResolver; @@ -60,6 +69,11 @@ public class FreemarkerViewTest { templateLoader = new StringTemplateLoader(); configuration = new Configuration.Builder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS) .templateLoader(templateLoader).build(); + objectWrapper = (ObjectWrapperAndUnwrapper) configuration.getObjectWrapper(); + + pageContextServlet = new PageContextServlet(); + pageContextServlet.init(new PageContextServletConfig(servletContext, PageContextServlet.class.getSimpleName())); + taglibFactory = new TaglibFactoryBuilder(servletContext, objectWrapper).build(); viewResolver = new FreemarkerViewResolver(); viewResolver.setServletContext(servletContext); @@ -144,17 +158,17 @@ public class FreemarkerViewTest { assertEquals("Hello!", response.getContentAsString()); } - private FreemarkerView createFreemarkerView(final String name) { + private FreemarkerView createFreemarkerView(final String name) throws Exception { FreemarkerView view = new FreemarkerView(); view.setServletContext(servletContext); view.setApplicationContext(applicationContext); view.setConfiguration(configuration); - view.setObjectWrapper(viewResolver.getObjectWrapper()); + view.setObjectWrapper(objectWrapper); - view.setPageContextServlet(viewResolver.getPageContextServlet()); - view.setServletContextModel(viewResolver.getServletContextModel()); - view.setTaglibFactory(viewResolver.getTaglibFactory()); + view.setPageContextServlet(pageContextServlet); + view.setServletContextModel(new ServletContextHashModel(pageContextServlet, objectWrapper)); + view.setTaglibFactory(taglibFactory); view.setUrl(name);