<!--
The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.

You can obtain a copy of the License at https://netbeans.org/cddl.html
or https://netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at https://netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

The Original Software is NetBeans. The Initial Developer of the Original
Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
Microsystems, Inc. All Rights Reserved.
-->

<!--
    Document   : plugin_descriptor.dtd
    Created on : February 17, 2004, 4:53 PM
    Author     : Martin Brehovsky
    Description:
       This DTD describes XTest's Plugin descriptor. 
       Comments above each definition describe the element/attribute purpose
-->


<!-- this is the topmost element -->
<!ELEMENT XTestPlugin (Dependencies, AvailableCompilers?, AvailablePackagers?,
                       AvailableExecutors?, AvailableResultProcessors?)>
<!-- attributes for XTestPlugin element
    - name      - the name of the plugin, it also servers as a plugin ID
    - version   - version of the plugin
    - extends   - in the case the plugin extends already existing plugin, this 
                  attribute should containt the name (ID) of the extended plugin
-->
<!ATTLIST XTestPlugin
    name     CDATA #REQUIRED
    version  CDATA #REQUIRED
    extends  CDATA #IMPLIED
>

<!-- Dependencies element defines dependecies of this plugin on XTest and other plugins
     Please note this element is required
-->
<!ELEMENT Dependencies (UsePlugin)>

<!-- attributes for Dependecies element
    - requiredXTestVersion - the lowest version of XTest capable running this
                             plugin. 
-->
<!ATTLIST Dependencies
    requiredXTestVersion CDATA #REQUIRED
>

<!-- element used to define dependecies on other plugins
         - when dependency is defined, XTest then in runtime exports information
              about the plugin described here, such as home dir, so the declaring
              plugin can access its resources -->
<!ELEMENT UsePlugin EMPTY>
<!-- attributes for UsePlugin element
    - name    - name of the plugin to be depended on
    - version - the lowest version of the plugin, so it is compatible with this
                plugin
-->                
<!ATTLIST UsePlugin
    name    CDATA #REQUIRED
    version CDATA #REQUIRED
>

<!-- this element contains all compilers supplied by the plugin -->
<!ELEMENT AvailableCompilers (Compiler+)>

<!-- this element describes a particular compiler supplied by the plugin -->
<!ELEMENT Compiler EMPTY>
<!-- attributes for Compiler element
    - id      - name or ide of the supplied compiler - this name is used by test 
                scripts when calling a particular (non default) compiler
    - antfile - file with relative path to this descriptor which contains the 
                compiler ant target
    - target  - target in the {antfile} executed as the compiler
    - dafault - whether this compiler is default (i.e. called when no compiler
                is specified)
-->                
<!ATTLIST Compiler
   id      CDATA #REQUIRED
   antfile CDATA #REQUIRED
   target  CDATA #REQUIRED
   default (true|false) "false"
>

<!-- this element contains all packagers supplied by the plugin -->
<!ELEMENT AvailablePackagers (Packager+)>

<!-- this element describes a particular packager supplied by the plugin -->
<!ELEMENT Packager EMPTY>
<!-- attributes for Packager element
     - attributes meaning is exactly the same as for the Compiler element
-->   
<!ATTLIST Packager
   id      CDATA #REQUIRED
   antfile CDATA #REQUIRED
   target  CDATA #REQUIRED
   default (true|false) "false"
>

<!-- this element contains all executors supplied by the plugin -->
<!ELEMENT AvailableExecutors (Executor+)>

<!-- this element describes a particular executor supplied by the plugin -->
<!ELEMENT Executor EMPTY>
<!-- attributes for Executor element
     - attributes meaning is exactly the same as for the Compiler element
-->   
<!ATTLIST Executor
   id      CDATA #REQUIRED
   antfile CDATA #REQUIRED
   target  CDATA #REQUIRED
   default (true|false) "false"
>

<!-- this element contains all result processors supplied by the plugin -->
<!ELEMENT AvailableResultProcessor (ResultProcessor+)>

<!-- this element describes a particular result processor supplied by the plugin -->
<!ELEMENT ResultProcessor EMPTY>
<!-- attributes for ResultProcessor element
     - executorID - id of the executor, after which execution should be this 
                    result processor used to process the gathered results
     - the rest of attributes meaning is exactly the same as for the Compiler element
-->   
<!ATTLIST ResultProcessor
   id         CDATA #REQUIRED
   executorID CDATA #IMPLIED
   antfile    CDATA #REQUIRED
   target     CDATA #REQUIRED
   default   (true|false) "false"
>







