FREEMARKER-55: moving builder into TaglibFactory

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

Branch: refs/heads/3
Commit: dcbebe9b19e85dff067a46c4394e107916fb7845
Parents: 3c91ecb
Author: Woonsan Ko <woon...@apache.org>
Authored: Wed Jul 5 16:30:09 2017 -0400
Committer: Woonsan Ko <woon...@apache.org>
Committed: Wed Jul 5 16:30:09 2017 -0400

----------------------------------------------------------------------
 .../freemarker/servlet/FreemarkerServlet.java   |   7 +-
 .../freemarker/servlet/jsp/TaglibFactory.java   | 132 +++++++++++++++
 .../servlet/jsp/TaglibFactoryBuilder.java       | 167 -------------------
 .../spring/web/view/FreemarkerViewResolver.java |   3 +-
 .../spring/web/view/FreemarkerViewTest.java     |   3 +-
 5 files changed, 137 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/dcbebe9b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
index 9b5008f..c56f6d7 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
@@ -65,7 +65,6 @@ import org.apache.freemarker.core.util._SecurityUtil;
 import org.apache.freemarker.core.util._StringUtil;
 import org.apache.freemarker.servlet.jsp.TaglibFactory;
 import org.apache.freemarker.servlet.jsp.TaglibFactory.MetaInfTldSource;
-import org.apache.freemarker.servlet.jsp.TaglibFactoryBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -637,7 +636,7 @@ public class FreemarkerServlet extends HttpServlet {
                 } else if 
