Skip to main content

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

Jump to: navigation, search

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

< PTP‎ | designs
(Resource Manager XSD)
(Tokenizer Examples)
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Resource Manager XSD ==  
+
= JAXB Configurable Resource Manager XML =
  
'''The following is a draft of the proposed Resource Manager XML Schema (XSD).  It has been annotated internally where I felt some explanation necessary.'''
+
== XSD ==
 
+
'''Note that I have not attempted to figure out yet what the monitoring part will look like or what the control and monitoring sections may need to interact; it may also be the case that some things inside the control node should come up a level.'''
+
 
+
'''''Revised version 1 (17/01/2011):'''''
+
 
+
'''''Revised version 2 (19/01/2011):'''''  I have adjusted the schema to accommodate the points raised by our discussions on ptp-dev.  More tomorrow, I'm sure. -alr
+
 
+
'''''Revised version 3 (23/01/2011):'''''  A few more changes I discovered needed to be made as I work through the XML instance for PBS. -alr
+
 
+
'''''Revised version 4 (24/01/2011):'''''  Numerous tweaks. I have added a few specialized widgets and groups involving job attributes whose construction is standardized; this is for economy of expression more than anything else.  -alr
+
 
+
'''''Revised version 5 (25/01/2011):'''''  Changed how to specify the management of files as per discussion.  -alr
+
 
+
'''''Revised version 6 (27/01/2011):'''''  Added browse enumeration types; switched script commands to arglists; other minor corrections.  -alr
+
 
+
'''''Revised version 7 (09/02/2011):'''''  Modified UI elements to expose more granularity (grid-layout, grid-data); corrected PBS xml.  -alr
+
 
+
'''''Revised version 8 (22/02/2011):'''''  Added 'set' element to parser to take care of injection on JobAttributes; added value to Property.  -alr
+
 
+
'''''Revised version 9 (27/02/2011):'''''  Numerous structural changes.  -alr
+
 
