<?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 - iCalendar Server</display-name>
  <description>iCalendar Server Module of the Open For Business Project</description>

  <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>localDispatcherName</param-name>
    <param-value>ical</param-value>
    <description>A unique name used to identify/recognize the local dispatcher for the Service Engine</description>
  </context-param>
  <context-param>
    <param-name>requestHandlerFactoryClass</param-name>
    <param-value>org.ofbiz.workeffort.workeffort.ICalHandlerFactory</param-value>
  </context-param>

    <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:/select:/index.html:/index.jsp:/default.html:/default.jsp:/images:/includes/maincss.css</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>ContextFilter</filter-name>
            <url-pattern>/*</url-pattern>
    </filter-mapping>
  <listener><listener-class>org.ofbiz.webapp.control.ControlEventListener</listener-class></listener>
  <listener><listener-class>org.ofbiz.webapp.control.LoginEventListener</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> -->

  <servlet>
    <servlet-name>iCalendarServlet</servlet-name>
    <display-name>iCalendarServlet</display-name>
    <description>iCalendar WebDAV Servlet</description>
    <servlet-class>org.ofbiz.webapp.webdav.WebDavServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>iCalendarServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

  <session-config>
    <session-timeout>60</session-timeout>    <!-- in minutes -->
  </session-config>

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