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

Revision as of 09:12, 20 June 2011

Resource Manager PBS XML (Example)

Current version (05/19/2011): -alr

<?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"
	xsi:schemaLocation="resource_manager_type.xsd" name="pbs-torque-generic">
	<control-data>
		<property name="queues" visible="false"/>
		<!-- needed by RM internals for fetch; name is fixed by convention -->
		<property name="stdout_remote_path" visible="false"/>
		<!-- needed by RM internals for fetch; name is fixed by convention -->
		<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">
				<target ref="queues">
					<match>
						<expression>Queue: ([\w\d]+)</expression>
						<add field="value">
							<entry valueGroup="1"/>
						</add>
					</match>
				</target>
			</stdout-parser>
		</start-up-command>
		<submit-batch name="submit-batch" waitForId="true">
			<arg>qsub</arg>
			<arg>${ptp_rm:managed_file_for_script#value}</arg>
			<stdout-parser delim="\n" all="true" save="1">
				<target ref="@jobId">
					<match>
						<expression>([\d]+)[.].*</expression>
						<set field="name">
							<entry valueGroup="1"/>
						</set>
						<set field="value">
							<entry value="SUBMITTED"/>
						</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>
		</submit-batch>
		<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>.+[\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>C</value>
						<set field="value">
							<entry value="COMPLETED"/>
						</set>
					</test>
					<test op="EQ">
						<value>#value</value>
						<value>E</value>
						<set field="value">
							<entry value="COMPLETED"/>
						</set>
					</test>
					<test op="EQ">
						<value>#value</value>
						<value>H</value>
						<set field="value">
							<entry value="SYSTEM_ON_HOLD"/>
						</set>
					</test>
				</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>
		<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>
	<monitor-data schedulerType="PBS">
		<driver>
			<name></name>
		</driver>
	</monitor-data>
</resource-manager-builder>

Back to the top