<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<!--
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>
    <display-name>Open For Business - demostore</display-name>
    <description>Cloned Demo Store for the Open For Business Project</description>

    <context-param>
        <param-name>webSiteId</param-name>
        <param-value>WebStoreClone</param-value>
        <description>A unique ID used to look up the WebSite entity</description>
    </context-param>
    <context-param>
        <param-name>localDispatcherName</param-name>
        <param-value>ecommerce</param-value>
        <description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
    </context-param>
    <context-param>
        <param-name>entityDelegatorName</param-name>
        <param-value>default</param-value>
        <description>The Name of the Entity Delegator to use, defined in entityengine.xml</description>
    </context-param>
    <context-param>
        <param-name>mainDecoratorLocation</param-name>
        <param-value>component://ecommerce/widget/CommonScreens.xml</param-value>
        <description>The location of the main-decorator screen to use for this webapp; referred to as a context variable in screen def XML files.</description>
    </context-param>

    <filter>
        <filter-name>CatalogUrlFilter</filter-name>
        <display-name>CatalogUrlFilter</display-name>
        <filter-class>org.ofbiz.product.category.CatalogUrlFilter</filter-class>
        <init-param><param-name>defaultLocaleString</param-name><param-value>en_US</param-value></init-param>
        <init-param><param-name>redirectUrl</param-name><param-value>/control/main</param-value></init-param>
    </filter>
    <filter>
        <filter-name>ContextFilter</filter-name>
        <display-name>ContextFilter</display-name>
        <filter-class>org.ofbiz.webapp.control.ContextFilter</filter-class>
        <init-param>
            <param-name>disableContextSecurity</param-name>
            <param-value>N</param-value>
        </init-param>
        <init-param>
            <param-name>allowedPaths</param-name>
            <param-value>/error:/control:/products:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images</param-value>
        </init-param>
        <init-param>
            <param-name>errorCode</param-name>
            <param-value>403</param-value>
        </init-param>
        <init-param>
            <param-name>redirectPath</param-name>
            <param-value>/control/main</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CatalogUrlFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>ContextFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener><listener-class>org.ofbiz.webapp.control.ControlEventListener</listener-class></listener>
    <!-- NOTE: not all app servers support mounting implementations of the HttpSessionActivationListener interface -->
    <!-- <listener><listener-class>org.ofbiz.webapp.control.ControlActivationEventListener</listener-class></listener> -->

    <!-- this listener will save any abandoned cart info -->
    <listener><listener-class>org.ofbiz.order.shoppingcart.CartEventListener</listener-class></listener>
    <!-- this listener will clean up info -->
    <listener><listener-class>org.ofbiz.webapp.control.LoginEventListener</listener-class></listener>

    <servlet>
        <servlet-name>ControlServlet</servlet-name>
        <display-name>ControlServlet</display-name>
        <description>Main Control Servlet</description>
        <servlet-class>org.ofbiz.webapp.control.ControlServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- un-comment for Worldpay
    <servlet>
        <servlet-name>select</servlet-name>
        <display-name>SelectHandler</display-name>
        <description>WorldPay Select Handler Service</description>
        <servlet-class>com.worldpay.select.merchant.SelectHandler</servlet-class>
        <load-on-startup>5</load-on-startup>
    </servlet>
    -->
    <servlet>
        <servlet-name>CatalogUrlServlet</servlet-name>
        <display-name>CatalogUrlServlet</display-name>
        <description>Catalog (Category/Product) URL Servlet</description>
        <servlet-class>org.ofbiz.product.category.CatalogUrlServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>ControlServlet</servlet-name>
        <url-pattern>/control/*</url-pattern>
    </servlet-mapping>
    <!-- un-comment for Worldpay
    <servlet-mapping>
        <servlet-name>select</servlet-name>
        <url-pattern>/select/*</url-pattern>
    </servlet-mapping>
    -->
    <servlet-mapping>
        <servlet-name>CatalogUrlServlet</servlet-name>
        <url-pattern>/products/*</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
</web-app>
