Skip to main content

Notice: This Wiki is now read only and edits are no longer 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)
 
(59 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Resource Manager XSD ==  
+
= JAXB Configurable Resource Manager XML =
  
'''The following is a draft of the proposed Resource Manager XML Schema (XSD).  It has been annotated internally where I felt some explanation necessary.'''
+
== XSD ==
 
+
'''Note that I have not attempted to figure out yet what the monitoring part will look like or what the control and monitoring sections may need to interact; it may also be the case that some things inside the control node should come up a level.'''
+
 
+
'''''Revised version 1 (17/01/2011):'''''
+
 
+
'''''Revised version 2 (19/01/2011):'''''  I have adjusted the schema to accommodate the points raised by our discussions on ptp-dev.  More tomorrow, I'm sure. -alr
+
 
+
'''''Revised version 3 (23/01/2011):'''''  A few more changes I discovered needed to be made as I work through the XML instance for PBS. -alr
+
 
+
'''''Revised version 4 (24/01/2011):'''''  Numerous tweaks. I have added a few specialized widgets and groups involving job attributes whose construction is standardized; this is for economy of expression more than anything else.  -alr
+
 
+
'''''Revised version 5 (25/01/2011):'''''  Changed how to specify the management of files as per discussion.  -alr
+
 
+
'''''Revised version 6 (27/01/2011):'''''  Added browse enumeration types; switched script commands to arglists; other minor corrections.  -alr
+
 
+
'''''Revised version 7 (09/02/2011):'''''  Modified UI elements to expose more granularity (grid-layout, grid-data); corrected PBS xml.  -alr
+
 
+
'''''Revised version 8 (22/02/2011):'''''  Added 'set' element to parser to take care of injection on JobAttributes; added value to Property.  -alr
+
 
+
'''''Revised version 9 (27/02/2011):'''''  Numerous structural changes.  -alr
+
  
 
<source lang="xml">
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
<!-- ******************************************************************************* -->
<xs:element name="resource-manager-data">
+
<!-- * Copyright (c) 2011 University of Illinois All rights reserved. This program -->
<xs:annotation>
+
<!-- * and the accompanying materials are made available under the terms of the -->
<xs:documentation>
+
<!-- * Eclipse Public License v1.0 which accompanies this distribution, and is -->
It is assumed that the xml instance of the schema will bear a name which sufficiently distinguishes it from others
+
<!-- * available at http://www.eclipse.org/legal/epl-v10.html -->
of a similar type; e.g., pbs-torque-v_2.3.7_abe is specific to an installation on the host abe, ll-v_4.0 suits all installations of
+
<!-- * -->
LoadLeveler version 4, etc.
+
<!-- * Contributors: -->
</xs:documentation>
+
<!-- * Albert L. Rossi - design and implementation -->
</xs:annotation>
+
<!-- ****************************************************************************** -->
<xs:complexType>
+
<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:sequence>
<xs:element minOccurs="0" ref="site"/>
+
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
<xs:element ref="control"/>
+
<xs:element ref="monitor"/>
+
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
+
<xs:element name="contents" type="xs:string"/>
</xs:complexType>
+
<xs:element name="path" type="xs:string"/>
</xs:element>
+
</xs:choice>
<xs:element name="site">
+
<xs:attribute name="name" use="required"/>
<xs:annotation>
+
<xs:attribute name="uniqueIdPrefix" type="xs:boolean" default="false"/>
<xs:documentation>
+
<xs:attribute name="resolveContents" type="xs:boolean" default="true"/>
An optional place to set remote site information.
+
<xs:attribute name="deleteSourceAfterUse" type="xs:boolean" default="false"/>
</xs:documentation>
+
<xs:attribute name="deleteTargetAfterUse" type="xs:boolean" default="false"/>
</xs:annotation>
+
</xs:complexType>
<xs:complexType>
+
<xs:complexType name="file-match-type">
<xs:sequence>
+
<xs:attribute name="efsAttributes" type="xs:string"/>
<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
+
<xs:attribute name="lastModifiedBefore" type="xs:string"/>
<xs:element minOccurs="0" name="monitor-server-install" type="xs:string"/>
+
<xs:attribute name="lastModifiedAfter" type="xs:string"/>
</xs:sequence>
+
<xs:attribute name="length" type="xs:long"/>
</xs:complexType>
+
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
</xs:element>
+
</xs:complexType>
<xs:element name="control">
+
  <xs:complexType name="range-type">
<xs:annotation>
+
    <xs:attribute name="lessThan" type="xs:string"/>
<xs:documentation>
+
    <xs:attribute name="lessThanOrEqualTo" type="xs:string"/>
The implementation will construct a variable map serving as the resource manager "environment"; these are dereferenced in the
+
    <xs:attribute name="greaterThan" type="xs:string"/>
configuration file via ${rm:name} or ${rm:name#getterName}; in addition to the properties specified at the top level of the control
+
    <xs:attribute name="greaterThanOrEqualTo" type="xs:string"/>
tree, all attributes and parsers will be mapped for reference. The following hard-coded variables are added at runtime:
+
  </xs:complexType>
<!-- from runtime configuration information -->
+
<xs:complexType name="name-value-pair-type">
control.user.name
+
<xs:sequence>
control.address
+
<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
monitor.user.name
+
</xs:sequence>
monitor.address
+
<xs:attribute name="name" use="required" type="xs:string"/>
<!-- from the monitoring part -->
+
<xs:attribute name="value" type="xs:string"/>
available_queues
+
</xs:complexType>
<!-- from the launch command stdout parser -->
+
<xs:complexType name="tab-controller-type">
jobId
+
<xs:sequence>
<!-- from the other Run Configuration tabs -->
+
<xs:element name="title" type="xs:string"/>
executablePath
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
progArgs
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
directory
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
The top level of the tree represents the available commands/methods on all resource managers, places
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
for defining stdout or stderr parsers, for defining the structure of a batch script to be used, for defining (job) attributes, and
+
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
finally for describing how to construct the UI (Launch Configuration Tab).
+
<xs:element name="composite" type="rm:composite-type"/>
</xs:documentation>
+
<xs:element name="widget" type="rm:widget-type"/>
</xs:annotation>
+
<xs:element name="browse" type="rm:browse-type"/>
<xs:complexType>
+
<xs:element name="action" type="rm:push-button-type"/>
<xs:sequence>
+
<xs:element name="button-group" type="rm:button-group-type"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>
+
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
<xs:element minOccurs="0" ref="managed-files"/>
+
</xs:choice>
<xs:element minOccurs="0" ref="on-start-up"/>
+
</xs:sequence>
<xs:element minOccurs="0" ref="discover-attributes"/>
+
<xs:attribute name="style" type="xs:string"/>
<xs:element name="submit-commands">
+
<xs:attribute name="background" type="xs:string"/>
<xs:complexType>
+
<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
<xs:choice minOccurs="1" maxOccurs="3">
+
<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
<xs:element ref="submit-interactive"/>
+
<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
<xs:element ref="submit-batch"/>
+
</xs:complexType>
<xs:element ref="submit-debug"/>
+
<xs:complexType name="regex-type" mixed="true">
</xs:choice>
+
<xs:attribute name="flags" type="xs:string"/>
</xs:complexType>
+
<xs:attribute name="split" type="xs:boolean" default="false"/>
</xs:element>
+
<xs:attribute name="expression" type="xs:string"/>
<xs:element ref="terminate-job"/>
+
</xs:complexType>
<xs:element minOccurs="0" ref="suspend-job"/>
+
<xs:complexType mixed="true" name="arg-type">
<xs:element minOccurs="0" ref="resume-job"/>
+
<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
<xs:element minOccurs="0" ref="hold-job"/>
+
<xs:attribute name="resolve" type="xs:boolean" default="true"/>
            <xs:element minOccurs="0" ref="release-job"/>
+
</xs:complexType>
<xs:element minOccurs="0" ref="on-shut-down"/>
+
<xs:complexType name="tokenizer-type">
<xs:element minOccurs="0" ref="commands"/>
+
<xs:sequence>
<xs:element minOccurs="0" ref="parsers"/>
+
<xs:choice>
<xs:element minOccurs="0" ref="script"/>
+
<xs:element name="type" type="xs:string"/>
<xs:element ref="attribute-definitions"/>
+
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
<xs:element ref="launch-tab"/>
+
</xs:choice>
</xs:sequence>
+
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
</xs:complexType>
+
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
</xs:element>
+
</xs:sequence>
<xs:element name="property">
+
<xs:attribute name="delim" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
<xs:documentation>
+
<xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
The value is any object type; these are set at runtime.
+
<xs:attribute name="all" type="xs:boolean" default="false"/>
</xs:documentation>
+
<xs:attribute name="save" type="xs:int" default="0"/>
</xs:annotation>
+
<xs:attribute name="applyToAll" type="xs:boolean" default="false"/>
<xs:complexType>
+
</xs:complexType>
<xs:sequence>
+
<xs:complexType name="tab-folder-type">
<xs:element name="value" minOccurs="0" type="xs:string"/>
+
<xs:sequence>
</xs:sequence>
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:attribute name="name" type="xs:string"/>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
</xs:complexType>
+
<xs:element name="item" maxOccurs="unbounded" type="rm:tab-item-type"/>
</xs:element>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="managed-files">
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:annotation>
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:documentation>
+
</xs:sequence>
List of files to be staged.
+
<xs:attribute name="style" type="xs:string"/>
</xs:documentation>
+
<xs:attribute name="background" type="xs:string"/>
</xs:annotation>
+
</xs:complexType>
<xs:complexType>
+
<xs:complexType name="composite-type">
<xs:sequence>
+
<xs:sequence>
<xs:element name="file-source-location" minOccurs="0" type="xs:string"/>
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element maxOccurs="unbounded" ref="managed-file"/>
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
</xs:sequence>
+
<xs:element name="title" minOccurs="0" type="xs:string"/>
</xs:complexType>
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
</xs:element>
+
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
<xs:element name="managed-file">
+
<xs:element name="composite" type="rm:composite-type"/>
<xs:annotation>
+
<xs:element name="widget" type="rm:widget-type"/>
<xs:documentation>
+
<xs:element name="browse" type="rm:browse-type"/>
If 'contents' is present, the file is written.
+
<xs:element name="action" type="rm:push-button-type"/>
</xs:documentation>
+
<xs:element name="button-group" type="rm:button-group-type"/>
</xs:annotation>
+
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
<xs:complexType>
+
</xs:choice>
<xs:sequence>
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:element name="contents" minOccurs="0" type="xs:string"/>
+
</xs:sequence>
</xs:sequence>
+
<xs:attribute name="group" type="xs:boolean" default="false"/>
<xs:attribute name="name" use="required"/>
+
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="uniqueIdPrefix" type="xs:boolean" default="false"/>
+
<xs:attribute name="background" type="xs:string"/>
<xs:attribute name="deleteAfterUse" type="xs:boolean" default="false"/>
+
</xs:complexType>
</xs:complexType>
+
<xs:complexType name="tab-item-type">
</xs:element>
+
<xs:sequence>
<xs:element name="on-start-up">
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:annotation>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:documentation>
+
<xs:element name="title" type="xs:string"/>
Arbitrary commands which need to be run on startup.
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
</xs:documentation>
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
</xs:annotation>
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
+
<xs:element name="composite" type="rm:composite-type"/>
<xs:sequence>
+
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:element name="widget" type="rm:widget-type"/>
</xs:sequence>
+
<xs:element name="browse" type="rm:browse-type"/>
</xs:complexType>
+
<xs:element name="action" type="rm:push-button-type"/>
</xs:element>
+
<xs:element name="button-group" type="rm:button-group-type"/>
<xs:element name="discover-attributes">
+
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
<xs:annotation>
+
</xs:choice>
<xs:documentation>
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
A command for retrieving (if possible) attributes defined by the service dynamically.
+
</xs:sequence>
</xs:documentation>
+
<xs:attribute name="style" type="xs:string"/>
</xs:annotation>
+
<xs:attribute name="background" type="xs:string"/>
<xs:complexType>
+
</xs:complexType>
<xs:sequence>
+
<xs:complexType name="layout-type">
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:choice>
</xs:sequence>
+
<xs:element name="fill-layout" type="rm:fill-layout-type"/>
</xs:complexType>
+
<xs:element name="row-layout" type="rm:row-layout-type"/>
</xs:element>
+
<xs:element name="grid-layout" type="rm:grid-layout-type"/>
<xs:element name="submit-interactive">
+
<xs:element name="form-layout" type="rm:form-layout-type"/>
<xs:annotation>
+
</xs:choice>
<xs:documentation>
+
</xs:complexType>
The command(s) for running interactive jobs.
+
<xs:complexType name="layout-data-type">
</xs:documentation>
+
<xs:choice>
</xs:annotation>
+
<xs:element name="row-data" type="rm:row-data-type"/>
<xs:complexType>
+
<xs:element name="grid-data" type="rm:grid-data-type"/>
<xs:sequence>
+
<xs:element name="form-data" type="rm:form-data-type"/>
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
</xs:choice>
</xs:sequence>
+
</xs:complexType>
</xs:complexType>
+
<xs:complexType name="fill-layout-type">
</xs:element>
+
<xs:attribute name="type" type="xs:string"/>
<xs:element name="submit-batch">
+
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:annotation>
+
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:documentation>
+
<xs:attribute name="spacing" type="xs:int"/>
The command(s) for running jobs through the scheduler.
+
</xs:complexType>
</xs:documentation>
+
<xs:complexType name="row-layout-type">
</xs:annotation>
+
<xs:attribute name="type" type="xs:string"/>
<xs:complexType>
+
<xs:attribute name="center" type="xs:boolean" default="false"/>
<xs:sequence>
+
<xs:attribute name="justify" type="xs:boolean" default="false"/>
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:attribute name="fill" type="xs:boolean" default="false"/>
</xs:sequence>
+
<xs:attribute name="pack" type="xs:boolean" default="false"/>
</xs:complexType>
+
<xs:attribute name="wrap" type="xs:boolean" default="false"/>
</xs:element>
+
<xs:attribute name="marginHeight" type="xs:int"/>
<xs:element name="submit-debug">
+
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:annotation>
+
<xs:attribute name="marginTop" type="xs:int"/>
<xs:documentation>
+
<xs:attribute name="marginBottom" type="xs:int"/>
The command(s) for running debug jobs.
+
<xs:attribute name="marginLeft" type="xs:int"/>
</xs:documentation>
+
<xs:attribute name="marginRight" type="xs:int"/>
</xs:annotation>
+
<xs:attribute name="spacing" type="xs:int"/>
<xs:complexType>
+
</xs:complexType>
<xs:sequence>
+
<xs:complexType name="grid-layout-type">
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:attribute name="numColumns" type="xs:int"/>
</xs:sequence>
+
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="false"/>
</xs:complexType>
+
<xs:attribute name="marginHeight" type="xs:int"/>
</xs:element>
+
<xs:attribute name="marginWidth" type="xs:int"/>
<xs:element name="terminate-job">
+
<xs:attribute name="marginTop" type="xs:int"/>
<xs:annotation>
+
<xs:attribute name="marginBottom" type="xs:int"/>
<xs:documentation>
+
<xs:attribute name="marginLeft" type="xs:int"/>
The command(s) for canceling or killing jobs.
+
<xs:attribute name="marginRight" type="xs:int"/>
</xs:documentation>
+
<xs:attribute name="horizontalSpacing" type="xs:int"/>
</xs:annotation>
+
<xs:attribute name="verticalSpacing" type="xs:int"/>
<xs:complexType>
+
</xs:complexType>
<xs:sequence>
+
<xs:complexType name="form-layout-type">
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:attribute name="marginHeight" type="xs:int"/>
</xs:sequence>
+
<xs:attribute name="marginWidth" type="xs:int"/>
</xs:complexType>
+
<xs:attribute name="marginTop" type="xs:int"/>
</xs:element>
+
<xs:attribute name="marginBottom" type="xs:int"/>
<xs:element name="suspend-job">
+
<xs:attribute name="marginLeft" type="xs:int"/>
<xs:annotation>
+
<xs:attribute name="marginRight" type="xs:int"/>
<xs:documentation>
+
<xs:attribute name="spacing" type="xs:int"/>
The command(s) for suspending jobs.
+
</xs:complexType>
</xs:documentation>
+
<xs:complexType name="row-data-type">
</xs:annotation>
+
<xs:attribute name="height" type="xs:int"/>
<xs:complexType>
+
<xs:attribute name="width" type="xs:int"/>
<xs:sequence>
+
<xs:attribute name="exclude" type="xs:boolean" default="false"/>
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
</xs:complexType>
</xs:sequence>
+
<xs:complexType name="grid-data-type">
</xs:complexType>
+
<xs:attribute name="style" type="xs:string"/>
</xs:element>
+
<xs:attribute name="horizontalAlign" type="xs:string"/>
<xs:element name="resume-job">
+
<xs:attribute name="verticalAlign" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="false"/>
<xs:documentation>
+
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
The command(s) for restarting suspended jobs.
+
<xs:attribute name="horizontalSpan" type="xs:int"/>
</xs:documentation>
+
<xs:attribute name="verticalSpan" type="xs:int"/>
</xs:annotation>
+
<xs:attribute name="horizontalIndent" type="xs:int"/>
<xs:complexType>
+
<xs:attribute name="verticalIndent" type="xs:int"/>
<xs:sequence>
+
<xs:attribute name="minHeight" type="xs:int"/>
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:attribute name="minWidth" type="xs:int"/>
</xs:sequence>
+
<xs:attribute name="heightHint" type="xs:int"/>
</xs:complexType>
+
<xs:attribute name="widthHint" type="xs:int"/>
</xs:element>
+
</xs:complexType>
<xs:element name="hold-job">
+
<xs:complexType name="form-data-type">
      <xs:annotation>
+
<xs:sequence>
        <xs:documentation>
+
<xs:element name="top" minOccurs="0" type="rm:form-attachment-type"/>
            The command(s) for holding jobs.
+
<xs:element name="bottom" minOccurs="0" type="rm:form-attachment-type"/>
        </xs:documentation>
+
<xs:element name="left" minOccurs="0" type="rm:form-attachment-type"/>
      </xs:annotation>
+
<xs:element name="right" minOccurs="0" type="rm:form-attachment-type"/>
      <xs:complexType>
+
</xs:sequence>
        <xs:sequence>
+
<xs:attribute name="height" type="xs:int"/>
            <xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:attribute name="width" type="xs:int"/>
        </xs:sequence>
+
</xs:complexType>
      </xs:complexType>
+
<xs:complexType name="form-attachment-type">
  </xs:element>
+
<xs:attribute name="alignment" type="xs:string"/>
  <xs:element name="release-job">
+
<xs:attribute name="numerator" type="xs:int"/>
      <xs:annotation>
+
<xs:attribute name="denominator" type="xs:int"/>
        <xs:documentation>
+
<xs:attribute name="offset" type="xs:int"/>
            The command(s) for releasing suspended jobs.
+
</xs:complexType>
        </xs:documentation>
+
<xs:complexType name="widget-type">
      </xs:annotation>
+
<xs:sequence>
      <xs:complexType>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
        <xs:sequence>
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
            <xs:element maxOccurs="unbounded" ref="command-ref"/>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
        </xs:sequence>
+
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
      </xs:complexType>
+
<xs:element name="fixed-text" minOccurs="0" type="xs:string"/>
  </xs:element>
+
<xs:element name="dynamic-text" minOccurs="0">
<xs:element name="on-shut-down">
+
<xs:complexType>
<xs:annotation>
+
<xs:documentation>
+
Arbitrary commands which need to be run on shut-down.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="command-ref"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="commands">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="command"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="parsers">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="stream-parser"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="script">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element minOccurs="0" ref="directive-definitions"/>
+
<xs:element minOccurs="0" ref="environment-variables"/>
+
<xs:element minOccurs="0" ref="pre-execute-commands"/>
+
<xs:element ref="execute-command"/>
+
<xs:element minOccurs="0" ref="post-execute-commands"/>
+
</xs:sequence>
+
<xs:attribute name="shell" use="required"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="directive-definitions">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="directive-definition"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="directive-definition">
+
<xs:annotation>
+
<xs:documentation>
+
'ValueFrom' refers to properties in the resource manager environment.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType mixed="true">
+
<xs:attribute name="valueFrom"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="environment-variables">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="environment-variable"/>
+
</xs:sequence>
+
<xs:attribute name="syntax" use="required">
+
            <xs:simpleType>
+
              <xs:restriction base="xs:string">
+
                  <xs:enumeration value="sentenv"/>
+
                  <xs:enumeration value="export"/>
+
              </xs:restriction>
+
            </xs:simpleType>
+
        </xs:attribute>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="environment-variable">
+
<xs:annotation>
+
<xs:documentation>
+
'ValueFrom' refers to properties in the resource manager environment.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType >
+
  <xs:attribute name="variableName" use="required" type="xs:string"/>
+
<xs:attribute name="valueFrom" use="required" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="pre-execute-commands">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="arglist" maxOccurs="unbounded"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="execute-command">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="arglist"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="post-execute-commands">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="arglist" maxOccurs="unbounded"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="attribute-definitions">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="job-attribute" maxOccurs="unbounded"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="job-attribute">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="description" type="xs:string"/>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
+
<xs:element name="choice" minOccurs="0" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
A a comma-delimited set of values.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="default" minOccurs="0" type="xs:string"/>
+
<xs:element minOccurs="0" ref="validator"/>
+
<xs:element name="value" minOccurs="0" type="xs:string"/>
+
</xs:sequence>
+
<xs:attribute name="id" use="required" type="xs:string"/>
+
<xs:attribute name="name" use="required" type="xs:string"/>
+
<xs:attribute name="type" use="required" type="xs:string"/>
+
<xs:attribute name="basic" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Indicates if this attribute is part of a basic (required) set, or if it is an (advanced) option.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="min" type="xs:int"/>
+
<xs:attribute name="max" type="xs:int"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="command-ref" type="xs:string"/>
+
<xs:element name="parser-ref" type="xs:string"/>
+
<xs:element name="command">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="arglist"/>
+
<xs:element minOccurs="0" maxOccurs="2" ref="parser-ref"/>
+
<xs:element minOccurs="0" ref="environment-variables"/>
+
</xs:sequence>
+
<xs:attribute name="name" type="xs:string"/>
+
<xs:attribute name="displayStdout" type="xs:boolean" default="false"/>
+
<xs:attribute name="displayStderr" type="xs:boolean" default="false"/>
+
<xs:attribute name="directory" type="xs:string"/>
+
<xs:attribute name="redirectStderr" type="xs:boolean" default="false"/>
+
<xs:attribute name="replaceEnvironment" type="xs:boolean" default="false"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="arglist">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element maxOccurs="unbounded" ref="arg"/>
+
</xs:sequence>
+
<xs:attribute name="dynamicAppend" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Iterate over all dynamic attributes, appending the sequence of args for each attribute.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="arg">
+
<xs:annotation>
+
<xs:documentation>
+
The text of the argument will be parsed for references to the resource manager environment; e.g., ${rm:a}, v=${rm:v},
+
etc. By convention, '${rm:@name}' and '${rm:@value}' will refer to a given dynamic attribute name and value (of undefined position i in
+
the list).
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType mixed="true">
+
<xs:attribute name="isUndefinedIfEquals" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
If this is defined (even a zero-length string is valid), an equality check on the arg will be run and if satisfied the arg will be
+
eliminated from the list.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="stream-parser">
+
<xs:annotation>
+
<xs:documentation>
+
These are attached to the stdout or stderr streams in order to capture the output of the command and add values
+
into the resource manager environment. The range indicates which lines of output should be examined. If redirect is true, the
+
stream will be passed on to an output stream provided by the caller.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="range"/>
+
<xs:element ref="token"/>
+
</xs:sequence>
+
<xs:attribute name="name" use="required" type="xs:string"/>
+
<xs:attribute name="stderr" type="xs:boolean" default="false"/>
+
<xs:attribute name="redirect" type="xs:boolean" default="false"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="token">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element minOccurs="0" ref="range"/>
+
<xs:choice>
+
<xs:element ref="token"/>
+
 
<xs:sequence>
 
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="put"/>
+
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="set"/>
+
<xs:element minOccurs="0" maxOccurs="unbounded" ref="add"/>
+
 
</xs:sequence>
 
</xs:sequence>
</xs:choice>
+
</xs:complexType>
</xs:sequence>
+
</xs:element>
<xs:attribute name="delim">
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:annotation>
+
</xs:sequence>
<xs:documentation>
+
<xs:attribute name="type" default="text">
The absence of a delimiter means match the entire segment.
+
<xs:simpleType>
</xs:documentation>
+
<xs:restriction base="xs:string">
</xs:annotation>
+
<xs:enumeration value="label"/>
</xs:attribute>
+
<xs:enumeration value="text"/>
</xs:complexType>
+
<xs:enumeration value="checkbox"/>
</xs:element>
+
<xs:enumeration value="radiobutton"/>
<xs:element name="add">
+
<xs:enumeration value="spinner"/>
<xs:annotation>
+
<xs:enumeration value="combo"/>
<xs:documentation>
+
</xs:restriction>
Value is the concatenation of tokens matching the range; this is then added as an element to the named list. If
+
</xs:simpleType>
there is no such list, a list will be created and assigned to the variable name. If no range is present, the value equals the
+
</xs:attribute>
entire element.
+
<xs:attribute name="buttonId" type="xs:string"/>
</xs:documentation>
+
<xs:attribute name="title" type="xs:string"/>
</xs:annotation>
+
<xs:attribute name="style" type="xs:string"/>
<xs:complexType>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
<xs:sequence>
+
<xs:attribute name="saveValueTo" type="xs:string"/>
<xs:element minOccurs="0" ref="range"/>
+
<xs:attribute name="foreground" type="xs:string"/>
</xs:sequence>
+
<xs:attribute name="background" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
+
</xs:complexType>
</xs:complexType>
+
<xs:complexType name="button-group-type">
</xs:element>
+
<xs:sequence>
<xs:element name="set">
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:annotation>
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
<xs:documentation>
+
<xs:element name="title" minOccurs="0" type="xs:string"/>
Value assigned to the setter is the concatenation of tokens matching the range; in the context of this
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
implementation, setter refers to the name of an attribute or element of JobAttribute or to a Property value; name designates the
+
<xs:element name="button" maxOccurs="unbounded" type="rm:widget-type"/>
variable to which the JobAttribute or Property has been assigned. If no such element exists an exception is thrown. If no
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
range is
+
</xs:sequence>
present, the value equals the entire element.
+
<xs:attribute name="group" type="xs:boolean" default="false"/>
</xs:documentation>
+
<xs:attribute name="saveValueTo" type="xs:string"/>
</xs:annotation>
+
<xs:attribute name="style" type="xs:string"/>
<xs:complexType>
+
<xs:attribute name="background" type="xs:string"/>
<xs:sequence>
+
</xs:complexType>
<xs:element minOccurs="0" ref="range"/>
+
<xs:complexType name="browse-type">
</xs:sequence>
+
<xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
+
<xs:element name="text-layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:attribute name="setter" use="required" type="xs:string"/>
+
<xs:element name="button-layout-data" minOccurs="0" type="rm:layout-data-type"/>
</xs:complexType>
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
</xs:element>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="put">
+
<xs:element name="text-control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:annotation>
+
<xs:element name="button-control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:documentation>
+
</xs:sequence>
Value is the concatenation of tokens matching the range; this is assigned as a Property variable with the given
+
<xs:attribute name="title" type="xs:string"/>
name. This method will overwrite any variable with the same name. If no range is present, the value equals
+
<xs:attribute name="textStyle" type="xs:string"/>
the entire element.
+
<xs:attribute name="directory" type="xs:boolean" default="false"/>
</xs:documentation>
+
<xs:attribute name="uri" type="xs:boolean" default="false"/>
</xs:annotation>
+
<xs:attribute name="localOnly" type="xs:boolean" default="false"/>
<xs:complexType>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
<xs:sequence>
+
<xs:attribute name="saveValueTo" type="xs:string"/>
<xs:element minOccurs="0" ref="range"/>
+
<xs:attribute name="foreground" type="xs:string"/>
</xs:sequence>
+
<xs:attribute name="background" type="xs:string"/>
<xs:attribute name="name" use="required" type="xs:string"/>
+
</xs:complexType>
</xs:complexType>
+
<xs:complexType name="push-button-type">
</xs:element>
+
<xs:sequence>
<xs:element name="range" type="xs:string">
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:annotation>
+
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:documentation>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
Indicates which elements generated by a segmentation should be returned; expression is a comma-delimited list,
+
<xs:element name="button-action" minOccurs="0" type="rm:button-action-type"/>
which may also contain colon-delimited ranges; by convention, ":N" = up to final segment returned.
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
</xs:documentation>
+
</xs:sequence>
</xs:annotation>
+
<xs:attribute name="title" type="xs:string"/>
</xs:element>
+
<xs:attribute name="foreground" type="xs:string"/>
<xs:element name="validator">
+
<xs:attribute name="background" type="xs:string"/>
<xs:annotation>
+
</xs:complexType>
<xs:documentation>
+
<xs:complexType name="button-action-type">
A regular expression or an acl used to validate an attribute value.
+
<xs:sequence>
</xs:documentation>
+
<xs:element name="action" type="xs:string"/>
</xs:annotation>
+
</xs:sequence>
<xs:complexType>
+
<xs:attribute name="clearValue" type="xs:string"/>
<xs:sequence>
+
<xs:attribute name="refresh" type="xs:boolean" default="true"/>
<xs:choice>
+
</xs:complexType>
<xs:element name="regex" type="xs:string"/>
+
<xs:complexType name="attribute-viewer-type">
<xs:element name="acl" type="xs:string"/>
+
<xs:sequence>
</xs:choice>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="error-message" minOccurs="0" type="xs:string"/>
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
</xs:sequence>
+
<xs:element name="label" minOccurs="0" type="xs:string"/>
</xs:complexType>
+
<xs:element name="column-data" minOccurs="0" maxOccurs="7" type="rm:column-data-type"/>
</xs:element>
+
<xs:element name="items" type="rm:viewer-items-type"/>
<xs:element name="launch-tab">
+
<xs:element name="value" minOccurs="0" type="rm:template-type"/>
<xs:annotation>
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
<xs:documentation>
+
</xs:sequence>
This is a recursive description of the main UI element associated with the control part, the Launch Tab. NOTE: I
+
<xs:attribute name="type" default="table">
do not as yet know how many of the underlying widget options need to be exposed here for effective building in the createControl
+
<xs:simpleType>
method. What follows is minimal.
+
<xs:restriction base="xs:string">
</xs:documentation>
+
<xs:enumeration value="table"/>
</xs:annotation>
+
<xs:enumeration value="tree"/>
<xs:complexType>
+
</xs:restriction>
<xs:sequence>
+
</xs:simpleType>
<xs:element maxOccurs="unbounded" ref="tab-controller"/>
+
</xs:attribute>
</xs:sequence>
+
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="advancedModeEnabled" type="xs:boolean" default="false">
+
<xs:attribute name="initialAllChecked" type="xs:boolean" default="true"/>
<xs:annotation>
+
<xs:attribute name="sort" type="xs:boolean" default="true"/>
<xs:documentation>
+
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
If this is set to true, a tab-controller which allows the user to browse the local file system and/or workspace
+
<xs:attribute name="linesVisible" type="xs:boolean" default="true"/>
to open and edit a custom batch script will be created; this will include copy and renaming buttons.
+
<xs:attribute name="tooltipEnabled" type="xs:boolean" default="true"/>
</xs:documentation>
+
<xs:attribute name="style" type="xs:string"/>
</xs:annotation>
+
</xs:complexType>
</xs:attribute>
+
<xs:complexType name="viewer-items-type">
</xs:complexType>
+
<xs:sequence>
</xs:element>
+
<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
<xs:element name="tab-controller">
+
<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
<xs:annotation>
+
</xs:sequence>
<xs:documentation>
+
<xs:attribute name="allPredefined" type="xs:boolean" default="false"/>
as in: org.eclipse.ptp.rm.ui.launch.ExtendableRMLaunchConfigurationDynamicTab; a top-level "switch" between views.
+
<xs:attribute name="allDiscovered" type="xs:boolean" default="false"/>
</xs:documentation>
+
</xs:complexType>
</xs:annotation>
+
<xs:complexType name="font-type">
<xs:complexType>
+
<xs:attribute name="name" type="xs:string"/>
<xs:sequence>
+
<xs:attribute name="size" type="xs:int" default="9"/>
<xs:element name="title" type="xs:string"/>
+
<xs:attribute name="style" default="normal">
<xs:element minOccurs="0" maxOccurs="unbounded" ref="group"/>
+
<xs:simpleType>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="tab-folder"/>
+
<xs:restriction base="xs:string">
</xs:sequence>
+
<xs:enumeration value="normal"/>
</xs:complexType>
+
<xs:enumeration value="bold"/>
</xs:element>
+
<xs:enumeration value="italic"/>
<xs:element name="tab-folder">
+
</xs:restriction>
<xs:complexType>
+
</xs:simpleType>
<xs:sequence>
+
</xs:attribute>
<xs:element name="title" type="xs:string"/>
+
</xs:complexType>
<xs:element maxOccurs="unbounded" ref="tab-item"/>
+
<xs:complexType name="template-type">
</xs:sequence>
+
<xs:attribute name="pattern" type="xs:string"/>
</xs:complexType>
+
<xs:attribute name="separator" type="xs:string" default=" "/>
</xs:element>
+
</xs:complexType>
<xs:element name="tab-item">
+
<xs:complexType name="target-type">
<xs:complexType>
+
<xs:sequence>
<xs:sequence>
+
<xs:element name="match" maxOccurs="unbounded" type="rm:match-type"/>
<xs:element name="title" type="xs:string"/>
+
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="group"/>
+
<xs:element name="else" minOccurs="0">
<xs:element minOccurs="0" maxOccurs="unbounded" ref="tab-folder"/>
+
<xs:complexType>
</xs:sequence>
+
<xs:choice>
</xs:complexType>
+
<xs:element name="add" type="rm:add-type"/>
</xs:element>
+
<xs:element name="append" type="rm:append-type"/>
<xs:element name="group">
+
<xs:element name="put" type="rm:put-type"/>
<xs:annotation>
+
<xs:element name="set" type="rm:set-type"/>
<xs:documentation>
+
<xs:element name="throw" type="rm:throw-type"/>
We may want a few tweaks here, such as borders, etc. Dynamic attribute means this group gets rebuilt if there is a
+
</xs:choice>
button allowing the user to select displayed attributes.
+
</xs:complexType>
</xs:documentation>
+
</xs:element>
</xs:annotation>
+
</xs:sequence>
<xs:complexType>
+
<xs:attribute name="ref" type="xs:string"/>
<xs:sequence>
+
<xs:attribute name="type" default="property">
<xs:element ref="grid-data" minOccurs="0"/>
+
<xs:simpleType>
<xs:element ref="grid-layout" minOccurs="0"/>
+
<xs:restriction base="xs:string">
<xs:element name="title" type="xs:string" minOccurs="0"/>
+
<xs:enumeration value="property"/>
<xs:element ref="style" minOccurs="0"/>
+
<xs:enumeration value="attribute"/>
<xs:choice>
+
</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:choice maxOccurs="unbounded">
<xs:element ref="group"/>
+
<xs:element name="add" type="rm:add-type"/>
<xs:element ref="tab-folder"/>
+
<xs:element name="append" type="rm:append-type"/>
<xs:element ref="widget"/>
+
<xs:element name="put" type="rm:put-type"/>
<xs:element ref="viewer"/>
+
<xs:element name="set" type="rm:set-type"/>
 +
<xs:element name="throw" type="rm:throw-type"/>
 
</xs:choice>
 
</xs:choice>
<xs:element ref="discovered-attributes"/>
+
</xs:complexType>
<xs:element ref="all-attributes"/>
+
</xs:element>
</xs:choice>
+
</xs:sequence>
</xs:sequence>
+
<xs:attribute name="op">
<xs:attribute name="dynamic" type="xs:boolean" default="false"/>
+
<xs:simpleType>
<xs:attribute name="scrollable" type="xs:boolean" default="false"/>
+
<xs:restriction base="xs:string">
</xs:complexType>
+
<xs:enumeration value="EQ"/>
</xs:element>
+
<xs:enumeration value="LT"/>
<xs:element name="all-attributes">
+
<xs:enumeration value="GT"/>
<xs:annotation>
+
<xs:enumeration value="LE"/>
<xs:documentation>
+
<xs:enumeration value="GE"/>
Indicates that all the attributes defined at initialization and runtime be placed in this group.
+
<xs:enumeration value="AND"/>
</xs:documentation>
+
<xs:enumeration value="OR"/>
</xs:annotation>
+
<xs:enumeration value="NOT"/>
<xs:complexType>
+
</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:sequence>
<xs:element ref="viewer" minOccurs="0">
+
<xs:element name="name" type="xs:string"/>
<xs:annotation>
+
<xs:element name="path" minOccurs="0" type="xs:string"/>
<xs:documentation>
+
<xs:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
The presence of this element indicates all attributes should be placed in a single table; otherwise, attributes
+
are mapped serially to widgets by type.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="include">
+
<xs:complexType>
+
<xs:attribute name="headers" type="xs:boolean" default="true"/>
+
<xs:attribute name="sort" type="xs:boolean" default="true"/>
+
<xs:attribute name="name" type="xs:boolean" default="true"/>
+
<xs:attribute name="tooltip" type="xs:boolean" default="true"/>
+
<xs:attribute name="description" type="xs:boolean" default="true"/>
+
</xs:complexType>
+
</xs:element>
+
 
</xs:sequence>
 
</xs:sequence>
</xs:complexType>
+
</xs:choice>
</xs:element>
+
</xs:complexType>
<xs:element name="discovered-attributes">
+
<xs:annotation>
+
<xs:documentation>
+
Indicates that all the attributes defined at runtime be placed in this group.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="viewer" minOccurs="0">
+
<xs:annotation>
+
<xs:documentation>
+
The presence of this element indicates all attributes should be placed in a single table; otherwise, attributes
+
are mapped serially to widgets by type.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="include">
+
<xs:complexType>
+
<xs:attribute name="headers" type="xs:boolean" default="true"/>
+
                  <xs:attribute name="sort" type="xs:boolean" default="true"/>
+
                  <xs:attribute name="name" type="xs:boolean" default="true"/>
+
                  <xs:attribute name="tooltip" type="xs:boolean" default="true"/>
+
                  <xs:attribute name="description" type="xs:boolean" default="true"/>
+
</xs:complexType>
+
</xs:element>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="grid-data">
+
<xs:complexType>
+
<xs:attribute name="horizontalAlign" type="xs:string"/>
+
<xs:attribute name="verticalAlign" type="xs:string"/>
+
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="true"/>
+
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
+
<xs:attribute name="horizontalSpan" type="xs:integer"/>
+
<xs:attribute name="verticalSpan" type="xs:integer"/>
+
<xs:attribute name="minHeight" type="xs:integer"/>
+
<xs:attribute name="minWidth" type="xs:integer"/>
+
<xs:attribute name="heightHint" type="xs:integer"/>
+
<xs:attribute name="widthHint" type="xs:integer"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="grid-layout">
+
<xs:complexType>
+
<xs:attribute name="numColumns" type="xs:integer"/>
+
<xs:attribute name="horizontalSpacing" type="xs:integer"/>
+
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="true"/>
+
<xs:attribute name="marginBottom" type="xs:integer"/>
+
<xs:attribute name="marginHeight" type="xs:integer"/>
+
<xs:attribute name="marginLeft" type="xs:integer"/>
+
<xs:attribute name="marginRight" type="xs:integer"/>
+
<xs:attribute name="marginTop" type="xs:integer"/>
+
<xs:attribute name="marginWidth" type="xs:integer"/>
+
<xs:attribute name="verticalSpacing" type="xs:integer"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="column-data">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="style"/>
+
</xs:sequence>
+
<xs:attribute name="name" type="xs:string"/>
+
<xs:attribute name="width" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="style">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="tag" type="xs:string" maxOccurs="unbounded">
+
<xs:annotation>
+
<xs:documentation>
+
The strings will be converted into their integer values;
+
e.g., "SWT.NONE". They will then be 'or'd' ( | ).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="viewer">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="grid-data" minOccurs="0"/>
+
<xs:element ref="grid-layout" minOccurs="0"/>
+
<xs:element name="label" minOccurs="0" type="xs:string"/>
+
<xs:element ref="style" minOccurs="0"/>
+
<xs:element ref="column-data" minOccurs="0"/>
+
<xs:element name="initial-rows" minOccurs="0">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="row" maxOccurs="unbounded">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="column-text" maxOccurs="unbounded" type="xs:string"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
</xs:sequence>
+
<xs:attribute name="editable" type="xs:boolean" default="true"/>
+
<xs:attribute name="type" default="table">
+
<xs:simpleType>
+
<xs:restriction base="xs:string">
+
<xs:enumeration value="table"/>
+
<xs:enumeration value="tree"/>
+
<xs:enumeration value="checkboxTable"/>
+
</xs:restriction>
+
</xs:simpleType>
+
</xs:attribute>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="widget">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element name="label" minOccurs="0" type="xs:string"/>
+
<xs:element ref="style" minOccurs="0"/>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
+
<xs:element name="content" minOccurs="0">
+
<xs:annotation>
+
<xs:documentation>
+
The text of this element will be parsed for references to the resource manager environment; e.g., ${a},
+
version-${b}, etc.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="arglist"/>
+
</xs:sequence>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="saveValueTo" type="xs:string" minOccurs="0">
+
<xs:annotation>
+
<xs:documentation>
+
The text of this element will be the name of a property.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
</xs:sequence>
+
<xs:attribute name="type" default="text">
+
<xs:annotation>
+
<xs:documentation>
+
Custom, fixed widgets:
+
1. select-attributes: push button which brings up wizard exposing attribute names with
+
checkboxes, allowing dynamic groups to be rebuilt.
+
2. show-script: push button which displays the batch script as it would
+
currently be submitted.
+
</xs:documentation>
+
</xs:annotation>
+
<xs:simpleType>
+
<xs:restriction base="xs:string">
+
<xs:enumeration value="label"/> <!-- automatically read-only -->
+
<xs:enumeration value="text"/>
+
<xs:enumeration value="pushButton"/> <!-- automatically read-only -->
+
<xs:enumeration value="radioButton"/> <!-- automatically read-only -->
+
<xs:enumeration value="spinner"/>
+
<xs:enumeration value="checkbox"/> <!-- automatically read-only -->
+
<xs:enumeration value="combo"/>
+
<xs:enumeration value="browseDirectoryButton"/>
+
<xs:enumeration value="browseExistingFileButton"/>
+
<xs:enumeration value="browseOrCreateFileButton"/>
+
<xs:enumeration value="selectAttributes"/> <!-- automatically read-only -->
+
<xs:enumeration value="showScript"/> <!-- automatically read-only -->
+
</xs:restriction>
+
</xs:simpleType>
+
</xs:attribute>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="monitor">
+
<xs:annotation>
+
<xs:documentation>
+
I have for the moment left this undefined.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
</xs:schema>
 
</xs:schema>
 
</source>
 
</source>
  
'''''Revised version 9 (27/02/2011):'''''  PBS instance example
+
== Tokenizer Examples ==
 
+
<source lang="xml">
+
<?xml version="1.0" encoding="UTF-8"?>
+
<resource-manager-data name="rm-pbs-torque_2.3.7">
+
  <site>
+
      <control-connection>ssh://abe.ncsa.uiuc.edu/usr/local/bin/qsub</control-connection>
+
  </site>
+
<control>
+
<managed-files>
+
<file-staging-location>.eclipsesettings</file-staging-location>
+
<managed-file name="pbs_script" uniqueIdPrefix="true" deleteAfterUse="true">
+
<contents>${rm:script}</contents>
+
</managed-file>
+
</managed-files>
+
<on-start-up>
+
        <command-ref>find_queues</command-ref>
+
      </on-start-up>
+
<submit-commands>
+
<submit-batch>
+
<command-ref>submit_script</command-ref>
+
</submit-batch>
+
</submit-commands>
+
<terminate-job>
+
<command-ref>cancel_job</command-ref>
+
</terminate-job>
+
<commands>
+
  <command name="find_queues">
+
            <arglist>
+
              <arg>qstat -Q -f</arg>
+
              <arg>| grep Queue:</arg>
+
              <arg>| cut -d ' ' -f 2</arg>
+
            </arglist>
+
            <parser-ref>queueParser</parser-ref>
+
        </command>
+
<command name="submit_script">
+
<arglist>
+
<arg>qsub</arg>
+
<arg>${rm:pbs_script}</arg>
+
</arglist>
+
<parser-ref>jobIdParser</parser-ref>
+
</command>
+
<command name="cancel_job">
+
<arglist>
+
<arg>qdel</arg>
+
<arg>${rm:jobId}</arg>
+
</arglist>
+
</command>
+
</commands>
+
<parsers>
+
<stream-parser name="queueParser" stderr="false">
+
<range>0:N</range>
+
<token>
+
  <add name="available_queues"/>
+
</token>
+
</stream-parser>
+
<stream-parser name="jobIdParser" stderr="false">
+
            <range>0:N</range>
+
            <token delim="[.]">
+
              <put name="jobId">
+
                  <range>0</range>
+
              </put>
+
            </token>
+
        </stream-parser>
+
</parsers>
+
<script shell="#!/bin/bash">
+
<directive-definitions>
+
<directive-definition valueFrom="Account_Name"># @ PBS -A </directive-definition>
+
<directive-definition valueFrom="Checkpoint"># @ PBS -c </directive-definition>
+
<directive-definition valueFrom="depend"># @ PBS -W depend=</directive-definition>
+
<directive-definition valueFrom="destination"># @ PBS -q </directive-definition>
+
<directive-definition valueFrom="directive"># @ PBS -C </directive-definition>
+
<directive-definition valueFrom="Error_Path"># @ PBS -e </directive-definition>
+
<directive-definition valueFrom="export_all"># @ PBS -V </directive-definition>
+
<directive-definition valueFrom="group_list"># @ PBS -W group_list=</directive-definition>
+
<directive-definition valueFrom="Hold_Types"># @ PBS -h </directive-definition>
+
<directive-definition valueFrom="Job_Name"># @ PBS -N </directive-definition>
+
<directive-definition valueFrom="Join_Path"># @ PBS -j </directive-definition>
+
<directive-definition valueFrom="Keep_Files"># @ PBS -k </directive-definition>
+
<directive-definition valueFrom="Mail_Points"># @ PBS -m </directive-definition>
+
<directive-definition valueFrom="Mail_Users"># @ PBS -M </directive-definition>
+
<directive-definition valueFrom="Output_Path"># @ PBS -o </directive-definition>
+
<directive-definition valueFrom="Priority"># @ PBS -p </directive-definition>
+
<directive-definition valueFrom="Rerunnable"># @ PBS -r </directive-definition>
+
<directive-definition valueFrom="Resource_List.arch"># @ PBS -l arch=</directive-definition>
+
<directive-definition valueFrom="Resource_List.cput"># @ PBS -l cput=</directive-definition>
+
<directive-definition valueFrom="Resource_List.file"># @ PBS -l file=</directive-definition>
+
<directive-definition valueFrom="Resource_List.host"># @ PBS -l host=</directive-definition>
+
<directive-definition valueFrom="Resource_List.mem"># @ PBS -l mem=</directive-definition>
+
<directive-definition valueFrom="Resource_List.nice"># @ PBS -l nice=</directive-definition>
+
<directive-definition valueFrom="Resource_List.nodes"># @ PBS -l nodes=</directive-definition>
+
<directive-definition valueFrom="Resource_List.ompthreads"># @ PBS -l ompthreads=</directive-definition>
+
<directive-definition valueFrom="Resource_List.pcput"># @ PBS -l pcput=</directive-definition>
+
<directive-definition valueFrom="Resource_List.pmem"># @ PBS -l pmem=</directive-definition>
+
<directive-definition valueFrom="Resource_List.pvmem"># @ PBS -l pvmem=</directive-definition>
+
<directive-definition valueFrom="Resource_List.vmem"># @ PBS -l vmem=</directive-definition>
+
<directive-definition valueFrom="Resource_List.walltime"># @ PBS -l walltime=</directive-definition>
+
<directive-definition valueFrom="Shell_Path_List"># @ PBS -S </directive-definition>
+
<directive-definition valueFrom="stagein"># @ PBS -W stagein=</directive-definition>
+
<directive-definition valueFrom="stageout"># @ PBS -W stageout=</directive-definition>
+
<directive-definition valueFrom="User_List"># @ PBS -u </directive-definition>
+
<directive-definition valueFrom="Variable_List"># @ PBS -v </directive-definition>
+
</directive-definitions>
+
<pre-execute-commands>
+
<arglist>
+
<arg>cd</arg>
+
<arg>${rm:directory}</arg>
+
</arglist>
+
</pre-execute-commands>
+
<execute-command>
+
<arglist>
+
<arg>${rm:mpiCommand}</arg>
+
<arg>${rm:mpiArgs}</arg>
+
<arg>${rm:executablePath}</arg>
+
<arg>${rm:progArgs}</arg>
+
</arglist>
+
</execute-command>
+
<post-execute-commands>
+
<arglist>
+
<arg>touch</arg>
+
<arg>DONE</arg>
+
</arglist>
+
</post-execute-commands>
+
</script>
+
<attribute-definitions>
+
<job-attribute id="mpiCommand" name="mpiCommand" basic="true" type="choice">
+
<description>Which mpi command to use.</description>
+
<choice>,mpiexec,mpirun</choice>
+
</job-attribute>
+
<job-attribute id="mpiCores" name="mpiCores" min="1" basic="true" type="integer">
+
<description>the '-np' value</description>
+
</job-attribute>
+
<job-attribute id="mpiArgs" name="mpiArgs" basic="true" type="string">
+
<description>Which mpi options to use.</description>
+
<default>-machinefile $PBS_NODEFILE -np ${rm:mpiCores}</default>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Account_Name" name="Account_Name" basic="true" type="string">
+
<description>Account to which to charge this job.</description>
+
<tooltip>Format: string</tooltip>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Checkpoint" name="Checkpoint" type="choice">
+
<description>Determines when checkpointing (if supported) will be performed by PBS on behalf of the job.</description>
+
<tooltip>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 ofs
+
minutess whichs is the integer number of minutes of CPUs time used bys the job; values must be greater than zero); defaults value:
+
"u", whichs iss unspecified.
+
</tooltip>
+
<choice>,u,n,s,c,c=????</choice>
+
            <default>u</default>
+
</job-attribute>
+
<job-attribute id="PBSJOB_depend" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_destination" name="destination" type="string" basic="true">
+
<description>Designation of the queue to which to submit the job.</description>
+
<tooltip>Format: queue[@server].</tooltip>
+
</job-attribute>
+
<job-attribute id="PBSJOB_directive" name="directive" type="string">
+
<description>Defines the prefix that declares a directive to the qsub command within the script file.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Error_Path" name="Error_Path" type="string">
+
<description>The final path name for the file containing the job's standard error stream.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_export_all" name="export_all" basic="true" type="boolean">
+
<description>Declares that all environment variables in the qsub command's environment are to be exported to the batch job.</description>
+
<default>true</default>
+
</job-attribute>
+
<job-attribute id="PBSJOB_group_list" name="group_list" type="string">
+
<description>A list of group_names@hosts which determines the group under which the job is run on a given host.</description>
+
<tooltip>Format: group_name[@host][,group_name[@host]...]. When a job is to be placed into execution, the server will select a
+
group
+
name according to the following ordered set of rules: 1) Select the group name from the list for which the associated host
+
name
+
matches the name of the execution host; 2) Select the group name which has no associated host name, the wildcard name; 3) Use
+
the
+
login group for the username under which the job will be run.
+
</tooltip>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Hold_Types" name="Hold_Types" type="choice">
+
<description>The set of holds currently applied to the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Job_Name" name="Job_Name" type="string" basic="true">
+
<description>The name assigned to the job by the qsub or qalter command.</description>
+
<tooltip>Format: string up to 15 characters, first character must be alphabetic; default value: the base name of the job script or
+
STDIN.
+
</tooltip>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Join_Path" name="Join_Path" type="boolean">
+
<description>Merge stdout and stderr into stdout.</description>
+
<tooltip>Format: boolean, values accepted are "True", "TRUE", "true", "Y", "y", "1", "False", "FALSE", "false", "N", "n", "0";
+
default value: false.
+
</tooltip>
+
<default>false</default>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Keep_Files" name="Keep_Files" type="choice">
+
<description>Retain these streams on the execution host upon job termination.</description>
+
<tooltip>Format: "o", "e", "oe" or "eo"; default value: no keep, return files to submission host.</tooltip>
+
  <choice>,o,e,oe,eo</choice>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Mail_Points" name="Mail_Points" type="choice">