+
'''''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;
+
        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,
+
        default value = true), in which case it acts 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"?>
<xs:annotation>
+
<!-- ******************************************************************************* -->
<xs:documentation>
+
<!-- * Copyright (c) 2011 University of Illinois All rights reserved. This program -->
These are attached to the stdout or stderr streams in order to capture the output of the command and add values
+
<!-- * and the accompanying materials are made available under the terms of the -->
into the resource manager environment. If displayStdout or displayStderr of the command is true, the stream will be passed on to an
+
<!-- * Eclipse Public License v1.0 which accompanies this distribution, and is -->
output stream will also be sent to the terminal.
+
<!-- * available at http://www.eclipse.org/legal/epl-v10.html -->
</xs:documentation>
+
<!-- * -->
</xs:annotation>
+
<!-- * Contributors: -->
<xs:complexType>
+
<!-- * Albert L. Rossi - design and implementation -->
 +
<!-- ****************************************************************************** -->
 +
<xs:schema targetNamespace="http://org.eclipse.ptp/rm" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rm="http://org.eclipse.ptp/rm"
 +
elementFormDefault="qualified">
 +
<xs:element name="resource-manager-builder" type="rm:resource-manager-data"/>
 +
<xs:complexType name="resource-manager-data">
 +
<xs:sequence>
 +
<xs:element name="site-data" minOccurs="0" type="rm:site-type"/>
 +
<xs:element name="control-data" minOccurs="0" type="rm:control-type"/>
 +
<xs:element name="monitor-data" minOccurs="0" type="rm:monitor-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="site-type">
 +
<xs:sequence>
 +
<xs:element minOccurs="0" name="control-connection" type="xs:string"/>
 +
<xs:element minOccurs="0" name="monitor-connection" type="xs:string"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="control-type">
 +
<xs:sequence>
 +
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
 +
<xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="rm:attribute-type"/>
 +
<xs:element name="managed-files" minOccurs="0" maxOccurs="unbounded" type="rm:managed-files-type"/>
 +
<xs:element name="script" minOccurs="0" type="rm:script-type"/>
 +
<xs:element name="start-up-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
 +
<xs:choice minOccurs="0">
 +
<xs:sequence>
 +
<xs:element name="submit-interactive" type="rm:command-type"/>
 +
<xs:element name="submit-interactive-debug" type="rm:command-type" minOccurs="0"/>
 +
</xs:sequence>
 +
<xs:sequence>
 +
<xs:element name="submit-batch" type="rm:command-type"/>
 +
<xs:element name="submit-batch-debug" type="rm:command-type" minOccurs="0"/>
 +
</xs:sequence>
 +
</xs:choice>
 +
<xs:element name="get-job-status" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="terminate-job" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="suspend-job" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="resume-job" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="hold-job" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="release-job" type="rm:command-type" minOccurs="0"/>
 +
<xs:element name="shut-down-command" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
 +
<xs:element name="button-action" minOccurs="0" maxOccurs="unbounded" type="rm:command-type"/>
 +
<xs:element name="launch-tab" minOccurs="0" type="rm:launch-tab-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="property-type">
 +
<xs:sequence>
 +
<xs:element name="default" minOccurs="0" type="xs:string"/>
 +
<xs:element name="value" minOccurs="0"/>
 +
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" type="xs:string"/>
 +
<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
 +
<xs:attribute name="visible" type="xs:boolean" default="true"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="translateBooleanAs" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="attribute-type">
 +
<xs:sequence>
 +
<xs:element name="description" minOccurs="0" type="xs:string"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="choice" minOccurs="0" type="xs:string"/>
 +
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
 +
<xs:element name="default" minOccurs="0" type="xs:string"/>
 +
<xs:element name="value" minOccurs="0"/>
 +
<xs:element name="link-value-to" minOccurs="0" type="xs:string"/>
 +
<xs:element name="validator" minOccurs="0" type="rm:validator-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" use="required" type="xs:string"/>
 +
<xs:attribute name="type" type="xs:string" default="java.lang.String"/>
 +
<xs:attribute name="visible" type="xs:boolean" default="true"/>
 +
<xs:attribute name="status" type="xs:string"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="translateBooleanAs" type="xs:string"/>
 +
<xs:attribute name="min" type="xs:int"/>
 +
<xs:attribute name="max" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="managed-files-type">
 +
<xs:sequence>
 +
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
 +
<xs:element name="file" maxOccurs="unbounded" type="rm:managed-file-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="script-type">
 +
<xs:sequence>
 +
<xs:element name="file-staging-location" minOccurs="0" type="xs:string"/>
 +
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="insertEnvironmentAfter" type="xs:int" default="-1"/>
 +
<xs:attribute name="deleteAfterSubmit" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="line-type">
 +
<xs:sequence>
 +
<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="command-type">
 +
<xs:sequence>
 +
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
 +
<xs:element name="input" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 +
<xs:element name="environment" minOccurs="0" maxOccurs="unbounded" type="rm:name-value-pair-type"/>
 +
<xs:element name="stdout-parser" minOccurs="0" type="rm:tokenizer-type"/>
 +
<xs:element name="stderr-parser" minOccurs="0" type="rm:tokenizer-type"/>
 +
<xs:element name="redirect-parser" minOccurs="0" type="rm:tokenizer-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" use="required" type="xs:string"/>
 +
<xs:attribute name="directory" type="xs:string"/>
 +
<xs:attribute name="redirectStderr" type="xs:boolean" default="false"/>
 +
<xs:attribute name="streamBufferLimit" type="xs:int" default="-1"/>
 +
<xs:attribute name="replaceEnvironment" type="xs:boolean" default="false"/>
 +
<xs:attribute name="waitForId" type="xs:boolean" default="false"/>
 +
<xs:attribute name="ignoreExitStatus" type="xs:boolean" default="false"/>
 +
<xs:attribute name="keepOpen" type="xs:boolean" default="false"/>
 +
<xs:attribute name="flags" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="launch-tab-type">
 +
<xs:sequence>
 +
<xs:element name="dynamic" minOccurs="0" maxOccurs="unbounded" type="rm:tab-controller-type"/>
 +
<xs:element name="import" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="export-for-override" minOccurs="0" type="rm:attribute-viewer-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string" use="required"/>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="validator-type">
 +
<xs:sequence>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="regex"  type="rm:regex-type"/>
 +
<xs:element name="file-info" type="rm:file-match-type"/>
 +
<xs:sequence>
 +
  <xs:element name="range" maxOccurs="unbounded" type="rm:range-type"/>
 +
</xs:sequence>
 +
</xs:choice>
 +
<xs:element name="error-message" minOccurs="0" type="xs:string"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="managed-file-type">
 +
<xs:choice>
 
<xs:sequence>
 
<xs:sequence>
<xs:element ref="tokenizer"/>
+
<xs:element name="line" maxOccurs="unbounded" type="rm:line-type"/>
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="name" use="required" type="xs:string"/>
+
<xs:element name="contents" type="xs:string"/>
<xs:attribute name="stderr" type="xs:boolean" default="false"/>
+
<xs:element name="path" type="xs:string"/>
</xs:complexType>
+
</xs:choice>
</xs:element>
+
<xs:attribute name="name" use="required"/>
<xs:element name="tokenizer">
+
<xs:attribute name="uniqueIdPrefix" type="xs:boolean" default="false"/>
<xs:complexType>
+
<xs:attribute name="resolveContents" type="xs:boolean" default="true"/>
<xs:sequence>
+
<xs:attribute name="deleteSourceAfterUse" type="xs:boolean" default="false"/>
<xs:choice>
+
<xs:attribute name="deleteTargetAfterUse" type="xs:boolean" default="false"/>
<xs:element name="type" type="xs:string">
+
</xs:complexType>
<xs:annotation>
+
<xs:complexType name="file-match-type">
<xs:documentation>
+
<xs:attribute name="efsAttributes" type="xs:string"/>
Place to provide a custom tokenizer; type is the extension id contributing to
+
<xs:attribute name="lastModifiedBefore" type="xs:string"/>
"org.eclipse.ptp.rm.jaxb.core.streamParserTokenizer".
+
<xs:attribute name="lastModifiedAfter" type="xs:string"/>
</xs:documentation>
+
<xs:attribute name="length" type="xs:long"/>
</xs:annotation>
+
<xs:attribute name="isDirectory" type="xs:boolean" default="false"/>
</xs:element>
+
</xs:complexType>
 +
  <xs:complexType name="range-type">
 +
    <xs:attribute name="lessThan" type="xs:string"/>
 +
    <xs:attribute name="lessThanOrEqualTo" type="xs:string"/>
 +
    <xs:attribute name="greaterThan" type="xs:string"/>
 +
    <xs:attribute name="greaterThanOrEqualTo" type="xs:string"/>
 +
  </xs:complexType>
 +
<xs:complexType name="name-value-pair-type">
 +
<xs:sequence>
 +
<xs:element name="arg" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" use="required" type="xs:string"/>
 +
<xs:attribute name="value" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="tab-controller-type">
 +
<xs:sequence>
 +
<xs:element name="title" type="xs:string"/>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:choice minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 +
<xs:element name="composite" type="rm:composite-type"/>
 +
<xs:element name="widget" type="rm:widget-type"/>
 +
<xs:element name="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
<xs:attribute name="includeWidgetValuesFrom" type="xs:string"/>
 +
<xs:attribute name="showViewConfig" type="xs:boolean" default="true"/>
 +
<xs:attribute name="showViewExcluded" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="regex-type" mixed="true">
 +
<xs:attribute name="flags" type="xs:string"/>
 +
<xs:attribute name="split" type="xs:boolean" default="false"/>
 +
<xs:attribute name="expression" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType mixed="true" name="arg-type">
 +
<xs:attribute name="isUndefinedIfMatches" type="xs:string"/>
 +
<xs:attribute name="resolve" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="tokenizer-type">
 +
<xs:sequence>
 +
<xs:choice>
 +
<xs:element name="type" type="xs:string"/>
 +
<xs:element name="target" maxOccurs="unbounded" type="rm:target-type"/>
 +
</xs:choice>
 +
<xs:element name="exit-on" minOccurs="0" type="rm:regex-type"/>
 +
<xs:element name="exit-after" minOccurs="0" type="rm:regex-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="delim" type="xs:string"/>
 +
<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
 +
<xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
 +
<xs:attribute name="all" type="xs:boolean" default="false"/>
 +
<xs:attribute name="save" type="xs:int" default="0"/>
 +
<xs:attribute name="applyToAll" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="tab-folder-type">
 +
<xs:sequence>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="item" maxOccurs="unbounded" type="rm:tab-item-type"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="composite-type">
 +
<xs:sequence>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="title" minOccurs="0" type="xs:string"/>
 +
<xs:choice minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 +
<xs:element name="composite" type="rm:composite-type"/>
 +
<xs:element name="widget" type="rm:widget-type"/>
 +
<xs:element name="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="group" type="xs:boolean" default="false"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="tab-item-type">
 +
<xs:sequence>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="title" type="xs:string"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:choice minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="composite" type="rm:composite-type"/>
 +
<xs:element name="tab-folder" type="rm:tab-folder-type"/>
 +
<xs:element name="widget" type="rm:widget-type"/>
 +
<xs:element name="browse" type="rm:browse-type"/>
 +
<xs:element name="action" type="rm:push-button-type"/>
 +
<xs:element name="button-group" type="rm:button-group-type"/>
 +
<xs:element name="viewer" type="rm:attribute-viewer-type"/>
 +
</xs:choice>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="layout-type">
 +
<xs:choice>
 +
<xs:element name="fill-layout" type="rm:fill-layout-type"/>
 +
<xs:element name="row-layout" type="rm:row-layout-type"/>
 +
<xs:element name="grid-layout" type="rm:grid-layout-type"/>
 +
<xs:element name="form-layout" type="rm:form-layout-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
<xs:complexType name="layout-data-type">
 +
<xs:choice>
 +
<xs:element name="row-data" type="rm:row-data-type"/>
 +
<xs:element name="grid-data" type="rm:grid-data-type"/>
 +
<xs:element name="form-data" type="rm:form-data-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
<xs:complexType name="fill-layout-type">
 +
<xs:attribute name="type" type="xs:string"/>
 +
<xs:attribute name="marginHeight" type="xs:int"/>
 +
<xs:attribute name="marginWidth" type="xs:int"/>
 +
<xs:attribute name="spacing" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="row-layout-type">
 +
<xs:attribute name="type" type="xs:string"/>
 +
<xs:attribute name="center" type="xs:boolean" default="false"/>
 +
<xs:attribute name="justify" type="xs:boolean" default="false"/>
 +
<xs:attribute name="fill" type="xs:boolean" default="false"/>
 +
<xs:attribute name="pack" type="xs:boolean" default="false"/>
 +
<xs:attribute name="wrap" type="xs:boolean" default="false"/>
 +
<xs:attribute name="marginHeight" type="xs:int"/>
 +
<xs:attribute name="marginWidth" type="xs:int"/>
 +
<xs:attribute name="marginTop" type="xs:int"/>
 +
<xs:attribute name="marginBottom" type="xs:int"/>
 +
<xs:attribute name="marginLeft" type="xs:int"/>
 +
<xs:attribute name="marginRight" type="xs:int"/>
 +
<xs:attribute name="spacing" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="grid-layout-type">
 +
<xs:attribute name="numColumns" type="xs:int"/>
 +
<xs:attribute name="makeColumnsEqualWidth" type="xs:boolean" default="false"/>
 +
<xs:attribute name="marginHeight" type="xs:int"/>
 +
<xs:attribute name="marginWidth" type="xs:int"/>
 +
<xs:attribute name="marginTop" type="xs:int"/>
 +
<xs:attribute name="marginBottom" type="xs:int"/>
 +
<xs:attribute name="marginLeft" type="xs:int"/>
 +
<xs:attribute name="marginRight" type="xs:int"/>
 +
<xs:attribute name="horizontalSpacing" type="xs:int"/>
 +
<xs:attribute name="verticalSpacing" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="form-layout-type">
 +
<xs:attribute name="marginHeight" type="xs:int"/>
 +
<xs:attribute name="marginWidth" type="xs:int"/>
 +
<xs:attribute name="marginTop" type="xs:int"/>
 +
<xs:attribute name="marginBottom" type="xs:int"/>
 +
<xs:attribute name="marginLeft" type="xs:int"/>
 +
<xs:attribute name="marginRight" type="xs:int"/>
 +
<xs:attribute name="spacing" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="row-data-type">
 +
<xs:attribute name="height" type="xs:int"/>
 +
<xs:attribute name="width" type="xs:int"/>
 +
<xs:attribute name="exclude" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="grid-data-type">
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="horizontalAlign" type="xs:string"/>
 +
<xs:attribute name="verticalAlign" type="xs:string"/>
 +
<xs:attribute name="grabExcessHorizontal" type="xs:boolean" default="false"/>
 +
<xs:attribute name="grabExcessVertical" type="xs:boolean" default="false"/>
 +
<xs:attribute name="horizontalSpan" type="xs:int"/>
 +
<xs:attribute name="verticalSpan" type="xs:int"/>
 +
<xs:attribute name="horizontalIndent" type="xs:int"/>
 +
<xs:attribute name="verticalIndent" type="xs:int"/>
 +
<xs:attribute name="minHeight" type="xs:int"/>
 +
<xs:attribute name="minWidth" type="xs:int"/>
 +
<xs:attribute name="heightHint" type="xs:int"/>
 +
<xs:attribute name="widthHint" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="form-data-type">
 +
<xs:sequence>
 +
<xs:element name="top" minOccurs="0" type="rm:form-attachment-type"/>
 +
<xs:element name="bottom" minOccurs="0" type="rm:form-attachment-type"/>
 +
<xs:element name="left" minOccurs="0" type="rm:form-attachment-type"/>
 +
<xs:element name="right" minOccurs="0" type="rm:form-attachment-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="height" type="xs:int"/>
 +
<xs:attribute name="width" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="form-attachment-type">
 +
<xs:attribute name="alignment" type="xs:string"/>
 +
<xs:attribute name="numerator" type="xs:int"/>
 +
<xs:attribute name="denominator" type="xs:int"/>
 +
<xs:attribute name="offset" type="xs:int"/>
 +
</xs:complexType>
 +
<xs:complexType name="widget-type">
 +
<xs:sequence>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="items-from" minOccurs="0" type="xs:string"/>
 +
<xs:element name="fixed-text" minOccurs="0" type="xs:string"/>
 +
<xs:element name="dynamic-text" minOccurs="0">
 +
<xs:complexType>
 
<xs:sequence>
 
<xs:sequence>
<xs:element ref="read" maxOccurs="unbounded"/>
+
<xs:element name="arg" maxOccurs="unbounded" type="rm:arg-type"/>
 
</xs:sequence>
 
</xs:sequence>
</xs:choice>
+
</xs:complexType>
</xs:sequence>
+
</xs:element>
</xs:complexType>
+
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
</xs:element>
+
</xs:sequence>
<xs:element name="read">
+
<xs:attribute name="type" default="text">
<xs:complexType>
+
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="label"/>
 +
<xs:enumeration value="text"/>
 +
<xs:enumeration value="checkbox"/>
 +
<xs:enumeration value="radiobutton"/>
 +
<xs:enumeration value="spinner"/>
 +
<xs:enumeration value="combo"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
<xs:attribute name="buttonId" type="xs:string"/>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="button-group-type">
 +
<xs:sequence>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="title" minOccurs="0" type="xs:string"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="button" maxOccurs="unbounded" type="rm:widget-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="group" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="browse-type">
 +
<xs:sequence>
 +
<xs:element name="text-layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="button-layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="text-control-state" minOccurs="0" type="rm:control-state-type"/>
 +
<xs:element name="button-control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="textStyle" type="xs:string"/>
 +
<xs:attribute name="directory" type="xs:boolean" default="false"/>
 +
<xs:attribute name="uri" type="xs:boolean" default="false"/>
 +
<xs:attribute name="localOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="readOnly" type="xs:boolean" default="false"/>
 +
<xs:attribute name="saveValueTo" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="push-button-type">
 +
<xs:sequence>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
<xs:element name="button-action" minOccurs="0" type="rm:button-action-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="title" type="xs:string"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="button-action-type">
 +
<xs:sequence>
 +
<xs:element name="action" type="xs:string"/>
 +
</xs:sequence>
 +
<xs:attribute name="clearValue" type="xs:string"/>
 +
<xs:attribute name="refresh" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="attribute-viewer-type">
 +
<xs:sequence>
 +
<xs:element name="layout-data" minOccurs="0" type="rm:layout-data-type"/>
 +
<xs:element name="layout" minOccurs="0" type="rm:layout-type"/>
 +
<xs:element name="label" minOccurs="0" type="xs:string"/>
 +
<xs:element name="column-data" minOccurs="0" maxOccurs="7" type="rm:column-data-type"/>
 +
<xs:element name="items" type="rm:viewer-items-type"/>
 +
<xs:element name="value" minOccurs="0" type="rm:template-type"/>
 +
<xs:element name="control-state" minOccurs="0" type="rm:control-state-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="type" default="table">
 +
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="table"/>
 +
<xs:enumeration value="tree"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
<xs:attribute name="name" type="xs:string"/>
 +
<xs:attribute name="initialAllChecked" type="xs:boolean" default="true"/>
 +
<xs:attribute name="sort" type="xs:boolean" default="true"/>
 +
<xs:attribute name="headerVisible" type="xs:boolean" default="true"/>
 +
<xs:attribute name="linesVisible" type="xs:boolean" default="true"/>
 +
<xs:attribute name="tooltipEnabled" type="xs:boolean" default="true"/>
 +
<xs:attribute name="style" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="viewer-items-type">
 +
<xs:sequence>
 +
<xs:element name="include" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
 +
<xs:element name="exclude" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
 +
</xs:sequence>
 +
<xs:attribute name="allPredefined" type="xs:boolean" default="false"/>
 +
<xs:attribute name="allDiscovered" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="font-type">
 +
<xs:attribute name="name" type="xs:string"/>
 +
<xs:attribute name="size" type="xs:int" default="9"/>
 +
<xs:attribute name="style" default="normal">
 +
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="normal"/>
 +
<xs:enumeration value="bold"/>
 +
<xs:enumeration value="italic"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
</xs:complexType>
 +
<xs:complexType name="template-type">
 +
<xs:attribute name="pattern" type="xs:string"/>
 +
<xs:attribute name="separator" type="xs:string" default=" "/>
 +
</xs:complexType>
 +
<xs:complexType name="target-type">
 +
<xs:sequence>
 +
<xs:element name="match" maxOccurs="unbounded" type="rm:match-type"/>
 +
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
 +
<xs:element name="else" minOccurs="0">
 +
<xs:complexType>
 +
<xs:choice>
 +
<xs:element name="add" type="rm:add-type"/>
 +
<xs:element name="append" type="rm:append-type"/>
 +
<xs:element name="put" type="rm:put-type"/>
 +
<xs:element name="set" type="rm:set-type"/>
 +
<xs:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
<xs:attribute name="ref" type="xs:string"/>
 +
<xs:attribute name="type" default="property">
 +
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="property"/>
 +
<xs:enumeration value="attribute"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
<xs:attribute name="matchAll" type="xs:boolean" default="false"/>
 +
<xs:attribute name="allowOverwrites" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="match-type">
 +
<xs:sequence>
 +
<xs:element name="expression" minOccurs="0" type="rm:regex-type"/>
 +
<xs:choice minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="add" type="rm:add-type"/>
 +
<xs:element name="append" type="rm:append-type"/>
 +
<xs:element name="put" type="rm:put-type"/>
 +
<xs:element name="set" type="rm:set-type"/>
 +
<xs:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
<xs:attribute name="moveToTop" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="column-data-type">
 +
<xs:sequence>
 +
<xs:element name="font" minOccurs="0" type="rm:font-type"/>
 +
<xs:element name="tooltip" minOccurs="0" type="xs:string"/>
 +
</xs:sequence>
 +
<xs:attribute name="name" type="xs:string"/>
 +
<xs:attribute name="width" type="xs:int" default="-1"/>
 +
<xs:attribute name="alignment" type="xs:string"/>
 +
<xs:attribute name="resizable" type="xs:boolean" default="false"/>
 +
<xs:attribute name="moveable" type="xs:boolean" default="false"/>
 +
<xs:attribute name="foreground" type="xs:string"/>
 +
<xs:attribute name="background" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="set-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="throw-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="message" type="xs:string"/>
 +
</xs:complexType>
 +
<xs:complexType name="add-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="append-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="separator" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="put-type">
 +
<xs:sequence>
 +
<xs:element name="entry" minOccurs="0" maxOccurs="unbounded" type="rm:entry-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="field" type="xs:string"/>
 +
<xs:attribute name="forceNewObject" type="xs:boolean" default="false"/>
 +
</xs:complexType>
 +
<xs:complexType name="entry-type">
 +
<xs:attribute name="key" type="xs:string"/>
 +
<xs:attribute name="keyGroup" type="xs:int" default="0"/>
 +
<xs:attribute name="keyIndex" type="xs:int" default="0"/>
 +
<xs:attribute name="value" type="xs:string"/>
 +
<xs:attribute name="valueGroup" type="xs:int" default="0"/>
 +
<xs:attribute name="valueIndex" type="xs:int" default="0"/>
 +
</xs:complexType>
 +
<xs:complexType name="test-type">
 +
<xs:sequence>
 +
<xs:element name="test" minOccurs="0" maxOccurs="unbounded" type="rm:test-type"/>
 +
<xs:element name="value" type="xs:string" minOccurs="0" maxOccurs="2"/>
 +
<xs:choice minOccurs="0" maxOccurs="unbounded">
 +
<xs:element name="add" type="rm:add-type"/>
 +
<xs:element name="append" type="rm:append-type"/>
 +
<xs:element name="put" type="rm:put-type"/>
 +
<xs:element name="set" type="rm:set-type"/>
 +
<xs:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
<xs:element name="else" minOccurs="0">
 +
<xs:complexType>
 +
<xs:choice maxOccurs="unbounded">
 +
<xs:element name="add" type="rm:add-type"/>
 +
<xs:element name="append" type="rm:append-type"/>
 +
<xs:element name="put" type="rm:put-type"/>
 +
<xs:element name="set" type="rm:set-type"/>
 +
<xs:element name="throw" type="rm:throw-type"/>
 +
</xs:choice>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:sequence>
 +
<xs:attribute name="op">
 +
<xs:simpleType>
 +
<xs:restriction base="xs:string">
 +
<xs:enumeration value="EQ"/>
 +
<xs:enumeration value="LT"/>
 +
<xs:enumeration value="GT"/>
 +
<xs:enumeration value="LE"/>
 +
<xs:enumeration value="GE"/>
 +
<xs:enumeration value="AND"/>
 +
<xs:enumeration value="OR"/>
 +
<xs:enumeration value="NOT"/>
 +
</xs:restriction>
 +
</xs:simpleType>
 +
</xs:attribute>
 +
</xs:complexType>
 +
<xs:complexType name="control-state-type">
 +
<xs:sequence>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="show-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
<xs:element name="hide-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
</xs:choice>
 +
<xs:choice minOccurs="0">
 +
<xs:element name="enable-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
<xs:element name="disable-if" minOccurs="0" type="rm:control-state-rule-type"/>
 +
</xs:choice>
 +
</xs:sequence>
 +
</xs:complexType>
 +
<xs:complexType name="control-state-rule-type">
 +
<xs:choice>
 +
<xs:element name="not" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="and" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
<xs:element name="or" minOccurs="0">
 +
<xs:complexType>
 +
<xs:sequence>
 +
<xs:element name="rule" maxOccurs="unbounded" type="rm:control-state-rule-type"/>
 +
</xs:sequence>
 +
</xs:complexType>
 +
</xs:element>
 +
</xs:choice>
 +
<xs:attribute name="button" type="xs:string"/>
 +
<xs:attribute name="selected" type="xs:boolean" default="true"/>
 +
</xs:complexType>
 +
<xs:complexType name="monitor-type">
 +
<xs:sequence>
 +
<xs:element name="property" minOccurs="0" maxOccurs="unbounded" type="rm:property-type"/>
 +
<xs:element name="driver" minOccurs="0" type="rm:monitor-driver-type"/>
 +
</xs:sequence>
 +
<xs:attribute name="schedulerType" type="xs:string"/>
 +
<xs:attribute name="refreshFrequencyInSeconds" type="xs:int" default="60"/>
 +
</xs:complexType>
 +
<xs:complexType name="monitor-driver-type">
 +
<xs:choice>
 +
<xs:element name="url" type="xs:string"/>
 
<xs:sequence>
 
<xs:sequence>
<xs:choice>
+
<xs:element name="name" type="xs:string"/>
<xs:element ref="match" minOccurs="0" maxOccurs="unbounded"/>
+
<xs:element name="path" minOccurs="0" type="xs:string"/>
</xs:choice>
+
<xs:element name="args" minOccurs="0" maxOccurs="unbounded" type="rm:arg-type"/>
 
</xs:sequence>
 
</xs:sequence>
<xs:attribute name="delim" type="xs:string"/>
+
</xs:choice>
<xs:attribute name="includeDelim" type="xs:boolean" default="false"/>
+
</xs:complexType>
                      <xs:attribute name="maxMatchLen" type="xs:int" default="0"/>
+
</xs:schema>
<xs:attribute name="all" type="xs:boolean" default="false"/>
+
<xs:attribute name="save" type="xs:int" default="0"/>
+
<xs:attribute name="mode" default="or">
+
                          <xs:simpleType>
+
                            <xs:restriction base="xs:string">
+
                                <xs:enumeration value="or"/>
+
                                <xs:enumeration value="and"/>
+
                            </xs:restriction>
+
                          </xs:simpleType>
+
                      </xs:attribute>
+
</xs:complexType>
+
</xs:element>
+
        <xs:element name="match">
+
<xs:complexType>
+
<xs:sequence>
+
<xs:element ref="regex" minOccurs="0"/>
+
<xs:element ref="target" minOccurs="0"/>
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
+
<xs:element ref="set"/>
+
<xs:element ref="add"/>
+
<xs:element ref="put"/>
+
<xs:element ref="append"/>
+
</xs:choice>
+
</xs:sequence>
+
<xs:attribute name="errorOnMiss" type="xs:boolean" default="false"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="target">
+
<xs:complexType>
+
  <xs:attribute name="ref" type="xs:string"/>
+
<xs:attribute name="type" type="xs:string"/>
+
<xs:attribute name="idFrom" type="xs:int"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="regex">
+
      <xs:complexType mixed="true">
+
        <xs:attribute name="flags" type="xs:string"/>
+
        <xs:attribute name="split" type="xs:boolean" default="false"/>
+
      </xs:complexType>
+
  </xs:element>
+
<xs:element name="set">
+
<xs:complexType>
+
<xs:attribute name="field" type="xs:string"/>
+
<xs:attribute name="group" type="xs:int" default="0"/>
+
<xs:attribute name="index" type="xs:int" default="0"/>
+
<xs:attribute name="expression" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="add">
+
<xs:complexType>
+
<xs:attribute name="field" type="xs:string"/>
+
<xs:attribute name="groups" type="xs:string"/>
+
<xs:attribute name="indices" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="append">
+
<xs:complexType>
+
<xs:attribute name="field" type="xs:string"/>
+
<xs:attribute name="groups" type="xs:string"/>
+
<xs:attribute name="indices" type="xs:string"/>
+
<xs:attribute name="separator" type="xs:string"/>
+
<xs:attribute name="startTag" type="xs:string"/>
+
<xs:attribute name="endTag" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
<xs:element name="put">
+
<xs:complexType>
+
<xs:attribute name="field" type="xs:string"/>
+
<xs:attribute name="keyGroups" type="xs:string"/>
+
<xs:attribute name="keyIndices" type="xs:string"/>
+
<xs:attribute name="valueGroups" type="xs:string"/>
+
<xs:attribute name="valueIndices" type="xs:string"/>
+
</xs:complexType>
+
</xs:element>
+
 
</source>
 
</source>
----
+
 
EXAMPLES
+
== Tokenizer Examples ==
  
 
<source lang="xml">
 
<source lang="xml">
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
+
<?xml version="1.0" encoding="UTF-8"?>
            to the known property "available-queues" -->
+
<resource-manager-builder xmlns="http://org.eclipse.ptp/rm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<tokenizer>
+
xsi:schemaLocation="resource_manager_type.xsd" name="test-parsers">
<read delim="\n">
+
<control-data>
<match>
+
<!-- EXAMPLE 1: output is a list of line-separated queue names to be assigned
<regex>.*</regex>
+
to the known property "available-queues" -->
<target ref="available_queues"/>
+
<start-up-command name="test01ParseQstat">
<append field="value" separator="," groups="0"/>
+
<arg/>
</match>
+
<stdout-parser delim="\n">
</read>
+
<target ref="queues">
</tokenizer>
+
<match>
 
+
<expression>([\w\d]+)</expression>
<!-- EXAMPLE 2: output is to be searched for its final line which should
+
<add field="value">
            contain a job id of the form "[digits].[chars]" -->
+
<entry valueGroup="1"/>
<tokenizer>
+
</add>
<read delim="\n" all="true" save="1">
+
</match>
<match>
+
</target>
<regex>([\d]*)[.].*</regex>
+
</stdout-parser>
<target ref="jobId"/>
+
</start-up-command>
<set field="value" group="1"/>
+
<!-- EXAMPLE 2: output is to be searched for its final line which should
</match>
+
contain a job id of the form "[digits].[chars]" -->
</read>
+
<start-up-command name="test02JobId" waitForId="true">
</tokenizer>
+
<arg/>
 
+
<stdout-parser delim="\n" all="true" save="1">
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
+
<target ref="@jobId">
            of attribute definitions, but each line bearing a distinct
+
<match>
            id (e.g., openMPI attribute discovery) -->
+
<expression>([\d]+)([.])(.+)[\s]+.*</expression>
<tokenizer>
+
<append field="name">
<read delim="\n">
+
<entry valueGroup="1"/>
<match>
+
<entry valueGroup="2"/>
<regex>mca:.*:param:([^:]*):value:(.*)</regex>
+
<entry valueGroup="3"/>
<target type="attribute" idFrom="1"/>
+
</append>
<set field="name" group="1"/>
+
<set field="default">
<set field="visible" expression="true"/>
+
<entry valueGroup="1"/>
<set field="value" group="2"/>
+
</set>
</match>
+
<set field="value">
<match>
+
<entry value="SUBMITTED"/>
<regex>mca:.*:param:([^:]*):status:(.*)</regex>
+
</set>
<target type="attribute" idFrom="1"/>
+
</match>
<set field="status" group="2"/>
+
<match>
<set field="read-only" expression="${field:status} == 'read-only'"/>
+
<expression>([\d]+)[.].+</expression>
</match>
+
<set field="name">
<match>
+
<entry valueGroup="0"/>
<regex>mca:.*:param:([^:]*):help:(.*)</regex>
+
</set>
<target type="attribute" idFrom="1"/>
+
<set field="default">
<set field="toolTip" group="2"/>
+
<entry valueGroup="1"/>
</match>
+
</set>
<match>
+
<set field="value">
<regex>(.*):([^:]*)</regex>
+
<entry value="SUBMITTED"/>
<target type="attribute" idFrom="1"/>
+
</set>
<set field="name" group="1"/>
+
</match>
<set field="value" group="2"/>
+
</target>
<set field="visible" expression="true"/>
+
<target ref="@jobId">
<set field="read-only" expression="true"/>
+
<match>
</match>
+
<expression flags="DOTALL">.*Job not submitted.*</expression>
</read>
+
<set field="value">
</tokenizer>
+
<entry value="FAILED"/>
 
+
</set>
<!-- EXAMPLE 4a: indeterminate number of property definitions, but grouped
+
</match>
              by delimiter -->
+
</target>
<tokenizer>
+
</stdout-parser>
<read delim="\n" mode="and">
+
<stderr-parser delim="\n">
<match>
+
<target ref="@jobId">
<regex>&lt;new-property&gt;</regex>
+
<match>
<target type="property"/>
+
<expression>.*Job not submitted.*</expression>
</match>
+
<throw message="Job Submit Failed"/>
<match>
+
</match>
<regex>.*</regex>
+
</target>
<set field="name" group="0"/>
+
</stderr-parser>
</match>
+
</start-up-command>
<match>
+
<!-- EXAMPLE 3: indeterminate number and order of lines containing parts
<regex>.*</regex>
+
of attribute definitions, but each line bearing a distinct
<set field="value" group="0"/>
+
id (e.g., openMPI attribute discovery) -->
</match>
+
<start-up-command name="test03OpenMPI">
<match>
+
<arg/>
<regex>&lt;/new-property&gt;</regex>
+
<stdout-parser delim="\n">
</match>
+
<target type="attribute">
</read>
+
<match>
</tokenizer>
+
<expression>mca:.*:param:([^:]*):value:(.*)</expression>
 
+
<set field="name">
<!-- EXAMPLE 4b: similar to 4a, but without delimiter (implicit ordering) -->
+
<entry valueGroup="1"/>
<tokenizer>
+
</set>
<read delim="\n" mode="and">
+
<set field="visible">
<match>
+
<entry value="true"/>
<regex>.*</regex>
+
</set>
<target type="attribute"/>
+
<set field="value">
<set field="name" group="0"/>
+
<entry valueGroup="2"/>
</match>
+
</set>
<match>
+
</match>
                        <regex>.*</regex>
+
<match>
                        <set field="type" group="0"/>
+
<expression>mca:.*:param:([^:]*):status:(.*)</expression>
                </match>
+
<set field="status">
<match>
+
<entry valueGroup="2"/>
                        <regex>.*</regex>
+
</set>
                        <set field="description" group="0"/>
+
</match>
                </match>
+
<match>
                <match>
+
<expression>mca:.*:param:([^:]*):help:(.*)</expression>
                        <regex>.*</regex>
+
<set field="tooltip">
                        <set field="tooltip" group="0"/>
+
<entry valueGroup="2"/>
                </match>
+
</set>
<match>
+
</match>
<regex>.*</regex>
+
<test op="EQ">
<set field="value" group="0"/>
+
<value>#status</value>
</match>
+
<value>read-only</value>
</read>
+
<set field="readOnly">
</tokenizer>
+
<entry value="true"/>
 
+
</set>
<!-- EXAMPLE 5: indeterminate number of property definitions, but on single line -->
+
<else>
<tokenizer>
+
<set field="readOnly">
<read delim="\n">
+
<entry value="false"/>
<match>
+
</set>
<regex>&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;</regex>
+
</else>
<target type="property"/>
+
</test>
<set field="name" group="1"/>
+
</target>
<set field="value" group="2"/>
+
<target type="attribute">
</match>
+
<match>
</read>
+
<expression>ompi:version:full:([\d]+)[.]([\d]+).*</expression>
</tokenizer>
+
<set field="name">
 
+
<entry value="ompi_major_version"/>
<!-- EXAMPLE 6: looking for values interpersed in the stream but which will
+
</set>
                not exceed 1024 chars -->
+
<set field="value">
<tokenizer>
+
<entry valueGroup="1"/>
  <read maxMatchLen="1024">
+
</set>
      <match>
+
<set field="visible">
        <regex>&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;</regex>
+
<entry value="true"/>
        <target ref="jobStates"/>
+
</set>
        <put field="value" keyGroups="1" valueGroups="2"/>
+
<set field="readOnly">
      </match>
+
<entry value="true"/>
  </read>
+
</set>
</tokenizer>
+
<set field="name" forceNewObject="true">
 +
<entry value="ompi_minor_version"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="true"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
<test op="AND">
 +
<test op="EQ">
 +
<value>#name</value>
 +
<value>ompi_minor_version</value>
 +
</test>
 +
<test op="LT">
 +
<value>#value</value>
 +
<value>7</value>
 +
</test>
 +
<throw message="Only supports Open MPI 1.7 and later"/>
 +
</test>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression>(.*):([^:]*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="visible">
 +
<entry value="false"/>
 +
</set>
 +
<set field="readOnly">
 +
<entry value="true"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 4: indeterminate number of definitions, but grouped
 +
by caption; use of moveToTop to promote the target to the top of the list
 +
when the caption appears -->
 +
<start-up-command name="test04ImplicitWithTags">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match moveToTop="true">
 +
<expression>PROPERTY</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match moveToTop="true">
 +
<expression>ATTRIBUTE</expression>
 +
</match>
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 5: similar to 4, but without delimiter (implicit ordering) -->
 +
<start-up-command name="test05ImplicitOrdering">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="attribute" matchAll="true">
 +
<match>
 +
<expression>.+</expression>
 +
<set field="name">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="type">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="description">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="tooltip">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>.*</expression>
 +
<set field="value">
 +
<entry valueGroup="0"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 6: similar to 4, but with indeterminate type order and using buffer + DOTALL | UNIX_LINES -->
 +
<start-up-command name="test06ImplicitWithTagsDotall">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32" applyToAll="true">
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="property">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*PROPERTY[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]name:(\w*)[\n]value:([\d.-]*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
<target type="attribute">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*ATTRIBUTE[\n]value:([\d.-]*)[\n]name:(\w*).*</expression>
 +
<set field="name">
 +
<entry valueGroup="2"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 7: indeterminate number of property definitions, but on single line -->
 +
<start-up-command name="test07PropertyDefsSingleLine">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression expression="&lt;name&gt;(.*)&lt;/name&gt;&lt;value&gt;(.*)&lt;/value&gt;"/>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 8: looking for values interspersed in the stream but which will
 +
not exceed 32 chars -->
 +
<start-up-command name="test08JobStates">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 9: successive names/values, in order, but staggered -->
 +
<start-up-command name="test09Staggered">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.*)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>value:(.*)</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 10: forced merge -->
 +
<start-up-command name="test10Merged">
 +
<arg/>
 +
<stdout-parser delim="\n">
 +
<target type="property">
 +
<match>
 +
<expression>name:(.+);value:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="value">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
<match>
 +
<expression>name:(.+);default:(.+)</expression>
 +
<set field="name">
 +
<entry valueGroup="1"/>
 +
</set>
 +
<set field="default">
 +
<entry valueGroup="2"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 11: exit-on -->
 +
<start-up-command name="test11ExitOn">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-on flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-on>
 +
</stdout-parser>
 +
</start-up-command>
 +
<!-- EXAMPLE 12: exit-after -->
 +
<start-up-command name="test12ExitAfter">
 +
<arg/>
 +
<stdout-parser maxMatchLen="32">
 +
<target ref="jobStates">
 +
<match>
 +
<expression flags="DOTALL | UNIX_LINES">.*&lt;job&gt;([\d]*):([\w]*)&lt;/job&gt;.*</expression>
 +
<put field="value">
 +
<entry keyGroup="1" valueGroup="2"/>
 +
</put>
 +
</match>
 +
</target>
 +
<exit-after flags="DOTALL | UNIX_LINES">.*EXIT.*</exit-after>
 +
</stdout-parser>
 +
</start-up-command>
 +
<submit-interactive name="empty">
 +
<arg/>
 +
</submit-interactive>
 +
<!-- EXAMPLE 13: get-status (use of tests) -->
 +
<get-job-status name="get-job-status" ignoreExitStatus="true">
 +
<arg>qstat</arg>
 +
<arg>${ptp_rm:@jobId#name}</arg>
 +
<stdout-parser delim="\n">
 +
<target ref="@jobId">
 +
<match>
 +
<expression>[\d]+[.].+[\s]+.+[\s]+.+[\s]+.+[\s]+([A-Z])[\s]+.+</expression>
 +
<set field="value">
 +
<entry valueGroup="1"/>
 +
</set>
 +
</match>
 +
<test op="EQ">
 +
<value>#value</value>
 +
<value>Q</value>
 +
<set field="value">
 +
<entry value="QUEUED_ACTIVE"/>
 +
</set>
 +
</test>
 +
<test op="EQ">
 +
<value>#value</value>
 +
<value>R</value>
 +
<set field="value">
 +
<entry value="RUNNING"/>
 +
</set>
 +
</test>
 +
<test op="EQ">
 +
<value>#value</value>
 +
<value>S</value>
 +
<set field="value">
 +
<entry value="SUSPENDED"/>
 +
</set>
 +
</test>
 +
<test op="EQ">
 +
<value>#value</value>
 +
<value>H</value>
 +
<set field="value">
 +
<entry value="SYSTEM_ON_HOLD"/>
 +
</set>
 +
</test>
 +
<else>
 +
<set field="value">
 +
<entry value="COMPLETED"/>
 +
</set>
 +
</else>
 +
</target>
 +
</stdout-parser>
 +
<stderr-parser delim="\n">
 +
<target ref="@jobId">
 +
<match>
 +
<expression>.+</expression>
 +
<set field="value">
 +
<entry value="COMPLETED"/>
 +
</set>
 +
</match>
 +
</target>
 +
</stderr-parser>
 +
</get-job-status>
 +
</control-data>
 +
<monitor-data schedulerType="test">
 +
<driver>
 +
<name></name>
 +
</driver>
 +
</monitor-data>
 +
</resource-manager-builder>
 
</source>
 
</source>

Latest revision as of 20:54, 1 August 2011

JAXB Configurable Resource Manager XML

XSD

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

Tokenizer Examples

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

Back to the top