<?xml version="1.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.
  -->

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         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">
  <display-name>Continuum Distributed Build Transport Tests</display-name>

  <context-param>
    <param-name>contextClass</param-name>
    <param-value>org.codehaus.plexus.spring.PlexusWebApplicationContext</param-value>
  </context-param>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath*:/META-INF/spring-context.xml
      classpath*:/applicationContext.xml
      classpath*:/META-INF/plexus/components.xml
      classpath*:/META-INF/plexus/application.xml
    </param-value>
  </context-param>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <listener>
    <!-- TODO: some Spring technique for this? -->
    <listener-class>org.apache.continuum.web.startup.BuildAgentStartup</listener-class>
  </listener>

  <servlet>
    <servlet-name>SlaveXmlRpcServlet</servlet-name>
    <servlet-class>
      com.atlassian.xmlrpc.spring.BinderSpringXmlRpcServlet
    </servlet-class>
    <init-param>
      <param-name>serviceListBeanName</param-name>
      <param-value>xmlrpcServicesList</param-value>
    </init-param>
    <init-param>
      <param-name>authHandlerBeanName</param-name>
      <param-value>xmlRpcAuthenticator</param-value>
    </init-param>
    <init-param>
      <param-name>enabledForExtensions</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet>
    <servlet-name>WorkingCopyServlet</servlet-name>
    <servlet-class>
      org.apache.continuum.webdav.WorkingCopyServlet
    </servlet-class>
    <!-- Loading this on startup so as to take advantage of configuration listeners -->
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>SlaveXmlRpcServlet</servlet-name>
    <url-pattern>/xmlrpc</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>WorkingCopyServlet</servlet-name>
    <url-pattern>/workingcopy/*</url-pattern>
  </servlet-mapping>
</web-app>
