Skip to main content

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

Jump to: navigation, search

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

< PTP‎ | designs
(Resource Manager XSD)
(Tokenizer Examples)
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Resource Manager XSD ==  
+
= JAXB Configurable Resource Manager XML =
'''''Current version (05/19/2011):'''''    -alr
+
 
 +
== XSD ==
  
 
<source lang="xml">
 
<source lang="xml">
Line 17: Line 18:
 
<xs:element name="resource-manager-builder" type="rm:resource-manager-data"/>
 
<xs:element name="resource-manager-builder" type="rm:resource-manager-data"/>
 
<xs:complexType name="resource-manager-data">
 
<xs:complexType name="resource-manager-data">
<xs:annotation>
 
<xs:documentation>
 
It is assumed that the xml instance of the schema will bear a name which sufficiently distinguishes it from others
 
of a similar type; e.g., pbs-torque-v_2.3.7_abe is specific to an installation on the host abe, ll-v_4.0 suits all installations of
 
LoadLeveler version 4, etc.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
 
<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
<xs:element name="control-data" type="rm:control-type"/>
+
<xs:element name="control-data" minOccurs="0" type="rm:control-type"/>
<xs:element name="monitor-data" type="rm:monitor-type"/>
+
<xs:element name="monitor-data" minOccurs="0" type="rm:monitor-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="name" type="xs:string"/>
 
<xs:attribute name="name" type="xs:string"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="site-type">
 
<xs:complexType name="site-type">
<xs:annotation>
 
<xs:documentation>
 
An optional place to set default remote site information. The connections strings are URIs.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
 
<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
Line 43: Line 32:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="control-type">
 
<xs:complexType name="control-type">
<xs:annotation>
 
<xs:documentation>
 
The top-level control elements define the properties and attributes, files to be staged, job script to be generated, commands
 
specific to the resource manager, and the layout of the Launch Tab.
 
The resource manager implementation constructs a variable map
 
serving as the resource manager "environment"; variables are dereferenced in the configuration file via ${ptp_rm:name} or
 
