Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "PTP/designs/resource manager xsd"

< PTP‎ | designs
(Resource Manager XSD)
(Tokenizer Examples)
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Resource Manager PBS XML (Example) ==  
+
= JAXB Configurable Resource Manager XML =
'''''Current version (05/19/2011):'''''    -alr
+
 
 +
== XSD ==
  
 
<source lang="xml">
 
<source lang="xml">
Line 13: Line 14:
 
<!-- * Albert L. Rossi - design and implementation -->
 
<!-- * 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:sequence>
 +
<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
 +
<xs:element name="control-data" minOccurs="0" type="rm:control-type"/>
 +
<xs:element name="monitor-data" minOccurs="0" type="rm:monitor-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="site-type">
 +
<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: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" maxOccurs="unbounded" 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:choice minOccurs="0">
 +
<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:element name="terminate-job" type="rm:command-type" minOccurs="0"/>
 +
<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:element name="button-action" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
 +
<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="property-type">
 +
<xs:sequence>
 +
<xs:element name="default" minOccurs="0" type="xs:string"/>
 +
<xs:element name="value" minOccurs="0"/>
 +
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
 +
</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:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="translateBooleanAs" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="attribute-type">
 +
<xs:sequence>
 +
<xs:element name="description" minOccurs="0" type="xs:string"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="choice" minOccurs="0" type="xs:string"/>
 +
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
 +
<xs:element name="default" minOccurs="0" type="xs:string"/>
 +
<xs:element name="value" minOccurs="0"/>
 +
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
 +
<xs:element name="validator" minOccurs="0" type="rm:validator-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" use="required" type="xs:string"/>
 +
<xs:attribute name="type" type="xs:string" default="java.lang.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:attribute name="translateBooleanAs" type="xs:string"/>
 +
<xs:attribute name="min" type="xs:int"/>
 +
<xs:attribute name="max" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="managed-files-type">
 +
<xs:sequence>
 +
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
 +
<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="script-type">
 +
<xs:sequence>
 +
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
 +
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="insertEnvironmentAfter" type="xs:int" default="-1"/>
 +
<xs:attribute name="deleteAfterSubmit" type="xs:boolean" default="true"/>
 +
</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="input" minOccurs="0" 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="false"/>
 +
<xs:attribute name="ignoreExitStatus" type="xs:boolean" default="false"/>
 +
<xs:attribute name="keepOpen" type="xs:boolean" default="false"/>
 +
<xs:attribute name="flags" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="launch-tab-type">
 +
<xs:sequence>
 +
<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
 +
<xs:element name="import" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="export-for-override" minOccurs="0" type="rm:attribute-viewer-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string" use="required"/>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="validator-type">
 +
<xs:sequence>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="regex"  type="rm:regex-type"/>
 +
<xs:element name="file-info" type="rm:file-match-type"/>
 +
<xs:sequence>
 +
  <xs:element name="range" maxOccurs="unbounded" type="rm:range-type"/>
 +
</xs:sequence>
 +
</xs:choice>
 +
<xs:element name="error-message" minOccurs="0" type="xs:string"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="managed-file-type">
 +
<xs:choice>
 +
<xs:sequence>
 +
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 +
</xs:sequence>
 +
<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="deleteSourceAfterUse" type="xs:boolean" default="false"/>
 +
<xs:attribute name="deleteTargetAfterUse" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="file-match-type">
 +
<xs:attribute name="efsAttributes" type="xs:string"/>
 +
<xs:attribute name="lastModifiedBefore" type="xs:string"/>
 +
<xs:attribute name="lastModifiedAfter" type="xs:string"/>
 +
<xs:attribute name="length" type="xs:long"/>
 +
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
  <xs:complexType name="range-type">
 +
    <xs:attribute name="lessThan" type="xs:string"/>
 +
    <xs:attribute name="lessThanOrEqualTo" type="xs:string"/>
 +
    <xs:attribute name="greaterThan" type="xs:string"/>
 +
    <xs:attribute name="greaterThanOrEqualTo" type="xs:string"/>
 +
  </xs:complexType>
 +
<xs:complexType name="name-value-pair-type">
 +
<xs:sequence>
 +
<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 +
</xs:sequence>
 +
<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: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:choice minOccurs="0" 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="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
 +
<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
 +
<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="regex-type" mixed="true">
 +
<xs:attribute name="flags" type="xs:string"/>
 +
<xs:attribute name="split" type="xs:boolean" default="false"/>
 +
<xs:attribute name="expression" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType mixed="true" name="arg-type">
 +
<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
 +
<xs:attribute name="resolve" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="tokenizer-type">
 +
<xs:sequence>
 +
<xs:choice>
 +
<xs:element name="type" type="xs:string"/>
 +
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
 +
</xs:choice>
 +
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
 +
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="delim" type="xs:string"/>
 +
<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
 +
<xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
 +
<xs:attribute name="all" type="xs:boolean" default="false"/>
 +
<xs:attribute name="save" type="xs:int" default="0"/>
 +
<xs:attribute name="applyToAll" type="xs:boolean" default="false"/>
 +
</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:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<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 minOccurs="0" 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="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</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="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<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 minOccurs="0" 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:element name="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</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="type" type="xs:string"/>
 +
<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="wrap" 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="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="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="false"/>
 +
<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: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:element name="fixed-text" minOccurs="0" type="xs:string"/>
 +
<xs:element name="dynamic-text" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</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="radiobutton"/>
 +
<xs:enumeration value="spinner"/>
 +
<xs:enumeration value="combo"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
<xs:attribute name="buttonId" type="xs:string"/>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="button-group-type">
 +
<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="title" minOccurs="0" type="xs:string"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="button" maxOccurs="unbounded" type="rm:widget-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="group" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="browse-type">
 +
<xs:sequence>
 +
<xs:element name="text-layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="button-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="text-control-state" minOccurs="0" type="rm:control-state-type"/>
 +
<xs:element name="button-control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="textStyle" type="xs:string"/>
 +
<xs:attribute name="directory" type="xs:boolean" default="false"/>
 +
<xs:attribute name="uri" type="xs:boolean" default="false"/>
 +
<xs:attribute name="localOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="push-button-type">
 +
<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="button-action" minOccurs="0" type="rm:button-action-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="button-action-type">
 +
<xs:sequence>
 +
<xs:element name="action" type="xs:string"/>
 +
</xs:sequence>
 +
<xs:attribute name="clearValue" type="xs:string"/>
 +
<xs:attribute name="refresh" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="attribute-viewer-type">
 +
<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:element name="control-state" minOccurs="0" type="rm:control-state-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="initialAllChecked" type="xs:boolean" default="true"/>
 +
