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)
Line 1: Line 1:
 
== Resource Manager XSD ==  
 
== Resource Manager XSD ==  
 
+
'''''Current version (05/19/2011):'''''   -alr
'''The following is a draft of the proposed Resource Manager XML Schema (XSD).  It has been annotated internally where I felt some explanation necessary.'''
+
 
+
'''Note that I have not attempted to figure out yet what the monitoring part will look like or what the control and monitoring sections may need to interact; it may also be the case that some things inside the control node should come up a level.'''
+
 
+
'''''Revised version 1 (17/01/2011):'''''
+
 
+
'''''Revised version 2 (19/01/2011):''''' I have adjusted the schema to accommodate the points raised by our discussions on ptp-dev.  More tomorrow, I'm sure. -alr
+
 
+
'''''Revised version 3 (23/01/2011):'''''  A few more changes I discovered needed to be made as I work through the XML instance for PBS. -alr
+
 
+
'''''Revised version 4 (24/01/2011):'''''  Numerous tweaks. I have added a few specialized widgets and groups involving job attributes whose construction is standardized; this is for economy of expression more than anything else.  -alr
+
 
+
'''''Revised version 5 (25/01/2011):'''''  Changed how to specify the management of files as per discussion.  -alr
+
 
+
'''''Revised version 6 (27/01/2011):'''''  Added browse enumeration types; switched script commands to arglists; other minor corrections.  -alr
+
 
+
'''''Revised version 7 (09/02/2011):'''''  Modified UI elements to expose more granularity (grid-layout, grid-data); corrected PBS xml.  -alr
+
 
+
'''''Revised version 8 (22/02/2011):'''''  Added 'set' element to parser to take care of injection on JobAttributes; added value to Property.  -alr
+
 
+
'''''Revised version 9 (27/02/2011):'''''  Numerous structural changes.  -alr
+
 
+
'''''Revised version 10 (27/02/2011):''''' More structural changes. Because the page content was becoming long, I've taken down the XSD; it can be examined in the data directory of the org.eclipse.ptp.rm.jaxb.core plugin, along with the example PBS xml.  -alr
+
 
+
----
+
'''''A working design for the Configurable Regex Stream Tokenizer (05/03/2011):'''''
+
 
+
<source lang="text">
+
    An explanation of the ConfigurableRegexTokenizer.
+
 
+
    1. Tokenizer loops through its read commands until end of the stream is encountered.
+
   
+
    2. There are two read modes:
+
        a) reads until it matches (forward matching, all="false", default);
+
        b) reads until end of the stream is encountered (all="true"), saving the most recent
+
          number of delimited parts (save="#"), then reads through each of these, 
+
          attempting to match each part (a read element of this sort logically
+
          must be the last one encountered by the tokenizer).
+
 
+
        Read either looks for a delimiting character, or reads a given
+
        number of characters; in the latter case, "maxMatchLength" will be
+
        used to determine the buffer size (2*maxMatchLength).
+
 
+
        Read has two match modes:
+
        a) mode="or" [default], all matches are tried, but read returns when any
+
          one of the matches is satisfied; the first qualifying match will be selected
+
          so the patterns should be ordered from most to least restrictive;
+
        b) mode="and", all unmatched matches are tried, but read loops until they
+
          are all satisfied (this could be out of order).
+
       
+
        A match can be without target or actions (and even without a regex,
+
        in which case its value is true), thus acting like a "skip" command.
+
 
+
    3. Regex can be used to split the input (split="true"), or applied to capture
+
        groups; all the Java flags are available (using strings that look like
+
        the or'd int expressions, e.g. "CASE_INSENSITIVE | UNIX_LINES" ).
+
   
+
    4. Target is an action either dereferencing or creating the object:
+
        a) "ref" indicates it should be retrieved from the RM env map (an exception
+
          is raised if it does not exist);
+
        b) if there is no name, the "type" field must be set indicating which
+
          kind of object to create (property, attribute);
+
        c) if "idFrom" is used, it indicates the group or split index of the
+
          match which identifies the instance;
+
        d) anonymously created properties or attributes can be used, but
+
          one at a time; the most recently created is the one acted on;
