You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/08/28 01:31:55 UTC
svn commit: r689664 -
/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
Author: nbubna
Date: Wed Aug 27 16:31:54 2008
New Revision: 689664
URL: http://svn.apache.org/viewvc?rev=689664&view=rev
Log:
initial revision of VelocityViewFilter
Added:
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java (with props)
Added: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java?rev=689664&view=auto
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java (added)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java Wed Aug 27 16:31:54 2008
@@ -0,0 +1,191 @@
+package org.apache.velocity.tools.view;
+
+/*
+ * 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.
+ */
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+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;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.tools.view.VelocityView;
+import org.apache.velocity.tools.view.ViewToolContext;
+
+/**
+ * <p>A filter to ensure VelocityTools {@link Toolbox}es are
+ * available in the request/session/application scopes. This
+ * can simplify the process of integration with other frameworks.</p>
+ *
+ * <p>VelocityViewFilter supports the following configuration parameters
+ * in web.xml:</p>
+ * <dl>
+ * <dt>org.apache.velocity.tools</dt>
+ * <dd>Path and name of the toolbox configuration file. The path must be
+ * relative to the web application root directory. If this parameter is
+ * not found, the servlet will check for a toolbox file at
+ * '/WEB-INF/tools.xml'.</dd>
+ * <dt>org.apache.velocity.properties</dt>
+ * <dd>Path and name of the Velocity configuration file. The path must be
+ * relative to the web application root directory. If this parameter
+ * is not present, Velocity will check for a properties file at
+ * '/WEB-INF/velocity.properties'. If no file is found there, then
+ * Velocity is initialized with the settings in the classpath at
+ * 'org.apache.velocity.tools.view.velocity.properties'.</dd>
+ * <dt>org.apache.velocity.tools.loadDefaults</dt>
+ * <dd>By default, this is {@code true}. If set to {@code false}, then
+ * the default toolbox configuration will not be added to your (if any)
+ * custom configuration. NOTE: The default configuration will also be
+ * suppressed if you are using a deprecated toolbox.xml format and do not
+ * explicitly set this to {@code true}.</dd>
+ * <dt>org.apache.velocity.tools.cleanConfiguration</dt>
+ * <dd>By default, this is {@code false}. If set to {@code true}, then
+ * then the final toolbox configuration (the combination of any custom
+ * one(s) provided by yourself and/or the default configuration(s))
+ * will have all invalid tools, properties, and/or data removed prior to
+ * configuring the ToolboxFactory for this servlet by a
+ * {@link org.apache.velocity.tools.config.ConfigurationCleaner}</dd>
+ * <dt>org.apache.velocity.tools.shared.config</dt>
+ * <dd>By default, this is {@code true}. If set to {@code false}, then
+ * the {@link VelocityView} used by this filter will not be shared
+ * with other VelocityViewFilters, {@link VelocityViewServlet}s or
+ * {@link org.apache.velocity.tools.view.jsp.VelocityViewTag}s in the
+ * application.</dd>
+ * <dt>org.apache.velocity.tools.context.key</dt>
+ * <dd>If you set a value for this property, this filter will create
+ * and prepare a {@link ViewToolContext} for each request, and then
+ * place it into the request attributes under the key you set. This
+ * is primarily for those who have this filter NOT share a config
+ * (i.e. non-shared VelocityView) and thus will find it easier to
+ * retrieve a working context from the request attributes than it
+ * would be to get the VelocityView for this filter and have it
+ * create the context for them. Most users will have no trouble
+ * getting a shared VelocityView and creating the context themselves.</dd>
+ * </dl>
+ *
+ * @version $Id: VelocityViewFilter.java 611011 2008-01-11 01:32:59Z nbubna $
+ */
+public class VelocityViewFilter implements Filter
+{
+ public static final String CONTEXT_KEY =
+ "org.apache.velocity.tools.context.key";
+
+ private VelocityView view;
+ private FilterConfig config;
+ private String contextKey = null;
+
+ /**
+ * <p>Initializes VelocityView used to process requests.
+ * Called by the servlet container on loading.</p>
+ *
+ * @param config filter configuation
+ */
+ public void init(FilterConfig config) throws ServletException
+ {
+ this.config = config;
+
+ // init the VelocityView (if it hasn't been already)
+ getVelocityView();
+
+ // look for a context key
+ contextKey = findInitParameter(CONTEXT_KEY);
+ }
+
+ protected FilterConfig getFilterConfig()
+ {
+ return this.config;
+ }
+
+ protected VelocityView getVelocityView()
+ {
+ if (this.view == null)
+ {
+ this.view = ServletUtils.getVelocityView(getFilterConfig());
+ assert (view != null);
+ }
+ return this.view;
+ }
+
+ protected String getContextKey()
+ {
+ return this.contextKey;
+ }
+
+ /**
+ * Looks up an init parameter with the specified key in either the
+ * FilterConfig or, failing that, in the ServletContext.
+ */
+ protected String findInitParameter(String key)
+ {
+ FilterConfig conf = getFilterConfig();
+ String param = conf.getInitParameter(key);
+ if (param == null || param.length() == 0)
+ {
+ param = conf.getServletContext().getInitParameter(key);
+ }
+ return param;
+ }
+
+ /**
+ * Simply prepares the request (and/or session) toolbox(es)
+ * for other filters, servlets or whatnot to use. If a context key
+ * has been provided in the init-params of the filter or webapp,
+ * then this will also create a {@link ViewToolContext} and put
+ * it in the request attributes under that key.
+ */
+ public void doFilter(ServletRequest request,
+ ServletResponse response,
+ FilterChain chain)
+ throws java.io.IOException, ServletException
+ {
+ // prepare toolbox(es)
+ getVelocityView().prepareToolboxes(request);
+
+ // can/should we create the context for the request?
+ if (contextKey != null && request instanceof HttpServletRequest)
+ {
+ Context context = createContext((HttpServletRequest)request,
+ (HttpServletResponse)response);
+ request.setAttribute(contextKey, context);
+ }
+
+ // move down the chain
+ chain.doFilter(request, response);
+ }
+
+ protected Context createContext(HttpServletRequest request,
+ HttpServletResponse response)
+ {
+ return getVelocityView().createContext(request, response);
+ }
+
+ public void destroy()
+ {
+ // do anything else?
+ this.view = null;
+ this.config = null;
+ this.contextKey = null;
+ }
+
+}
Propchange: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
------------------------------------------------------------------------------
svn:keywords = Revision
Propchange: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewFilter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain