You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/07/04 07:44:16 UTC

[05/16] incubator-freemarker git commit: FREEMARKER-55: Adding test for Application attributes.

FREEMARKER-55: Adding test for Application attributes.


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

Branch: refs/heads/3
Commit: 8e8c724b6f2ae003c67c4bc0c41fb026c0b9f6ad
Parents: 36b0694
Author: Woonsan Ko <wo...@apache.org>
Authored: Thu Jun 29 01:21:40 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Thu Jun 29 01:21:40 2017 -0400

----------------------------------------------------------------------
 .../spring/web/view/FreemarkerView.java         | 93 +++++++++++++++++++-
 .../spring/web/view/FreemarkerViewTest.java     | 10 +--
 2 files changed, 95 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8e8c724b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
index 21b2a60..934a458 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
@@ -18,8 +18,17 @@
  */
 package org.apache.freemarker.spring.web.view;
 
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.Map;
 
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -35,12 +44,40 @@ import org.apache.freemarker.servlet.jsp.TaglibFactory;
 
 public class FreemarkerView extends AbstractFreemarkerView {
 
+    private PageContextServletConfig pageContextServletConfig;
+
+    private PageContextServlet pageContextServlet;
+
     private ServletContextHashModel servletContextModel;
 
     private TaglibFactory taglibFactory;
 
+    public PageContextServlet getPageContextServlet() {
+        // TODO: proper locking...
+        if (pageContextServlet == null) {
+            pageContextServlet = new PageContextServlet();
+            pageContextServletConfig = new PageContextServletConfig(getServletContext(), getBeanName());
+
+            try {
+                pageContextServlet.init(pageContextServletConfig);
+            } catch (ServletException e) {
+                // never happen
+            }
+        }
+
+        return pageContextServlet;
+    }
+
+    public void setPageContextServlet(PageContextServlet pageContextServlet) {
+        this.pageContextServlet = pageContextServlet;
+    }
+
     public ServletContextHashModel getServletContextModel() {
-        // TODO
+        // TODO: proper locking...
+        if (servletContextModel == null) {
+            servletContextModel = new ServletContextHashModel(getPageContextServlet(), getObjectWrapperForModel());
+        }
+
         return servletContextModel;
     }
 
@@ -62,8 +99,10 @@ public class FreemarkerView extends AbstractFreemarkerView {
             HttpServletRequest request, HttpServletResponse response) {
         AllHttpScopesHashModel model = new AllHttpScopesHashModel(objectWrapperForModel, getServletContext(), request);
         model.putUnlistedModel(FreemarkerServlet.KEY_APPLICATION, getServletContextModel());
-        model.putUnlistedModel(FreemarkerServlet.KEY_SESSION, getHttpSessionModel(objectWrapperForModel, request, response));
-        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST, new HttpRequestHashModel(request, response, objectWrapperForModel));
+        model.putUnlistedModel(FreemarkerServlet.KEY_SESSION,
+                getHttpSessionModel(objectWrapperForModel, request, response));
+        model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST,
+                new HttpRequestHashModel(request, response, objectWrapperForModel));
         model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST_PARAMETERS,
                 new HttpRequestParametersHashModel(request, objectWrapperForModel));
         model.putUnlistedModel(FreemarkerServlet.KEY_JSP_TAGLIBS, getTaglibFactory());
@@ -77,4 +116,52 @@ public class FreemarkerView extends AbstractFreemarkerView {
         HttpSessionHashModel sessionModel = new HttpSessionHashModel(null, request, response, objectWrapperForModel);
         return sessionModel;
     }
+
+    /**
+     * Extending {@link GenericServlet} for {@link PageContext#getPage()} in JSP Tag Library support.
+     */
+    @SuppressWarnings("serial")
+    private static class PageContextServlet extends GenericServlet {
+
+        @Override
+        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
+            // Do nothing
+        }
+
+    }
+
+    /**
+     * {@link ServletConfig} for {@link PageContextServlet}.
+     */
+    private class PageContextServletConfig implements ServletConfig {
+
+        private ServletContext servletContext;
+        private String servletName;
+
+        public PageContextServletConfig(ServletContext servletContext, String servletName) {
+            this.servletContext = servletContext;
+            this.servletName = servletName;
+        }
+
+        @Override
+        public String getServletName() {
+            return servletName;
+        }
+
+        @Override
+        public ServletContext getServletContext() {
+            return servletContext;
+        }
+
+        @Override
+        public String getInitParameter(String name) {
+            return null;
+        }
+
+        @Override
+        public Enumeration<String> getInitParameterNames() {
+            return Collections.enumeration(Collections.<String> emptySet());
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8e8c724b/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 0435004..4f21e58 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
@@ -93,12 +93,12 @@ public class FreemarkerViewTest {
         request.setPathInfo(";mypathinfo");
         request.addParameter("token1", "value1");
         request.setSession(session);
-        request.setAttribute("visitorCount", visitorCount);
+        request.setAttribute("promotion", "Fresh blue berries");
 
         // TODO: Add 'Application.attributeName' example, too.
         templateLoader.putTemplate("default-model.ftl",
-                "${name!}, you have ${Session.itemCountInCart!0} items in cart. "
-                        + "BTW, you're ${Request.visitorCount}th visitor. "
+                "${name!}, you have ${Session.itemCountInCart!0} items in cart. " + "Hot deal: ${Request.promotion}. "
+                        + "BTW, you're ${Application.visitorCount}th visitor. "
                         + "(token1: ${RequestParameters['token1']!})");
 
         FreemarkerView view = new FreemarkerView();
@@ -112,8 +112,8 @@ public class FreemarkerViewTest {
         final long count = visitorCount.incrementAndGet();
         MockHttpServletResponse response = new MockHttpServletResponse();
         view.render(model, request, response);
-        assertEquals("Dan, you have 3 items in cart. BTW, you're " + count + "th visitor. (token1: value1)",
-                response.getContentAsString());
+        assertEquals("Dan, you have 3 items in cart. Hot deal: Fresh blue berries. BTW, you're " + count
+                + "th visitor. (token1: value1)", response.getContentAsString());
     }
 
     @Test