+
          in other words, this mode is only possible when the parts of the
+
          object to be matched are known to be streamed in order.
+
   
+
    5. a) Set assigns the given match group or index to the field indicated;
+
          alternately, one can assign a string to be evaluated
+
          (a boolean or numerical expression);
+
        b) Add takes the indicated groups or indices and adds them to the
+
          list<string> assigned to the field;
+
        c) Append concatenates the groups or indices and appends the string
+
          to the current value of the field;
+
        d) Put takes the indicated groups or indices and puts them as key-value
+
          pairs into the map<string,string> assigned to the field.
+
</source>
+
 
+
----
+
XSD SNIPPET
+
  
 
<source lang="xml">
 
<source lang="xml">
<xs:element name="stream-parser">
+
<?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:annotation>
 
<xs:documentation>
 
<xs:documentation>
These are attached to the stdout or stderr streams in order to capture the output of the command and add values
+
It is assumed that the xml instance of the schema will bear a name which sufficiently distinguishes it from others
into the resource manager environment. If displayStdout or displayStderr of the command is true, the stream will be passed on to an
+
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
output stream will also be sent to the terminal.
+
LoadLeveler version 4, etc.
 
</xs:documentation>
 
</xs:documentation>
 
</xs:annotation>
 
</xs:annotation>
<xs:complexType>
+
<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:sequence>
<xs:element ref="tokenizer"/>
+
<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:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
+
<xs:element name="error-message" minOccurs="0" type="xs:string"/>
<xs:attribute name="stderr" type="xs:boolean" default="false"/>
+
</xs:sequence>
</xs:complexType>
+
</xs:complexType>
</xs:element>
+
<xs:complexType name="managed-file-type">
<xs:element name="tokenizer">
+
<xs:annotation>
<xs:complexType>
+
<xs:documentation>
<xs:sequence>
+
If 'contents' is present, the file is written.
<xs:choice>
+
</xs:documentation>
<xs:element name="type" type="xs:string">
+
</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:annotation>
 
<xs:documentation>
 
<xs:documentation>
Place to provide a custom tokenizer; type is the extension id contributing to
+
Creates a text widget followed by a push button allowing the user to browse for directory or file.
"org.eclipse.ptp.rm.jaxb.core.streamParserTokenizer".
+
 
</xs:documentation>
 
</xs:documentation>
 
</xs:annotation>
 
</xs:annotation>
</xs:element>
+
</xs:enumeration>
<xs:sequence>
+
</xs:restriction>
<xs:element ref="read" maxOccurs="unbounded"/>
+
</xs:simpleType>
</xs:sequence>
+
</xs:attribute>
</xs:choice>
+
<xs:attribute name="title" type="xs:string"/>
</xs:sequence>
+
<xs:attribute name="style" type="xs:string"/>
</xs:complexType>
+
<xs:attribute name="directory" type="xs:boolean" default="false">
</xs:element>
+
<xs:annotation>
<xs:element name="read">
+
<xs:documentation>
<xs:complexType>
+
For the browser widget. Browse and return directory. Default is browse file.
<xs:sequence>
+
</xs:documentation>
<xs:choice>
+
</xs:annotation>
<xs:element ref="match" minOccurs="0" maxOccurs="unbounded"/>
+
</xs:attribute>
</xs:choice>
+
<xs:attribute name="uri" type="xs:boolean" default="false">
</xs:sequence>
+
<xs:annotation>
<xs:attribute name="delim" type="xs:string"/>
+
<xs:documentation>
<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
+
For the browser widget. Browse connection is local or remote, and returns a uri. Default returns path.
                      <xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
+
</xs:documentation>
<xs:attribute name="all" type="xs:boolean" default="false"/>
+
</xs:annotation>
<xs:attribute name="save" type="xs:int" default="0"/>
+
</xs:attribute>
<xs:attribute name="mode" default="or">
+
<xs:attribute name="localOnly" type="xs:boolean" default="false">
                          <xs:simpleType>
+
<xs:annotation>
                            <xs:restriction base="xs:string">
+
<xs:documentation>
                                <xs:enumeration value="or"/>
+
For the browser widget. Use local file browser instead of the default remote connection browser.
                                <xs:enumeration value="and"/>
+
</xs:documentation>
                            </xs:restriction>
+
</xs:annotation>
                          </xs:simpleType>
+
</xs:attribute>
                      </xs:attribute>
+
<xs:attribute name="readOnly" type="xs:boolean" default="false">
</xs:complexType>
+
<xs:annotation>
</xs:element>
+
<xs:documentation>
        <xs:element name="match">
+
Only applicable to text areas and combo boxes.
<xs:complexType>
+
</xs:documentation>
<xs:sequence>
+
</xs:annotation>
<xs:element ref="regex" minOccurs="0"/>
+
</xs:attribute>
<xs:element ref="target" minOccurs="0"/>
+
<xs:attribute name="saveValueTo" type="xs:string">
<xs:choice minOccurs="0" maxOccurs="unbounded">
+
<xs:annotation>
<xs:element ref="set"/>
+
<xs:documentation>
<xs:element ref="add"/>
+
The widget is directly mapped to a property or attribute in the environment which will receive the entered value.
<xs:element ref="put"/>
+
Use of this attribute is mutually exclusive with the "fixed-" and "dynamic-text" elements.
<xs:element ref="append"/>
+
</xs:documentation>
</xs:choice>
+
</xs:annotation>
</xs:sequence>
+
</xs:attribute>
<xs:attribute name="errorOnMiss" type="xs:boolean" default="false"/>
+
<xs:attribute name="foreground" type="xs:string"/>
</xs:complexType>
+
<xs:attribute name="background" type="xs:string"/>
</xs:element>
+
</xs:complexType>
<xs:element name="target">
+
<xs:complexType name="attribute-viewer-type">
<xs:complexType>
+
<xs:annotation>
  <xs:attribute name="ref" type="xs:string"/>
+
<xs:documentation>
<xs:attribute name="type" type="xs:string"/>
+
These display their value columns as editable widgets. They are provided with checkboxes to indicate which
<xs:attribute name="idFrom" type="xs:int"/>
+
attributes have been chosen. A checkbox button is also placed above the viewer to allow for filtering the unchecked items. The
</xs:complexType>
+
viewer outputs its checked values to the environment (and on update removes unselected ones). The name of the viewer is also stored
</xs:element>
+
against a string of all selected values, constructed from a template.
<xs:element name="regex">
+
</xs:documentation>
      <xs:complexType mixed="true">
+
</xs:annotation>
        <xs:attribute name="flags" type="xs:string"/>
+
<xs:sequence>
        <xs:attribute name="split" type="xs:boolean" default="false"/>
+
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
       </xs:complexType>
+
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
  </xs:element>
+
<xs:element name="label" minOccurs="0" type="xs:string"/>
<xs:element name="set">
+
<xs:element name="column-data" minOccurs="0" maxOccurs="7" type="rm:column-data-type"/>
<xs:complexType>
+
<xs:element name="items" type="rm:viewer-items-type"/>
<xs:attribute name="field" type="xs:string"/>
+
<xs:element name="value" minOccurs="0" type="rm:template-type"/>
<xs:attribute name="group" type="xs:int" default="0"/>
+
</xs:sequence>
<xs:attribute name="index" type="xs:int" default="0"/>
+
<xs:attribute name="type" default="table">
<xs:attribute name="expression" type="xs:string"/>
+
<xs:simpleType>
</xs:complexType>
+
<xs:restriction base="xs:string">
</xs:element>
+
<xs:enumeration value="table"/>
<xs:element name="add">
+
<xs:enumeration value="tree"/>
<xs:complexType>
+
</xs:restriction>
<xs:attribute name="field" type="xs:string"/>
+
</xs:simpleType>
<xs:attribute name="groups" type="xs:string"/>
+
</xs:attribute>
<xs:attribute name="indices" type="xs:string"/>
+
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
+
<xs:attribute name="sort" type="xs:boolean" default="true">
</xs:element>
+
<xs:annotation>
<xs:element name="append">
+
<xs:documentation>
<xs:complexType>
+
On the name field/column. This is a toggle sort, such that alternate clicks reverse the sort direction.
<xs:attribute name="field" type="xs:string"/>
+
</xs:documentation>
<xs:attribute name="groups" type="xs:string"/>
+
</xs:annotation>
<xs:attribute name="indices" type="xs:string"/>
+
</xs:attribute>
<xs:attribute name="separator" type="xs:string"/>
+
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
<xs:attribute name="startTag" type="xs:string"/>
+
<xs:attribute name="linesVisible" type="xs:boolean" default="true"/>
<xs:attribute name="endTag" type="xs:string"/>
+
<xs:attribute name="tooltipEnabled" type="xs:boolean" default="true">
</xs:complexType>
+
<xs:annotation>
</xs:element>
+
<xs:documentation>
<xs:element name="put">
+
Enables column-viewer label provider tooltip support. The tooltip defined for an attribute will appear on the row
<xs:complexType>
+
of the table or the parent node of the tree. The attribute description will also appear as a tooltip on the description columns if
<xs:attribute name="field" type="xs:string"/>
+
they exist.
<xs:attribute name="keyGroups" type="xs:string"/>
+
</xs:documentation>
<xs:attribute name="keyIndices" type="xs:string"/>
+
</xs:annotation>
<xs:attribute name="valueGroups" type="xs:string"/>
+
</xs:attribute>
<xs:attribute name="valueIndices" type="xs:string"/>
+
<xs:attribute name="style" type="xs:string"/>
</xs:complexType>
+
</xs:complexType>
</xs:element>
+
<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>
 
</source>
----
 
EXAMPLES
 
  
<source lang="xml">
+
----
<examples>
+
== Resource Manager PBS XML (Example) ==  
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
+
'''''Current version (05/19/2011):'''''   -alr
to the known property "available-queues" -->
+
<tokenizer>
+
<read delim="\n">
+
<match>
+
<regex>.*</regex>
+
<target ref="available_queues"/>
+
<append field="value" separator="," groups="0"/>
+
</match>
+
</read>
+
</tokenizer>
+
 
+
<!-- EXAMPLE 2: output is to be searched for its final line which should
+
contain a job id of the form "[digits].[chars]" -->
+
<tokenizer>
+
<read delim="\n" all="true" save="1">
+
<match>
+
<regex>([\d]*)[.].*</regex>
+
<target ref="jobId"/>
+
<set field="value" group="1"/>
+
</match>
+
</read>
+
</tokenizer>
+
 
+
<!-- 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) -->
+
<tokenizer>
+
<read delim="\n">
+
<match>
+
<regex>mca:.*:param:([^:]*):value:(.*)</regex>
+
<target type="attribute" idFrom="1"/>
+
<set field="name" group="1"/>
+
<set field="visible" expression="true"/>
+
<set field="value" group="2"/>
+
</match>
+
<match>
+
<regex>mca:.*:param:([^:]*):status:(.*)</regex>
+
<target type="attribute" idFrom="1"/>
+
<set field="status" group="2"/>
+
<set field="readOnly" expression="${this:status} == 'read-only'"/>
+
</match>
+
<match>
+
<regex>mca:.*:param:([^:]*):help:(.*)</regex>
+
<target type="attribute" idFrom="1"/>
+
<set field="tooltip" group="2"/>
+
</match>
+
<match>
+
<regex>(.*):([^:]*)</regex>
+
<target type="attribute" idFrom="1"/>
+
<set field="name" group="1"/>
+
<set field="value" group="2"/>
+
<set field="visible" expression="false"/>
+
<set field="read-only" expression="true"/>
+
</match>
+
</read>
+
</tokenizer>
+
 
+
<!-- EXAMPLE 4a: indeterminate number of definitions, but grouped
+
by delimiter -->
+
<tokenizer>
+
<read delim="\n">
+
<match>
+
<regex>PROPERTY</regex>
+
</match>
+
</read>
+
<read delim="\n" mode="and">
+
<match>
+
<regex>name:(.*)</regex>
+
<target type="property"/>
+
<set field="name" group="1"/>
+
</match>
+
<match>
+
<regex>value:(.*)</regex>
+
<set field="value" group="1"/>
+
</match>
+
</read>
+
<read delim="\n">
+
<match>
+
            <regex>ATTRIBUTE</regex>