(name.equals(INIT_PARAM_EXCEPTION_ON_MISSING_TEMPLATE)) {
                     exceptionOnMissingTemplate = _StringUtil.getYesNo(value);
                 } else if (name.equals(INIT_PARAM_META_INF_TLD_LOCATIONS)) {
-                    metaInfTldSources = 
TaglibFactoryBuilder.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(value));
+                    metaInfTldSources = 
TaglibFactory.Builder.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(value));
                 } else if (name.equals(INIT_PARAM_CLASSPATH_TLDS)) {
                     List newClasspathTlds = new ArrayList();
                     if (classpathTlds != null) {
@@ -1001,7 +1000,7 @@ public class FreemarkerServlet extends HttpServlet {
         try {
             final String prop = 
_SecurityUtil.getSystemProperty(SYSTEM_PROPERTY_META_INF_TLD_SOURCES, null);
             metaInfTldSourcesFromSysProp = (List<MetaInfTldSource>) ((prop != 
null)
-                    ? 
TaglibFactoryBuilder.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(prop))
+                    ? 
TaglibFactory.Builder.parseMetaInfTldLocations(InitParamParser.parseCommaSeparatedList(prop))
                     : Collections.emptyList());
         } catch (ParseException e) {
             throw new TemplateModelException(
@@ -1028,7 +1027,7 @@ public class FreemarkerServlet extends HttpServlet {
                     "Failed to parse system property \"" + 
SYSTEM_PROPERTY_CLASSPATH_TLDS + "\"", e);
         }
 
-        return new TaglibFactoryBuilder(servletContext, objectWrapper)
+        return new TaglibFactory.Builder(servletContext, objectWrapper)
                 .addAllMetaInfTldSources(metaInfTldSources)
                 .addAllMetaInfTldSources(metaInfTldSourcesFromSysProp)
                 .addAllJettyMetaInfTldJarPatterns(jettyTaglibJarPatterns)

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/dcbebe9b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
index 0fbba1b..9da15e4 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactory.java
@@ -38,6 +38,7 @@ import java.net.URLConnection;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
+import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
@@ -61,6 +62,7 @@ import javax.servlet.jsp.tagext.Tag;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.freemarker.core.ConfigurationException;
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateHashModel;
@@ -70,6 +72,7 @@ import 
org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateTransformModel;
 import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
 import org.apache.freemarker.core.util.BugException;
+import org.apache.freemarker.core.util.CommonBuilder;
 import org.apache.freemarker.core.util._ClassUtil;
 import org.apache.freemarker.core.util._NullArgumentException;
 import org.apache.freemarker.core.util._StringUtil;
@@ -1990,4 +1993,133 @@ public class TaglibFactory implements TemplateHashModel 
{
         
     }
 
+    public static class Builder implements CommonBuilder<TaglibFactory> {
+
+        /**
+         * Servlet context.
+         */
+        private final ServletContext servletContext;
+
+        /**
+         * Object wrapper to be used in model building.
+         */
+        private final ObjectWrapper objectWrapper;
+
+        /**
+         * TLD locations to look for when finding available JSP tag libraries.
+         */
+        private List<MetaInfTldSource> metaInfTldSources = new ArrayList<>();
+
+        /**
+         * TLD classpath locations to look for when finding available JSP tag 
libraries.
+         */
+        private List<String> classPathTlds = new ArrayList<>();
+
+        public Builder(ServletContext servletContext, ObjectWrapper 
objectWrapper) {
+            this.servletContext = servletContext;
+            this.objectWrapper = objectWrapper;
+        }
+
+        public Builder addMetaInfTldSource(MetaInfTldSource metaInfTldSource) {
+            metaInfTldSources.add(metaInfTldSource);
+            return this;
+        }
+
+        public Builder addAllMetaInfTldSources(List<MetaInfTldSource> 
metaInfTldSources) {
+            this.metaInfTldSources.addAll(metaInfTldSources);
+            return this;
+        }
+
+        public Builder addMetaInfTldLocation(String metaInfTldLocation) throws 
ParseException {
+            return 
addMetaInfTldSource(parseMetaInfTldLocation(metaInfTldLocation));
+        }
+
+        public Builder addMetaInfTldLocations(List<String> 
metaInfTldLocations) throws ParseException {
+            return 
addAllMetaInfTldSources(parseMetaInfTldLocations(metaInfTldLocations));
+        }
+
+        public Builder addJettyMetaInfTldJarPattern(Pattern pattern) {
+            return addMetaInfTldSource(new ClasspathMetaInfTldSource(pattern));
+        }
+
+        public Builder addAllJettyMetaInfTldJarPatterns(List<Pattern> 
patterns) {
+            for (Pattern pattern : patterns) {
+                addJettyMetaInfTldJarPattern(pattern);
+            }
+
+            return this;
+        }
+
+        public Builder addClasspathTld(String classpathTld) {
+            classPathTlds.add(classpathTld);
+            return this;
+        }
+
+        public Builder addAllClasspathTlds(List<String> classpathTlds) {
+            classPathTlds.addAll(classpathTlds);
+            return this;
+        }
+
+        public TaglibFactory build() throws ConfigurationException {
+            TaglibFactory taglibFactory = new TaglibFactory(servletContext);
+            taglibFactory.setObjectWrapper(objectWrapper);
+            taglibFactory.setMetaInfTldSources(metaInfTldSources);
+            taglibFactory.setClasspathTlds(classPathTlds);
+            return taglibFactory;
+        }
+
+        public static MetaInfTldSource parseMetaInfTldLocation(String value) 
throws ParseException {
+            MetaInfTldSource metaInfTldSource;
+
+            if 
(value.equals(FreemarkerServlet.META_INF_TLD_LOCATION_WEB_INF_PER_LIB_JARS)) {
+                metaInfTldSource = WebInfPerLibJarMetaInfTldSource.INSTANCE;
+            } else if 
(value.startsWith(FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH)) {
+                String itemRightSide = 
value.substring(FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH.length())
+                        .trim();
+
+                if (itemRightSide.length() == 0) {
+                    metaInfTldSource = new 
ClasspathMetaInfTldSource(Pattern.compile(".*", Pattern.DOTALL));
+                } else if (itemRightSide.startsWith(":")) {
+                    final String regexpStr = itemRightSide.substring(1).trim();
+                    if (regexpStr.length() == 0) {
+                        throw new ParseException("Empty regular expression 
after \""
+                                + 
FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH + ":\"", -1);
+                    }
+                    metaInfTldSource = new 
ClasspathMetaInfTldSource(Pattern.compile(regexpStr));
+                } else {
+                    throw new ParseException("Invalid \"" + 
FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH
+                            + "\" value syntax: " + value, -1);
+                }
+            } else if 
(value.startsWith(FreemarkerServlet.META_INF_TLD_LOCATION_CLEAR)) {
+                metaInfTldSource = ClearMetaInfTldSource.INSTANCE;
+            } else {
+                throw new ParseException("Item has no recognized source type 
prefix: " + value, -1);
+            }
+
+            return metaInfTldSource;
+        }
+
+        public static List<MetaInfTldSource> 
parseMetaInfTldLocations(List<String> values) throws ParseException {
+            List<MetaInfTldSource> metaInfTldSources = null;
+
+            if (values != null) {
+                for (String value : values) {
+                    final MetaInfTldSource metaInfTldSource = 
parseMetaInfTldLocation(value);
+
+                    if (metaInfTldSources == null) {
+                        metaInfTldSources = new ArrayList();
+                    }
+
+                    metaInfTldSources.add(metaInfTldSource);
+                }
+            }
+
+            if (metaInfTldSources == null) {
+                metaInfTldSources = Collections.emptyList();
+            }
+
+            return metaInfTldSources;
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/dcbebe9b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactoryBuilder.java
----------------------------------------------------------------------
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactoryBuilder.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactoryBuilder.java
deleted file mode 100644
index 34daec3..0000000
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/TaglibFactoryBuilder.java
+++ /dev/null
@@ -1,167 +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.servlet.jsp;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import javax.servlet.ServletContext;
-
-import org.apache.freemarker.core.model.ObjectWrapper;
-import org.apache.freemarker.servlet.FreemarkerServlet;
-import 
org.apache.freemarker.servlet.jsp.TaglibFactory.ClasspathMetaInfTldSource;
-import org.apache.freemarker.servlet.jsp.TaglibFactory.ClearMetaInfTldSource;
-import org.apache.freemarker.servlet.jsp.TaglibFactory.MetaInfTldSource;
-import 
org.apache.freemarker.servlet.jsp.TaglibFactory.WebInfPerLibJarMetaInfTldSource;
-
-/**
- * Builder for {@link TaglibFactory}.
- */
-public class TaglibFactoryBuilder {
-
-    /**
-     * Servlet context.
-     */
-    private final ServletContext servletContext;
-
-    /**
-     * Object wrapper to be used in model building.
-     */
-    private final ObjectWrapper objectWrapper;
-
-    /**
-     * TLD locations to look for when finding available JSP tag libraries.
-     */
-    private List<MetaInfTldSource> metaInfTldSources = new ArrayList<>();
-
-    /**
-     * TLD classpath locations to look for when finding available JSP tag 
libraries.
-     */
-    private List<String> classPathTlds = new ArrayList<>();
-
-    public TaglibFactoryBuilder(ServletContext servletContext, ObjectWrapper 
objectWrapper) {
-        this.servletContext = servletContext;
-        this.objectWrapper = objectWrapper;
-    }
-
-    public TaglibFactoryBuilder addMetaInfTldSource(MetaInfTldSource 
metaInfTldSource) {
-        metaInfTldSources.add(metaInfTldSource);
-        return this;
-    }
-
-    public TaglibFactoryBuilder addAllMetaInfTldSources(List<MetaInfTldSource> 
metaInfTldSources) {
-        this.metaInfTldSources.addAll(metaInfTldSources);
-        return this;
-    }
-
-    public TaglibFactoryBuilder addMetaInfTldLocation(String 
metaInfTldLocation) throws ParseException {
-        return 
addMetaInfTldSource(parseMetaInfTldLocation(metaInfTldLocation));
-    }
-
-    public TaglibFactoryBuilder addMetaInfTldLocations(List<String> 
metaInfTldLocations) throws ParseException {
-        return 
addAllMetaInfTldSources(parseMetaInfTldLocations(metaInfTldLocations));
-    }
-
-    public TaglibFactoryBuilder addJettyMetaInfTldJarPattern(Pattern pattern) {
-        return addMetaInfTldSource(new ClasspathMetaInfTldSource(pattern));
-    }
-
-    public TaglibFactoryBuilder addAllJettyMetaInfTldJarPatterns(List<Pattern> 
patterns) {
-        for (Pattern pattern : patterns) {
-            addJettyMetaInfTldJarPattern(pattern);
-        }
-
-        return this;
-    }
-
-    public TaglibFactoryBuilder addClasspathTld(String classpathTld) {
-        classPathTlds.add(classpathTld);
-        return this;
-    }
-
-    public TaglibFactoryBuilder addAllClasspathTlds(List<String> 
classpathTlds) {
-        classPathTlds.addAll(classpathTlds);
-        return this;
-    }
-
-    public TaglibFactory build() {
-        TaglibFactory taglibFactory = new TaglibFactory(servletContext);
-        taglibFactory.setObjectWrapper(objectWrapper);
-        taglibFactory.setMetaInfTldSources(metaInfTldSources);
-        taglibFactory.setClasspathTlds(classPathTlds);
-        return taglibFactory;
-    }
-
-    public static MetaInfTldSource parseMetaInfTldLocation(String value) 
throws ParseException {
-        MetaInfTldSource metaInfTldSource;
-
-        if 
(value.equals(FreemarkerServlet.META_INF_TLD_LOCATION_WEB_INF_PER_LIB_JARS)) {
-            metaInfTldSource = WebInfPerLibJarMetaInfTldSource.INSTANCE;
-        } else if 
(value.startsWith(FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH)) {
-            String itemRightSide = 
value.substring(FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH.length())
-                    .trim();
-
-            if (itemRightSide.length() == 0) {
-                metaInfTldSource = new 
ClasspathMetaInfTldSource(Pattern.compile(".*", Pattern.DOTALL));
-            } else if (itemRightSide.startsWith(":")) {
-                final String regexpStr = itemRightSide.substring(1).trim();
-                if (regexpStr.length() == 0) {
-                    throw new ParseException("Empty regular expression after 
\""
-                            + 
FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH + ":\"", -1);
-                }
-                metaInfTldSource = new 
ClasspathMetaInfTldSource(Pattern.compile(regexpStr));
-            } else {
-                throw new ParseException("Invalid \"" + 
FreemarkerServlet.META_INF_TLD_LOCATION_CLASSPATH
-                        + "\" value syntax: " + value, -1);
-            }
-        } else if 
(value.startsWith(FreemarkerServlet.META_INF_TLD_LOCATION_CLEAR)) {
-            metaInfTldSource = ClearMetaInfTldSource.INSTANCE;
-        } else {
-            throw new ParseException("Item has no recognized source type 
prefix: " + value, -1);
-        }
-
-        return metaInfTldSource;
-    }
-
-    public static List<MetaInfTldSource> parseMetaInfTldLocations(List<String> 
values) throws ParseException {
-        List<MetaInfTldSource> metaInfTldSources = null;
-
-        if (values != null) {
-            for (String value : values) {
-                final MetaInfTldSource metaInfTldSource = 
parseMetaInfTldLocation(value);
-
-                if (metaInfTldSources == null) {
-                    metaInfTldSources = new ArrayList();
-                }
-
-                metaInfTldSources.add(metaInfTldSource);
-            }
-        }
-
-        if (metaInfTldSources == null) {
-            metaInfTldSources = Collections.emptyList();
-        }
-
-        return metaInfTldSources;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/dcbebe9b/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 c3f87a9..7969b56 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
@@ -26,7 +26,6 @@ import 
org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.impl.DefaultObjectWrapper;
 import org.apache.freemarker.servlet.ServletContextHashModel;
 import org.apache.freemarker.servlet.jsp.TaglibFactory;
-import org.apache.freemarker.servlet.jsp.TaglibFactoryBuilder;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.web.servlet.view.AbstractTemplateViewResolver;
 import org.springframework.web.servlet.view.AbstractUrlBasedView;
@@ -128,7 +127,7 @@ public class FreemarkerViewResolver extends 
AbstractTemplateViewResolver impleme
 
         servletContextModel = new ServletContextHashModel(pageContextServlet, 
objectWrapper);
 
-        taglibFactory = new TaglibFactoryBuilder(getServletContext(), 
objectWrapper).build();
+        taglibFactory = new TaglibFactory.Builder(getServletContext(), 
objectWrapper).build();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/dcbebe9b/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 093472c..1ed2831 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
@@ -32,7 +32,6 @@ 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;
@@ -73,7 +72,7 @@ public class FreemarkerViewTest {
 
         pageContextServlet = new PageContextServlet();
         pageContextServlet.init(new PageContextServletConfig(servletContext, 
PageContextServlet.class.getSimpleName()));
-        taglibFactory = new TaglibFactoryBuilder(servletContext, 
objectWrapper).build();
+        taglibFactory = new TaglibFactory.Builder(servletContext, 
objectWrapper).build();
 
         viewResolver = new FreemarkerViewResolver();
         viewResolver.setServletContext(servletContext);

Reply via email to