blob: b96a08a4c0a9384b3c6a61985305c8c5bc34b7c3 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!-- ******************************************************************************* -->
<!-- * Copyright (c) 2011 University of Illinois All rights reserved. This program -->
<!-- * and the accompanying materials are made available under the terms of the -->
<!-- * Eclipse Public License v1.0 which accompanies this distribution, and is -->
<!-- * available at http://www.eclipse.org/legal/epl-v10.html -->
<!-- * -->
<!-- * Contributors: -->
<!-- * Albert L. Rossi - design and implementation -->
<!-- ****************************************************************************** -->
<xs:schema targetNamespace="http://org.eclipse.ptp/rm" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rm="http://org.eclipse.ptp/rm"
elementFormDefault="qualified">
<xs:element name="resource-manager-builder" type="rm:resource-manager-data"/>
<xs:complexType name="resource-manager-data">
<xs:annotation>
<xs:documentation>
It is assumed that the xml instance of the schema will bear a name which sufficiently distinguishes it from others
of a similar type; e.g., pbs-torque-v_2.3.7_abe is specific to an installation on the host abe, ll-v_4.0 suits all installations of
LoadLeveler version 4, etc.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
<xs:element name="control-data" type="rm:control-type"/>
<xs:element name="monitor-data" type="rm:monitor-type"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
<xs:complexType name="site-type">
<xs:annotation>
<xs:documentation>
An optional place to set default remote site information. The connections strings are URIs.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
<xs:element minOccurs="0" name="monitor-connection" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="control-type">
<xs:annotation>
<xs:documentation>
The top-level control elements define the properties and attributes, files to be staged, job script to be generated, commands
specific to the resource manager, and the layout of the Launch Tab.
The resource manager implementation constructs a variable map
serving as the resource manager "environment"; variables are dereferenced in the configuration file via ${rm:name} or
${rm:name#getterName}; all properties and attributes defined in the configuration are mapped. The following hard-coded variables
are also added at runtime:
<!-- from runtime configuration information -->
control.user.name
control.address
<!-- from the other Run Configuration tabs -->
executablePath
progArgs
directory
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
<xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="rm:attribute-type"/>
<xs:element name="managed-files" minOccurs="0" type="rm:managed-files-type"/>
<xs:element name="script" minOccurs="0" type="rm:script-type"/>
<xs:element name="start-up-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type">
<xs:annotation>
<xs:documentation>
Arbitrary commands which need to be run on startup.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:choice>
<xs:annotation>
<xs:documentation>
Currently a configuration may have only a batch or an interactive mode. Thus it may have only two submission
modes, a run and a debug, for the given type. In the future we may allow all four to coexist in a single configuration.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="submit-interactive" type="rm:command-type"/>
<xs:element name="submit-interactive-debug" type="rm:command-type" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="submit-batch" type="rm:command-type"/>
<xs:element name="submit-batch-debug" type="rm:command-type" minOccurs="0"/>
</xs:sequence>
</xs:choice>
<xs:element name="get-job-status" type="rm:command-type" minOccurs="0">
<xs:annotation>
<xs:documentation>
A user-initiated (on demand) request to refresh the status information for a submission. Normal (polled) updates
are the responsibility of the monitor. The command nevertheless needs to be implemented in most cases, as it will be called
internally just after submission.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="terminate-job" type="rm:command-type" minOccurs="0">
<xs:annotation>
<xs:documentation>
NOTE: if the submission type is interactive, this command does not need to be implemented, as the process
termination will be handled
internally.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="suspend-job" type="rm:command-type" minOccurs="0"/>
<xs:element name="resume-job" type="rm:command-type" minOccurs="0"/>
<xs:element name="hold-job" type="rm:command-type" minOccurs="0"/>
<xs:element name="release-job" type="rm:command-type" minOccurs="0"/>
<xs:element name="shut-down-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type">
<xs:annotation>
<xs:documentation>
Arbitrary commands which need to be run on shutdown.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="property-type">
<xs:annotation>
<xs:documentation>
A property is any variable necessary for the functioning of the resource manager. Properties often (but not
necessarily) are not visible. The value for properties can by any primitive type, or lists or maps of strings. If stdout from a
scheduled job is to be delivered to the client, the "stdout" property should be included in the resource manager property set.
NOTE: the untyped "value" element on properties is for internal use only; to give a predefined (primitive) value, use the "default"
element along with the "type" attribute.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="default" minOccurs="0" type="xs:string"/>
<xs:element name="value" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
<xs:attribute name="visible" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>
If this is set to false, the property or attribute is marked as being for internal use only, and will not be made
available for representation via Launch Tab widgets.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="readOnly" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Attribute or property has a predetermined value which the user can inspect but not modify.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="attribute-type">
<xs:annotation>
<xs:documentation>
An attribute is an externally defined variable, most often associated with the scheduler system itself; the most
common attributes are those pertaining to the job dimensions and requested resources. The value for attribute can by any primitive
type. NOTE: the untyped "value" element on attributes is for internal use only; to give a predefined (primitive) value, use the
"default" element along with the "type" attribute.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="description" type="xs:string">
<xs:annotation>
<xs:documentation>
A brief (one sentence) explanation of the attribute.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="tooltip" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
A somewhat more detailed explanation of format and usage. This will be displayed as a tooltip in the UI.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="choice" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
A predetermined, fixed set of values to choose from; these are comma-delimited and will appear as the items of a
combo-box.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="default" minOccurs="0" type="xs:string"/>
<xs:element name="value" minOccurs="0"/>
<xs:element name="validator" minOccurs="0" type="rm:validator-type">
<xs:annotation>
<xs:documentation>
The user-entered value is immediately checked against these constraints.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="type" use="required" type="xs:string"/>
<xs:attribute name="visible" type="xs:boolean" default="true"/>
<xs:attribute name="status" type="xs:string"/>
<xs:attribute name="readOnly" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Attribute or property has a predetermined value which the user can inspect but not modify.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="min" type="xs:int">
<xs:annotation>
<xs:documentation>
For integer values, to be displayed as spinner boxes.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="max" type="xs:int">
<xs:annotation>
<xs:documentation>
For integer values, to be displayed as spinner boxes.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="managed-files-type">
<xs:annotation>
<xs:documentation>
List of files to be staged in connection with the job submission. NOTE: if the resource manager uses a script, its
staging as a file is handled automatically and need not be included among the set of managed files. A reserved property,
"managed_file_for_script", should be used to reference this file's path on the target resource.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="file-staging-location" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
The default is $USER_HOME/.eclipsesettings on the target resource.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="script-type">
<xs:annotation>
<xs:documentation>
The script element specifies the contents line by line. Each line can be an arbitrary set of arguments, each of
which can be optionally resolved in the environment, and which can be checked to see if the result after resolution should be
considered undefined and thus not included in the contents. The insertEnvironmentAfter (line number) indicates where to insert
extra environment variable definitions passed in from the Environment Tab, if any.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
</xs:sequence>
<xs:attribute name="insertEnvironmentAfter" type="xs:int" default="-1"/>
</xs:complexType>
<xs:complexType name="line-type">
<xs:sequence>
<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="command-type">
<xs:sequence>
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
<xs:element name="environment" minOccurs="0" maxOccurs="unbounded" type="rm:name-value-pair-type"/>
<xs:element name="stdout-parser" minOccurs="0" type="rm:tokenizer-type"/>
<xs:element name="stderr-parser" minOccurs="0" type="rm:tokenizer-type"/>
<xs:element name="redirect-parser" minOccurs="0" type="rm:tokenizer-type"/>
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="directory" type="xs:string"/>
<xs:attribute name="redirectStderr" type="xs:boolean" default="false"/>
<xs:attribute name="streamBufferLimit" type="xs:int" default="-1"/>
<xs:attribute name="replaceEnvironment" type="xs:boolean" default="false"/>
<xs:attribute name="waitForId" type="xs:boolean" default="true"/>
<xs:attribute name="ignoreExitStatus" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="launch-tab-type">
<xs:annotation>
<xs:documentation>
A recursive description of the UI element associated with the control part, the Launch Tab.
As in:
org.eclipse.ptp.rm.ui.launch.ExtendableRMLaunchConfigurationDynamicTab, provides a top-level "switch" between controllers. There
are a maximum of three top-level tabs or "pages"; the basic and advanced (the names are placeholders which need not correspond to
their actual content or usage, and can be changed) controllers are configurable; for the custom controller, see below. (see below).
The SWT-related types generally expose the fields of their associated Java class.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="basic" minOccurs="0" type="rm:tab-controller-type"/>
<xs:element name="advanced" minOccurs="0" type="rm:tab-controller-type"/>
<xs:element name="custom-controller" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
Fixed type; to be used with scheduler systems which accept submission scripts. Allows the user to browse the
workspace to open and edit a custom script. Set the text of this element to the title to appear in the top-level folder tab.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="validator-type">
<xs:annotation>
<xs:documentation>
A regular expression or an EFS string used to validate an attribute value.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:sequence>
<xs:element name="regex" minOccurs="0" type="rm:regex-type"/>
<xs:element name="file-info" minOccurs="0" type="rm:file-match-type"/>
</xs:sequence>
<xs:element name="error-message" minOccurs="0" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="managed-file-type">
<xs:annotation>
<xs:documentation>
If 'contents' is present, the file is written.
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element name="contents" type="xs:string"/>
<xs:element name="path" type="xs:string"/>
</xs:choice>
<xs:attribute name="name" use="required"/>
<xs:attribute name="uniqueIdPrefix" type="xs:boolean" default="false"/>
<xs:attribute name="resolveContents" type="xs:boolean" default="true"/>
<xs:attribute name="deleteAfterUse" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="file-match-type">
<xs:attribute name="efsAttributes" type="xs:string">
<xs:annotation>
<xs:documentation>
An or'd string of tags corresponding to the EFS integer constants; these include:
ATTRIBUTE_READ_ONLY
ATTRIBUTE_IMMUTABLE
ATTRIBUTE_OWNER_READ
ATTRIBUTE_OWNER_WRITE
ATTRIBUTE_OWNER_EXECUTE
ATTRIBUTE_GROUP_READ
ATTRIBUTE_GROUP_WRITE
ATTRIBUTE_GROUP_EXECUTE
ATTRIBUTE_OTHER_READ
ATTRIBUTE_OTHER_WRITE
ATTRIBUTE_OTHER_EXECUTE
ATTRIBUTE_EXECUTABLE
ATTRIBUTE_ARCHIVE
ATTRIBUTE_HIDDEN
ATTRIBUTE_SYMLINK
ATTRIBUTE_LINK_TARGET
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="lastModifiedBefore" type="xs:string">
<xs:annotation>
<xs:documentation>
use "yyyy/MM/dd HH:mm:ss" as format.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="lastModifiedAfter" type="xs:string">
<xs:annotation>
<xs:documentation>
use "yyyy/MM/dd HH:mm:ss" as format.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="length" type="xs:long"/>
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="name-value-pair-type">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
</xs:complexType>
<xs:complexType name="tab-controller-type">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:choice maxOccurs="unbounded">
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
<xs:element name="composite" type="rm:composite-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="sharedEnvironment" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
The default means that each tab is a separate view or selection into the global env, and it is this subset which
will be passed on the launch command. Setting this property to true means that the tab will pass all selected elements of the
entire shared enviroment to the resource manager at launch.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="regex-type" mixed="true">
<xs:attribute name="flags" type="xs:string">
<xs:annotation>
<xs:documentation>
An or'd string of the Java Regex flags:
CASE_INSENSITIVE
MULTILINE
DOTALL
UNICODE_CASE
CANON_EQ
LITERAL
COMMENTS
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="split" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Use the regex to perform a Java "split" on the segment rather than a match.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="expression" type="xs:string">
<xs:annotation>
<xs:documentation>
The actual pattern to match.
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType mixed="true" name="arg-type">
<xs:attribute name="isUndefinedIfMatches" type="xs:string">
<xs:annotation>
<xs:documentation>
If this regex is defined, an equality check on the arg will be run and if satisfied the arg will be eliminated
from the list (the default behavior is not to include null or zero-length args).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="resolve" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>
The text of the argument will be resolved in the resource manager environment. It is important to turn this off
if
you wish to embed, for instance, shell variables (e.g., $HOME).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="tokenizer-type">
<xs:annotation>
<xs:documentation>
These are attached to the stdout or stderr streams in order to capture the output of the command and add values to
or side-effect the resource manager environment.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice>
<xs:element name="type" type="xs:string">
<xs:annotation>
<xs:documentation>
Place to provide a custom tokenizer; type is the extension id contributing to
"org.eclipse.ptp.rm.jaxb.core.streamParserTokenizer".
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
</xs:choice>
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type">
<xs:annotation>
<xs:documentation>
Stop tokenization and exit the parser read operation when this pattern is encountered.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type">
<xs:annotation>
<xs:documentation>
Stop tokenization and exit the parser read operation after processing the segment matching this pattern.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
<xs:attribute name="delim" type="xs:string">
<xs:annotation>
<xs:documentation>
Segment the stream using this delimiter. Must be a single character (escaped or non-escaped).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="includeDelim" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Include the delimiting character in the segment to be matched.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="maxMatchLen" type="xs:int" default="0">
<xs:annotation>
<xs:documentation>
Do not break up the stream according to a delimiter, but read this many characters at a time from it. NOTE: in
this mode, the user should be sure that an expected expansion the regex pattern will not exceed the buffer length (and should
adjust that length accordingly).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="all" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Instead of reading "forward", consume the entire stream, holding only the last portion in a buffer, to be matched
after the end of the stream has been reached. This is useful if you need to look for a segment or segments whose position is
defined from the end of the output, but you do not know in advance the actual output length.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="save" type="xs:int" default="0">
<xs:annotation>
<xs:documentation>
Use this in connection with "all": save the last N segments (i.e, chars, lines, etc.).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="applyToAll" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Means take the unmatched part of the read stream and pass it to the next target, even if there was a previous
match; this allows you to capture more than one regex pattern per delimited stream segment (see tokenizer-examples.xml, ex. 6).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="tab-folder-type">
<xs:sequence>
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="item" maxOccurs="unbounded" type="rm:tab-item-type"/>
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
</xs:sequence>
<xs:attribute name="style" type="xs:string">
<xs:annotation>
<xs:documentation>
The style attribute on the UI parts is a string which looks like the OR'd integer specification; e.g.,
"SWT.BORDER | SWT.LEFT".
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="background" type="xs:string"/>
</xs:complexType>
<xs:complexType name="composite-type">
<xs:sequence>
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:element name="title" minOccurs="0" type="xs:string"/>
<xs:choice maxOccurs="unbounded">
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
<xs:element name="composite" type="rm:composite-type"/>
<xs:element name="widget" type="rm:widget-type"/>
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="group" type="xs:boolean" default="false"/>
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="background" type="xs:string"/>
</xs:complexType>
<xs:complexType name="tab-item-type">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:choice maxOccurs="unbounded">
<xs:element name="composite" type="rm:composite-type"/>
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
<xs:element name="widget" type="rm:widget-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="background" type="xs:string"/>
</xs:complexType>
<xs:complexType name="layout-type">
<xs:choice>
<xs:element name="fill-layout" type="rm:fill-layout-type"/>
<xs:element name="row-layout" type="rm:row-layout-type"/>
<xs:element name="grid-layout" type="rm:grid-layout-type"/>
<xs:element name="form-layout" type="rm:form-layout-type"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="layout-data-type">
<xs:choice>
<xs:element name="row-data" type="rm:row-data-type"/>
<xs:element name="grid-data" type="rm:grid-data-type"/>
<xs:element name="form-data" type="rm:form-data-type"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="fill-layout-type">
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:attribute name="spacing" type="xs:int"/>
</xs:complexType>
<xs:complexType name="row-layout-type">
<xs:attribute name="center" type="xs:boolean" default="false"/>
<xs:attribute name="justify" type="xs:boolean" default="false"/>
<xs:attribute name="fill" type="xs:boolean" default="false"/>
<xs:attribute name="pack" type="xs:boolean" default="false"/>
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:attribute name="marginTop" type="xs:int"/>
<xs:attribute name="marginBottom" type="xs:int"/>
<xs:attribute name="marginLeft" type="xs:int"/>
<xs:attribute name="marginRight" type="xs:int"/>
<xs:attribute name="spacing" type="xs:int"/>
</xs:complexType>
<xs:complexType name="grid-layout-type">
<xs:attribute name="numColumns" type="xs:int"/>
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="true"/>
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:attribute name="marginTop" type="xs:int"/>
<xs:attribute name="marginBottom" type="xs:int"/>
<xs:attribute name="marginLeft" type="xs:int"/>
<xs:attribute name="marginRight" type="xs:int"/>
<xs:attribute name="horizontalSpacing" type="xs:int"/>
<xs:attribute name="verticalSpacing" type="xs:int"/>
</xs:complexType>
<xs:complexType name="form-layout-type">
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:attribute name="marginTop" type="xs:int"/>
<xs:attribute name="marginBottom" type="xs:int"/>
<xs:attribute name="marginLeft" type="xs:int"/>
<xs:attribute name="marginRight" type="xs:int"/>
<xs:attribute name="spacing" type="xs:int"/>
</xs:complexType>
<xs:complexType name="row-data-type">
<xs:attribute name="height" type="xs:int"/>
<xs:attribute name="width" type="xs:int"/>
<xs:attribute name="exclude" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="grid-data-type">
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="horizontalAlign" type="xs:string"/>
<xs:attribute name="verticalAlign" type="xs:string"/>
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="true"/>
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
<xs:attribute name="horizontalSpan" type="xs:int"/>
<xs:attribute name="verticalSpan" type="xs:int"/>
<xs:attribute name="horizontalIndent" type="xs:int"/>
<xs:attribute name="verticalIndent" type="xs:int"/>
<xs:attribute name="minHeight" type="xs:int"/>
<xs:attribute name="minWidth" type="xs:int"/>
<xs:attribute name="heightHint" type="xs:int"/>
<xs:attribute name="widthHint" type="xs:int"/>
</xs:complexType>
<xs:complexType name="form-data-type">
<xs:sequence>
<xs:element name="top" minOccurs="0" type="rm:form-attachment-type"/>
<xs:element name="bottom" minOccurs="0" type="rm:form-attachment-type"/>
<xs:element name="left" minOccurs="0" type="rm:form-attachment-type"/>
<xs:element name="right" minOccurs="0" type="rm:form-attachment-type"/>
</xs:sequence>
<xs:attribute name="height" type="xs:int"/>
<xs:attribute name="width" type="xs:int"/>
</xs:complexType>
<xs:complexType name="form-attachment-type">
<xs:attribute name="alignment" type="xs:string"/>
<xs:attribute name="numerator" type="xs:int"/>
<xs:attribute name="denominator" type="xs:int"/>
<xs:attribute name="offset" type="xs:int"/>
</xs:complexType>
<xs:complexType name="widget-type">
<xs:annotation>
<xs:documentation>
Widget foreground, background (color) and font are in principle configurable, though the font setting may not
always work.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="items-from" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
Combo items taken from the value field of an attribute or property.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="fixed-text" minOccurs="0" type="xs:string">
<xs:annotation>
<xs:documentation>
Display text set once from the environment on loading; e.g, ${rm:Job_Name#description}.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="dynamic-text" minOccurs="0">
<xs:annotation>
<xs:documentation>
Changing display text; the args will be refreshed against the environment each time the Launch Tab is updated.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" default="text">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="label"/>
<xs:enumeration value="text"/>
<xs:enumeration value="checkbox"/>
<xs:enumeration value="spinner"/>
<xs:enumeration value="combo"/>
<xs:enumeration value="radioButton"/>
<xs:enumeration value="browseLocal">
<xs:annotation>
<xs:documentation>
Creates a read-only text widget followed by a push button allowing the user to browse the local file system.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="browseRemote">
<xs:annotation>
<xs:documentation>
Creates a read-only text widget followed by a push button allowing the user to browse a remote file system.
</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="readOnly" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Only applicable to text areas and combo boxes.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="saveValueTo" type="xs:string">
<xs:annotation>
<xs:documentation>
The widget is directly mapped to a property or attribute in the environment which will receive the entered value.
Use of this attribute is mutually exclusive with the "fixed-" and "dynamic-text" elements.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="foreground" type="xs:string"/>
<xs:attribute name="background" type="xs:string"/>
</xs:complexType>
<xs:complexType name="attribute-viewer-type">
<xs:annotation>
<xs:documentation>
These display their value columns as editable widgets. They are provided with checkboxes to indicate which
attributes have been chosen. A checkbox button is also placed above the viewer to allow for filtering the unchecked items. The
viewer outputs its checked values to the environment (and on update removes unselected ones). The name of the viewer is also stored
against a string of all selected values, constructed from a template.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:element name="label" minOccurs="0" type="xs:string"/>
<xs:element name="column-data" minOccurs="0" maxOccurs="7" type="rm:column-data-type"/>
<xs:element name="items" type="rm:viewer-items-type"/>
<xs:element name="value" minOccurs="0" type="rm:template-type"/>
</xs:sequence>
<xs:attribute name="type" default="table">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="table"/>
<xs:enumeration value="tree"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="sort" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>
On the name field/column. This is a toggle sort, such that alternate clicks reverse the sort direction.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
<xs:attribute name="linesVisible" type="xs:boolean" default="true"/>
<xs:attribute name="tooltipEnabled" type="xs:boolean" default="true">
<xs:annotation>
<xs:documentation>
Enables column-viewer label provider tooltip support. The tooltip defined for an attribute will appear on the row
of the table or the parent node of the tree. The attribute description will also appear as a tooltip on the description columns if
they exist.
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="style" type="xs:string"/>
</xs:complexType>
<xs:complexType name="viewer-items-type">
<xs:annotation>
<xs:documentation>
Which attributes or properties to include in or exclude from (if using the "all" attributes) the viewer.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
<xs:attribute name="allPredefined" type="xs:boolean" default="false"/>
<xs:attribute name="allDiscovered" type="xs:boolean" default="false"/>
</xs:complexType>
<xs:complexType name="font-type">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="size" type="xs:int" default="9"/>
<xs:attribute name="style" default="normal">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="normal"/>
<xs:enumeration value="bold"/>
<xs:enumeration value="italic"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="template-type">
<xs:attribute name="pattern" type="xs:string">
<xs:annotation>
<xs:documentation>
Express the template using @name and @value markers. Example: '@name="@value"' would generate a string of
name-value assignments (the default separator being whitespace).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="separator" type="xs:string" default=" "/>
</xs:complexType>
<xs:complexType name="target-type">
<xs:annotation>
<xs:documentation>
The top-level tokenizer element: refers to an object, either to be constructed at match time, or which pre-exists
in the environment, on which to apply the actions associated with matches and tests, along with a set of possible matches and
tests. All tests are run at the conclusion of the parse operation. NOTE: when new targets are constructed, there is a merge
operation at the end of tokenization which attempts to combine objects into a single instance identified by the 'name' attribute.
This assumes that such names will be unique and that any other values to be set on the object which are not explicitly bound in
some way to that name through the pattern will appear on the stream before a new name does.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="match" maxOccurs="unbounded" type="rm:match-type"/>
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
</xs:sequence>
<xs:attribute name="ref" type="xs:string">
<xs:annotation>
<xs:documentation>
The name of the object in the environment (either attribute or property; do not include here the "${rm:" / "}"
used for resolving).
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="type" default="property">
<xs:annotation>
<xs:documentation>
Create an object of this type when there is a match.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="property"/>
<xs:enumeration value="attribute"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="matchAll" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Means do not try to match an already matched expression until all the others are matched (i.e., a logical AND
instead of OR governs the set of matches at successive calls to the target match operation); this allows one to use, for instance,
.* repeatedly but set different fields of the object with the resulting match (see tokenizer-examples.xml, ex. 5).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="match-type">
<xs:annotation>
<xs:documentation>
If the match is satisfied, the apply operations are immediately called on the current target property or
attribute.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="expression" minOccurs="0" type="rm:regex-type"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="add" type="rm:add-type"/>
<xs:element name="append" type="rm:append-type"/>
<xs:element name="put" type="rm:put-type"/>
<xs:element name="set" type="rm:set-type"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="moveToTop" type="xs:boolean" default="false">
<xs:annotation>
<xs:documentation>
Indicates to the tokenizer that the matched target be promoted to first position in the list of targets. This is
useful when there is an ordering which expects types of attributes or properties to be grouped in sequence on the stream (see
tokenizer-examples.xml, ex. 4).
</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<xs:complexType name="column-data-type">
<xs:annotation>
<xs:documentation>
A caveat on the foreground and background settings. They are exposed here but may not work as expected: these are
currently applied to the column through the cell label provider; foreground seems not to change the font color but to color the
entire cell.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="width" type="xs:int" default="-1"/>
<xs:attribute name="alignment" type="xs:string"/>
<xs:attribute name="resizable" type="xs:boolean" default="true"/>
<xs:attribute name="moveable" type="xs:boolean" default="false"/>
<xs:attribute name="foreground" type="xs:string"/>
<xs:attribute name="background" type="xs:string"/>
</xs:complexType>
<xs:complexType name="set-type">
<xs:annotation>
<xs:documentation>
Calls "setField(entry value)" on the target.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
</xs:sequence>
<xs:attribute name="field" type="xs:string"/>
</xs:complexType>
<xs:complexType name="add-type">
<xs:annotation>
<xs:documentation>
References (or creates) a list as the value of the target field, and adds the entry values to it.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
</xs:sequence>
<xs:attribute name="field" type="xs:string"/>
</xs:complexType>
<xs:complexType name="append-type">
<xs:annotation>
<xs:documentation>
References (or creates) a string (buffer) as the value of the target field, and appends the entry values to it.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
</xs:sequence>
<xs:attribute name="field" type="xs:string"/>
<xs:attribute name="separator" type="xs:string"/>
</xs:complexType>
<xs:complexType name="put-type">
<xs:annotation>
<xs:documentation>
References (or creates) a map as the value of the target field, and adds the entry (key, value) to it.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
</xs:sequence>
<xs:attribute name="field" type="xs:string"/>
</xs:complexType>
<xs:complexType name="entry-type">
<xs:annotation>
<xs:documentation>
Value abstraction. "key" and "value" can be arbitrary strings; the "Group" attributes refer to the value of the
matched regex group;
"Index" attributes refer to the index of the string array created by using the regex to split the segment.
</xs:documentation>
</xs:annotation>
<xs:attribute name="key" type="xs:string"/>
<xs:attribute name="keyGroup" type="xs:int" default="0"/>
<xs:attribute name="keyIndex" type="xs:int" default="0"/>
<xs:attribute name="value" type="xs:string"/>
<xs:attribute name="valueGroup" type="xs:int" default="0"/>
<xs:attribute name="valueIndex" type="xs:int" default="0"/>
</xs:complexType>
<xs:complexType name="test-type">
<xs:annotation>
<xs:documentation>
Useful for setting values based on other values produced during tokenization. A test is one or more comparison
operations (with arbitrary nesting inside the three boolean operators), plus a set of actions to apply to the target fields in the
case of either success or failure (the "else" element). See tokenizer-examples-xml, ex. 3, or the "get-job-status" example.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
<xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="2">
<xs:annotation>
<xs:documentation>
.*[${rm:}]*.* refers to a variable in the RM environment; "#FIELD" refers to the value of the given field on the
current target; other strings will be converted in conformity with the inferred type of the comparison.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="add" type="rm:add-type"/>
<xs:element name="append" type="rm:append-type"/>
<xs:element name="put" type="rm:put-type"/>
<xs:element name="set" type="rm:set-type"/>
</xs:choice>
<xs:element name="else" minOccurs="0">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="add" type="rm:add-type"/>
<xs:element name="append" type="rm:append-type"/>
<xs:element name="put" type="rm:put-type"/>
<xs:element name="set" type="rm:set-type"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="op">
<xs:annotation>
<xs:documentation>
Enumeration avoids XML escaping. EQ = equals, LT = less than, GT = greater than, LE = less than or equal to, GE =
greater than or equal to.
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="EQ"/>
<xs:enumeration value="LT"/>
<xs:enumeration value="GT"/>
<xs:enumeration value="LE"/>
<xs:enumeration value="GE"/>
<xs:enumeration value="AND"/>
<xs:enumeration value="OR"/>
<xs:enumeration value="NOT"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="monitor-type">
<xs:annotation>
<xs:documentation>
This is a minimal definition.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
</xs:sequence>
<xs:attribute name="schedulerType" type="xs:string"/>
<xs:attribute name="refreshFrequencyInSeconds" type="xs:int" default="60"/>
</xs:complexType>
</xs:schema>