+
        </match>
+
</read>
+
<read delim="\n" mode="and">
+
<match>
+
<regex>name:(.*)</regex>
+
<target type="attribute"/>
+
<set field="name" group="1"/>
+
</match>
+
<match>
+
<regex>value:(.*)</regex>
+
<set field="value" group="1"/>
+
</match>
+
</read>
+
</tokenizer>
+
 
+
<!-- EXAMPLE 4b: similar to 4a, but without delimiter (implicit ordering) -->
+
<tokenizer>
+
<read delim="\n" mode="and">
+
<match>
+
<regex>.*</regex>
+
<target type="attribute"/>
+
<set field="name" group="0"/>
+
</match>
+
<match>
+
<regex>.*</regex>
+
<set field="type" group="0"/>
+
</match>
+
<match>
+
<regex>.*</regex>
+
<set field="description" group="0"/>
+
</match>
+
<match>
+
<regex>.*</regex>
+
<set field="tooltip" group="0"/>
+
</match>
+
<match>
+
<regex>.*</regex>
+
<set field="value" group="0"/>
+
</match>
+
</read>
+
</tokenizer>
+
+
<!-- EXAMPLE 4c: like 4a, but with indeterminate type order -->
+
<tokenizer>
+
      <read maxMatchLen="32">
+
        <match>
+
            <regex flags="DOTALL">.*PROPERTY.*name:(\w*).*value:([\d.-]*).*</regex>
+
            <target type="property"/>
+
            <set field="name" group="1"/>
+
            <set field="value" group="2"/>
+
        </match>
+
        <match>
+
            <regex flags="DOTALL">.*PROPERTY.*value:([\d.-]*).*name:(\w*).*</regex>
+
            <target type="property"/>
+
            <set field="value" group="1"/>
+
            <set field="name" group="2"/>
+
        </match>
+
        <match>
+
            <regex flags="DOTALL">.*ATTRIBUTE.*name:(\w*).*value:([\d.-]*).*</regex>
+
            <target type="attribute"/>
+
            <set field="name" group="1"/>
+
            <set field="value" group="2"/>
+
        </match>
+
        <match>
+
            <regex flags="DOTALL">.*ATTRIBUTE.*value:([\d.-]*).*name:(\w*).*</regex>
+
            <target type="attribute"/>
+
            <set field="value" group="1"/>
+
            <set field="name" group="2"/>
+
        </match>
+
      </read>
+
   </tokenizer>
+
 
+
<!-- EXAMPLE 5: indeterminate number of property definitions, but on single line -->
+
<tokenizer>
+
<read delim="\n">
+
<match>
+
<regex>&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;</regex>
+
<target type="property"/>
+
<set field="name" group="1"/>
+
<set field="value" group="2"/>
+
</match>
+
</read>
+
</tokenizer>
+
  
<!-- EXAMPLE 6: looking for values interspersed in the stream but which will
+
<source language="xml">
not exceed 64chars -->
+
<?xml version="1.0" encoding="UTF-8"?>
<tokenizer>
+
<!-- ******************************************************************************* -->
<read maxMatchLen="32">
+
<!-- * Copyright (c) 2011 University of Illinois All rights reserved. This program -->
<match>
+
<!-- * and the accompanying materials are made available under the terms of the -->
<regex flags="DOTALL">&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;</regex>
+
<!-- * Eclipse Public License v1.0 which accompanies this distribution, and is -->
<target ref="jobStates"/>
+
<!-- * available at http://www.eclipse.org/legal/epl-v10.html -->
<put field="value" keyGroups="1" valueGroups="2"/>
+
<!-- * -->
</match>
+
<!-- * Contributors: -->
</read>
+
<!-- * Albert L. Rossi - design and implementation -->
</tokenizer>
+
<!-- ****************************************************************************** -->
</examples>
+
<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>
 
</source>
 
</source>

Revision as of 11:55, 19 May 2011

Resource Manager XSD

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 -->
<!-- ****************************************************************************** -->
<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>

Resource Manager PBS XML (Example)

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

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, otj, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


<?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