<xs:attribute name="sort" type="xs:boolean" default="true"/>
 +
<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:attribute name="style" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="viewer-items-type">
 +
<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:attribute name="separator" type="xs:string" default=" "/>
 +
</xs:complexType>
 +
<xs:complexType name="target-type">
 +
<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:element name="else" minOccurs="0">
 +
<xs:complexType>
 +
<xs:choice>
 +
<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:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
<xs:attribute name="ref" type="xs:string"/>
 +
<xs:attribute name="type" default="property">
 +
<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:attribute name="allowOverwrites" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="match-type">
 +
<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:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
<xs:attribute name="moveToTop" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="column-data-type">
 +
<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="false"/>
 +
<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:sequence>
 +
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="throw-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="message" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="add-type">
 +
<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="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="append-type">
 +
<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:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="put-type">
 +
<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="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="entry-type">
 +
<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: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: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:element name="throw" type="rm:throw-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:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
<xs:attribute name="op">
 +
<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="control-state-type">
 +
<xs:sequence>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="show-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
<xs:element name="hide-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
</xs:choice>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="enable-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
<xs:element name="disable-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="control-state-rule-type">
 +
<xs:choice>
 +
<xs:element name="not" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="and" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="or" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:choice>
 +
<xs:attribute name="button" type="xs:string"/>
 +
<xs:attribute name="selected" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="monitor-type">
 +
<xs:sequence>
 +
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
 +
<xs:element name="driver" minOccurs="0" type="rm:monitor-driver-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="schedulerType" type="xs:string"/>
 +
<xs:attribute name="refreshFrequencyInSeconds" type="xs:int" default="60"/>
 +
</xs:complexType>
 +
<xs:complexType name="monitor-driver-type">
 +
<xs:choice>
 +
<xs:element name="url" type="xs:string"/>
 +
<xs:sequence>
 +
<xs:element name="name" type="xs:string"/>
 +
<xs:element name="path" minOccurs="0" type="xs:string"/>
 +
<xs:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 +
</xs:sequence>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:schema>
 +
</source>
 +
 +
== Tokenizer Examples ==
 +
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="UTF-8"?>
 
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="resource_manager_type.xsd" name="pbs-torque-generic">
+
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
 
<control-data>
 