${ptp_rm:name#getterName}; all properties and attributes defined in the configuration are mapped. The following hard-coded variables
 
are also added at runtime:
 
<!-- from runtime configuration information -->
 
control.user.name
 
control.address
 
<!-- from the other Run Configuration tabs -->
 
executablePath
 
progArgs
 
directory
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
 
<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="attribute" minOccurs="0" maxOccurs="unbounded" type="rm:attribute-type"/>
<xs:element name="managed-files" minOccurs="0" type="rm:managed-files-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="script" minOccurs="0" type="rm:script-type"/>
<xs:element name="start-up-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type">
+
<xs:element name="start-up-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
<xs:annotation>
+
<xs:choice minOccurs="0">
<xs:documentation>
+
Arbitrary commands which need to be run on startup.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:choice>
+
<xs:annotation>
+
<xs:documentation>
+
Currently a configuration may have only a batch or an interactive mode. Thus it may have only two submission
+
modes, a run and a debug, for the given type. In the future we may allow all four to coexist in a single configuration.
+
</xs:documentation>
+
</xs:annotation>
+
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="submit-interactive" type="rm:command-type"/>
 
<xs:element name="submit-interactive" type="rm:command-type"/>
Line 88: Line 48:
 
</xs:sequence>
 
</xs:sequence>
 
</xs:choice>
 
</xs:choice>
<xs:element name="get-job-status" type="rm:command-type" minOccurs="0">
+
<xs:element name="get-job-status" type="rm:command-type" minOccurs="0"/>
<xs:annotation>
+
<xs:element name="terminate-job" type="rm:command-type" minOccurs="0"/>
<xs:documentation>
+
A user-initiated (on demand) request to refresh the status information for a submission. Normal (polled) updates
+
are the responsibility of the monitor. The command nevertheless needs to be implemented in most cases, as it will be called
+
internally just after submission.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="terminate-job" type="rm:command-type" minOccurs="0">
+
<xs:annotation>
+
<xs:documentation>
+
NOTE: if the submission type is interactive, this command does not need to be implemented, as the process
+
termination will be handled internally. However, in some cases (such as PBS -I) one may need this command in order to force
+
termination of the interactive terminal job.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="suspend-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="resume-job" type="rm:command-type" minOccurs="0"/>
 
<xs:element name="hold-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="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="shut-down-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
<xs:annotation>
+
<xs:element name="button-action" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
<xs:documentation>
+
Arbitrary commands which need to be run on shutdown.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
 
<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="property-type">
 
<xs:complexType name="property-type">
<xs:annotation>
 
<xs:documentation>
 
A property is any variable necessary for the functioning of the resource manager. Properties often (but not
 
necessarily) are not visible. The value for properties can by any primitive type, or lists or maps of strings. If stdout from a
 
scheduled job is to be delivered to the client, the "stdout" property should be included in the resource manager property set.
 
NOTE: the untyped "value" element on properties is for internal use only; to give a predefined (primitive) value, use the "default"
 
element along with the "type" attribute.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="default" minOccurs="0" type="xs:string"/>
 
<xs:element name="default" minOccurs="0" type="xs:string"/>
 
<xs:element name="value" minOccurs="0"/>
 
<xs:element name="value" minOccurs="0"/>
 +
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="name" type="xs:string"/>
 
<xs:attribute name="name" type="xs:string"/>
 
<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
 
<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
<xs:attribute name="visible" type="xs:boolean" default="true">
+
<xs:attribute name="visible" type="xs:boolean" default="true"/>
<xs:annotation>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
<xs:documentation>
+
<xs:attribute name="translateBooleanAs" type="xs:string"/>
If this is set to false, the property or attribute is marked as being for internal use only, and will not be made
+
available for representation via Launch Tab widgets.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Attribute or property has a predetermined value which the user can inspect but not modify.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="attribute-type">
 
<xs:complexType name="attribute-type">
<xs:annotation>
 
<xs:documentation>
 
An attribute is an externally defined variable, most often associated with the scheduler system itself; the most
 
common attributes are those pertaining to the job dimensions and requested resources. The value for attributes can by any primitive
 
type. NOTE: the untyped "value" element on attributes is for internal use only; to give a predefined (primitive) value, use the
 
"default" element along with the "type" attribute.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="description" type="xs:string">
+
<xs:element name="description" minOccurs="0" type="xs:string"/>
<xs:annotation>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:documentation>
+
<xs:element name="choice" minOccurs="0" type="xs:string"/>
A brief (one sentence) explanation of the attribute.
+
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="tooltip" minOccurs="0" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
A somewhat more detailed explanation of format and usage. This will be displayed as a tooltip in the UI.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="choice" minOccurs="0" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
A predetermined, fixed set of values to choose from; these are comma-delimited and will appear as the items of a
+
combo-box.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="default" minOccurs="0" type="xs:string"/>
 
<xs:element name="default" minOccurs="0" type="xs:string"/>
 
<xs:element name="value" minOccurs="0"/>
 
<xs:element name="value" minOccurs="0"/>
<xs:element name="validator" minOccurs="0" type="rm:validator-type">
+
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
<xs:annotation>
+
<xs:element name="validator" minOccurs="0" type="rm:validator-type"/>
<xs:documentation>
+
The user-entered value is immediately checked against these constraints.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="name" 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="type" type="xs:string" default="java.lang.String"/>
 
<xs:attribute name="visible" type="xs:boolean" default="true"/>
 
<xs:attribute name="visible" type="xs:boolean" default="true"/>
 
<xs:attribute name="status" type="xs:string"/>
 
<xs:attribute name="status" type="xs:string"/>
<xs:attribute name="readOnly" type="xs:boolean" default="false">
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
<xs:annotation>
+
<xs:attribute name="translateBooleanAs" type="xs:string"/>
<xs:documentation>
+
<xs:attribute name="min" type="xs:int"/>
Attribute or property has a predetermined value which the user can inspect but not modify.
+
<xs:attribute name="max" type="xs:int"/>
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="min" type="xs:int">
+
<xs:annotation>
+
<xs:documentation>
+
For integer values, to be displayed as spinner boxes.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="max" type="xs:int">
+
<xs:annotation>
+
<xs:documentation>
+
For integer values, to be displayed as spinner boxes.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="managed-files-type">
 
<xs:complexType name="managed-files-type">
<xs:annotation>
 
<xs:documentation>
 
List of files to be staged in connection with the job submission. NOTE: if the resource manager uses a script, its
 
staging as a file is handled automatically and need not be included among the set of managed files. A reserved property,
 
"managed_file_for_script", should be used to reference this file's path on the target resource.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
<xs:element name="file-staging-location" minOccurs="0" type="xs:string">
+
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
<xs:annotation>
+
<xs:documentation>
+
The default is $USER_HOME/.eclipsesettings on the target resource.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
 
<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="script-type">
 
<xs:complexType name="script-type">
<xs:annotation>
 
<xs:documentation>
 
The script element specifies the contents line by line. Each line can be an arbitrary set of arguments, each of
 
which can be optionally resolved in the environment, and which can be checked to see if the result after resolution should be
 
considered undefined and thus not included in the contents. The insertEnvironmentAfter (line number) indicates where to insert
 
extra environment variable definitions passed in from the Environment Tab, if any.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 +
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
 
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 
</xs:sequence>
 
</xs:sequence>
Line 262: Line 113:
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
 
<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="input" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
<xs:annotation>
+
<xs:documentation>
+
When there is input present, it is directed to the input stream of the command with this name. If the "keepOpen"
+
attribute is true, a check will be made to see if there already exists an open process (which is also alive) corresponding to the
+
name of this command, and use that; otherwise, ut first executes the arguments, then provides the input arguments to it.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="environment" minOccurs="0" maxOccurs="unbounded" type="rm:name-value-pair-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="stdout-parser" minOccurs="0" type="rm:tokenizer-type"/>
Line 283: Line 126:
 
<xs:attribute name="waitForId" 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="ignoreExitStatus" type="xs:boolean" default="false"/>
<xs:attribute name="keepOpen" type="xs:boolean" default="false">
+
<xs:attribute name="keepOpen" type="xs:boolean" default="false"/>
<xs:annotation>
+
<xs:attribute name="flags" type="xs:string"/>
<xs:documentation>
+
Process will be added to table under the name of this command; all such processes will be closed when the
+
resource manager is closed.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="flags" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
An or'd string corresponding to the remote process flags. Currently these include only:
+
NONE
+
ALLOCATE_PTY
+
(allocates pseudo-terminal)
+
FORWARD_X11
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="launch-tab-type">
 
<xs:complexType name="launch-tab-type">
<xs:annotation>
 
<xs:documentation>
 
A recursive description of the UI element associated with the control part, the Launch Tab.
 
As in:
 
org.eclipse.ptp.rm.ui.launch.ExtendableRMLaunchConfigurationDynamicTab, provides a top-level "switch" between controllers. There
 
can be an arbitrary number of top-level tabs or "pages"; the dynamic controllers are configurable; for the import controller, see
 
below. The SWT-related types generally expose the fields of their associated Java class.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
 
<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
<xs:element name="import" minOccurs="0" type="xs:string">
+
<xs:element name="import" minOccurs="0">
<xs:annotation>
+
<xs:complexType>
<xs:documentation>
+
<xs:sequence>
Fixed type; to be used with scheduler systems which accept submission scripts. Allows the user to browse the
+
<xs:element name="export-for-override" minOccurs="0" type="rm:attribute-viewer-type"/>
workspace to open and edit a custom script. Set the text of this element to the title to appear in the top-level folder tab.
+
</xs:sequence>
</xs:documentation>
+
<xs:attribute name="title" type="xs:string" use="required"/>
</xs:annotation>
+
</xs:complexType>
 
</xs:element>
 
</xs:element>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="validator-type">
 
<xs:complexType name="validator-type">
<xs:annotation>
 
<xs:documentation>
 
A regular expression or an EFS string used to validate an attribute value.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
<xs:sequence>
+
<xs:choice minOccurs="0">
<xs:element name="regex" minOccurs="0" type="rm:regex-type"/>
+
<xs:element name="regex" type="rm:regex-type"/>
<xs:element name="file-info" minOccurs="0" type="rm:file-match-type"/>
+
<xs:element name="file-info" type="rm:file-match-type"/>
</xs:sequence>
+
<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:element name="error-message" minOccurs="0" type="xs:string"/>
 
</xs:sequence>
 
</xs:sequence>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="managed-file-type">
 
<xs:complexType name="managed-file-type">
<xs:annotation>
 
<xs:documentation>
 
If 'contents' is present, the file is written.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:choice>
 
<xs: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="contents" type="xs:string"/>
 
<xs:element name="path" type="xs:string"/>
 
<xs:element name="path" type="xs:string"/>
Line 356: Line 169:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="file-match-type">
 
<xs:complexType name="file-match-type">
<xs:attribute name="efsAttributes" type="xs:string">
+
<xs:attribute name="efsAttributes" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="lastModifiedBefore" type="xs:string"/>
<xs:documentation>
+
<xs:attribute name="lastModifiedAfter" type="xs:string"/>
An or'd string of tags corresponding to the EFS integer constants; these include:
+
ATTRIBUTE_READ_ONLY
+
ATTRIBUTE_IMMUTABLE
+
ATTRIBUTE_OWNER_READ
+
ATTRIBUTE_OWNER_WRITE
+
ATTRIBUTE_OWNER_EXECUTE
+
ATTRIBUTE_GROUP_READ
+
ATTRIBUTE_GROUP_WRITE
+
ATTRIBUTE_GROUP_EXECUTE
+
ATTRIBUTE_OTHER_READ
+
ATTRIBUTE_OTHER_WRITE
+
ATTRIBUTE_OTHER_EXECUTE
+
ATTRIBUTE_EXECUTABLE
+
ATTRIBUTE_ARCHIVE
+
ATTRIBUTE_HIDDEN
+
ATTRIBUTE_SYMLINK
+
ATTRIBUTE_LINK_TARGET
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="lastModifiedBefore" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
use "yyyy/MM/dd HH:mm:ss" as format.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="lastModifiedAfter" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
use "yyyy/MM/dd HH:mm:ss" as format.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="length" type="xs:long"/>
 
<xs:attribute name="length" type="xs:long"/>
 
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
 
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
 
</xs:complexType>
 
</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: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="name" use="required" type="xs:string"/>
 
<xs:attribute name="value" type="xs:string"/>
 
<xs:attribute name="value" type="xs:string"/>
Line 403: Line 191:
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="title" type="xs:string"/>
 
<xs:element name="title" type="xs:string"/>
<xs:choice maxOccurs="unbounded">
+
<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="tab-folder" type="rm:tab-folder-type"/>
 
<xs:element name="composite" type="rm:composite-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:choice>
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="sharedEnvironment" type="xs:boolean" default="false">
+
<xs:attribute name="style" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="background" type="xs:string"/>
<xs:documentation>
+
<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
The default means that each tab is a separate view or selection into the global env, and it is this subset which
+
<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
will be passed on the launch command. Setting this property to true means that the tab will pass all selected elements of the
+
<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
entire shared environment to the resource manager at launch.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="regex-type" mixed="true">
 
<xs:complexType name="regex-type" mixed="true">
<xs:attribute name="flags" type="xs:string">
+
<xs:attribute name="flags" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="split" type="xs:boolean" default="false"/>
<xs:documentation>
+
<xs:attribute name="expression" type="xs:string"/>
An or'd string of the Java Regex flags:
+
CASE_INSENSITIVE
+
MULTILINE
+
DOTALL
+
UNICODE_CASE
+
CANON_EQ
+
LITERAL
+
COMMENTS
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="split" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Use the regex to perform a Java "split" on the segment rather than a match.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="expression" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
The actual pattern to match.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType mixed="true" name="arg-type">
 
<xs:complexType mixed="true" name="arg-type">
<xs:attribute name="isUndefinedIfMatches" type="xs:string">
+
<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
<xs:annotation>
+
<xs:attribute name="resolve" type="xs:boolean" default="true"/>
<xs:documentation>
+
If this regex is defined, an equality check on the arg will be run and if satisfied the arg will be eliminated
+
from the list (the default behavior is not to include null or zero-length args).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="resolve" type="xs:boolean" default="true">
+
<xs:annotation>
+
<xs:documentation>
+
The text of the argument will be resolved in the resource manager environment. It is important to turn this off
+
if
+
you wish to embed, for instance, shell variables (e.g., $HOME).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="tokenizer-type">
 
<xs:complexType name="tokenizer-type">
<xs:annotation>
 
<xs:documentation>
 
These are attached to the stdout or stderr streams in order to capture the output of the command and add values to
 
or side-effect the resource manager environment.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:choice>
 
<xs:choice>
<xs:element name="type" type="xs:string">
+
<xs:element name="type" type="xs:string"/>
<xs:annotation>
+
<xs:documentation>
+
Place to provide a custom tokenizer; type is the extension id contributing to
+
"org.eclipse.ptp.rm.jaxb.core.streamParserTokenizer".
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
 
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
 
</xs:choice>
 
</xs:choice>
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type">
+
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
<xs:annotation>
+
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
<xs:documentation>
+
Stop tokenization and exit the parser read operation when this pattern is encountered.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type">
+
<xs:annotation>
+
<xs:documentation>
+
Stop tokenization and exit the parser read operation after processing the segment matching this pattern.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="delim" type="xs:string">
+
<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"/>
Segment the stream using this delimiter. Must be a single character (escaped or non-escaped).
+
<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:attribute>
+
<xs:attribute name="includeDelim" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Include the delimiting character in the segment to be matched.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="maxMatchLen" type="xs:int" default="0">
+
<xs:annotation>
+
<xs:documentation>
+
Do not break up the stream according to a delimiter, but read this many characters at a time from it. NOTE: in
+
this mode, the user should be sure that an expected expansion of the regex pattern will not exceed the buffer length (and should
+
adjust that length accordingly).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="all" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Instead of reading "forward", consume the entire stream, holding only the last portion in a buffer, to be matched
+
after the end of the stream has been reached. This is useful if you need to look for a segment or segments whose position is
+
defined from the end of the output, but you do not know in advance the actual output length.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="save" type="xs:int" default="0">
+
<xs:annotation>
+
<xs:documentation>
+
Use this in connection with "all": save the last N segments (i.e, buffer-lengths, lines, etc.).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="applyToAll" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Means take the unmatched part of the read stream and pass it to the next target, even if there was a previous
+
match; this allows you to capture more than one regex pattern per delimited stream segment (see tokenizer-examples.xml, ex. 6).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="tab-folder-type">
 
<xs:complexType name="tab-folder-type">
Line 556: Line 242:
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<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:sequence>
<xs:attribute name="style" type="xs:string">
+
<xs:attribute name="style" type="xs:string"/>
<xs:annotation>
+
<xs:documentation>
+
The style attribute on the UI parts is a string which looks like the OR'd integer specification; e.g.,
+
"SWT.BORDER | SWT.LEFT".
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="background" type="xs:string"/>
 
<xs:attribute name="background" type="xs:string"/>
 
</xs:complexType>
 
</xs:complexType>
Line 573: Line 253:
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="title" minOccurs="0" type="xs:string"/>
 
<xs:element name="title" minOccurs="0" type="xs:string"/>
<xs:choice maxOccurs="unbounded">
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
 
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 
<xs:element name="composite" type="rm:composite-type"/>
 
<xs:element name="composite" type="rm:composite-type"/>
 
<xs:element name="widget" type="rm:widget-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:element name="viewer" type="rm:attribute-viewer-type"/>
 
</xs:choice>
 
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="group" type="xs:boolean" default="false"/>
 
<xs:attribute name="group" type="xs:boolean" default="false"/>
Line 586: Line 270:
 
<xs:complexType name="tab-item-type">
 
<xs:complexType name="tab-item-type">
 
<xs:sequence>
 
<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="title" type="xs:string"/>
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
<xs:choice maxOccurs="unbounded">
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
 
<xs:element name="composite" type="rm:composite-type"/>
 
<xs:element name="composite" type="rm:composite-type"/>
 
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 
<xs:element name="widget" type="rm:widget-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:element name="viewer" type="rm:attribute-viewer-type"/>
 
</xs:choice>
 
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="style" type="xs:string"/>
 
<xs:attribute name="style" type="xs:string"/>
Line 621: Line 311:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="row-layout-type">
 
<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="center" type="xs:boolean" default="false"/>
 
<xs:attribute name="justify" 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="fill" type="xs:boolean" default="false"/>
 
<xs:attribute name="pack" 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="marginHeight" type="xs:int"/>
 
<xs:attribute name="marginWidth" type="xs:int"/>
 
<xs:attribute name="marginWidth" type="xs:int"/>
Line 635: Line 327:
 
<xs:complexType name="grid-layout-type">
 
<xs:complexType name="grid-layout-type">
 
<xs:attribute name="numColumns" type="xs:int"/>
 
<xs:attribute name="numColumns" type="xs:int"/>
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="true"/>
+
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="false"/>
 
<xs:attribute name="marginHeight" type="xs:int"/>
 
<xs:attribute name="marginHeight" type="xs:int"/>
 
<xs:attribute name="marginWidth" type="xs:int"/>
 
<xs:attribute name="marginWidth" type="xs:int"/>
Line 663: Line 355:
 
<xs:attribute name="horizontalAlign" type="xs:string"/>
 
<xs:attribute name="horizontalAlign" type="xs:string"/>
 
<xs:attribute name="verticalAlign" type="xs:string"/>
 
<xs:attribute name="verticalAlign" type="xs:string"/>
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="true"/>
+
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="false"/>
 
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
 
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
 
<xs:attribute name="horizontalSpan" type="xs:int"/>
 
<xs:attribute name="horizontalSpan" type="xs:int"/>
Line 691: Line 383:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="widget-type">
 
<xs:complexType name="widget-type">
<xs:annotation>
 
<xs:documentation>
 
Widget foreground, background (color) and font are in principle configurable, though the font setting may not
 
always work.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
<xs:element name="sub-layout-data" minOccurs="0" type="rm:layout-data-type">
 
<xs:annotation>
 
<xs:documentation>
 
If the widget is a composite (like the browse button), the first layout data will be applied to the first
 
element and the sub-layout the second (in this case, the text and button components, respectively).
 
</xs:documentation>
 
</xs:annotation>
 
</xs:element>
 
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
<xs:element name="items-from" minOccurs="0" type="xs:string">
+
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
<xs:annotation>
+
<xs:element name="fixed-text" minOccurs="0" type="xs:string"/>
<xs:documentation>
+
Combo items taken from the value field of an attribute or property.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
<xs:element name="fixed-text" minOccurs="0" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
Display text set once from the environment on loading; e.g, ${ptp_rm:Job_Name#description}.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:element name="dynamic-text" minOccurs="0">
 
<xs:element name="dynamic-text" minOccurs="0">
<xs:annotation>
 
<xs:documentation>
 
Changing display text; the args will be refreshed against the environment each time the Launch Tab is updated.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:complexType>
 
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
Line 735: Line 396:
 
</xs:complexType>
 
</xs:complexType>
 
</xs:element>
 
</xs:element>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="type" default="text">
 
<xs:attribute name="type" default="text">
Line 742: Line 404:
 
<xs:enumeration value="text"/>
 
<xs:enumeration value="text"/>
 
<xs:enumeration value="checkbox"/>
 
<xs:enumeration value="checkbox"/>
 +
<xs:enumeration value="radiobutton"/>
 
<xs:enumeration value="spinner"/>
 
<xs:enumeration value="spinner"/>
 
<xs:enumeration value="combo"/>
 
<xs:enumeration value="combo"/>
<xs:enumeration value="radioButton"/>
 
<xs:enumeration value="browse">
 
<xs:annotation>
 
<xs:documentation>
 
Creates a text widget followed by a push button allowing the user to browse for directory or file.
 
</xs:documentation>
 
</xs:annotation>
 
</xs:enumeration>
 
 
</xs:restriction>
 
</xs:restriction>
 
</xs:simpleType>
 
</xs:simpleType>
 
</xs:attribute>
 
</xs:attribute>
 +
<xs:attribute name="buttonId" type="xs:string"/>
 
<xs:attribute name="title" type="xs:string"/>
 
<xs:attribute name="title" type="xs:string"/>
 
<xs:attribute name="style" type="xs:string"/>
 
<xs:attribute name="style" type="xs:string"/>
<xs:attribute name="directory" type="xs:boolean" default="false">
+
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
<xs:annotation>
+
<xs:attribute name="saveValueTo" type="xs:string"/>
<xs:documentation>
+
For the browser widget. Browse and return directory. Default is browse file.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="uri" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
For the browser widget. Browse connection is local or remote, and returns a uri. Default returns path.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="localOnly" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
For the browser widget. Use local file browser instead of the default remote connection browser.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false">
+
<xs:annotation>
+
<xs:documentation>
+
Only applicable to text areas and combo boxes.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
<xs:attribute name="saveValueTo" type="xs:string">
+
<xs:annotation>
+
<xs:documentation>
+
The widget is directly mapped to a property or attribute in the environment which will receive the entered value.
+
Use of this attribute is mutually exclusive with the "fixed-" and "dynamic-text" elements.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="foreground" type="xs:string"/>
 
<xs:attribute name="foreground" type="xs:string"/>
 
<xs:attribute name="background" 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>
 
<xs:complexType name="attribute-viewer-type">
 
<xs:complexType name="attribute-viewer-type">
<xs:annotation>
 
<xs:documentation>
 
These display their value columns as editable widgets. They are provided with checkboxes to indicate which
 
attributes have been chosen. A checkbox button is also placed above the viewer to allow for filtering the unchecked items. The
 
viewer outputs its checked values to the environment (and on update removes unselected ones). The name of the viewer is also stored
 
against a string of all selected values, constructed from a template.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
Line 812: Line 478:
 
<xs:element name="items" type="rm:viewer-items-type"/>
 
<xs:element name="items" type="rm:viewer-items-type"/>
 
<xs:element name="value" minOccurs="0" type="rm:template-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:sequence>
 
<xs:attribute name="type" default="table">
 
<xs:attribute name="type" default="table">
Line 822: Line 489:
 
</xs:attribute>
 
</xs:attribute>
 
<xs:attribute name="name" type="xs:string"/>
 
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="sort" type="xs:boolean" default="true">
+
<xs:attribute name="initialAllChecked" type="xs:boolean" default="true"/>
<xs:annotation>
+
<xs:attribute name="sort" type="xs:boolean" default="true"/>
<xs:documentation>
+
On the name field/column. This is a toggle sort, such that alternate clicks reverse the sort direction.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
 
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
 
<xs:attribute name="linesVisible" 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="tooltipEnabled" type="xs:boolean" default="true"/>
<xs:annotation>
+
<xs:documentation>
+
Enables column-viewer label provider tooltip support. The tooltip defined for an attribute will appear on the row
+
of the table or the parent node of the tree. The attribute description will also appear as a tooltip on the description columns if
+
they exist.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="style" type="xs:string"/>
 
<xs:attribute name="style" type="xs:string"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="viewer-items-type">
 
<xs:complexType name="viewer-items-type">
<xs:annotation>
 
<xs:documentation>
 
Which attributes or properties to include in or exclude from (if using the "all" attributes) the viewer.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
 
<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
Line 869: Line 518:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="template-type">
 
<xs:complexType name="template-type">
<xs:attribute name="pattern" type="xs:string">
+
<xs:attribute name="pattern" type="xs:string"/>
<xs:annotation>
+
<xs:documentation>
+
Express the template using @name and @value markers. Example: '@name="@value"' would generate a string of
+
name-value assignments (the default separator being whitespace).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="separator" type="xs:string" default=" "/>
 
<xs:attribute name="separator" type="xs:string" default=" "/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="target-type">
 
<xs:complexType name="target-type">
<xs:annotation>
 
<xs:documentation>
 
The top-level tokenizer element: refers to an object, either to be constructed at match time, or which pre-exists
 
in the environment, on which to apply the actions associated with matches and tests, along with a set of possible matches and
 
tests. All tests are run at the conclusion of the parse operation. NOTE: when new targets are constructed, there is a merge
 
operation at the end of tokenization which attempts to combine objects into a single instance identified by the 'name' attribute.
 
This assumes that such names will be unique and that any other values to be set on the object which are not explicitly bound in
 
some way to that name through the pattern will appear on the stream before a new name does.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="match" maxOccurs="unbounded" type="rm:match-type"/>
 
<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="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:sequence>
<xs:attribute name="ref" type="xs:string">
+
<xs:attribute name="ref" type="xs:string"/>
<xs:annotation>
+
<xs:documentation>
+
The name of the object in the environment (either attribute or property; do not include here the "${ptp_rm:" / "}"
+
used for resolving).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
<xs:attribute name="type" default="property">
 
<xs:attribute name="type" default="property">
<xs:annotation>
 
<xs:documentation>
 
Create an object of this type when there is a match.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:simpleType>
 
<xs:simpleType>
 
<xs:restriction base="xs:string">
 
<xs:restriction base="xs:string">
Line 915: Line 546:
 
</xs:simpleType>
 
</xs:simpleType>
 
</xs:attribute>
 
</xs:attribute>
<xs:attribute name="matchAll" type="xs:boolean" default="false">
+
<xs:attribute name="matchAll" type="xs:boolean" default="false"/>
<xs:annotation>
+
<xs:attribute name="allowOverwrites" type="xs:boolean" default="false"/>
<xs:documentation>
+
Means do not try to match an already matched expression until all the others are matched (i.e., a logical AND
+
instead of OR governs the set of matches at successive calls to the target match operation); this allows one to use, for instance,
+
.* repeatedly but set different fields of the object with the resulting match (see tokenizer-examples.xml, ex. 5).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="match-type">
 
<xs:complexType name="match-type">
<xs:annotation>
 
<xs:documentation>
 
If the match is satisfied, the apply operations are immediately called on the current target property or
 
attribute.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="expression" minOccurs="0" type="rm:regex-type"/>
 
<xs:element name="expression" minOccurs="0" type="rm:regex-type"/>
Line 942: Line 560:
 
</xs:choice>
 
</xs:choice>
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="moveToTop" type="xs:boolean" default="false">
+
<xs:attribute name="moveToTop" type="xs:boolean" default="false"/>
<xs:annotation>
+
<xs:documentation>
+
Indicates to the tokenizer that the matched target be promoted to first position in the list of targets. This is
+
useful when there is an ordering which expects types of attributes or properties to be grouped in sequence on the stream (see
+
tokenizer-examples.xml, ex. 4).
+
</xs:documentation>
+
</xs:annotation>
+
</xs:attribute>
+
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="column-data-type">
 
<xs:complexType name="column-data-type">
<xs:annotation>
 
<xs:documentation>
 
A caveat on the foreground and background settings. They are exposed here but may not work as expected: these are
 
currently applied to the column through the cell label provider; foreground seems not to change the font color but to color the
 
entire cell.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
Line 967: Line 570:
 
<xs:attribute name="width" type="xs:int" default="-1"/>
 
<xs:attribute name="width" type="xs:int" default="-1"/>
 
<xs:attribute name="alignment" type="xs:string"/>
 
<xs:attribute name="alignment" type="xs:string"/>
<xs:attribute name="resizable" type="xs:boolean" default="true"/>
+
<xs:attribute name="resizable" type="xs:boolean" default="false"/>
 
<xs:attribute name="moveable" type="xs:boolean" default="false"/>
 
<xs:attribute name="moveable" type="xs:boolean" default="false"/>
 
<xs:attribute name="foreground" type="xs:string"/>
 
<xs:attribute name="foreground" type="xs:string"/>
Line 973: Line 576:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="set-type">
 
<xs:complexType name="set-type">
<xs:annotation>
 
<xs:documentation>
 
Calls "setField(entry value)" on the target.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="field" type="xs:string"/>
 
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="throw-type">
 
<xs:complexType name="throw-type">
      <xs:annotation>
+
<xs:sequence>
        <xs:documentation>
+
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
            Throws an exception with the given message; o
+
</xs:sequence>
        </xs:documentation>
+
<xs:attribute name="field" type="xs:string"/>
      </xs:annotation>
+
<xs:attribute name="message" type="xs:string"/>
      <xs:sequence>
+
</xs:complexType>
        <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:complexType name="add-type">
<xs:annotation>
 
<xs:documentation>
 
References (or creates) a list as the value of the target field, and adds the entry values to it.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="field" type="xs:string"/>
 
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="append-type">
 
<xs:complexType name="append-type">
<xs:annotation>
 
<xs:documentation>
 
References (or creates) a string (buffer) as the value of the target field, and appends the entry values to it.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
Line 1,017: Line 602:
 
<xs:attribute name="field" type="xs:string"/>
 
<xs:attribute name="field" type="xs:string"/>
 
<xs:attribute name="separator" type="xs:string"/>
 
<xs:attribute name="separator" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="put-type">
 
<xs:complexType name="put-type">
<xs:annotation>
 
<xs:documentation>
 
References (or creates) a map as the value of the target field, and adds the entry (key, value) to it.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="field" type="xs:string"/>
 
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="entry-type">
 
<xs:complexType name="entry-type">
<xs:annotation>
 
<xs:documentation>
 
Value abstraction. "key" and "value" can be arbitrary strings; the "Group" attributes refer to the value of the
 
matched regex group;
 
"Index" attributes refer to the index of the string array created by using the regex to split the segment.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:attribute name="key" type="xs:string"/>
 
<xs:attribute name="key" type="xs:string"/>
 
<xs:attribute name="keyGroup" type="xs:int" default="0"/>
 
<xs:attribute name="keyGroup" type="xs:int" default="0"/>
Line 1,045: Line 620:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="test-type">
 
<xs:complexType name="test-type">
<xs:annotation>
 
<xs:documentation>
 
Useful for setting values based on other values produced during tokenization. A test is one or more comparison
 
operations (with arbitrary nesting inside the three boolean operators), plus a set of actions to apply to the target fields in the
 
case of either success or failure (the "else" element). See tokenizer-examples-xml, ex. 3, or the "get-job-status" example.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
 
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
<xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="2">
+
<xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="2"/>
<xs:annotation>
+
<xs:documentation>
+
.*[${ptp_rm:}]*.* refers to a variable in the RM environment; "#FIELD" refers to the value of the given field on the
+
current target; other strings will be converted in conformity with the inferred type of the comparison.
+
</xs:documentation>
+
</xs:annotation>
+
</xs:element>
+
 
<xs:choice minOccurs="0" maxOccurs="unbounded">
 
<xs:choice minOccurs="0" maxOccurs="unbounded">
 
<xs:element name="add" type="rm:add-type"/>
 
<xs:element name="add" type="rm:add-type"/>
Line 1,082: Line 643:
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="op">
 
<xs:attribute name="op">
<xs:annotation>
 
<xs:documentation>
 
Enumeration avoids XML escaping. EQ = equals, LT = less than, GT = greater than, LE = less than or equal to, GE =
 
greater than or equal to.
 
</xs:documentation>
 
</xs:annotation>
 
 
<xs:simpleType>
 
<xs:simpleType>
 
<xs:restriction base="xs:string">
 
<xs:restriction base="xs:string">
Line 1,101: Line 656:
 
</xs:simpleType>
 
</xs:simpleType>
 
</xs:attribute>
 
</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>
 
<xs:complexType name="monitor-type">
 
<xs:complexType name="monitor-type">
 
<xs:sequence>
 
<xs:sequence>
 
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
 
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
<xs:element name="driver" type="rm:monitor-driver-type"/>
+
<xs:element name="driver" minOccurs="0" type="rm:monitor-driver-type"/>
 
</xs:sequence>
 
</xs:sequence>
 
<xs:attribute name="schedulerType" type="xs:string"/>
 
<xs:attribute name="schedulerType" type="xs:string"/>
Line 1,111: Line 705:
 
</xs:complexType>
 
</xs:complexType>
 
<xs:complexType name="monitor-driver-type">
 
<xs:complexType name="monitor-driver-type">
  <xs:choice>
+
<xs:choice>
    <xs:element name="url" type="xs:string"/>
+
<xs:element name="url" type="xs:string"/>
    <xs:sequence>
+
<xs:sequence>
        <xs:element name="name" type="xs:string"/>
+
<xs:element name="name" type="xs:string"/>
        <xs:element name="path" minOccurs="0" 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:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
    </xs:sequence>
+
</xs:sequence>
  </xs:choice>
+
</xs:choice>
 
</xs:complexType>
 
</xs:complexType>
 
</xs:schema>
 
</xs:schema>
 
</source>
 
</source>
  
----
+
== Tokenizer Examples ==
== Resource Manager PBS XML (Example) ==  
+
'''''Current version (05/19/2011):'''''    -alr
+
  
<source language="xml">
+
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?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 -->
 
<!-- ****************************************************************************** -->
 
 
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="resource_manager_type.xsd" name="pbs-torque-generic">
+
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
 
<control-data>
 
<control-data>
<property name="queues" visible="false"/>
+
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
<!-- needed by RM internals for fetch; name is fixed by convention -->
+
to the known property "available-queues" -->
<property name="stdout_remote_path" visible="false"/>
+
<start-up-command name="test01ParseQstat">
<!-- needed by RM internals for fetch; name is fixed by convention -->
+
<arg/>
<property name="stderr_remote_path" visible="false"/>
+
<property name="remote_path_tooltip" visible="false">
+
<default><![CDATA[Not the same as the PBS attribute for stdout or stderr;
+
used internally by the resource manager and should correspond
+
to whatever path the scheduler will copy the output to at the
+
end of execution; the job id can be included in this path
+
using '@jobId'.]]></default>
+
</property>
+
<attribute name="mpiCommand" type="choice">
+
<description>Which mpi command to use.</description>
+
<choice>,mpiexec,mpirun</choice>
+
</attribute>
+
<attribute name="mpiCores" min="1" type="integer">
+
<description>the '-np' value</description>
+
</attribute>
+
<attribute name="Account_Name" type="string">
+
<description>Account to which to charge this job.</description>
+
<tooltip>Format: string</tooltip>
+
</attribute>
+
<attribute name="Checkpoint" type="choice">
+
<description>Determines when checkpointing (if supported) will be performed by PBS on behalf of the job.</description>
+
<tooltip><![CDATA[Format: the strings "n" (no checkpointing),
+
"s" (to be performed only when the server executing
+
the job is shutdown), "c"s (to be performed at the
+
default minimum time for thes servers executing the
+
job), "c=mmmm" (to be performed at an intervals
+
of minutes which is the integer number of minutes of CPUs
+
time used bys the job; values must be greater than zero);
+
defaults value: "u", which is unspecified.]]></tooltip>
+
<choice>,u,n,s,c,c=????</choice>
+
<default>u</default>
+
</attribute>
+
<attribute name="depend" type="string">
+
<description>The type of inter-job dependencies specified by the job owner.</description>
+
<tooltip>Format: "type:jobid[,jobid...]"; default value: no dependencies.</tooltip>
+
</attribute>
+
<attribute name="destination" type="choice">
+
<description>Designation of the queue to which to submit the job.</description>
+
<tooltip>Format: queue[@server].</tooltip>
+
<choice>normal,debug</choice>
+
</attribute>
+
<attribute name="directive" type="string">
+
<description>Defines the prefix that declares a directive to the qsub command within the script file.</description>
+
<tooltip><![CDATA[See the paragraph on script directives in the
+
Extended Description section. If the option is presented with a
+
directive_prefix argument that is the null string, qsub will
+
not scan the script file for directives.]]></tooltip>
+
</attribute>
+
<attribute name="Error_Path" type="string">
+
<description>The final path name for the file containing the job's standard error stream.</description>
+
<tooltip><![CDATA[Format: "[hostname:]pathname". If
+
the option is not specified, the default file name for the
+
standard error stream will be used. The default name has
+
the following form: job_name.eSeq_num where job_name is
+
the name of the job, see -N option, and Seq_num
+
is the job number assigned when the job is submitted;
+
default value: (job_name).e(job_number).]]></tooltip>
+
</attribute>
+
<attribute name="export_all" type="boolean">
+
<description><![CDATA[Declares that all environment variables in the qsub command's environment are to be exported to the batch job.]]></description>
+
<default>true</default>
+
</attribute>
+
<attribute name="group_list" type="string">
+
<description><![CDATA[A list of composite-descriptor group="true"_names@hosts which determines the composite-descriptor group="true" under which the job is run on a given host.]]></description>
+
<tooltip><![CDATA[Format: composite-descriptor
+
group="true"_name[@host][,composite-descriptor group="true"_name[@host]...].
+
When a job is to be placed into execution, the server will select a
+
composite-descriptor group="true" name according to the following ordered set
+
of rules: 1) Select the composite-descriptor group="true" name from
+
the list for which the associated host name matches the name of the
+
execution host; 2) Select the composite-descriptor group="true" name
+
which has no associated host name, the wildcard name; 3) Use
+
the login composite-descriptor group="true" for the username under
+
which the job will be run.]]></tooltip>
+
</attribute>
+
<attribute name="Hold_Types" type="choice">
+
<description>The set of holds currently applied to the job.</description>
+
<tooltip><![CDATA[If the set is not null, the job will not be scheduled
+
for execution and is said to be in the hold state. Note, the hold
+
state takes precedence over the wait state. Format: string made up
+
of the letters 'u', 's', 'o'; default value: no hold.]]></tooltip>
+
<choice>,u,s,o</choice>
+
</attribute>
+
<attribute name="Job_Name" type="string">
+
<description>The name assigned to the job by the qsub or qalter command.</description>
+
<tooltip><![CDATA[Format: string up to 15 characters,
+
first character must be alphabetic; default value:
+
the base name of the job script or STDIN.]]></tooltip>
+
</attribute>
+
<attribute name="Join_Path" type="boolean">
+
<description>Merge stdout and stderr into stdout.</description>
+
<tooltip><![CDATA[Format: boolean, values accepted are "True", "TRUE",
+
"true", "Y", "y", "1", "False", "FALSE", "false", "N", "n", "0";
+
default value: false.]]></tooltip>
+
<default>false</default>
+
</attribute>
+
<attribute name="Keep_Files" type="choice">
+
<description>Retain these streams on the execution host upon job termination.</description>
+
<tooltip><![CDATA[Format: "o", "e", "oe" or "eo"; default value:
+
no keep, return files to submission host.]]></tooltip>
+
<choice>,o,e,oe,eo</choice>
+
</attribute>
+
<attribute name="Mail_Points" type="choice">
+
<description>Identifies at which state changes the server will send mail about the job.</description>
+
<tooltip><![CDATA[Format: string made up of the letters
+
'a' for abort, 'b' for beginning, and default value:
+
a', send on job abort.]]></tooltip>
+
<choice>,a,b</choice>
+
<default>a</default>
+
</attribute>
+
<attribute name="Mail_Users" type="string">
+
<description>The set of users to whom mail may be sent when the job makes certain state changes.</description>
+
<tooltip>Format: "user@host[,user@host]"; default value: job owner only.</tooltip>
+
</attribute>
+
<attribute name="Output_Path" type="string">
+
<description>The final path name for the file containing the job's standard output stream.</description>
+
<tooltip><![CDATA[Format: "[hostname:]pathname". If the option
+
is not specified, the default file name for the standard error stream
+
will be used. The default name has the following form: job_name.oSeq_num
+
where job_name is the name of the job, see -N option, and Seq_num
+
is the job number assigned when the job is submitted;
+
default value: (job_name).o(job_number).]]></tooltip>
+
</attribute>
+
<attribute name="Priority" type="string">
+
<description>The job scheduling priority assigned by the user.</description>
+
<tooltip>Format: "[+|-]nnnnn"; default value: undefined.</tooltip>
+
</attribute>
+
<attribute name="Rerunnable" type="choice">
+
<description>The rerunnable flag assigned by the user.</description>
+
<tooltip>Format: "y" or "n", see Join_Path; default value: y, job is rerunable.</tooltip>
+
<choice>,n,y</choice>
+
<default>y</default>
+
</attribute>
+
<attribute name="Resource_List.arch" type="string">
+
<description>Specifies the administrator defined system architecture requried.</description>
+
<tooltip>This defaults to whatever the PBS_MACH string is set to in "local.mk". Units: string.</tooltip>
+
</attribute>
+
<attribute name="Resource_List.cput" type="string">
+
<description>Maximum amount of CPU time used by all processes in the job.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</attribute>
+
<attribute name="Resource_List.file" type="string">
+
<description>The largest size of any single file that may be created by the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes),
+
w (words), kb/kw (kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.host" type="string">
+
<description>Name of host on which job should be run.</description>
+
</attribute>
+
<attribute name="Resource_List.mem" type="string">
+
<description>Maximum amount of memory used by all concurrent processes in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes),
+
w (words), kb/kw (kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.nice" type="integer" min="0" max="10">
+
<description>The nice value under which the job is to be run.</description>
+
<tooltip>0 to 10.</tooltip>
+
<default>0</default>
+
</attribute>
+
<attribute name="Resource_List.nodes" type="string">
+
<description>Number and/or type of nodes to be reserved for exclusive use by the job.</description>
+
<tooltip><![CDATA[The value is one or more node_specs joined with
+
the '+' character, "node_spec[+node_spec...]. Each node_spec is
+
a number of nodes required of the type declared in the node_spec
+
and a name or one or more properity or properities desired for
+
the nodes. The number, the name, and each properity in the
+
node_spec are separated by a colon ':'. If no number is specified,
+
one (1) is assumed. Units: string. The name of a node is its
+
hostname. The properties of nodes are: ppn=# requested; defaults
+
to 1; or an arbitrary string defined by system administrator.
+
Example: To ask for 2 processors on each of two blue nodes and
+
three processors on one red node: -l nodes=2:blue:ppn=2+red:ppn=3.]]></tooltip>
+
<default>1</default>
+
</attribute>
+
<attribute name="Resource_List.ompthreads" type="integer" min="1">
+
<description>Number of threads per processor for Open MP jobs.</description>
+
<default>1</default>
+
</attribute>
+
<attribute name="Resource_List.pcput" type="string">
+
<description>Maximum amount of CPU time used by any single process in the job.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
</attribute>
+
<attribute name="Resource_List.pmem" type="string">
+
<description>Maximum amount of physical memory (workingset) used by any single process of the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.pvmem" type="string">
+
<description>Maximum amount of virtual memory used by any single process in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.vmem" type="string">
+
<description>Maximum amount of virtual memory used by all concurrent processes in the job.</description>
+
<tooltip><![CDATA[Format: integer[suffix]; the suffix is a multiplier
+
in bytes or words (word size of the host): b (bytes), w (words), kb/kw
+
(kilo), mb/mw (mega), gb/bw (giga).]]></tooltip>
+
</attribute>
+
<attribute name="Resource_List.walltime" type="string">
+
<description>Maximum amount of real time during which the job can be in the running state.</description>
+
<tooltip>Format: [[hours:]minutes:]seconds[.milliseconds].</tooltip>
+
<default>00:30:00</default>
+
</attribute>
+
<attribute name="Shell_Path_List" type="string">
+
<description>A set of absolute paths of the program to process the job's script file.</description>
+
<tooltip><![CDATA[Format: path[@host][,path[@host]...].
+
If this is null, then the user's login shell on the host
+
of execution will be used. Default value: null, login shell.]]></tooltip>
+
</attribute>
+
<attribute name="stagein" type="string">
+
<description>The list of files to be staged in prior to job execution.</description>
+
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
</attribute>
+
<attribute name="stageout" type="string">
+
<description>The list of files to be staged out after job execution.</description>
+
<tooltip>Format: local_path@remote_host:remote_path.</tooltip>
+
</attribute>
+
<attribute name="User_List" type="string">
+
<description>The list of user@hosts which determines the user name under which the job is run on a given host.</description>
+
<tooltip><![CDATA[When a job is to be placed into execution,
+
the server will select a user name from the list according
+
to the following ordered set of rules: 1) Select the user
+
name from the list for which the associated host name matches
+
the name of the execution host; 2) Select the user name which
+
has no associated host name, the wild card name; 3) Use the
+
Job_Owner as the user name. Default value: job owner name.]]></tooltip>
+
</attribute>
+
<attribute name="Variable_List" type="string">
+
<description>This is the list of environment variables passed with the Queue Job batch request.</description>
+
</attribute>
+
<script insertEnvironmentAfter="35">
+
<line>
+
<arg>#!/bin/bash</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -A">#PBS -A ${ptp_rm:Account_Name#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -c">#PBS -c ${ptp_rm:Checkpoint#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W depend=">#PBS -W depend=${ptp_rm:depend#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -q">#PBS -q ${ptp_rm:destination#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -C">#PBS -C ${ptp_rm:line#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -e">#PBS -e ${ptp_rm:Error_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -V">#PBS -V ${ptp_rm:export_all#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W group_list=">#PBS -W group_list=${ptp_rm:group_list#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -h">#PBS -h ${ptp_rm:Hold_Types#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -N">#PBS -N ${ptp_rm:Job_Name#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -j">#PBS -j ${ptp_rm:Join_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -k">#PBS -k ${ptp_rm:Keep_Files#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -m">#PBS -m ${ptp_rm:Mail_Points#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -M">#PBS -M ${ptp_rm:Mail_Users#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -o">#PBS -o ${ptp_rm:Output_Path#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -p">#PBS -p ${ptp_rm:Priority#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -r">#PBS -r ${ptp_rm:Rerunnable#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l arch=">#PBS -l arch=${ptp_rm:Resource_List.arch#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l cput=">#PBS -l cput=${ptp_rm:Resource_List.cput#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l file=">#PBS -l file=${ptp_rm:Resource_List.file#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l host=">#PBS -l host=${ptp_rm:Resource_List.host#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l mem=">#PBS -l mem=${ptp_rm:Resource_List.mem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l nice=">#PBS -l nice=${ptp_rm:Resource_List.nice#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l nodes=">#PBS -l nodes=${ptp_rm:Resource_List.nodes#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l ompthreads=">#PBS -l ompthreads=${ptp_rm:Resource_List.ompthreads#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pcput=">#PBS -l pcput=${ptp_rm:Resource_List.pcput#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pmem=">#PBS -l pmem=${ptp_rm:Resource_List.pmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l pvmem=">#PBS -l pvmem=${ptp_rm:Resource_List.pvmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l vmem=">#PBS -l vmem=${ptp_rm:Resource_List.vmem#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -l walltime=">#PBS -l walltime=${ptp_rm:Resource_List.walltime#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -S">#PBS -S ${ptp_rm:Shell_Path_List#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W stagein=">#PBS -W stagein=${ptp_rm:stagein#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -W stageout=">#PBS -W stageout=${ptp_rm:stageout#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -u">#PBS -u ${ptp_rm:User_List#value}</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="#PBS -v">#PBS -v ${ptp_rm:Variable_List#value}</arg>
+
</line>
+
<line>
+
<arg>MPI_ARGS="-np ${ptp_rm:mpiCores#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">if [ "-np" == "${MPI_ARGS}" ] ; then</arg>
+
</line>
+
<line>
+
<arg resolve="false"> MPI_ARGS=</arg>
+
</line>
+
<line>
+
<arg resolve="false">fi</arg>
+
</line>
+
<line>
+
<arg>COMMAND=${ptp_rm:mpiCommand#value}</arg>
+
</line>
+
<line>
+
<arg resolve="false">if [ -n "${COMMAND}" ] ; then</arg>
+
</line>
+
<line>
+
<arg resolve="false"> COMMAND="${COMMAND} ${MPI_ARGS}</arg>
+
<arg>${ptp_rm:executablePath#value} ${ptp_rm:progArgs#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">else</arg>
+
</line>
+
<line>
+
<arg> COMMAND="${ptp_rm:executablePath#value} ${ptp_rm:progArgs#value}"</arg>
+
</line>
+
<line>
+
<arg resolve="false">fi</arg>
+
</line>
+
<line>
+
<arg isUndefinedIfMatches="cd">cd ${ptp_rm:directory#value}</arg>
+
</line>
+
<line>
+
<arg resolve="false">${COMMAND}</arg>
+
</line>
+
<line>
+
<arg resolve="false">touch DONE</arg>
+
</line>
+
</script>
+
<start-up-command name="get-queues">
+
<arg>qstat</arg>
+
<arg>-Q</arg>
+
<arg>-f</arg>
+
 
<stdout-parser delim="\n">
 
<stdout-parser delim="\n">
 
<target ref="queues">
 
<target ref="queues">
 
<match>
 
<match>
<expression>Queue: ([\w\d]+)</expression>
+
<expression>([\w\d]+)</expression>
 
<add field="value">
 
<add field="value">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
Line 1,544: Line 739:
 
</stdout-parser>
 
</stdout-parser>
 
</start-up-command>
 
</start-up-command>
<submit-batch name="submit-batch" waitForId="true">
+
<!-- EXAMPLE 2: output is to be searched for its final line which should
<arg>qsub</arg>
+
contain a job id of the form "[digits].[chars]" -->
<arg>${ptp_rm:managed_file_for_script#value}</arg>
+
<start-up-command name="test02JobId" waitForId="true">
 +
<arg/>
 
<stdout-parser delim="\n" all="true" save="1">
 
<stdout-parser delim="\n" all="true" save="1">
 
<target ref="@jobId">
 
<target ref="@jobId">
 
<match>
 
<match>
<expression>([\d]+)[.].*</expression>
+
<expression>([\d]+)([.])(.+)[\s]+.*</expression>
 +
<append field="name">
 +
<entry valueGroup="1"/>
 +
<entry valueGroup="2"/>
 +
<entry valueGroup="3"/>
 +
</append>
 +
<set field="default">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry value="SUBMITTED"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>([\d]+)[.].+</expression>
 
<set field="name">
 
<set field="name">
 +
<entry valueGroup="0"/>
 +
</set>
 +
<set field="default">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
 
</set>
 
</set>
 
<set field="value">
 
<set field="value">
 
<entry value="SUBMITTED"/>
 
<entry value="SUBMITTED"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target ref="@jobId">
 +
<match>
 +
<expression flags="DOTALL">.*Job not submitted.*</expression>
 +
<set field="value">
 +
<entry value="FAILED"/>
 
</set>
 
</set>
 
</match>
 
</match>
Line 1,568: Line 789:
 
</target>
 
</target>
 
</stderr-parser>
 
</stderr-parser>
</submit-batch>
+
</start-up-command>
 +
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
 +
of attribute definitions, but each line bearing a distinct
 +
id (e.g., openMPI attribute discovery) -->
 +
<start-up-command name="test03OpenMPI">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="attribute">
 +
<match>
 +
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
 +
<set field="status">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
 +
<set field="tooltip">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<test op="EQ">
 +
<value>#status</value>
 +
<value>read-only</value>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
<else>
 +
<set field="readOnly">
 +
<entry value="false"/>
 +
</set>
 +
</else>
 +
</test>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
 +
<set field="name">
 +
<entry value="ompi_major_version"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
<set field="name" forceNewObject="true">
 +
<entry value="ompi_minor_version"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
<test op="AND">
 +
<test op="EQ">
 +
<value>#name</value>
 +
<value>ompi_minor_version</value>
 +
</test>
 +
<test op="LT">
 +
<value>#value</value>
 +
<value>7</value>
 +
</test>
 +
<throw message="Only supports Open MPI 1.7 and later"/>
 +
</test>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression>(.*):([^:]*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="false"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
 +
by caption; use of moveToTop to promote the target to the top of the list
 +
when the caption appears -->
 +
<start-up-command name="test04ImplicitWithTags">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match moveToTop="true">
 +
<expression>PROPERTY</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match moveToTop="true">
 +
<expression>ATTRIBUTE</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
 +
<start-up-command name="test05ImplicitOrdering">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="attribute" matchAll="true">
 +
<match>
 +
<expression>.+</expression>
 +
<set field="name">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="type">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="description">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="tooltip">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="value">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
 +
<start-up-command name="test06ImplicitWithTagsDotall">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32" applyToAll="true">
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
 +
<start-up-command name="test07PropertyDefsSingleLine">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
 +
not exceed 32 chars -->
 +
<start-up-command name="test08JobStates">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
 +
<start-up-command name="test09Staggered">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 10: forced merge -->
 +
<start-up-command name="test10Merged">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.+);value:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>name:(.+);default:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="default">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 11: exit-on -->
 +
<start-up-command name="test11ExitOn">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 12: exit-after -->
 +
<start-up-command name="test12ExitAfter">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
 +
</stdout-parser>
 +
</start-up-command>
 +
<submit-interactive name="empty">
 +
<arg/>
 +
</submit-interactive>
 +
<!-- EXAMPLE 13: get-status (use of tests) -->
 
<get-job-status name="get-job-status" ignoreExitStatus="true">
 
<get-job-status name="get-job-status" ignoreExitStatus="true">
 
<arg>qstat</arg>
 
<arg>qstat</arg>
Line 1,575: Line 1,141:
 
<target ref="@jobId">
 
<target ref="@jobId">
 
<match>
 
<match>
<expression>.+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
+
<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
 
<set field="value">
 
<set field="value">
 
<entry valueGroup="1"/>
 
<entry valueGroup="1"/>
Line 1,603: Line 1,169:
 
<test op="EQ">
 
<test op="EQ">
 
<value>#value</value>
 
<value>#value</value>
<value>C</value>
+
<value>H</value>
 
<set field="value">
 
<set field="value">
<entry value="COMPLETED"/>
+
<entry value="SYSTEM_ON_HOLD"/>
 
</set>
 
</set>
 
</test>
 
</test>
<test op="EQ">
+
<else>
<value>#value</value>
+
<value>E</value>
+
 
<set field="value">
 
<set field="value">
 
<entry value="COMPLETED"/>
 
<entry value="COMPLETED"/>
 
</set>
 
</set>
</test>
+
</else>
<test op="EQ">
+
<value>#value</value>
+
<value>H</value>
+
<set field="value">
+
<entry value="SYSTEM_ON_HOLD"/>
+
</set>
+
</test>
+
 
</target>
 
</target>
 
</stdout-parser>
 
</stdout-parser>
Line 1,635: Line 1,192:
 
</stderr-parser>
 
</stderr-parser>
 
</get-job-status>
 
</get-job-status>
<terminate-job name="cancel" ignoreExitStatus="true">
 
<arg>qdel</arg>
 
<arg>${ptp_rm:@jobId#name}</arg>
 
</terminate-job>
 
<launch-tab>
 
<dynamic>
 
<title>Basic PBS Settings</title>
 
<!-- ATTRIBUTES group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="4" makeColumnsEqualWidth="false" horizontalSpacing="10" verticalSpacing="15"/>
 
</layout>
 
<!-- HEADER -->
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Name</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Value</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_RED">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>Description</fixed-text>
 
</widget>
 
<!-- row 1 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Job_Name#tooltip}</tooltip>
 
<fixed-text>Job Name: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Job_Name">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Job_Name#description}</fixed-text>
 
</widget>
 
<!-- row 2 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:destination#tooltip}</tooltip>
 
<fixed-text>Queue: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="destination">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
<items-from>queues</items-from>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:destination#description}</fixed-text>
 
</widget>
 
<!-- row 3 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.nodes#tooltip}</tooltip>
 
<fixed-text>Number of nodes: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.nodes">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.nodes#description}</fixed-text>
 
</widget>
 
<!-- row 4 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.mem#tooltip}</tooltip>
 
<fixed-text>Total Memory Needed: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.mem">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.mem#description}</fixed-text>
 
</widget>
 
<!-- row 5 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<tooltip>${ptp_rm:Resource_List.walltime#tooltip}</tooltip>
 
<fixed-text>Wallclock Time: </fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="Resource_List.walltime">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false" widthHint="150"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:Resource_List.walltime#description}</fixed-text>
 
</widget>
 
<!-- row 6 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>MPI Command: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="mpiCommand">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="false"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:mpiCommand#description}</fixed-text>
 
</widget>
 
<!-- row 7 -->
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>MPI Number of Cores: </fixed-text>
 
</widget>
 
<widget type="spinner" readOnly="true" saveValueTo="mpiCores">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" horizontalSpan="2" grabExcessHorizontal="false" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING" grabExcessHorizontal="false"/>
 
</layout-data>
 
<fixed-text>${ptp_rm:mpiCores#description}</fixed-text>
 
</widget>
 
</composite>
 
<!-- STDOUT/STDERR remote path group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="4" makeColumnsEqualWidth="false"/>
 
</layout>
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" grabExcessHorizontal="false" horizontalSpan="4" widthHint="300"/>
 
</layout-data>
 
<widget type="label" style="SWT.LEFT">
 
<tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
<fixed-text>Remote Output Path:</fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="stdout_remote_path">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<fixed-text>Enable read upon job termination</fixed-text>
 
</widget>
 
<widget type="label" style="SWT.LEFT">
 
<tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
<fixed-text>Remote Error Path:</fixed-text>
 
</widget>
 
<widget type="text" style="SWT.BORDER" saveValueTo="stderr_remote_path">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="100"/>
 
</layout-data>
 
</widget>
 
<widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
<fixed-text>Enable read upon job termination</fixed-text>
 
</widget>
 
</composite>
 
</dynamic>
 
<dynamic>
 
<title>Advanced PBS Settings</title>
 
<composite>
 
<layout>
 
<grid-layout numColumns="1"/>
 
</layout>
 
<layout-data>
 
<grid-data widthHint="600" heightHint="900" horizontalSpan="1"/>
 
</layout-data>
 
<!-- QUEUES remote path group -->
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="3" makeColumnsEqualWidth="false"/>
 
</layout>
 
<widget type="label" style="SWT.LEFT">
 
<layout-data>
 
<grid-data horizontalAlign="SWT.BEGINNING"/>
 
</layout-data>
 
<tooltip>${ptp_rm:destination#tooltip}</tooltip>
 
<fixed-text>Queue: </fixed-text>
 
</widget>
 
<widget type="combo" style="SWT.BORDER" readOnly="true" saveValueTo="destination">
 
<layout-data>
 
<grid-data widthHint="150" horizontalAlign="SWT.FILL" horizontalSpan="2"/>
 
</layout-data>
 
<items-from>queues</items-from>
 
</widget>
 
</composite>
 
<composite group="true">
 
<layout>
 
<grid-layout numColumns="1"/>
 
</layout>
 
<widget type="text" readOnly="true" style="SWT.LEFT | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL">
 
<layout-data>
 
<grid-data widthHint="600" heightHint="75" horizontalSpan="1"/>
 
</layout-data>
 
<dynamic-text>
 
<arg>${ptp_rm:allAttributes#value}</arg>
 
<arg isUndefinedIfMatches=" destination=''"> destination='${ptp_rm:destination#value}'</arg>
 
</dynamic-text>
 
</widget>
 
<viewer name="allAttributes" style="SWT.BORDER | SWT.MULTI" sort="true" type="tree">
 
<layout-data>
 
<grid-data widthHint="600" heightHint="400" horizontalSpan="1"/>
 
</layout-data>
 
<column-data name="Name" width="175">
 
<tooltip>Double-click on selected rows toggles their checked value.</tooltip>
 
</column-data>
 
<column-data name="Value" width="400">
 
<tooltip>Click to activate value widget.</tooltip>
 
</column-data>
 
<items allPredefined="true">
 
<exclude>destination</exclude>
 
</items>
 
<value pattern="@name='@value'"/>
 
</viewer>
 
</composite>
 
<!-- STDOUT/STDERR remote path group -->
 
              <composite group="true">
 
                  <layout>
 
                    <grid-layout numColumns="4" makeColumnsEqualWidth="false"/>
 
                  </layout>
 
                  <layout-data>
 
                    <grid-data horizontalAlign="SWT.FILL" grabExcessHorizontal="false" horizontalSpan="4" widthHint="400"/>
 
                  </layout-data>
 
                  <widget type="label" style="SWT.LEFT">
 
                    <tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
                    <fixed-text>Remote Output Path:</fixed-text>
 
                  </widget>
 
                  <widget type="text" style="SWT.BORDER" saveValueTo="stdout_remote_path">
 
                    <layout-data>
 
                        <grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="175"/>
 
                    </layout-data>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
                    <fixed-text>Enable read upon job termination</fixed-text>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT">
 
                    <tooltip>${ptp_rm:remote_path_tooltip#default}</tooltip>
 
                    <fixed-text>Remote Error Path:</fixed-text>
 
                  </widget>
 
                  <widget type="text" style="SWT.BORDER" saveValueTo="stderr_remote_path">
 
                    <layout-data>
 
                        <grid-data horizontalAlign="SWT.FILL" horizontalSpan="2" grabExcessHorizontal="true" widthHint="175"/>
 
                    </layout-data>
 
                  </widget>
 
                  <widget type="label" style="SWT.LEFT" foreground="SWT.COLOR_DARK_BLUE">
 
                    <fixed-text>Enable read upon job termination</fixed-text>
 
                  </widget>
 
              </composite>
 
</composite>
 
</dynamic>
 
<import>Import PBS Script</import>
 
</launch-tab>
 
 
</control-data>
 
</control-data>
<monitor-data schedulerType="PBS">
+
<monitor-data schedulerType="test">
 
<driver>
 
<driver>
 
<name></name>
 
<name></name>

Latest revision as of 20:54, 1 August 2011

JAXB Configurable Resource Manager XML

XSD

<?xml version="1.0" encoding="UTF-8"?>
<!-- ******************************************************************************* -->
<!-- * Copyright (c) 2011 University of Illinois All rights reserved. This program -->
<!-- * and the accompanying materials are made available under the terms of the -->
<!-- * Eclipse Public License v1.0 which accompanies this distribution, and is -->
<!-- * available at http://www.eclipse.org/legal/epl-v10.html -->
<!-- * -->
<!-- * Contributors: -->
<!-- * Albert L. Rossi - design and implementation -->
<!-- ****************************************************************************** -->
<xs:schema targetNamespace="http://org.eclipse.ptp/rm" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rm="http://org.eclipse.ptp/rm"
	elementFormDefault="qualified">
	<xs:element name="resource-manager-builder" type="rm:resource-manager-data"/>
	<xs:complexType name="resource-manager-data">
		<xs:sequence>
			<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
			<xs:element name="control-data" minOccurs="0" type="rm:control-type"/>
			<xs:element name="monitor-data" minOccurs="0" type="rm:monitor-type"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="site-type">
		<xs:sequence>
			<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
			<xs:element minOccurs="0" name="monitor-connection" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="control-type">
		<xs:sequence>
			<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
			<xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="rm:attribute-type"/>
			<xs:element name="managed-files" minOccurs="0" maxOccurs="unbounded" type="rm:managed-files-type"/>
			<xs:element name="script" minOccurs="0" type="rm:script-type"/>
			<xs:element name="start-up-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
			<xs:choice minOccurs="0">
				<xs:sequence>
					<xs:element name="submit-interactive" type="rm:command-type"/>
					<xs:element name="submit-interactive-debug" type="rm:command-type" minOccurs="0"/>
				</xs:sequence>
				<xs:sequence>
					<xs:element name="submit-batch" type="rm:command-type"/>
					<xs:element name="submit-batch-debug" type="rm:command-type" minOccurs="0"/>
				</xs:sequence>
			</xs:choice>
			<xs:element name="get-job-status" type="rm:command-type" minOccurs="0"/>
			<xs:element name="terminate-job" type="rm:command-type" minOccurs="0"/>
			<xs:element name="suspend-job" type="rm:command-type" minOccurs="0"/>
			<xs:element name="resume-job" type="rm:command-type" minOccurs="0"/>
			<xs:element name="hold-job" type="rm:command-type" minOccurs="0"/>
			<xs:element name="release-job" type="rm:command-type" minOccurs="0"/>
			<xs:element name="shut-down-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
			<xs:element name="button-action" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
			<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="property-type">
		<xs:sequence>
			<xs:element name="default" minOccurs="0" type="xs:string"/>
			<xs:element name="value" minOccurs="0"/>
			<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
		<xs:attribute name="visible" type="xs:boolean" default="true"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="translateBooleanAs" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="attribute-type">
		<xs:sequence>
			<xs:element name="description" minOccurs="0" type="xs:string"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="choice" minOccurs="0" type="xs:string"/>
			<xs:element name="items-from" minOccurs="0" type="xs:string"/>
			<xs:element name="default" minOccurs="0" type="xs:string"/>
			<xs:element name="value" minOccurs="0"/>
			<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
			<xs:element name="validator" minOccurs="0" type="rm:validator-type"/>
		</xs:sequence>
		<xs:attribute name="name" use="required" type="xs:string"/>
		<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
		<xs:attribute name="visible" type="xs:boolean" default="true"/>
		<xs:attribute name="status" type="xs:string"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="translateBooleanAs" type="xs:string"/>
		<xs:attribute name="min" type="xs:int"/>
		<xs:attribute name="max" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="managed-files-type">
		<xs:sequence>
			<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
			<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="script-type">
		<xs:sequence>
			<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
			<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
		</xs:sequence>
		<xs:attribute name="insertEnvironmentAfter" type="xs:int" default="-1"/>
		<xs:attribute name="deleteAfterSubmit" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="line-type">
		<xs:sequence>
			<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="command-type">
		<xs:sequence>
			<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
			<xs:element name="input" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
			<xs:element name="environment" minOccurs="0" maxOccurs="unbounded" type="rm:name-value-pair-type"/>
			<xs:element name="stdout-parser" minOccurs="0" type="rm:tokenizer-type"/>
			<xs:element name="stderr-parser" minOccurs="0" type="rm:tokenizer-type"/>
			<xs:element name="redirect-parser" minOccurs="0" type="rm:tokenizer-type"/>
		</xs:sequence>
		<xs:attribute name="name" use="required" type="xs:string"/>
		<xs:attribute name="directory" type="xs:string"/>
		<xs:attribute name="redirectStderr" type="xs:boolean" default="false"/>
		<xs:attribute name="streamBufferLimit" type="xs:int" default="-1"/>
		<xs:attribute name="replaceEnvironment" type="xs:boolean" default="false"/>
		<xs:attribute name="waitForId" type="xs:boolean" default="false"/>
		<xs:attribute name="ignoreExitStatus" type="xs:boolean" default="false"/>
		<xs:attribute name="keepOpen" type="xs:boolean" default="false"/>
		<xs:attribute name="flags" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="launch-tab-type">
		<xs:sequence>
			<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
			<xs:element name="import" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="export-for-override" minOccurs="0" type="rm:attribute-viewer-type"/>
					</xs:sequence>
					<xs:attribute name="title" type="xs:string" use="required"/>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="validator-type">
		<xs:sequence>
			<xs:choice minOccurs="0">
				<xs:element name="regex"  type="rm:regex-type"/>
				<xs:element name="file-info" type="rm:file-match-type"/>
				<xs:sequence>
				  <xs:element name="range" maxOccurs="unbounded" type="rm:range-type"/>
				</xs:sequence>
			</xs:choice>
			<xs:element name="error-message" minOccurs="0" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="managed-file-type">
		<xs:choice>
			<xs:sequence>
				<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
			</xs:sequence>
			<xs:element name="contents" type="xs:string"/>
			<xs:element name="path" type="xs:string"/>
		</xs:choice>
		<xs:attribute name="name" use="required"/>
		<xs:attribute name="uniqueIdPrefix" type="xs:boolean" default="false"/>
		<xs:attribute name="resolveContents" type="xs:boolean" default="true"/>
		<xs:attribute name="deleteSourceAfterUse" type="xs:boolean" default="false"/>
		<xs:attribute name="deleteTargetAfterUse" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="file-match-type">
		<xs:attribute name="efsAttributes" type="xs:string"/>
		<xs:attribute name="lastModifiedBefore" type="xs:string"/>
		<xs:attribute name="lastModifiedAfter" type="xs:string"/>
		<xs:attribute name="length" type="xs:long"/>
		<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
	</xs:complexType>
	  <xs:complexType name="range-type">
     <xs:attribute name="lessThan" type="xs:string"/>
     <xs:attribute name="lessThanOrEqualTo" type="xs:string"/>
     <xs:attribute name="greaterThan" type="xs:string"/>
     <xs:attribute name="greaterThanOrEqualTo" type="xs:string"/>
   </xs:complexType>
	<xs:complexType name="name-value-pair-type">
		<xs:sequence>
			<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
		</xs:sequence>
		<xs:attribute name="name" use="required" type="xs:string"/>
		<xs:attribute name="value" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="tab-controller-type">
		<xs:sequence>
			<xs:element name="title" type="xs:string"/>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="tab-folder" type="rm:tab-folder-type"/>
				<xs:element name="composite" type="rm:composite-type"/>
				<xs:element name="widget" type="rm:widget-type"/>
				<xs:element name="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
		<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
		<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
		<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="regex-type" mixed="true">
		<xs:attribute name="flags" type="xs:string"/>
		<xs:attribute name="split" type="xs:boolean" default="false"/>
		<xs:attribute name="expression" type="xs:string"/>
	</xs:complexType>
	<xs:complexType mixed="true" name="arg-type">
		<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
		<xs:attribute name="resolve" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="tokenizer-type">
		<xs:sequence>
			<xs:choice>
				<xs:element name="type" type="xs:string"/>
				<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
			</xs:choice>
			<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
			<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
		</xs:sequence>
		<xs:attribute name="delim" type="xs:string"/>
		<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
		<xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
		<xs:attribute name="all" type="xs:boolean" default="false"/>
		<xs:attribute name="save" type="xs:int" default="0"/>
		<xs:attribute name="applyToAll" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="tab-folder-type">
		<xs:sequence>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="item" maxOccurs="unbounded" type="rm:tab-item-type"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="composite-type">
		<xs:sequence>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="title" minOccurs="0" type="xs:string"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="tab-folder" type="rm:tab-folder-type"/>
				<xs:element name="composite" type="rm:composite-type"/>
				<xs:element name="widget" type="rm:widget-type"/>
				<xs:element name="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="group" type="xs:boolean" default="false"/>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="tab-item-type">
		<xs:sequence>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="title" type="xs:string"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="composite" type="rm:composite-type"/>
				<xs:element name="tab-folder" type="rm:tab-folder-type"/>
				<xs:element name="widget" type="rm:widget-type"/>
				<xs:element name="browse" type="rm:browse-type"/>
				<xs:element name="action" type="rm:push-button-type"/>
				<xs:element name="button-group" type="rm:button-group-type"/>
				<xs:element name="viewer" type="rm:attribute-viewer-type"/>
			</xs:choice>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="layout-type">
		<xs:choice>
			<xs:element name="fill-layout" type="rm:fill-layout-type"/>
			<xs:element name="row-layout" type="rm:row-layout-type"/>
			<xs:element name="grid-layout" type="rm:grid-layout-type"/>
			<xs:element name="form-layout" type="rm:form-layout-type"/>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="layout-data-type">
		<xs:choice>
			<xs:element name="row-data" type="rm:row-data-type"/>
			<xs:element name="grid-data" type="rm:grid-data-type"/>
			<xs:element name="form-data" type="rm:form-data-type"/>
		</xs:choice>
	</xs:complexType>
	<xs:complexType name="fill-layout-type">
		<xs:attribute name="type" type="xs:string"/>
		<xs:attribute name="marginHeight" type="xs:int"/>
		<xs:attribute name="marginWidth" type="xs:int"/>
		<xs:attribute name="spacing" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="row-layout-type">
		<xs:attribute name="type" type="xs:string"/>
		<xs:attribute name="center" type="xs:boolean" default="false"/>
		<xs:attribute name="justify" type="xs:boolean" default="false"/>
		<xs:attribute name="fill" type="xs:boolean" default="false"/>
		<xs:attribute name="pack" type="xs:boolean" default="false"/>
		<xs:attribute name="wrap" type="xs:boolean" default="false"/>
		<xs:attribute name="marginHeight" type="xs:int"/>
		<xs:attribute name="marginWidth" type="xs:int"/>
		<xs:attribute name="marginTop" type="xs:int"/>
		<xs:attribute name="marginBottom" type="xs:int"/>
		<xs:attribute name="marginLeft" type="xs:int"/>
		<xs:attribute name="marginRight" type="xs:int"/>
		<xs:attribute name="spacing" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="grid-layout-type">
		<xs:attribute name="numColumns" type="xs:int"/>
		<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="false"/>
		<xs:attribute name="marginHeight" type="xs:int"/>
		<xs:attribute name="marginWidth" type="xs:int"/>
		<xs:attribute name="marginTop" type="xs:int"/>
		<xs:attribute name="marginBottom" type="xs:int"/>
		<xs:attribute name="marginLeft" type="xs:int"/>
		<xs:attribute name="marginRight" type="xs:int"/>
		<xs:attribute name="horizontalSpacing" type="xs:int"/>
		<xs:attribute name="verticalSpacing" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="form-layout-type">
		<xs:attribute name="marginHeight" type="xs:int"/>
		<xs:attribute name="marginWidth" type="xs:int"/>
		<xs:attribute name="marginTop" type="xs:int"/>
		<xs:attribute name="marginBottom" type="xs:int"/>
		<xs:attribute name="marginLeft" type="xs:int"/>
		<xs:attribute name="marginRight" type="xs:int"/>
		<xs:attribute name="spacing" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="row-data-type">
		<xs:attribute name="height" type="xs:int"/>
		<xs:attribute name="width" type="xs:int"/>
		<xs:attribute name="exclude" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="grid-data-type">
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="horizontalAlign" type="xs:string"/>
		<xs:attribute name="verticalAlign" type="xs:string"/>
		<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="false"/>
		<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
		<xs:attribute name="horizontalSpan" type="xs:int"/>
		<xs:attribute name="verticalSpan" type="xs:int"/>
		<xs:attribute name="horizontalIndent" type="xs:int"/>
		<xs:attribute name="verticalIndent" type="xs:int"/>
		<xs:attribute name="minHeight" type="xs:int"/>
		<xs:attribute name="minWidth" type="xs:int"/>
		<xs:attribute name="heightHint" type="xs:int"/>
		<xs:attribute name="widthHint" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="form-data-type">
		<xs:sequence>
			<xs:element name="top" minOccurs="0" type="rm:form-attachment-type"/>
			<xs:element name="bottom" minOccurs="0" type="rm:form-attachment-type"/>
			<xs:element name="left" minOccurs="0" type="rm:form-attachment-type"/>
			<xs:element name="right" minOccurs="0" type="rm:form-attachment-type"/>
		</xs:sequence>
		<xs:attribute name="height" type="xs:int"/>
		<xs:attribute name="width" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="form-attachment-type">
		<xs:attribute name="alignment" type="xs:string"/>
		<xs:attribute name="numerator" type="xs:int"/>
		<xs:attribute name="denominator" type="xs:int"/>
		<xs:attribute name="offset" type="xs:int"/>
	</xs:complexType>
	<xs:complexType name="widget-type">
		<xs:sequence>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="items-from" minOccurs="0" type="xs:string"/>
			<xs:element name="fixed-text" minOccurs="0" type="xs:string"/>
			<xs:element name="dynamic-text" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="type" default="text">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="label"/>
					<xs:enumeration value="text"/>
					<xs:enumeration value="checkbox"/>
					<xs:enumeration value="radiobutton"/>
					<xs:enumeration value="spinner"/>
					<xs:enumeration value="combo"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="buttonId" type="xs:string"/>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="button-group-type">
		<xs:sequence>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="title" minOccurs="0" type="xs:string"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="button" maxOccurs="unbounded" type="rm:widget-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="group" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="style" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="browse-type">
		<xs:sequence>
			<xs:element name="text-layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="button-layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="text-control-state" minOccurs="0" type="rm:control-state-type"/>
			<xs:element name="button-control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="textStyle" type="xs:string"/>
		<xs:attribute name="directory" type="xs:boolean" default="false"/>
		<xs:attribute name="uri" type="xs:boolean" default="false"/>
		<xs:attribute name="localOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
		<xs:attribute name="saveValueTo" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="push-button-type">
		<xs:sequence>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
			<xs:element name="button-action" minOccurs="0" type="rm:button-action-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="title" type="xs:string"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="button-action-type">
		<xs:sequence>
			<xs:element name="action" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="clearValue" type="xs:string"/>
		<xs:attribute name="refresh" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="attribute-viewer-type">
		<xs:sequence>
			<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
			<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
			<xs:element name="label" minOccurs="0" type="xs:string"/>
			<xs:element name="column-data" minOccurs="0" maxOccurs="7" type="rm:column-data-type"/>
			<xs:element name="items" type="rm:viewer-items-type"/>
			<xs:element name="value" minOccurs="0" type="rm:template-type"/>
			<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
		</xs:sequence>
		<xs:attribute name="type" default="table">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="table"/>
					<xs:enumeration value="tree"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="initialAllChecked" type="xs:boolean" default="true"/>
		<xs:attribute name="sort" type="xs:boolean" default="true"/>
		<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
		<xs:attribute name="linesVisible" type="xs:boolean" default="true"/>
		<xs:attribute name="tooltipEnabled" type="xs:boolean" default="true"/>
		<xs:attribute name="style" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="viewer-items-type">
		<xs:sequence>
			<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
			<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="allPredefined" type="xs:boolean" default="false"/>
		<xs:attribute name="allDiscovered" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="font-type">
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="size" type="xs:int" default="9"/>
		<xs:attribute name="style" default="normal">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="normal"/>
					<xs:enumeration value="bold"/>
					<xs:enumeration value="italic"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="template-type">
		<xs:attribute name="pattern" type="xs:string"/>
		<xs:attribute name="separator" type="xs:string" default=" "/>
	</xs:complexType>
	<xs:complexType name="target-type">
		<xs:sequence>
			<xs:element name="match" maxOccurs="unbounded" type="rm:match-type"/>
			<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
			<xs:element name="else" minOccurs="0">
				<xs:complexType>
					<xs:choice>
						<xs:element name="add" type="rm:add-type"/>
						<xs:element name="append" type="rm:append-type"/>
						<xs:element name="put" type="rm:put-type"/>
						<xs:element name="set" type="rm:set-type"/>
						<xs:element name="throw" type="rm:throw-type"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="ref" type="xs:string"/>
		<xs:attribute name="type" default="property">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="property"/>
					<xs:enumeration value="attribute"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
		<xs:attribute name="matchAll" type="xs:boolean" default="false"/>
		<xs:attribute name="allowOverwrites" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="match-type">
		<xs:sequence>
			<xs:element name="expression" minOccurs="0" type="rm:regex-type"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="add" type="rm:add-type"/>
				<xs:element name="append" type="rm:append-type"/>
				<xs:element name="put" type="rm:put-type"/>
				<xs:element name="set" type="rm:set-type"/>
				<xs:element name="throw" type="rm:throw-type"/>
			</xs:choice>
		</xs:sequence>
		<xs:attribute name="moveToTop" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="column-data-type">
		<xs:sequence>
			<xs:element name="font" minOccurs="0" type="rm:font-type"/>
			<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string"/>
		<xs:attribute name="width" type="xs:int" default="-1"/>
		<xs:attribute name="alignment" type="xs:string"/>
		<xs:attribute name="resizable" type="xs:boolean" default="false"/>
		<xs:attribute name="moveable" type="xs:boolean" default="false"/>
		<xs:attribute name="foreground" type="xs:string"/>
		<xs:attribute name="background" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="set-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="throw-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="message" type="xs:string"/>
	</xs:complexType>
	<xs:complexType name="add-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="append-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="separator" type="xs:string"/>
		<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="put-type">
		<xs:sequence>
			<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
		</xs:sequence>
		<xs:attribute name="field" type="xs:string"/>
		<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
	</xs:complexType>
	<xs:complexType name="entry-type">
		<xs:attribute name="key" type="xs:string"/>
		<xs:attribute name="keyGroup" type="xs:int" default="0"/>
		<xs:attribute name="keyIndex" type="xs:int" default="0"/>
		<xs:attribute name="value" type="xs:string"/>
		<xs:attribute name="valueGroup" type="xs:int" default="0"/>
		<xs:attribute name="valueIndex" type="xs:int" default="0"/>
	</xs:complexType>
	<xs:complexType name="test-type">
		<xs:sequence>
			<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
			<xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="2"/>
			<xs:choice minOccurs="0" maxOccurs="unbounded">
				<xs:element name="add" type="rm:add-type"/>
				<xs:element name="append" type="rm:append-type"/>
				<xs:element name="put" type="rm:put-type"/>
				<xs:element name="set" type="rm:set-type"/>
				<xs:element name="throw" type="rm:throw-type"/>
			</xs:choice>
			<xs:element name="else" minOccurs="0">
				<xs:complexType>
					<xs:choice maxOccurs="unbounded">
						<xs:element name="add" type="rm:add-type"/>
						<xs:element name="append" type="rm:append-type"/>
						<xs:element name="put" type="rm:put-type"/>
						<xs:element name="set" type="rm:set-type"/>
						<xs:element name="throw" type="rm:throw-type"/>
					</xs:choice>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="op">
			<xs:simpleType>
				<xs:restriction base="xs:string">
					<xs:enumeration value="EQ"/>
					<xs:enumeration value="LT"/>
					<xs:enumeration value="GT"/>
					<xs:enumeration value="LE"/>
					<xs:enumeration value="GE"/>
					<xs:enumeration value="AND"/>
					<xs:enumeration value="OR"/>
					<xs:enumeration value="NOT"/>
				</xs:restriction>
			</xs:simpleType>
		</xs:attribute>
	</xs:complexType>
	<xs:complexType name="control-state-type">
		<xs:sequence>
			<xs:choice minOccurs="0">
				<xs:element name="show-if" minOccurs="0" type="rm:control-state-rule-type"/>
				<xs:element name="hide-if" minOccurs="0" type="rm:control-state-rule-type"/>
			</xs:choice>
			<xs:choice minOccurs="0">
				<xs:element name="enable-if" minOccurs="0" type="rm:control-state-rule-type"/>
				<xs:element name="disable-if" minOccurs="0" type="rm:control-state-rule-type"/>
			</xs:choice>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="control-state-rule-type">
		<xs:choice>
			<xs:element name="not" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="and" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="or" minOccurs="0">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:choice>
		<xs:attribute name="button" type="xs:string"/>
		<xs:attribute name="selected" type="xs:boolean" default="true"/>
	</xs:complexType>
	<xs:complexType name="monitor-type">
		<xs:sequence>
			<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
			<xs:element name="driver" minOccurs="0" type="rm:monitor-driver-type"/>
		</xs:sequence>
		<xs:attribute name="schedulerType" type="xs:string"/>
		<xs:attribute name="refreshFrequencyInSeconds" type="xs:int" default="60"/>
	</xs:complexType>
	<xs:complexType name="monitor-driver-type">
		<xs:choice>
			<xs:element name="url" type="xs:string"/>
			<xs:sequence>
				<xs:element name="name" type="xs:string"/>
				<xs:element name="path" minOccurs="0" type="xs:string"/>
				<xs:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
</xs:schema>

Tokenizer Examples

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

Back to the top