<?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.
-->

<!--
     DTD for the Click Application Configuration File, Version 2.2

     To support validation of your configuration file, include the following
     DOCTYPE element at the beginning (after the "xml" declaration):

     <!DOCTYPE click-app PUBLIC
       "-//Apache Software Foundation//DTD Click Configuration 2.2//EN"
       "http://click.apache.org/dtds/click-2.2.dtd">
-->

<!-- The Click Application (click.xml) Document Type Definition. -->
<!ELEMENT click-app (pages*, headers?, format?, mode?, controls?, file-upload-service?, log-service?, resource-service?, template-service?, page-interceptor*)>
  <!ATTLIST click-app charset CDATA #IMPLIED>
  <!ATTLIST click-app locale CDATA #IMPLIED>

  <!-- Application pages. -->
  <!ELEMENT pages (page*, excludes*)>
    <!ATTLIST pages package CDATA #IMPLIED>
    <!ATTLIST pages automapping (true|false) "true">
    <!ATTLIST pages autobinding (default|annotation|none) "default">

    <!-- Page definition. -->
    <!ELEMENT page (header*)>
      <!ATTLIST page path CDATA #REQUIRED>
      <!ATTLIST page classname CDATA #REQUIRED>

    <!-- Excludes definition. -->
    <!ELEMENT excludes (#PCDATA)>
      <!ATTLIST excludes pattern CDATA #REQUIRED>

  <!-- Application default page headers. -->
  <!ELEMENT headers (header*)>

    <!-- Header definition. -->
    <!ELEMENT header (#PCDATA)>
      <!ATTLIST header name CDATA #REQUIRED>
      <!ATTLIST header value CDATA #REQUIRED>
      <!ATTLIST header type (String|Integer|Date) "String">

  <!-- Page template formatter class. An new format object added to
       the Velocity context under the key: "format". -->
  <!ELEMENT format (#PCDATA)>
   <!ATTLIST format classname CDATA "org.apache.click.util.Format">

  <!-- Application mode, which configures logging and caching. -->
  <!ELEMENT mode (#PCDATA)>
   <!ATTLIST mode value (production|profile|development|debug|trace) "development">

  <!-- Application control objects. -->
  <!ELEMENT controls (control*, control-set*)>

    <!-- Deployable control class. -->
    <!ELEMENT control (#PCDATA)>
      <!ATTLIST control classname CDATA #REQUIRED>

    <!-- Deployable Third Party Set of Controls -->
    <!ELEMENT control-set (#PCDATA)>
      <!ATTLIST control-set name CDATA #REQUIRED>

  <!-- File Upload Service. -->
  <!ELEMENT file-upload-service (property*)>
   <!ATTLIST file-upload-service classname CDATA "org.apache.click.service.FileUploadService">

    <!-- Property definition. -->
    <!ELEMENT property (#PCDATA)>
      <!ATTLIST property name CDATA #REQUIRED>
      <!ATTLIST property value CDATA #REQUIRED>

  <!-- Log Service. -->
  <!ELEMENT log-service (property*)>
   <!ATTLIST log-service classname CDATA "org.apache.click.service.ConsoleLogService">

  <!-- Resource Service class. -->
  <!ELEMENT resource-service (property*)>
   <!ATTLIST resource-service classname CDATA "org.apache.click.service.ClickResourceService">

  <!-- Template Service class. -->
  <!ELEMENT template-service (property*)>
   <!ATTLIST template-service classname CDATA "org.apache.click.service.VelocityTemplateService">

  <!-- Application page interceptors. -->
  <!ELEMENT page-interceptor (property*)>
    <!ATTLIST page-interceptor classname CDATA #REQUIRED>
    <!ATTLIST page-interceptor scope (application|request) "request">