+
<description>Identifies at which state changes the server will send mail about the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Mail_Users" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Output_Path" name="Output_Path" type="string">
+
<description>The final path name for the file containing the job's standard output stream.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Priority" name="Priority" type="string">
+
<description>The job scheduling priority assigned by the user.</description>
+
<tooltip>Format: "[+|-]nnnnn"; default value: undefined.</tooltip>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Rerunnable" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.arch" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.cput" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.file" name="Resource_List.file" type="string">
+
<description>The largest size of any single file that may be created by the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.host" name="Resource_List.host" type="string">
+
<description>Name of host on which job should be run.</description>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.mem" name="Resource_List.mem" type="string">
+
<description>Maximum amount of memory used by all concurrent processes in the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.nice" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.nodes" name="Resource_List.nodes" basic="true" type="string">
+
<description>Number and/or type of nodes to be reserved for exclusive use by the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.ompthreads" name="Resource_List.ompthreads" type="integer" min="1">
+
<description>Number of threads per processor for Open MP jobs.</description>
+
<default>1</default>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.pcput" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.pmem" name="Resource_List.pmem" type="string">
+
<description>Maximum amount of physical memory (workingset) used by any single process of the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.pvmem" name="Resource_List.pvmem" type="string">
+
<description>Maximum amount of virtual memory used by any single process in the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.vmem" name="Resource_List.vmem" type="string">
+
<description>Maximum amount of virtual memory used by all concurrent processes in the job.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Resource_List.walltime" name="Resource_List.walltime" basic="true" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Shell_Path_List" name="Shell_Path_List" type="string">
+
<description>A set of absolute paths of the program to process the job's script file.</description>
+
<tooltip>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_stagein" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_stageout" 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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_User_List" 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>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>
+
</job-attribute>
+
<job-attribute id="PBSJOB_Variable_List" name="Variable_List" type="string">
+
<description>This is the list of environment variables passed with the Queue Job batch request.</description>
+
</job-attribute>
+
</attribute-definitions>
+
<launch-tab advancedModeEnabled="true">
+
<tab-controller>
+
<title>Standard</title>
+
<group>
+
<grid-layout numColumns="2"/>
+
<title>Script Configuration</title>
+
<widget type="selectAttributes">
+
<tooltip>Choose the attributes to display in the Detailed Tab.</tooltip>
+
</widget>
+
<widget type="showScript" readOnly="true">
+
<tooltip>Show the batch script as it would currently be submitted.</tooltip>
+
</widget>
+
</group>
+
<tab-folder>
+
<title>Job Settings</title>
+
<tab-item>
+
<title>Basic</title>
+
<group>
+
<grid-layout numColumns="3"/>
+
<!-- row 1 -->
+
<widget type="text">
+
<label>Job Name: </label>
+
<tooltip>${rm:Job_Name#tooltip}</tooltip>
+
<content>
+
<arglist>
+
<arg>${rm:Job_Name#value}</arg>
+
</arglist>
+
</content>
+
<saveValueTo>Job_Name</saveValueTo>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>${rm:Job_Name#description}</arg>
+
</arglist>
+
</content>
+
</widget>
+
<!-- row 2 -->
+
<widget type="combo" readOnly="true">
+
<label>Queue: </label>
+
<tooltip>${rm:destination#tooltip}</tooltip>
+
<content>
+
<arglist>
+
<arg>${rm:available_queues}</arg>
+
</arglist>
+
</content>
+
<saveValueTo>destination</saveValueTo>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>${rm:destination#description}</arg>
+
</arglist>
+
</content>
+
</widget>
+
<!-- row 3 -->
+
<widget type="text">
+
<label>Nodes: </label>
+
<tooltip>${rm:Resource_List.nodes#tooltip}</tooltip>
+
<content>
+
<arglist>
+
<arg>${rm:Resource_List.nodes#value}</arg>
+
</arglist>
+
</content>
+
<saveValueTo>Resource_List.nodes</saveValueTo>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>${rm:Resource_List.nodes#description}</arg>
+
</arglist>
+
</content>
+
</widget>
+
<!-- row 4 -->
+
<widget type="text">
+
<label>Wallclock Time</label>
+
<tooltip>${rm:Resource_List.walltime#tooltip}</tooltip>
+
<content>
+
<arglist>
+
<arg>${rm:Resource_List.walltime#value}</arg>
+
</arglist>
+
</content>
+
<saveValueTo>Resource_List.walltime</saveValueTo>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>${rm:Resource_List.walltime#description}</arg>
+
</arglist>
+
</content>
+
</widget>
+
<!-- row 5 -->
+
<widget type="combo" readOnly="true">
+
<label>MPI Command: </label>
+
<content>
+
<arglist>
+
<arg>mpiCommand</arg>
+
</arglist>
+
</content>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>MPI executable to use</arg>
+
</arglist>
+
</content>
+
</widget>
+
<!-- row 6 -->
+
<widget type="spinner" readOnly="true">
+
<label>MPI Number of Cores: </label>
+
<content>
+
<arglist>
+
<arg>mpiCores</arg>
+
</arglist>
+
</content>
+
</widget>
+
<widget type="label">
+
<content>
+
<arglist>
+
<arg>The number following "-np" on the command line</arg>
+
</arglist>
+
</content>
+
</widget>
+
</group>
+
</tab-item>
+
<tab-item>
+
<title>Detailed</title>
+
<group dynamic="true" scrollable="true">
+
<grid-layout numColumns="3"/>
+
<!-- iterates through all registered attributes, one to a row -->
+
<all-attributes>
+
<include sort="true" headers="true" name="true" tooltip="true" description="true"/>
+
</all-attributes>
+
</group>
+
</tab-item>
+
</tab-folder>
+
</tab-controller>
+
</launch-tab>
+
</control>
+
<monitor>
+
</monitor>
+
</resource-manager-data>
+
</source>
+
 
+
== PBS RM XML == 
+
'''This is a working document in progress, just as the XSD above'''
+
'''Revision 1 25/01/2011'''
+
'''Revision 2 09/02/2011'''
+
'''Revision 3 22/02/2011:'''  note that the standard properties from runtime need not be specified
+
  
 
<source lang="xml">
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
<resource-manager-data name="rm-pbs-torque_2.3.7">
+
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <site>
+
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
      <control-connection>ssh://abe.ncsa.uiuc.edu/usr/local/bin/qsub</control-connection>
+
<control-data>
  </site>
+
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
<control>
+
to the known property "available-queues" -->
<managed-files>
+
<start-up-command name="test01ParseQstat">
<file-staging-location>~/.eclipsesettings</file-staging-location>
+
<arg/>
<managed-file name="pbs_script" uniqueIdSuffix="true" deleteAfterUse="true">
+
<stdout-parser delim="\n">
<contents>${rm:script}</contents>
+
<target ref="queues">
</managed-file>
+
<match>
</managed-files>
+
<expression>([\w\d]+)</expression>
<run-commands>
+
<add field="value">
<run-batch>
+
<entry valueGroup="1"/>
<command-ref>submit_script</command-ref>
+
</add>
</run-batch>
+
</match>
</run-commands>
+
</target>
<cancel-job>
+
</stdout-parser>
<command-ref>cancel_job</command-ref>
+
</start-up-command>
</cancel-job>
+
<!-- EXAMPLE 2: output is to be searched for its final line which should
<commands>
+
contain a job id of the form "[digits].[chars]" -->
<command name="submit_script">
+
<start-up-command name="test02JobId" waitForId="true">
<arglist>
+
<arg/>
<arg>qsub</arg>
+
<stdout-parser delim="\n" all="true" save="1">
<arg>${rm:pbs_script}</arg>
+
<target ref="@jobId">
</arglist>
+
<match>
<parser-ref>jobIdParser</parser-ref>
+
<expression>([\d]+)([.])(.+)[\s]+.*</expression>
</command>
+
<append field="name">
<command name="cancel_job">
+
<entry valueGroup="1"/>
<arglist>
+
<entry valueGroup="2"/>
<arg>qdel</arg>
+
<entry valueGroup="3"/>
<arg>${rm:jobId}</arg>
+
</append>
</arglist>
+
<set field="default">
</command>
+
<entry valueGroup="1"/>
</commands>
+
</set>
<parsers>
+
<set field="value">
<stream-parser name="jobIdParser" stderr="false">
+
<entry value="SUBMITTED"/>
<parse-lines>n-1</parse-lines>
+
</set>
<token delim="[.]" return="0"/>
+
</match>
<put name="jobId" index="0"/>
+
<match>
</stream-parser>
+
<expression>([\d]+)[.].+</expression>
</parsers>
+
<set field="name">
<script shell="#!/bin/bash">
+
<entry valueGroup="0"/>
<directive-definitions>
+
</set>
<directive-definition valueFrom="PBSJOB_Account_Name"># @ PBS -A </directive-definition>
+
<set field="default">
<directive-definition valueFrom="PBSJOB_Checkpoint"># @ PBS -c </directive-definition>
+
<entry valueGroup="1"/>
<directive-definition valueFrom="PBSJOB_depend"># @ PBS -W depend=</directive-definition>
+
</set>
<directive-definition valueFrom="PBSJOB_destination"># @ PBS -q </directive-definition>
+
<set field="value">
<directive-definition valueFrom="PBSJOB_directive"># @ PBS -C </directive-definition>
+
<entry value="SUBMITTED"/>
<directive-definition valueFrom="PBSJOB_Error_Path"># @ PBS -e </directive-definition>
+
</set>
<directive-definition valueFrom="PBSJOB_export_all"># @ PBS -V </directive-definition>
+
</match>
<directive-definition valueFrom="PBSJOB_group_list"># @ PBS -W group_list=</directive-definition>
+
</target>
<directive-definition valueFrom="PBSJOB_Hold_Types"># @ PBS -h </directive-definition>
+
<target ref="@jobId">
<directive-definition valueFrom="PBSJOB_Job_Name"># @ PBS -N </directive-definition>
+
<match>
<directive-definition valueFrom="PBSJOB_Join_Path"># @ PBS -j </directive-definition>
+
<expression flags="DOTALL">.*Job not submitted.*</expression>
<directive-definition valueFrom="PBSJOB_Keep_Files"># @ PBS -k </directive-definition>
+
<set field="value">
<directive-definition valueFrom="PBSJOB_Mail_Points"># @ PBS -m </directive-definition>
+
<entry value="FAILED"/>
<directive-definition valueFrom="PBSJOB_Mail_Users"># @ PBS -M </directive-definition>
+
</set>
<directive-definition valueFrom="PBSJOB_Output_Path"># @ PBS -o </directive-definition>
+
</match>
<directive-definition valueFrom="PBSJOB_Priority"># @ PBS -p </directive-definition>
+
</target>
<directive-definition valueFrom="PBSJOB_Rerunnable"># @ PBS -r </directive-definition>
+
</stdout-parser>
<directive-definition valueFrom="PBSJOB_Resource_List.arch"># @ PBS -l arch= </directive-definition>
+
<stderr-parser delim="\n">
<directive-definition valueFrom="PBSJOB_Resource_List.cput"># @ PBS -l cput= </directive-definition>
+
<target ref="@jobId">
<directive-definition valueFrom="PBSJOB_Resource_List.file"># @ PBS -l file= </directive-definition>
+
<match>
<directive-definition valueFrom="PBSJOB_Resource_List.host"># @ PBS -l host= </directive-definition>
+
<expression>.*Job not submitted.*</expression>
<directive-definition valueFrom="PBSJOB_Resource_List.mem"># @ PBS -l mem= </directive-definition>
+
<throw message="Job Submit Failed"/>
<directive-definition valueFrom="Resource_List.nice"># @ PBS -l nice= </directive-definition>
+
</match>
<directive-definition valueFrom="Resource_List.nodes"># @ PBS -l nodes= </directive-definition>
+
</target>
<directive-definition valueFrom="Resource_List.ompthreads"># @ PBS -l ompthreads= </directive-definition>
+
</stderr-parser>
<directive-definition valueFrom="PBSJOB_Resource_List.pcput"># @ PBS -l pcput= </directive-definition>
+
</start-up-command>
<directive-definition valueFrom="PBSJOB_Resource_List.pmem"># @ PBS -l pmem= </directive-definition>
+
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
<directive-definition valueFrom="PBSJOB_Resource_List.pvmem"># @ PBS -l pvmem= </directive-definition>
+
of attribute definitions, but each line bearing a distinct
<directive-definition valueFrom="PBSJOB_Resource_List.vmem"># @ PBS -l vmem= </directive-definition>
+
id (e.g., openMPI attribute discovery) -->
<directive-definition valueFrom="PBSJOB_Resource_List.walltime"># @ PBS -l walltime= </directive-definition>
+
<start-up-command name="test03OpenMPI">
<directive-definition valueFrom="PBSJOB_Shell_Path_List"># @ PBS -S </directive-definition>
+
<arg/>
<directive-definition valueFrom="PBSJOB_stagein"># @ PBS -W stagein= </directive-definition>
+
<stdout-parser delim="\n">
<directive-definition valueFrom="PBSJOB_stageout"># @ PBS -W stageout= </directive-definition>
+
<target type="attribute">
<directive-definition valueFrom="PBSJOB_User_List"># @ PBS -u </directive-definition>
+
<match>
<directive-definition valueFrom="PBSJOB_Variable_List"># @ PBS -v </directive-definition>
+
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
</directive-definitions>
+
<set field="name">
<pre-execute-commands>
+
<entry valueGroup="1"/>
<arglist>
+
</set>
<arg>cd</arg>
+
<set field="visible">
<arg>${rm:directory}</arg>
+
<entry value="true"/>
</arglist>
+
</set>
</pre-execute-commands>
+
<set field="value">
<execute-command>
+
<entry valueGroup="2"/>
<arglist>
+
</set>
<arg>${rm:mpiCommand}</arg>
+
</match>
<arg>${rm:mpiArgs}</arg>
+
<match>
<arg>${rm:executablePath}</arg>
+
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
<arg>${rm:progArgs}</arg>
+
<set field="status">
</arglist>
+
<entry valueGroup="2"/>
</execute-command>
+
</set>
<post-execute-commands>
+
</match>
<arglist>
+
<match>
<arg>touch</arg>
+
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
<arg>DONE</arg>
+
<set field="tooltip">
</arglist>
+
<entry valueGroup="2"/>
</post-execute-commands>
+
</set>
</script>
+
</match>
<attribute-definitions>
+
<test op="EQ">
<job-attribute id="mpiCommand" name="mpiCommand" basic="true" type="choice">
+
<value>#status</value>
<description>Which mpi command to use.</description>
+
<value>read-only</value>
<choice>,mpiexec,mpirun</choice>
+
<set field="readOnly">
</job-attribute>
+
<entry value="true"/>
<job-attribute id="mpiCores" name="mpiCores" min="1" basic="true" type="integer">
+
</set>
<description>the '-np' value</description>
+
<else>
</job-attribute>
+
<set field="readOnly">
<job-attribute id="mpiArgs" name="mpiArgs" basic="true" type="string">
+
<entry value="false"/>
<description>Which mpi options to use.</description>
+
</set>
<default>-machinefile $PBS_NODEFILE -np ${rm:mpiCores}</default>
+
</else>
</job-attribute>
+
</test>
<job-attribute id="PBSJOB_Account_Name" name="Account_Name" basic="true" type="string">
+
</target>
<description>Account to which to charge this job.</description>
+
<target type="attribute">
<tooltip>Format: string</tooltip>
+
<match>
</job-attribute>
+
<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
<job-attribute id="PBSJOB_Checkpoint" name="Checkpoint" type="choice">
+
<set field="name">
<description>Determines when checkpointing (if supported) will be performed by PBS on behalf of the job.</description>
+
<entry value="ompi_major_version"/>
<tooltip>Format: the strings "n" (no checkpointing), "s" (to be performed only when the server executing the job is shutdown), "c"s
+
</set>
(to be performed at the default minimum time for thes servers executing the job), "c=mmmm" (to be performed at an intervals ofs
+
<set field="value">
minutess whichs is the integer number of minutes of CPUs time used bys the job; values must be greater than zero); defaults value:
+
<entry valueGroup="1"/>
"u", whichs iss unspecified.
+
</set>
</tooltip>
+
<set field="visible">
<choice>,u,n,s,c,c=????</choice>
+
<entry value="true"/>
            <default>u</default>
+
</set>
</job-attribute>
+
<set field="readOnly">
<job-attribute id="PBSJOB_depend" name="depend" type="string">
+
<entry value="true"/>
<description>The type of inter-job dependencies specified by the job owner.</description>
+
</set>
<tooltip>Format: "type:jobid[,jobid...]"; default value: no dependencies.</tooltip>
+
<set field="name" forceNewObject="true">
</job-attribute>
+
<entry value="ompi_minor_version"/>
<job-attribute id="PBSJOB_destination" name="destination" type="string" basic="true">
+
</set>
<description>Designation of the queue to which to submit the job.</description>
+
<set field="value">
<tooltip>Format: queue[@server].</tooltip>
+
<entry valueGroup="2"/>
</job-attribute>
+
</set>
<job-attribute id="PBSJOB_directive" name="directive" type="string">
+
<set field="visible">
<description>Defines the prefix that declares a directive to the qsub command within the script file.</description>
+
<entry value="true"/>
<tooltip>See the paragraph on script directives in the Extended Description section. If the option is presented with a
+
</set>
directive_prefix argument that is the null string, qsub will not scan the script file for directives.
+
<set field="readOnly">
</tooltip>
+
<entry value="true"/>
</job-attribute>
+
</set>
<job-attribute id="PBSJOB_Error_Path" name="Error_Path" type="string">
+
</match>
<description>The final path name for the file containing the job's standard error stream.</description>
+
<test op="AND">
<tooltip>Format: "[hostname:]pathname". If the option is not specified, the default file name for the standard error stream will be
+
<test op="EQ">
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
+
<value>#name</value>
is the job number assigned when the job is submitted; default value: (job_name).e(job_number).
+
<value>ompi_minor_version</value>
</tooltip>
+
</test>
</job-attribute>
+
<test op="LT">
<job-attribute id="PBSJOB_export_all" name="export_all" basic="true" type="boolean">
+
<value>#value</value>
<description>Declares that all environment variables in the qsub command's environment are to be exported to the batch job.</description>
+
<value>7</value>
<default>true</default>
+
</test>
</job-attribute>
+
<throw message="Only supports Open MPI 1.7 and later"/>
<job-attribute id="PBSJOB_group_list" name="group_list" type="string">
+
</test>
<description>A list of group_names@hosts which determines the group under which the job is run on a given host.</description>
+
</target>
<tooltip>Format: group_name[@host][,group_name[@host]...]. When a job is to be placed into execution, the server will select a
+
<target type="attribute">
group
+
<match>
name according to the following ordered set of rules: 1) Select the group name from the list for which the associated host
+
<expression>(.*):([^:]*)</expression>
name
+
<set field="name">
matches the name of the execution host; 2) Select the group name which has no associated host name, the wildcard name; 3) Use
+
<entry valueGroup="1"/>
the
+
</set>
login group for the username under which the job will be run.
+
<set field="value">
</tooltip>
+
<entry valueGroup="2"/>
</job-attribute>
+
</set>
<job-attribute id="PBSJOB_Hold_Types" name="Hold_Types" type="choice">
+
<set field="visible">
<description>The set of holds currently applied to the job.</description>
+
<entry value="false"/>
<tooltip>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
+
</set>
state takes precedence over the wait state. Format: string made up of the letters 'u', 's', 'o'; default value: no hold.
+
<set field="readOnly">
</tooltip>
+
<entry value="true"/>
<choice>,u,s,o</choice>
+
</set>
</job-attribute>
+
</match>
<job-attribute id="PBSJOB_Job_Name" name="Job_Name" type="string" basic="true">
+
</target>
<description>The name assigned to the job by the qsub or qalter command.</description>
+
</stdout-parser>
<tooltip>Format: string up to 15 characters, first character must be alphabetic; default value: the base name of the job script or
+
</start-up-command>
STDIN.
+
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
</tooltip>
+
by caption; use of moveToTop to promote the target to the top of the list
</job-attribute>
+
when the caption appears -->
<job-attribute id="PBSJOB_Join_Path" name="Join_Path" type="boolean">
+
<start-up-command name="test04ImplicitWithTags">
<description>Merge stdout and stderr into stdout.</description>
+
<arg/>
<tooltip>Format: boolean, values accepted are "True", "TRUE", "true", "Y", "y", "1", "False", "FALSE", "false", "N", "n", "0";
+
<stdout-parser delim="\n">
default value: false.
+
<target type="property">
</tooltip>
+
<match moveToTop="true">
<default>false</default>
+
<expression>PROPERTY</expression>
</job-attribute>
+
</match>
<job-attribute id="PBSJOB_Keep_Files" name="Keep_Files" type="choice">
+
<match>
<description>Retain these streams on the execution host upon job termination.</description>
+
<expression>name:(.*)</expression>
<tooltip>Format: "o", "e", "oe" or "eo"; default value: no keep, return files to submission host.</tooltip>
+
<set field="name">
  <choice>,o,e,oe,eo</choice>
+
<entry valueGroup="1"/>
</job-attribute>
+
</set>
<job-attribute id="PBSJOB_Mail_Points" name="Mail_Points" type="choice">
+
</match>
<description>Identifies at which state changes the server will send mail about the job.</description>
+
<match>
<tooltip>Format: string made up of the letters 'a' for abort, 'b' for beginning, and default value: 'a', send on job abort.
+
<expression>value:(.*)</expression>
</tooltip>
+
<set field="value">
<choice>,a,b</choice>
+
<entry valueGroup="1"/>
            <default>a</default>
+
</set>
</job-attribute>
+
</match>
<job-attribute id="PBSJOB_Mail_Users" name="Mail_Users" type="string">
+
</target>
<description>The set of users to whom mail may be sent when the job makes certain state changes.</description>
+
<target type="attribute">
<tooltip>Format: "user@host[,user@host]"; default value: job owner only.</tooltip>
+
<match moveToTop="true">
</job-attribute>
+
<expression>ATTRIBUTE</expression>
<job-attribute id="PBSJOB_Output_Path" name="Output_Path" type="string">
+
</match>
<description>The final path name for the file containing the job's standard output stream.</description>
+
<match>
<tooltip>Format: "[hostname:]pathname". If the option is not specified, the default file name for the standard error stream will be
+
<expression>name:(.*)</expression>
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
+
<set field="name">
is the job number assigned when the job is submitted; default value: (job_name).o(job_number).
+
<entry valueGroup="1"/>
</tooltip>
+
</set>
</job-attribute>
+
</match>
<job-attribute id="PBSJOB_Priority" name="Priority" type="string">
+
<match>
<description>The job scheduling priority assigned by the user.</description>
+
<expression>value:(.*)</expression>
<tooltip>Format: "[+|-]nnnnn"; default value: undefined.</tooltip>
+
<set field="value">
</job-attribute>
+
<entry valueGroup="1"/>
<job-attribute id="PBSJOB_Rerunnable" name="Rerunnable" type="choice">
+
</set>
<description>The rerunnable flag assigned by the user.</description>
+
</match>
<tooltip>Format: "y" or "n", see Join_Path; default value: y, job is rerunable.</tooltip>
+
</target>
            <choice>,n,y</choice>
+
</stdout-parser>
            <default>y</default>
+
</start-up-command>
</job-attribute>
+
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
<job-attribute id="PBSJOB_Resource_List.arch" name="Resource_List.arch" type="string">
+
<start-up-command name="test05ImplicitOrdering">
<description>Specifies the administrator defined system architecture requried.</description>
+
<arg/>
<tooltip>This defaults to whatever the PBS_MACH string is set to in "local.mk". Units: string.</tooltip>
+
<stdout-parser delim="\n">
</job-attribute>
+
<target type="attribute" matchAll="true">
<job-attribute id="PBSJOB_Resource_List.cput" name="Resource_List.cput" type="string">
+
<match>
<description>Maximum amount of CPU time used by all processes in the job.</description>
+
<expression>.+</expression>
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
<set field="name">
</job-attribute>
+
<entry valueGroup="0"/>
<job-attribute id="PBSJOB_Resource_List.file" name="Resource_List.file" type="string">
+
</set>
<description>The largest size of any single file that may be created by the job.</description>
+
</match>
<tooltip>Format: integer[suffix]; the suffix is a multiplier in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
<match>
(kilo), mb/mw (mega), gb/bw (giga).
+
<expression>.*</expression>
</tooltip>
+
<set field="type">
</job-attribute>
+
<entry valueGroup="0"/>
<job-attribute id="PBSJOB_Resource_List.host" name="Resource_List.host" type="string">
+
</set>
<description>Name of host on which job should be run.</description>
+
</match>
</job-attribute>
+
<match>
<job-attribute id="PBSJOB_Resource_List.mem" name="Resource_List.mem" type="string">
+
<expression>.*</expression>
<description>Maximum amount of memory used by all concurrent processes in the job.</description>
+
<set field="description">
<tooltip>Format: integer[suffix]; the suffix is a multiplier in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
<entry valueGroup="0"/>
(kilo), mb/mw (mega), gb/bw (giga).
+
</set>
</tooltip>
+
</match>
</job-attribute>
+
<match>
<job-attribute id="PBSJOB_Resource_List.nice" name="Resource_List.nice" type="integer" min="0" max="10">
+
<expression>.*</expression>
<description>The nice value under which the job is to be run.</description>
+
<set field="tooltip">
<tooltip>0 to 10.</tooltip>
+
<entry valueGroup="0"/>
<default>0</default>
+
</set>
</job-attribute>
+
</match>
<job-attribute id="PBSJOB_Resource_List.nodes" name="Resource_List.nodes" basic="true" type="string">
+
<match>
<description>Number and/or type of nodes to be reserved for exclusive use by the job.</description>
+
<expression>.*</expression>
<tooltip>The value is one or more node_specs joined with the '+' character, "node_spec[+node_spec...]. Each node_spec is a number
+
<set field="value">
of
+
<entry valueGroup="0"/>
nodes required of the type declared in the node_spec and a name or one or more properity or properities desired for the nodes.
+
</set>
The
+
</match>
number, the name, and each properity in the node_spec are separated by a colon ':'. If no number is specified, one (1) is
+
</target>
assumed.
+
</stdout-parser>
Units: string. The name of a node is its hostname. The properties of nodes are: ppn=# requested; defaults to 1; or an
+
</start-up-command>
arbitrary
+
<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
string defined by system administrator. Example: To ask for 2 processors on each of two blue nodes and three processors
+
<start-up-command name="test06ImplicitWithTagsDotall">
on one red
+
<arg/>
node: -l nodes=2:blue:ppn=2+red:ppn=3.
+
<stdout-parser maxMatchLen="32" applyToAll="true">
</tooltip>
+
<target type="property">
<default>1</default>
+
<match>
</job-attribute>
+
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<job-attribute id="PBSJOB_Resource_List.ompthreads" name="Resource_List.ompthreads" type="integer" min="1">
+
<set field="name">
<description>Number of threads per processor for Open MP jobs.</description>
+
<entry valueGroup="1"/>
<default>1</default>
+
</set>
</job-attribute>
+
<set field="value">
<job-attribute id="PBSJOB_Resource_List.pcput" name="Resource_List.pcput" type="string">
+
<entry valueGroup="2"/>
<description>Maximum amount of CPU time used by any single process in the job.</description>
+
</set>
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</match>
</job-attribute>
+
</target>
<job-attribute id="PBSJOB_Resource_List.pmem" name="Resource_List.pmem" type="string">
+
<target type="property">
<description>Maximum amount of physical memory (workingset) used by any single process of the job.</description>
+
<match>
<tooltip>Format: integer[suffix]; the suffix is a multiplier in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
(kilo), mb/mw (mega), gb/bw (giga).
+
<set field="name">
</tooltip>
+
<entry valueGroup="2"/>
</job-attribute>
+
</set>
<job-attribute id="PBSJOB_Resource_List.pvmem" name="Resource_List.pvmem" type="string">
+
<set field="value">
<description>Maximum amount of virtual memory used by any single process in the job.</description>
+
<entry valueGroup="1"/>
<tooltip>Format: integer[suffix]; the suffix is a multiplier in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
</set>
(kilo), mb/mw (mega), gb/bw (giga).
+
</match>
</tooltip>
+
</target>
</job-attribute>
+
<target type="attribute">
<job-attribute id="PBSJOB_Resource_List.vmem" name="Resource_List.vmem" type="string">
+
<match>
<description>Maximum amount of virtual memory used by all concurrent processes in the job.</description>
+
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
<tooltip>Format: integer[suffix]; the suffix is a multiplier in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
<set field="name">
(kilo), mb/mw (mega), gb/bw (giga).
+
<entry valueGroup="1"/>
</tooltip>
+
</set>
</job-attribute>
+
<set field="value">
<job-attribute id="PBSJOB_Resource_List.walltime" name="Resource_List.walltime" basic="true" type="string">
+
<entry valueGroup="2"/>
<description>Maximum amount of real time during which the job can be in the running state.</description>
+
</set>
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</match>
  <default>00:30:00</default>
+
</target>
</job-attribute>
+
<target type="attribute">
<job-attribute id="PBSJOB_Shell_Path_List" name="Shell_Path_List" type="string">
+
<match>
<description>A set of absolute paths of the program to process the job's script file.</description>
+
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
<tooltip>Format: path[@host][,path[@host]...]. If this is null, then the user's login shell on the host of execution will be used.
+
<set field="name">
Default value: null, login shell.
+
<entry valueGroup="2"/>
</tooltip>
+
</set>
</job-attribute>
+
<set field="value">
<job-attribute id="PBSJOB_stagein" name="stagein" type="string">
+
<entry valueGroup="1"/>
<description>The list of files to be staged in prior to job execution.</description>
+
</set>
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
</match>
</job-attribute>
+
</target>
<job-attribute id="PBSJOB_stageout" name="stageout" type="string">
+
</stdout-parser>
<description>The list of files to be staged out after job execution.</description>
+
</start-up-command>
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
</job-attribute>
+
<start-up-command name="test07PropertyDefsSingleLine">
<job-attribute id="PBSJOB_User_List" name="User_List" type="string">
+
<arg/>
<description>The list of user@hosts which determines the user name under which the job is run on a given host.</description>
+
<stdout-parser delim="\n">
<tooltip>When a job is to be placed into execution, the server will select a user name from the list according to the following
+
<target type="property">
ordered set of rules: 1) Select the user name from the list for which the associated host name matches the name of the execution
+
<match>
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.
+
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
Default
+
<set field="name">
value: job owner name.
+
<entry valueGroup="1"/>
</tooltip>
+
</set>
</job-attribute>
+
<set field="value">
<job-attribute id="PBSJOB_Variable_List" name="Variable_List" type="string">
+
<entry valueGroup="2"/>
<description>This is the list of environment variables passed with the Queue Job batch request.</description>
+
</set>
</job-attribute>
+
</match>
</attribute-definitions>
+
</target>
<launch-tab advancedModeEnabled="true">
+
</stdout-parser>
<tab-controller>
+
</start-up-command>
<title>Standard</title>
+
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
<group>
+
not exceed 32 chars -->
<grid-layout numColumns="2"/>
+
<start-up-command name="test08JobStates">
<title>Script Configuration</title>
+
<arg/>
<widget type="selectAttributes">
+
<stdout-parser maxMatchLen="32">
<tooltip>Choose the attributes to display in the Detailed Tab.</tooltip>
+
<target ref="jobStates">
</widget>
+
<match>
<widget type="showScript" readOnly="true">
+
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<tooltip>Show the batch script as it would currently be submitted.</tooltip>
+
<put field="value">
</widget>
+
<entry keyGroup="1" valueGroup="2"/>
</group>
+
</put>
<tab-folder>
+
</match>
<title>Job Settings</title>
+
</target>
<tab-item>
+
</stdout-parser>
<title>Basic</title>
+
</start-up-command>
<group>
+
<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
<grid-layout numColumns="3"/>
+
<start-up-command name="test09Staggered">
<!-- row 1 -->
+
<arg/>
<widget type="text">
+
<stdout-parser delim="\n">
<label>Job Name: </label>
+
<target type="property">
<tooltip>${rm:Job_Name#tooltip}</tooltip>
+
<match>
<content>
+
<expression>name:(.*)</expression>
<arglist>
+
<set field="name">
<arg>${rm:Job_Name#value}</arg>
+
<entry valueGroup="1"/>
</arglist>
+
</set>
</content>
+
</match>
<saveValueTo>Job_Name</saveValueTo>
+
<match>
</widget>
+
<expression>value:(.*)</expression>
<widget type="label">
+
<set field="value">
<content>
+
<entry valueGroup="1"/>
<arglist>
+
</set>
<arg>${rm:Job_Name#description}</arg>
+
</match>
</arglist>
+
</target>
</content>
+
</stdout-parser>
</widget>
+
</start-up-command>
<!-- row 2 -->
+
<!-- EXAMPLE 10: forced merge -->
<widget type="combo" readOnly="true">
+
<start-up-command name="test10Merged">
<label>Queue: </label>
+
<arg/>
<tooltip>${rm:destination#tooltip}</tooltip>
+
<stdout-parser delim="\n">
<content>
+
<target type="property">
<arglist>
+
<match>
<arg>${rm:available_queues}</arg>
+
<expression>name:(.+);value:(.+)</expression>
</arglist>
+
<set field="name">
</content>
+
<entry valueGroup="1"/>
<saveValueTo>destination</saveValueTo>
+
</set>
</widget>
+
<set field="value">
<widget type="label">
+
<entry valueGroup="2"/>
<content>
+
</set>
<arglist>
+
</match>
<arg>${rm:destination#description}</arg>
+
<match>
</arglist>
+
<expression>name:(.+);default:(.+)</expression>
</content>
+
<set field="name">
</widget>
+
<entry valueGroup="1"/>
<!-- row 3 -->
+
</set>
<widget type="text">
+
<set field="default">
<label>Nodes: </label>
+
<entry valueGroup="2"/>
<tooltip>${rm:Resource_List.nodes#tooltip}</tooltip>
+
</set>
<content>
+
</match>
<arglist>
+
</target>
<arg>${rm:Resource_List.nodes#value}</arg>
+
</stdout-parser>
</arglist>
+
</start-up-command>
</content>
+
<!-- EXAMPLE 11: exit-on -->
<saveValueTo>Resource_List.nodes</saveValueTo>
+
<start-up-command name="test11ExitOn">
</widget>
+
<arg/>
<widget type="label">
+
<stdout-parser maxMatchLen="32">
<content>
+
<target ref="jobStates">
<arglist>
+
<match>
<arg>${rm:Resource_List.nodes#description}</arg>
+
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
</arglist>
+
<put field="value">
</content>
+
<entry keyGroup="1" valueGroup="2"/>
</widget>
+
</put>
<!-- row 4 -->
+
</match>
<widget type="text">
+
</target>
<label>Wallclock Time</label>
+
<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
<tooltip>${rm:Resource_List.walltime#tooltip}</tooltip>
+
</stdout-parser>
<content>
+
</start-up-command>
<arglist>
+
<!-- EXAMPLE 12: exit-after -->
<arg>${rm:Resource_List.walltime#value}</arg>
+
<start-up-command name="test12ExitAfter">
</arglist>
+
<arg/>
</content>
+
<stdout-parser maxMatchLen="32">
<saveValueTo>Resource_List.walltime</saveValueTo>
+
<target ref="jobStates">
</widget>
+
<match>
<widget type="label">
+
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
<content>
+
<put field="value">
<arglist>
+
<entry keyGroup="1" valueGroup="2"/>
<arg>${rm:Resource_List.walltime#description}</arg>
+
</put>
</arglist>
+
</match>
</content>
+
</target>
</widget>
+
<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
<!-- row 5 -->
+
</stdout-parser>
<widget type="combo" readOnly="true">
+
</start-up-command>
<label>MPI Command: </label>
+
<submit-interactive name="empty">
<content>
+
<arg/>
<arglist>
+
</submit-interactive>
<arg>mpiCommand</arg>
+
<!-- EXAMPLE 13: get-status (use of tests) -->
</arglist>
+
<get-job-status name="get-job-status" ignoreExitStatus="true">
</content>
+
<arg>qstat</arg>
</widget>
+
<arg>${ptp_rm:@jobId#name}</arg>
<widget type="label">
+
<stdout-parser delim="\n">
<content>
+
<target ref="@jobId">
<arglist>
+
<match>
<arg>MPI executable to use</arg>
+
<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
</arglist>
+
<set field="value">
</content>
+
<entry valueGroup="1"/>
</widget>
+
</set>
<!-- row 6 -->
+
</match>
<widget type="spinner" readOnly="true">
+
<test op="EQ">
<label>MPI Number of Cores: </label>
+
<value>#value</value>
<content>
+
<value>Q</value>
<arglist>
+
<set field="value">
<arg>mpiCores</arg>
+
<entry value="QUEUED_ACTIVE"/>
</arglist>
+
</set>
</content>
+
</test>
</widget>
+
<test op="EQ">
<widget type="label">
+
<value>#value</value>
<content>
+
<value>R</value>
<arglist>
+
<set field="value">
<arg>The number following "-np" on the command line</arg>
+
<entry value="RUNNING"/>
</arglist>
+
</set>
</content>
+
</test>
</widget>
+
<test op="EQ">
</group>
+
<value>#value</value>
</tab-item>
+
<value>S</value>
<tab-item>
+
<set field="value">
<title>Detailed</title>
+
<entry value="SUSPENDED"/>
<group dynamic="true" scrollable="true">
+
</set>
<grid-layout numColumns="3"/>
+
</test>
<!-- iterates through all registered attributes, one to a row -->
+
<test op="EQ">
<all-attributes>
+
<value>#value</value>
<include sort="true" headers="true" name="true" tooltip="true" description="true"/>
+
<value>H</value>
</all-attributes>
+
<set field="value">
</group>
+
<entry value="SYSTEM_ON_HOLD"/>
</tab-item>
+
</set>
</tab-folder>
+
</test>
</tab-controller>
+
<else>
</launch-tab>
+
<set field="value">
</control>
+
<entry value="COMPLETED"/>
<monitor>
+
</set>
</monitor>
+
</else>
</resource-manager-data>
+
</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>
 
</source>
 
</source>

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