<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->

<!-- $Rev: 1131922 $ $Date: 2011-06-05 14:21:46 +0800 (Sun, 05 Jun 2011) $ -->

<xs:schema xmlns:tomcat="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-2.0.1"
    targetNamespace="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-2.0.1"
    xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2"
    xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
    xmlns:jaspi="http://geronimo.apache.org/xml/ns/geronimo-jaspi"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    attributeFormDefault="unqualified" version="1.1">

    <xs:annotation>
        <xs:documentation>
            This is an XML Schema Definition for Geronimo tomcat web application
            deployment plan. In case the web application deployment plan is
            provided internally in the web archive, it should be named
            META-INF/geronimo-web.xml. In case the web application deployment
            plan is provided externally, the deployment descriptor can be named
            anything and provided to the deploy tool. Alternatively, it can be
            included in the EAR and referenced by an alt-dd element of the EAR
            deployment plan. All the web application deployment plan must
            specify the top level element as web-app with namespace specified as
            xmlns="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-2.0.1". The
            default location for this document is
            http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-2.0.1
        </xs:documentation>
    </xs:annotation>

    <xs:import namespace="http://geronimo.apache.org/xml/ns/naming-1.2"
        schemaLocation="geronimo-naming-1.2.xsd">
        <xs:annotation>
            <xs:documentation>
                Import partial schema containing common naming elements, the
                imported plan declares elements like ejb-ref, ejb-local-ref,
                service-ref, resource-ref, and resource-env-ref required by this
                plan schema.
            </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:import
        namespace="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
        schemaLocation="geronimo-application-2.0.xsd">
        <xs:annotation>
            <xs:documentation>
                Import Geronimo application deployment plans. The imported plan
                includes abstract complex types security required by this plan
                schema.
            </xs:documentation>
        </xs:annotation>
    </xs:import>
    <xs:import namespace="http://geronimo.apache.org/xml/ns/deployment-1.2"
        schemaLocation="geronimo-module-1.2.xsd">
        <xs:annotation>
            <xs:documentation>
                Import Geronimo Services deployment plans. The imported plan
                includes complex types like moduleType, environmentType,
                dependenciesType, etc. required by this plan schema.
            </xs:documentation>
        </xs:annotation>
    </xs:import>

    <xs:import namespace="http://geronimo.apache.org/xml/ns/geronimo-jaspi" schemaLocation="geronimo-jaspi.xsd"/>
  
    <xs:element name="web-app" type="tomcat:web-appType">
        <xs:annotation>
            <xs:documentation>
                The web-app element is the root of the deployment descriptor for
                a Geronimo tomcat web application. Note that the sub-elements of
                this element should be as in the given order in a sequence.
            </xs:documentation>
        </xs:annotation>
    </xs:element>

    <xs:complexType name="web-appType">
        <xs:sequence>
            <xs:element ref="sys:environment" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        Reference to environment element defined in imported
                        "geronimo-module-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="module" type="tomcat:moduleType" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        An optional module element which defines various
                        modules included in the web application archive and
                        adds an optional alt-dd element defining a Geronimo
                        specific deployment descriptor.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="context-root" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        This is the first part of the URL used to access the web
                        application. For example context-root of "Sample-App"
                        will have URL of http://host:port/Sample-App" and a
                        context-root of "/" would make this the default web
                        application to the server.

                        If the web application is packaged as an EAR that can
                        use application context in the "application.xml". This
                        element is necessary unless you want context root to
                        default to the WAR name.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="work-dir" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        This is the work directory that will be used by this
                        application.  The directory location will be relative
                        to "catalina.home".
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element ref="app:clustering" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        Reference to abstract clustering element defined in
                        imported "geronimo-application-2.0.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <!--<xs:element name="context-priority-classloader" type="xs:boolean" minOccurs="0"/>-->

            <xs:element ref="naming:web-container" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        Reference to web-container element defined in imported
                        "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:element name="host" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The host element maps the web application to this
                        particular host name.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="cross-context" type="tomcat:emptyType"
                minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The cross-context is an indicative element to specify
                        that the web application will use dispatch request to
                        other applications and this cross context should be
                        enabled.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="disable-cookies" type="tomcat:emptyType"
                minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The presence of disable-cookies element indicates the
                        cookies will not be used by tomcat web application and
                        should be disabled.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="context" type="tomcat:contextType" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The context element provides the same function as used in
                        Tomcat, it supports context level attributes and context
                        parameters.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="valve-chain" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The valve-chain provides the list of first element
                        tomcat valves chain for this web application.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="listener-chain" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The listener-chain provides the list of first element
                        tomcat lifecycle listener chain for this web application.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="tomcat-realm" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The tomcat-realm provides the tomcat security realm used
                        by this web application.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="manager" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The manager provides the clustering implementation used
                        by this web application.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="cluster" type="xs:string" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>
                        The cluster provides the name of cluster this web
                        application belongs to.
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:group ref="naming:jndiEnvironmentRefsGroup">
                <xs:annotation>
                    <xs:documentation>
                        Reference to jndiEnvironmentRefsGroup group defined in
                        imported "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:group>
            <xs:element ref="naming:message-destination" minOccurs="0"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation>
                        Reference to message-destination element defined in
                        imported "geronimo-naming-1.2.xsd"
                    </xs:documentation>
                </xs:annotation>
            </xs:element>

            <xs:sequence minOccurs="0">
                <xs:element name="security-realm-name" type="xs:string">
                    <xs:annotation>
                        <xs:documentation>
                            The security-realm-name element provides the name of
                            security realm that will be used by JAAS
                            authentication. The name should match the your
                            security realm GBean.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="authentication" type="tomcat:authenticationType" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>
                            The authentication element provides configuration for a specific
                            jaspi AuthConfigProvider, ServerAuthConfig, ServerAuthContext, or ServerAuthModule
                            to be used for authentication rather than a standard authentication method configured
                            in web.xml.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="app:security" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>
                            Reference to security element defined in imported
                            "geronimo-security-2.0.xsd"
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>

            <xs:choice minOccurs="0" maxOccurs="unbounded">
                <xs:element ref="sys:service">
                    <xs:annotation>
                        <xs:documentation>
                            Reference to abstract service element defined in imported
                            "geronimo-module-1.2.xsd"
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:any namespace="http://java.sun.com/xml/ns/persistence"/>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="emptyType" />

    <xs:complexType name="authenticationType">
        <xs:choice minOccurs="0">
            <xs:element ref="jaspi:configProvider"/>
            <xs:element ref="jaspi:serverAuthConfig"/>
            <xs:element ref="jaspi:serverAuthContext"/>
            <xs:element ref="jaspi:serverAuthModule"/>
        </xs:choice>
    </xs:complexType>
    
    <xs:complexType name="contextType">        
        <xs:sequence>
            <xs:element name="parameter" type="tomcat:parameterType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:anyAttribute processContents="skip"/>
    </xs:complexType>
    
    <xs:complexType name="parameterType">        
        <xs:attribute name="name" type="xs:string" />
        <xs:attribute name="value" type="xs:string" />
        <xs:attribute name="override" type="xs:boolean" default="false"/>
    </xs:complexType>
    
    <xs:complexType name="moduleType">
        <xs:annotation>
            <xs:documentation>
               add an optional alt-dd element defining a Geronimo specific
                deployment descriptor for war ejb module.
            </xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:choice>
                <xs:element name="ejb" type="tomcat:pathType">
                    <xs:annotation>
                        <xs:documentation>
                            The presence of this element is indicative of J2EE
                            module type to be EJB module
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:choice>
            <xs:choice>
                <xs:element name="alt-dd" type="tomcat:pathType">
                    <xs:annotation>
                        <xs:documentation>
                            Specifies an optional URI to the post-assembly
                            version of the Geronimo specific deployment
                            descriptor file for a particular J2EE module
                            relative to the enterprise application package main
                            directory.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:any namespace="##other" processContents="lax">
                    <xs:annotation>
                        <xs:documentation>
                            This option element contains the alternate geronimo
                            deployment plan for included modules.
                        </xs:documentation>
                    </xs:annotation>
                </xs:any>
            </xs:choice>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="pathType">
        <xs:annotation>
            <xs:documentation>Mirrors j2ee:pathType.</xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:restriction base="tomcat:string" />
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="string">
        <xs:annotation>
            <xs:documentation>Mirrors j2ee:string.</xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:extension base="xs:token">
                <xs:attribute name="id" type="xs:ID" />
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>       
</xs:schema>