<control-data>
<property name="queues" visible="false"/>
+
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
<!-- needed by RM internals for fetch; name is fixed by convention -->
+
to the known property "available-queues" -->
<property name="stdout_remote_path" visible="false"/>
+
<start-up-command name="test01ParseQstat">
<!-- needed by RM internals for fetch; name is fixed by convention -->
+
<arg/>
<property name="stderr_remote_path" visible="false"/>
+
<property name="remote_path_tooltip" visible="false">
+
<default><![CDATA[Not the same as the PBS attribute for stdout or stderr;
+
used internally by the resource manager and should correspond
+
to whatever path the scheduler will copy the output to at the
+
end of execution; the job id can be included in this path
+
using '@jobId'.]]></default>
+
</property>
+
<attribute name="mpiCommand" type="choice">
+
<description>Which mpi command to use.</description>
+
<choice>,mpiexec,mpirun</choice>
+
</attribute>
+
<attribute name="mpiCores" min="1" type="integer">
+
<description>the '-np' value</description>
+
</attribute>
+
<attribute name="Account_Name" type="string">
+
<description>Account to which to charge this job.</description>
+
<tooltip>Format: string</tooltip>
+
</attribute>
+
<attribute name="Checkpoint" type="choice">
+
<description>Determines when checkpointing (if supported) will be performed by PBS on behalf of the job.</description>
+
<tooltip><![CDATA[Format: the strings "n" (no checkpointing),
+
"s" (to be performed only when the server executing
+
the job is shutdown), "c"s (to be performed at the
+
default minimum time for thes servers executing the
+
job), "c=mmmm" (to be performed at an intervals
+
of minutes which is the integer number of minutes of CPUs
+
time used bys the job; values must be greater than zero);
+
defaults value: "u", which is unspecified.]]></tooltip>
+
<choice>,u,n,s,c,c=????</choice>
+
<default>u</default>
+
</attribute>
+
<attribute name="depend" type="string">
+
<description>The type of inter-job dependencies specified by the job owner.</description>
+
<tooltip>Format: "type:jobid[,jobid...]"; default value: no dependencies.</tooltip>
+
</attribute>
+
<attribute name="destination" type="choice">
+
<description>Designation of the queue to which to submit the job.</description>
+
<tooltip>Format: queue[@server].</tooltip>
+
<choice>normal,debug</choice>
+
</attribute>
+
<attribute name="directive" type="string">
+
<description>Defines the prefix that declares a directive to the qsub command within the script file.</description>
+
<tooltip><![CDATA[See the paragraph on script directives in the
+
Extended Description section. If the option is presented with a
+
directive_prefix argument that is the null string, qsub will
+
not scan the script file for directives.]]></tooltip>
+
</attribute>
+
<attribute name="Error_Path" type="string">
+
<description>The final path name for the file containing the job's standard error stream.</description>
+
<tooltip><![CDATA[Format: "[hostname:]pathname". If
+
the option is not specified, the default file name for the
+
standard error stream will be used. The default name has
+
the following form: job_name.eSeq_num where job_name is
+
the name of the job, see -N option, and Seq_num
+
is the job number assigned when the job is submitted;
+
default value: (job_name).e(job_number).]]></tooltip>
+
</attribute>
+
<attribute name="export_all" type="boolean">
+
<description><![CDATA[Declares that all environment variables in the qsub command's environment are to be exported to the batch job.]]></description>
+
<default>true</default>
+
</attribute>
+
<attribute name="group_list" type="string">
+
<description><![CDATA[A list of composite-descriptor group="true"_names@hosts which determines the composite-descriptor group="true" under which the job is run on a given host.]]></description>
+
<tooltip><![CDATA[Format: composite-descriptor
+
group="true"_name[@host][,composite-descriptor group="true"_name[@host]...].
+
When a job is to be placed into execution, the server will select a
+
composite-descriptor group="true" name according to the following ordered set
+
of rules: 1) Select the composite-descriptor group="true" name from
+
the list for which the associated host name matches the name of the
+
execution host; 2) Select the composite-descriptor group="true" name
+
which has no associated host name, the wildcard name; 3) Use
+
the login composite-descriptor group="true" for the username under
+
which the job will be run.]]></tooltip>
+
</attribute>
+
<attribute name="Hold_Types" type="choice">
+
<description>The set of holds currently applied to the job.</description>
+
<tooltip><![CDATA[If the set is not null, the job will not be scheduled
+
for execution and is said to be in the hold state. Note, the hold
+
state takes precedence over the wait state. Format: string made up
+
of the letters 'u', 's', 'o'; default value: no hold.]]></tooltip>
+
<choice>,u,s,o</choice>
+
</attribute>
+
<attribute name="Job_Name" type="string">
+
<description>The name assigned to the job by the qsub or qalter command.</description>
+
<tooltip><![CDATA[Format: string up to 15 characters,
+
first character must be alphabetic; default value:
+
the base name of the job script or STDIN.]]></tooltip>
+
</attribute>
+
<attribute name="Join_Path" type="boolean">
+
<description>Merge stdout and stderr into stdout.</description>
+
<tooltip><![CDATA[Format: boolean, values accepted are "True", "TRUE",
+
"true", "Y", "y", "1", "False", "FALSE", "false", "N", "n", "0";
+
default value: false.]]></tooltip>
+
<default>false</default>
+
</attribute>
+
<attribute name="Keep_Files" type="choice">
+
<description>Retain these streams on the execution host upon job termination.</description>
+
<tooltip><![CDATA[Format: "o", "e", "oe" or "eo"; default value:
+
no keep, return files to submission host.]]></tooltip>
+
<choice>,o,e,oe,eo</choice>
+
</attribute>
+
<attribute name="Mail_Points" type="choice">
+
<description>Identifies at which state changes the server will send mail about the job.</description>
+
<tooltip><![CDATA[Format: string made up of the letters
+
'a' for abort, 'b' for beginning, and default value:
+
a', send on job abort.]]></tooltip>
+
<choice>,a,b</choice>
+
<default>a</default>
+
</attribute>
+
<attribute name="Mail_Users" type="string">
+
<description>The set of users to whom mail may be sent when the job makes certain state changes.</description>
+
<tooltip>Format: "user@host[,user@host]"; default value: job owner only.</tooltip>
+
</attribute>
+
<attribute name="Output_Path" type="string">
+
<description>The final path name for the file containing the job's standard output stream.</description>
+
<tooltip><![CDATA[Format: "[hostname:]pathname". If the option
+
is not specified, the default file name for the standard error stream
+
will be used. The default name has the following form: job_name.oSeq_num
+
where job_name is the name of the job, see -N option, and Seq_num
+
is the job number assigned when the job is submitted;
+
default value: (job_name).o(job_number).]]></tooltip>
+
</attribute>
+
<attribute name="Priority" type="string">
+
<description>The job scheduling priority assigned by the user.</description>
+
<tooltip>Format: "[+|-]nnnnn"; default value: undefined.</tooltip>
+
</attribute>
+
<attribute name="Rerunnable" type="choice">
+
<description>The rerunnable flag assigned by the user.</description>
+
<tooltip>Format: "y" or "n", see Join_Path; default value: y, job is rerunable.</tooltip>
+
<choice>,n,y</choice>
+
<default>y</default>
+
</attribute>
+
<attribute name="Resource_List.arch" type="string">
+
<description>Specifies the administrator defined system architecture requried.</description>
+
<tooltip>This defaults to whatever the PBS_MACH string is set to in "local.mk". Units: string.</tooltip>
+
</attribute>
+
<attribute name="Resource_List.cput" type="string">
+
<description>Maximum amount of CPU time used by all processes in the job.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</attribute>
+
<attribute name="Resource_List.file" type="string">
+
<description>The largest size of any single file that may be created by the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes),
+
w (words), kb/kw (kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.host" type="string">
+
<description>Name of host on which job should be run.</description>
+
</attribute>
+
<attribute name="Resource_List.mem" type="string">
+
<description>Maximum amount of memory used by all concurrent processes in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes),
+
w (words), kb/kw (kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.nice" type="integer" min="0" max="10">
+
<description>The nice value under which the job is to be run.</description>
+
<tooltip>0 to 10.</tooltip>
+
<default>0</default>
+
</attribute>
+
<attribute name="Resource_List.nodes" type="string">
+
<description>Number and/or type of nodes to be reserved for exclusive use by the job.</description>
+
<tooltip><![CDATA[The value is one or more node_specs joined with
+
the '+' character, "node_spec[+node_spec...]. Each node_spec is
+
a number of nodes required of the type declared in the node_spec
+
and a name or one or more properity or properities desired for
+
the nodes. The number, the name, and each properity in the
+
node_spec are separated by a colon ':'. If no number is specified,
+
one (1) is assumed. Units: string. The name of a node is its
+
hostname. The properties of nodes are: ppn=# requested; defaults
+
to 1; or an arbitrary string defined by system administrator.
+
Example: To ask for 2 processors on each of two blue nodes and
+
three processors on one red node: -l nodes=2:blue:ppn=2+red:ppn=3.]]></tooltip>
+
<default>1</default>
+
</attribute>
+
<attribute name="Resource_List.ompthreads" type="integer" min="1">
+
<description>Number of threads per processor for Open MP jobs.</description>
+
<default>1</default>
+
</attribute>
+
<attribute name="Resource_List.pcput" type="string">
+
<description>Maximum amount of CPU time used by any single process in the job.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</attribute>
+
<attribute name="Resource_List.pmem" type="string">
+
<description>Maximum amount of physical memory (workingset) used by any single process of the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.pvmem" type="string">
+
<description>Maximum amount of virtual memory used by any single process in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.vmem" type="string">
+
<description>Maximum amount of virtual memory used by all concurrent processes in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.walltime" type="string">
+
<description>Maximum amount of real time during which the job can be in the running state.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
<default>00:30:00</default>
+
</attribute>
+
<attribute name="Shell_Path_List" type="string">
+
<description>A set of absolute paths of the program to process the job's script file.</description>
+
<tooltip><![CDATA[Format: path[@host][,path[@host]...].
+
If this is null, then the user's login shell on the host
+
of execution will be used. Default value: null, login shell.]]></tooltip>
+
</attribute>
+
<attribute name="stagein" type="string">
+
<description>The list of files to be staged in prior to job execution.</description>
+
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
</attribute>
+
<attribute name="stageout" type="string">
+
<description>The list of files to be staged out after job execution.</description>
+
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
</attribute>
+
<attribute name="User_List" type="string">
+
<description>The list of user@hosts which determines the user name under which the job is run on a given host.</description>
+
<tooltip><![CDATA[When a job is to be placed into execution,
+
the server will select a user name from the list according
+
to the following ordered set of rules: 1) Select the user
+
name from the list for which the associated host name matches
+
the name of the execution host; 2) Select the user name which
+
has no associated host name, the wild card name; 3) Use the
+
Job_Owner as the user name. Default value: job owner name.]]></tooltip>
+
</attribute>
+
<attribute name="Variable_List" type="string">
+
<description>This is the list of environment variables passed with the Queue Job batch request.</description>
+
</attribute>
+
<script insertEnvironmentAfter="35">
+
<line>
+
<arg>#!/bin/bash</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -A">#PBS -A ${ptp_rm:Account_Name#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -c">#PBS -c ${ptp_rm:Checkpoint#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W depend=">#PBS -W depend=${ptp_rm:depend#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -q">#PBS -q ${ptp_rm:destination#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -C">#PBS -C ${ptp_rm:line#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -e">#PBS -e ${ptp_rm:Error_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -V">#PBS -V ${ptp_rm:export_all#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W group_list=">#PBS -W group_list=${ptp_rm:group_list#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -h">#PBS -h ${ptp_rm:Hold_Types#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -N">#PBS -N ${ptp_rm:Job_Name#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -j">#PBS -j ${ptp_rm:Join_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -k">#PBS -k ${ptp_rm:Keep_Files#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -m">#PBS -m ${ptp_rm:Mail_Points#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -M">#PBS -M ${ptp_rm:Mail_Users#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -o">#PBS -o ${ptp_rm:Output_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -p">#PBS -p ${ptp_rm:Priority#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -r">#PBS -r ${ptp_rm:Rerunnable#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l arch=">#PBS -l arch=${ptp_rm:Resource_List.arch#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l cput=">#PBS -l cput=${ptp_rm:Resource_List.cput#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l file=">#PBS -l file=${ptp_rm:Resource_List.file#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l host=">#PBS -l host=${ptp_rm:Resource_List.host#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l mem=">#PBS -l mem=${ptp_rm:Resource_List.mem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l nice=">#PBS -l nice=${ptp_rm:Resource_List.nice#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l nodes=">#PBS -l nodes=${ptp_rm:Resource_List.nodes#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l ompthreads=">#PBS -l ompthreads=${ptp_rm:Resource_List.ompthreads#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pcput=">#PBS -l pcput=${ptp_rm:Resource_List.pcput#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pmem=">#PBS -l pmem=${ptp_rm:Resource_List.pmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pvmem=">#PBS -l pvmem=${ptp_rm:Resource_List.pvmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l vmem=">#PBS -l vmem=${ptp_rm:Resource_List.vmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l walltime=">#PBS -l walltime=${ptp_rm:Resource_List.walltime#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -S">#PBS -S ${ptp_rm:Shell_Path_List#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W stagein=">#PBS -W stagein=${ptp_rm:stagein#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W stageout=">#PBS -W stageout=${ptp_rm:stageout#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -u">#PBS -u ${ptp_rm:User_List#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -v">#PBS -v ${ptp_rm:Variable_List#value}</arg>
+
</line>
+
<line>
+
<arg>MPI_ARGS="-np ${ptp_rm:mpiCores#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">if [ "-np" == "${MPI_ARGS}" ] ; then</arg>
+
</line>
+
<line>
+
<arg resolve="false"> MPI_ARGS=</arg>
+
</line>
+
<line>
+
<arg resolve="false">fi</arg>
+
</line>
+
<line>
+
<arg>COMMAND=${ptp_rm:mpiCommand#value}</arg>
+
</line>
+
<line>
+
<arg resolve="false">if [ -n "${COMMAND}" ] ; then</arg>
+
</line>
+
<line>
+
<arg resolve="false"> COMMAND="${COMMAND} ${MPI_ARGS}</arg>
+
<arg>${ptp_rm:executablePath#value} ${ptp_rm:progArgs#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">else</arg>
+
</line>
+
<line>
+
<arg> COMMAND="${ptp_rm:executablePath#value} ${ptp_rm:progArgs#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">fi</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="cd">cd ${ptp_rm:directory#value}</arg>
+
</line>
+
<line>
+
<arg resolve="false">${COMMAND}</arg>
+
</line>
+
<line>
+
<arg resolve="false">touch DONE</arg>
+
</line>
+
</script>
+
<start-up-command name="get-queues">
+
<arg>qstat</arg>
+
<arg>-Q</arg>
+
<arg>-f</arg>
+
 
<stdout-parser delim="\n">
 
<stdout-parser delim="\n">
 
<target ref="queues">
 
<target ref="queues">
 
<match>
 
<match>
<expression>Queue: ([\w\d]+)</expression>
+
<expression>([\w\d]+)</expression>
 
<add field="value">
 
<add field="value">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
Line 419: Line 739:
 
</stdout-parser>
 
</stdout-parser>
 
</start-up-command>
 
</start-up-command>
<submit-batch name="submit-batch" waitForId="true">
+
<!-- EXAMPLE 2: output is to be searched for its final line which should
<arg>qsub</arg>
+
contain a job id of the form "[digits].[chars]" -->
<arg>${ptp_rm:managed_file_for_script#value}</arg>
+
<start-up-command name="test02JobId" waitForId="true">
 +
<arg/>
 
<stdout-parser delim="\n" all="true" save="1">
 
<stdout-parser delim="\n" all="true" save="1">
 
<target ref="@jobId">
 
<target ref="@jobId">
 
<match>
 
<match>
<expression>([\d]+)[.].*</expression>
+
<expression>([\d]+)([.])(.+)[\s]+.*</expression>
 +
<append field="name">
 +
<entry valueGroup="1"/>
 +
<entry valueGroup="2"/>
 +
<entry valueGroup="3"/>
 +
</append>
 +
<set field="default">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry value="SUBMITTED"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>([\d]+)[.].+</expression>
 
<set field="name">
 
<set field="name">
 +
<entry valueGroup="0"/>
 +
</set>
 +
<set field="default">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
 
</set>
 
</set>
 
<set field="value">
 
<set field="value">
 
<entry value="SUBMITTED"/>
 
<entry value="SUBMITTED"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target ref="@jobId">
 +
<match>
 +
<expression flags="DOTALL">.*Job not submitted.*</expression>
 +
<set field="value">
 +
<entry value="FAILED"/>
 
</set>
 
</set>
 
</match>
 
</match>
Line 443: Line 789:
 
</target>
 
</target>
 
</stderr-parser>
 
</stderr-parser>
</submit-batch>
+
</start-up-command>
 +
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
 +
of attribute definitions, but each line bearing a distinct
 +
id (e.g., openMPI attribute discovery) -->
 +
<start-up-command name="test03OpenMPI">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="attribute">
 +
<match>
 +
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
 +
<set field="status">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
 +
<set field="tooltip">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<test op="EQ">
 +
<value>#status</value>
 +
<value>read-only</value>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
<else>
 +
<set field="readOnly">
 +
<entry value="false"/>
 +
</set>
 +
</else>
 +
</test>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
 +
<set field="name">
 +
<entry value="ompi_major_version"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
<set field="name" forceNewObject="true">
 +
<entry value="ompi_minor_version"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
<test op="AND">
 +
<test op="EQ">
 +
<value>#name</value>
 +
<value>ompi_minor_version</value>
 +
</test>
 +
<test op="LT">
 +
<value>#value</value>
 +
<value>7</value>
 +
</test>
 +
<throw message="Only supports Open MPI 1.7 and later"/>
 +
</test>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression>(.*):([^:]*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="false"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
 +
by caption; use of moveToTop to promote the target to the top of the list
 +
when the caption appears -->
 +
<start-up-command name="test04ImplicitWithTags">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match moveToTop="true">
 +
<expression>PROPERTY</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match moveToTop="true">
 +
<expression>ATTRIBUTE</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
 +
<start-up-command name="test05ImplicitOrdering">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="attribute" matchAll="true">
 +
<match>
 +
<expression>.+</expression>
 +
<set field="name">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="type">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="description">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="tooltip">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="value">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
 +
<start-up-command name="test06ImplicitWithTagsDotall">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32" applyToAll="true">
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
 +
<start-up-command name="test07PropertyDefsSingleLine">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
 +
not exceed 32 chars -->
 +
<start-up-command name="test08JobStates">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
 +
<start-up-command name="test09Staggered">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 10: forced merge -->
 +
<start-up-command name="test10Merged">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.+);value:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>name:(.+);default:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="default">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 11: exit-on -->
 +
<start-up-command name="test11ExitOn">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 12: exit-after -->
 +
<start-up-command name="test12ExitAfter">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
 +
</stdout-parser>
 +
</start-up-command>
 +
<submit-interactive name="empty">
 +
<arg/>
 +
</submit-interactive>
 +
<!-- EXAMPLE 13: get-status (use of tests) -->
 
<get-job-status name="get-job-status" ignoreExitStatus="true">
 
<get-job-status name="get-job-status" ignoreExitStatus="true">
 
<arg>qstat</arg>
 
<arg>qstat</arg>
Line 450: Line 1,141:
 
<target ref="@jobId">
 
<target ref="@jobId">
 
<match>
 
<match>
<expression>.+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
+
<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
 
<set field="value">
 
<set field="value">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
Line 478: Line 1,169:
 
<test op="EQ">
 
<test op="EQ">
 
<value>#value</value>
 
<value>#value</value>
<value>C</value>
+
<value>H</value>
 
<set field="value">
 
<set field="value">
<entry value="COMPLETED"/>
+
<entry value="SYSTEM_ON_HOLD"/>
 
</set>
 
</set>
 
</test>
 
</test>
<test op="EQ">
+
<else>
<value>#value</value>
+
<value>E</value>
+
 
<set field="value">
 
<set field="value">
 
<entry value="COMPLETED"/>
 
<entry value="COMPLETED"/>
 
</set>
 
</set>
</test>
+
</else>
<test op="EQ">
+
<value>#value</value>
+
<value>H</value>
+
<set field="value">
+
<entry value="SYSTEM_ON_HOLD"/>
+
</set>
+
</test>
+
 
</target>
 
</target>
 
</stdout-parser>
 
</stdout-parser>
Line 510: Line 1,192:
 
</stderr-parser>
 
</stderr-parser>
 
</get-job-status>
 
</get-job-status>
<terminate-job name="cancel" ignoreExitStatus="true">
 
<arg>qdel</arg>
 
<arg>${ptp_rm:@jobId#name}</arg>
 
</terminate-job>
 
<launch-tab>
 
<dynamic>
 
<title>Basic PBS Settings</title>
 
<!-- ATTRIBUTES group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="4" makeColumnsEqualWidth="false" horizontalSpacing="10" verticalSpacing="15"/>
 
</layout>
 
<!-- HEADER -->
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Name</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Value</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Description</fixed-text>
 
</widget>
 
<!-- row 1 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Job_Name#tooltip}</tooltip>
 
<fixed-text>Job Name: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Job_Name">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Job_Name#description}</fixed-text>
 
</widget>
 
<!-- row 2 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:destination#tooltip}</tooltip>
 
<fixed-text>Queue: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="destination">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
<items-from>queues</items-from>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:destination#description}</fixed-text>
 
</widget>
 
<!-- row 3 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.nodes#tooltip}</tooltip>
 
<fixed-text>Number of nodes: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.nodes">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.nodes#description}</fixed-text>
 
</widget>
 
<!-- row 4 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.mem#tooltip}</tooltip>
 
<fixed-text>Total Memory Needed: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.mem">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.mem#description}</fixed-text>
 
</widget>
 
<!-- row 5 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.walltime#tooltip}</tooltip>
 
<fixed-text>Wallclock Time: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.walltime">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.walltime#description}</fixed-text>
 
</widget>
 
<!-- row 6 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>MPI Command: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="mpiCommand">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:mpiCommand#description}</fixed-text>
 
</widget>
 
<!-- row 7 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>MPI Number of Cores: </fixed-text>
 
</widget>
 
<widget type="spinner" readOnly="true" saveValueTo="mpiCores">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" horizontalSpan="2" grabExcessHorizontal="false" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:mpiCores#description}</fixed-text>
 
</widget>
 
</composite>
 
<!-- STDOUT/STDERR remote path group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="4" makeColumnsEqualWidth="false"/>
 
</layout>
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" grabExcessHorizontal="false" horizontalSpan="4" widthHint="300"/>
 
</layout-data>
 
<widget type="label" style="SWT.LEFT">
 
<tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
<fixed-text>Remote Output Path:</fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="stdout_remote_path">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<fixed-text>Enable read upon job termination</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT">
 
<tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
<fixed-text>Remote Error Path:</fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="stderr_remote_path">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<fixed-text>Enable read upon job termination</fixed-text>
 
</widget>
 
</composite>
 
</dynamic>
 
<dynamic>
 
<title>Advanced PBS Settings</title>
 
<composite>
 
<layout>
 
<grid-layout numColumns="1"/>
 
</layout>
 
<layout-data>
 
<grid-data widthHint="600" heightHint="900" horizontalSpan="1"/>
 
</layout-data>
 
<!-- QUEUES remote path group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="3" makeColumnsEqualWidth="false"/>
 
</layout>
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING"/>
 
</layout-data>
 
<tooltip>${ptp_rm:destination#tooltip}</tooltip>
 
<fixed-text>Queue: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="destination">
 
<layout-data>
 
<grid-data widthHint="150" horizontalAlign="SWT.FILL" horizontalSpan="2"/>
 
</layout-data>
 
<items-from>queues</items-from>
 
</widget>
 
</composite>
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="1"/>
 
</layout>
 
<widget type="text" readOnly="true" style="SWT.LEFT | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL">
 
<layout-data>
 
<grid-data widthHint="600" heightHint="75" horizontalSpan="1"/>
 
</layout-data>
 
<dynamic-text>
 
<arg>${ptp_rm:allAttributes#value}</arg>
 
<arg isUndefinedIfMatches=" destination=''"> destination='${ptp_rm:destination#value}'</arg>
 
</dynamic-text>
 
</widget>
 
<viewer name="allAttributes" style="SWT.BORDER | SWT.MULTI" sort="true" type="tree">
 
<layout-data>
 
<grid-data widthHint="600" heightHint="400" horizontalSpan="1"/>
 
</layout-data>
 
<column-data name="Name" width="175">
 
<tooltip>Double-click on selected rows toggles their checked value.</tooltip>
 
</column-data>
 
<column-data name="Value" width="400">
 
<tooltip>Click to activate value widget.</tooltip>
 
</column-data>
 
<items allPredefined="true">
 
<exclude>destination</exclude>
 
</items>
 
<value pattern="@name='@value'"/>
 
</viewer>
 
</composite>
 
<!-- STDOUT/STDERR remote path group -->
 
              <composite group="true">
 
                  <layout>
 
                    <grid-layout numColumns="4" makeColumnsEqualWidth="false"/>
 
                  </layout>
 
                  <layout-data>
 
                    <grid-data horizontalAlign="SWT.FILL" grabExcessHorizontal="false" horizontalSpan="4" widthHint="400"/>
 
                  </layout-data>
 
                  <widget type="label" style="SWT.LEFT">
 
                    <tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
                    <fixed-text>Remote Output Path:</fixed-text>
 
                  </widget>
 
                  <widget type="text" style="SWT.BORDER" saveValueTo="stdout_remote_path">
 
                    <layout-data>
 
                        <grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="175"/>
 
                    </layout-data>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
                    <fixed-text>Enable read upon job termination</fixed-text>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT">
 
                    <tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
                    <fixed-text>Remote Error Path:</fixed-text>
 
                  </widget>
 
                  <widget type="text" style="SWT.BORDER" saveValueTo="stderr_remote_path">
 
                    <layout-data>
 
                        <grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="175"/>
 
                    </layout-data>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
                    <fixed-text>Enable read upon job termination</fixed-text>
 
                  </widget>
 
              </composite>
 
</composite>
 
</dynamic>
 
<import>Import PBS Script</import>
 
</launch-tab>
 
 
</control-data>
 
</control-data>
<monitor-data schedulerType="PBS">
+
<monitor-data schedulerType="test">
 
<driver>
 
<driver>
 
<name></name>
 
<name></name>

Latest revision as of 20:54, 1 August 2011

JAXB Configurable Resource Manager XML

XSD

<?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:sequence>
			<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
			<xs:element name="control-data" minOccurs="0" type="rm:control-type"/>
			<xs:element name="monitor-data" minOccurs="0" type="rm:monitor-type"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="site-type">
		<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: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" maxOccurs="unbounded" 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:choice minOccurs="0">
				<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:element name="terminate-job" type="rm:command-type" minOccurs="0"/>
			<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:element name="button-action" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
			<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="property-type">
		<xs:sequence>
			<xs:element name="default" minOccurs="0" type="xs:string"/>
			<xs:element name="value" minOccurs="0"/>
			<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
		</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:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="translateBooleanAs" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="attribute-type">
		<xs:sequence>
			<xs:element name="description" minOccurs="0" type="xs:string"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="choice" minOccurs="0" type="xs:string"/>
			<xs:element name="items-from" minOccurs="0" type="xs:string"/>
			<xs:element name="default" minOccurs="0" type="xs:string"/>
			<xs:element name="value" minOccurs="0"/>
			<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
			<xs:element name="validator" minOccurs="0" type="rm:validator-type"/>
		</xs:sequence>
		<xs:attribute name="name" use="required" type="xs:string"/>
		<xs:attribute name="type" type="xs:string" default="java.lang.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:attribute name="translateBooleanAs" type="xs:string"/>
		<xs:attribute name="min" type="xs:int"/>
		<xs:attribute name="max" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="managed-files-type">
		<xs:sequence>
			<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
			<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="script-type">
		<xs:sequence>
			<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
			<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
		</xs:sequence>
		<xs:attribute name="insertEnvironmentAfter" type="xs:int" default="-1"/>
		<xs:attribute name="deleteAfterSubmit" type="xs:boolean" default="true"/>
	</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="input" minOccurs="0" 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="false"/>
		<xs:attribute name="ignoreExitStatus" type="xs:boolean" default="false"/>
		<xs:attribute name="keepOpen" type="xs:boolean" default="false"/>
		<xs:attribute name="flags" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="launch-tab-type">
		<xs:sequence>
			<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
			<xs:element name="import" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="export-for-override" minOccurs="0" type="rm:attribute-viewer-type"/>
					</xs:sequence>
					<xs:attribute name="title" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="validator-type">
		<xs:sequence>
			<xs:choice minOccurs="0">
				<xs:element name="regex"  type="rm:regex-type"/>
				<xs:element name="file-info" type="rm:file-match-type"/>
				<xs:sequence>
				  <xs:element name="range" maxOccurs="unbounded" type="rm:range-type"/>
				</xs:sequence>
			</xs:choice>
			<xs:element name="error-message" minOccurs="0" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="managed-file-type">
		<xs:choice>
			<xs:sequence>
				<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
			</xs:sequence>
			<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="deleteSourceAfterUse" type="xs:boolean" default="false"/>
		<xs:attribute name="deleteTargetAfterUse" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="file-match-type">
		<xs:attribute name="efsAttributes" type="xs:string"/>
		<xs:attribute name="lastModifiedBefore" type="xs:string"/>
		<xs:attribute name="lastModifiedAfter" type="xs:string"/>
		<xs:attribute name="length" type="xs:long"/>
		<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
	</xs:complexType>
	  <xs:complexType name="range-type">
     <xs:attribute name="lessThan" type="xs:string"/>
     <xs:attribute name="lessThanOrEqualTo" type="xs:string"/>
     <xs:attribute name="greaterThan" type="xs:string"/>
     <xs:attribute name="greaterThanOrEqualTo" type="xs:string"/>
   </xs:complexType>
	<xs:complexType name="name-value-pair-type">
		<xs:sequence>
			<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
		</xs:sequence>
		<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: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:choice minOccurs="0" 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="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
		<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
		<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
		<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="regex-type" mixed="true">
		<xs:attribute name="flags" type="xs:string"/>
		<xs:attribute name="split" type="xs:boolean" default="false"/>
		<xs:attribute name="expression" type="xs:string"/>
	</xs:complexType>
	<xs:complexType mixed="true" name="arg-type">
		<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
		<xs:attribute name="resolve" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="tokenizer-type">
		<xs:sequence>
			<xs:choice>
				<xs:element name="type" type="xs:string"/>
				<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
			</xs:choice>
			<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
			<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
		</xs:sequence>
		<xs:attribute name="delim" type="xs:string"/>
		<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
		<xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
		<xs:attribute name="all" type="xs:boolean" default="false"/>
		<xs:attribute name="save" type="xs:int" default="0"/>
		<xs:attribute name="applyToAll" type="xs:boolean" default="false"/>
	</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:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="style" type="xs:string"/>
		<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 minOccurs="0" 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="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</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="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<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 minOccurs="0" 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:element name="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</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="type" type="xs:string"/>
		<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="wrap" 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="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="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="false"/>
		<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: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:element name="fixed-text" minOccurs="0" type="xs:string"/>
			<xs:element name="dynamic-text" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</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="radiobutton"/>
					<xs:enumeration value="spinner"/>
					<xs:enumeration value="combo"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="buttonId" type="xs:string"/>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="button-group-type">
		<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="title" minOccurs="0" type="xs:string"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="button" maxOccurs="unbounded" type="rm:widget-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="group" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="browse-type">
		<xs:sequence>
			<xs:element name="text-layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="button-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="text-control-state" minOccurs="0" type="rm:control-state-type"/>
			<xs:element name="button-control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="textStyle" type="xs:string"/>
		<xs:attribute name="directory" type="xs:boolean" default="false"/>
		<xs:attribute name="uri" type="xs:boolean" default="false"/>
		<xs:attribute name="localOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="push-button-type">
		<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="button-action" minOccurs="0" type="rm:button-action-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="button-action-type">
		<xs:sequence>
			<xs:element name="action" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="clearValue" type="xs:string"/>
		<xs:attribute name="refresh" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="attribute-viewer-type">
		<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:element name="control-state" minOccurs="0" type="rm:control-state-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="initialAllChecked" type="xs:boolean" default="true"/>
		<xs:attribute name="sort" type="xs:boolean" default="true"/>
		<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:attribute name="style" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="viewer-items-type">
		<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:attribute name="separator" type="xs:string" default=" "/>
	</xs:complexType>
	<xs:complexType name="target-type">
		<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:element name="else" minOccurs="0">
				<xs:complexType>
					<xs:choice>
						<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:element name="throw" type="rm:throw-type"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="ref" type="xs:string"/>
		<xs:attribute name="type" default="property">
			<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:attribute name="allowOverwrites" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="match-type">
		<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:element name="throw" type="rm:throw-type"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="moveToTop" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="column-data-type">
		<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="false"/>
		<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:sequence>
			<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="throw-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="message" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="add-type">
		<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="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="append-type">
		<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:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="put-type">
		<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="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="entry-type">
		<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: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: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:element name="throw" type="rm:throw-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:element name="throw" type="rm:throw-type"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="op">
			<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="control-state-type">
		<xs:sequence>
			<xs:choice minOccurs="0">
				<xs:element name="show-if" minOccurs="0" type="rm:control-state-rule-type"/>
				<xs:element name="hide-if" minOccurs="0" type="rm:control-state-rule-type"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="enable-if" minOccurs="0" type="rm:control-state-rule-type"/>
				<xs:element name="disable-if" minOccurs="0" type="rm:control-state-rule-type"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="control-state-rule-type">
		<xs:choice>
			<xs:element name="not" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="and" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="or" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="button" type="xs:string"/>
		<xs:attribute name="selected" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="monitor-type">
		<xs:sequence>
			<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
			<xs:element name="driver" minOccurs="0" type="rm:monitor-driver-type"/>
		</xs:sequence>
		<xs:attribute name="schedulerType" type="xs:string"/>
		<xs:attribute name="refreshFrequencyInSeconds" type="xs:int" default="60"/>
	</xs:complexType>
	<xs:complexType name="monitor-driver-type">
		<xs:choice>
			<xs:element name="url" type="xs:string"/>
			<xs:sequence>
				<xs:element name="name" type="xs:string"/>
				<xs:element name="path" minOccurs="0" type="xs:string"/>
				<xs:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
</xs:schema>

Tokenizer Examples

<?xml version="1.0" encoding="UTF-8"?>
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
	<control-data>
		<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
			to the known property "available-queues" -->
		<start-up-command name="test01ParseQstat">
			<arg/>
			<stdout-parser delim="\n">
				<target ref="queues">
					<match>
						<expression>([\w\d]+)</expression>
						<add field="value">
							<entry valueGroup="1"/>
						</add>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 2: output is to be searched for its final line which should
			contain a job id of the form "[digits].[chars]" -->
		<start-up-command name="test02JobId" waitForId="true">
			<arg/>
			<stdout-parser delim="\n" all="true" save="1">
				<target ref="@jobId">
					<match>
						<expression>([\d]+)([.])(.+)[\s]+.*</expression>
						<append field="name">
							<entry valueGroup="1"/>
							<entry valueGroup="2"/>
							<entry valueGroup="3"/>
						</append>
						<set field="default">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry value="SUBMITTED"/>
						</set>
					</match>
					<match>
						<expression>([\d]+)[.].+</expression>
						<set field="name">
							<entry valueGroup="0"/>
						</set>
						<set field="default">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry value="SUBMITTED"/>
						</set>
					</match>
				</target>
				<target ref="@jobId">
					<match>
						<expression flags="DOTALL">.*Job not submitted.*</expression>
						<set field="value">
							<entry value="FAILED"/>
						</set>
					</match>
				</target>
			</stdout-parser>
			<stderr-parser delim="\n">
				<target ref="@jobId">
					<match>
						<expression>.*Job not submitted.*</expression>
						<throw message="Job Submit Failed"/>
					</match>
				</target>
			</stderr-parser>
		</start-up-command>
		<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
			of attribute definitions, but each line bearing a distinct
			id (e.g., openMPI attribute discovery) -->
		<start-up-command name="test03OpenMPI">
			<arg/>
			<stdout-parser delim="\n">
				<target type="attribute">
					<match>
						<expression>mca:.*:param:([^:]*):value:(.*)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="visible">
							<entry value="true"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
					</match>
					<match>
						<expression>mca:.*:param:([^:]*):status:(.*)</expression>
						<set field="status">
							<entry valueGroup="2"/>
						</set>
					</match>
					<match>
						<expression>mca:.*:param:([^:]*):help:(.*)</expression>
						<set field="tooltip">
							<entry valueGroup="2"/>
						</set>
					</match>
					<test op="EQ">
						<value>#status</value>
						<value>read-only</value>
						<set field="readOnly">
							<entry value="true"/>
						</set>
						<else>
							<set field="readOnly">
								<entry value="false"/>
							</set>
						</else>
					</test>
				</target>
				<target type="attribute">
					<match>
						<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
						<set field="name">
							<entry value="ompi_major_version"/>
						</set>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
						<set field="visible">
							<entry value="true"/>
						</set>
						<set field="readOnly">
							<entry value="true"/>
						</set>
						<set field="name" forceNewObject="true">
							<entry value="ompi_minor_version"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
						<set field="visible">
							<entry value="true"/>
						</set>
						<set field="readOnly">
							<entry value="true"/>
						</set>
					</match>
					<test op="AND">
						<test op="EQ">
							<value>#name</value>
							<value>ompi_minor_version</value>
						</test>
						<test op="LT">
							<value>#value</value>
							<value>7</value>
						</test>
						<throw message="Only supports Open MPI 1.7 and later"/>
					</test>
				</target>
				<target type="attribute">
					<match>
						<expression>(.*):([^:]*)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
						<set field="visible">
							<entry value="false"/>
						</set>
						<set field="readOnly">
							<entry value="true"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
			by caption; use of moveToTop to promote the target to the top of the list
			when the caption appears -->
		<start-up-command name="test04ImplicitWithTags">
			<arg/>
			<stdout-parser delim="\n">
				<target type="property">
					<match moveToTop="true">
						<expression>PROPERTY</expression>
					</match>
					<match>
						<expression>name:(.*)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
					</match>
					<match>
						<expression>value:(.*)</expression>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
				</target>
				<target type="attribute">
					<match moveToTop="true">
						<expression>ATTRIBUTE</expression>
					</match>
					<match>
						<expression>name:(.*)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
					</match>
					<match>
						<expression>value:(.*)</expression>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
		<start-up-command name="test05ImplicitOrdering">
			<arg/>
			<stdout-parser delim="\n">
				<target type="attribute" matchAll="true">
					<match>
						<expression>.+</expression>
						<set field="name">
							<entry valueGroup="0"/>
						</set>
					</match>
					<match>
						<expression>.*</expression>
						<set field="type">
							<entry valueGroup="0"/>
						</set>
					</match>
					<match>
						<expression>.*</expression>
						<set field="description">
							<entry valueGroup="0"/>
						</set>
					</match>
					<match>
						<expression>.*</expression>
						<set field="tooltip">
							<entry valueGroup="0"/>
						</set>
					</match>
					<match>
						<expression>.*</expression>
						<set field="value">
							<entry valueGroup="0"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
		<start-up-command name="test06ImplicitWithTagsDotall">
			<arg/>
			<stdout-parser maxMatchLen="32" applyToAll="true">
				<target type="property">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
					</match>
				</target>
				<target type="property">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
						<set field="name">
							<entry valueGroup="2"/>
						</set>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
				</target>
				<target type="attribute">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
					</match>
				</target>
				<target type="attribute">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
						<set field="name">
							<entry valueGroup="2"/>
						</set>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
		<start-up-command name="test07PropertyDefsSingleLine">
			<arg/>
			<stdout-parser delim="\n">
				<target type="property">
					<match>
						<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
			not exceed 32 chars -->
		<start-up-command name="test08JobStates">
			<arg/>
			<stdout-parser maxMatchLen="32">
				<target ref="jobStates">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
						<put field="value">
							<entry keyGroup="1" valueGroup="2"/>
						</put>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
		<start-up-command name="test09Staggered">
			<arg/>
			<stdout-parser delim="\n">
				<target type="property">
					<match>
						<expression>name:(.*)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
					</match>
					<match>
						<expression>value:(.*)</expression>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 10: forced merge -->
		<start-up-command name="test10Merged">
			<arg/>
			<stdout-parser delim="\n">
				<target type="property">
					<match>
						<expression>name:(.+);value:(.+)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry valueGroup="2"/>
						</set>
					</match>
					<match>
						<expression>name:(.+);default:(.+)</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="default">
							<entry valueGroup="2"/>
						</set>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 11: exit-on -->
		<start-up-command name="test11ExitOn">
			<arg/>
			<stdout-parser maxMatchLen="32">
				<target ref="jobStates">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
						<put field="value">
							<entry keyGroup="1" valueGroup="2"/>
						</put>
					</match>
				</target>
				<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
			</stdout-parser>
		</start-up-command>
		<!-- EXAMPLE 12: exit-after -->
		<start-up-command name="test12ExitAfter">
			<arg/>
			<stdout-parser maxMatchLen="32">
				<target ref="jobStates">
					<match>
						<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
						<put field="value">
							<entry keyGroup="1" valueGroup="2"/>
						</put>
					</match>
				</target>
				<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
			</stdout-parser>
		</start-up-command>
		<submit-interactive name="empty">
			<arg/>
		</submit-interactive>
		<!-- EXAMPLE 13: get-status (use of tests) -->
		<get-job-status name="get-job-status" ignoreExitStatus="true">
			<arg>qstat</arg>
			<arg>${ptp_rm:@jobId#name}</arg>
			<stdout-parser delim="\n">
				<target ref="@jobId">
					<match>
						<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
						<set field="value">
							<entry valueGroup="1"/>
						</set>
					</match>
					<test op="EQ">
						<value>#value</value>
						<value>Q</value>
						<set field="value">
							<entry value="QUEUED_ACTIVE"/>
						</set>
					</test>
					<test op="EQ">
						<value>#value</value>
						<value>R</value>
						<set field="value">
							<entry value="RUNNING"/>
						</set>
					</test>
					<test op="EQ">
						<value>#value</value>
						<value>S</value>
						<set field="value">
							<entry value="SUSPENDED"/>
						</set>
					</test>
					<test op="EQ">
						<value>#value</value>
						<value>H</value>
						<set field="value">
							<entry value="SYSTEM_ON_HOLD"/>
						</set>
					</test>
					<else>
						<set field="value">
							<entry value="COMPLETED"/>
						</set>
					</else>
				</target>
			</stdout-parser>
			<stderr-parser delim="\n">
				<target ref="@jobId">
					<match>
						<expression>.+</expression>
						<set field="value">
							<entry value="COMPLETED"/>
						</set>
					</match>
				</target>
			</stderr-parser>
		</get-job-status>
	</control-data>
	<monitor-data schedulerType="test">
		<driver>
			<name></name>
		</driver>
	</monitor-data>
</resource-manager-builder>

Back to the top