<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/*
 * $Id$
 *
 * 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.
 */
-->

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">

    <display-name>Tiles 2 Test Application</display-name>
    <distributable/>

    <context-param>
        <param-name>org.apache.tiles.context.TilesContextFactory</param-name>
        <param-value>org.apache.tiles.context.enhanced.EnhancedContextFactory</param-value>
    </context-param>

    <context-param>
        <param-name>org.apache.tiles.factory.TilesContainerFactory.MUTABLE</param-name>
        <param-value>true</param-value>
    </context-param>

    <filter>
        <filter-name>Tiles Decoration Filter</filter-name>
        <filter-class>org.apache.tiles.web.util.TilesDecorationFilter</filter-class>
        <init-param>
            <param-name>definition</param-name>
            <param-value>test.definition</param-value>
        </init-param>
        <init-param>
            <param-name>attribute-name</param-name>
            <param-value>body</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>Security Wrapping Filter</filter-name>
        <filter-class>org.apache.tiles.test.filter.SecurityWrappingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Tiles Decoration Filter</filter-name>
        <url-pattern>/testdecorationfilter.jsp</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>Security Wrapping Filter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <!-- Standard Action Servlet Configuration -->
    <servlet>
        <servlet-name>tiles</servlet-name>
        <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
        <init-param>
            <param-name>definitions-config</param-name>
            <param-value>/WEB-INF/tiles-defs.xml,/org/apache/tiles/classpath-defs.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>freemarker</servlet-name>
        <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
        
        <!-- FreemarkerServlet settings: -->
        <init-param>
            <param-name>TemplatePath</param-name>
            <param-value>/</param-value>
        </init-param>
        <init-param>
            <param-name>NoCache</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>ContentType</param-name>
            <param-value>text/html</param-value>
        </init-param>
        
        <!-- FreeMarker settings: -->
        <init-param>
            <param-name>template_update_delay</param-name>
            <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
        </init-param>
        <init-param>
            <param-name>default_encoding</param-name>
            <param-value>ISO-8859-1</param-value>
        </init-param>
        <init-param>
            <param-name>number_format</param-name>
            <param-value>0.##########</param-value>
        </init-param>
        
        <load-on-startup>3</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Tiles Dispatch Servlet</servlet-name>
        <servlet-class>org.apache.tiles.web.util.TilesDispatchServlet</servlet-class>
    </servlet>

    <!-- Standard Action Servlet Configuration -->
    <servlet>
        <servlet-name>layoutServlet</servlet-name>
        <servlet-class>org.apache.tiles.test.servlet.IncludingServlet</servlet-class>
        <init-param>
            <param-name>include</param-name>
            <param-value>/layout.jsp</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>selectLocaleServlet</servlet-name>
        <servlet-class>org.apache.tiles.test.servlet.SelectLocaleServlet</servlet-class>
    </servlet>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet-mapping>
        <servlet-name>freemarker</servlet-name>
        <url-pattern>*.ftl</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>layoutServlet</servlet-name>
        <url-pattern>/servlets/layoutServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>selectLocaleServlet</servlet-name>
        <url-pattern>/servlets/selectLocaleServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>Tiles Dispatch Servlet</servlet-name>
        <url-pattern>*.tiles</url-pattern>
    </servlet-mapping>

</web-app>
