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 Configuration"

< PTP‎ | designs
(Removing all content from page)
Line 1: Line 1:
= The JAXB Configurable Resource Manager =
 
  
<br>
 
 
== Introduction ==
 
 
<p>
 
The JAXB Resource Manager plug-ins allow you to launch and monitor
 
applications on local or remote resources using resource managers which
 
are configured from an XML file via JAXB (
 
<code>javax.xml.bind</code>
 
) technology.<br>
 
</p>
 
 
<p>There are two main motivations for providing this class of
 
resource managers:</p>
 
<ol>
 
<li>To allow for maximum configurability. Often job schedulers
 
(PBS, LSF, LoadLeveler, etc.) or interactive runtime systems (OpenMPI,
 
PE, SLURM, etc.) are set up by system administrators in special or
 
non-standard ways which make it difficult to use a generic tool. The
 
configuration file allows a user or community of users to fit the
 
resource manager to a class of systems, to a single host, or even to
 
special application usage.</li>
 
<li>Building the resource manager and its UI presentation from an
 
XML configuration means that in most cases no special Java coding is
 
necessary. Users should be able to accommodate new systems, at least
 
on the client-end, without writing and loading additional Eclipse
 
plugins. (The only qualification here is that the monitoring component
 
also support that type of scheduler or runtime; see the following
 
paragraphs.)</li>
 
</ol>
 
 
<p>Additional considerations in designing a generically configurable
 
resource manager were to partition the client functionality so as to
 
eliminate the need for special server-side proxies and to scale more
 
successfully in the updating of job and resource information.</p>
 
 
<p>
 
To this end, JAXB resource managers now consist of two components, a
 
"control", which governs the configuration, launch and cancellation of
 
individual jobs entirely from the client end, and a "monitor", which
 
displays job status as well as global information about the HPC
 
resource. In most cases, the monitor will be a pre-built type provided
 
by the PTP distribution, implemented using
 
[[http://www2.fz-juelich.de/jsc/llview|LLview]]. Since <b>LLview</b>
 
already supports a good number of the standard scheduler types, adding
 
a new resource manager type will normally entail only the specific
 
configuration of its control part. The default mode of usage is that
 
the client stages the necessary LLview components (mostly Perl scripts)
 
automatically, but in a future release, the monitor will also be
 
capable of connecting directly to a system-wide (web-based) deployment.
 
</p>
 
<p>
 
<b>The following is a guide to the resource manager XML definition.
 
Those interested only in using the JAXB resource managers already
 
provided with the PTP distribution should consult the User pages under
 
the relevant scheduler (currently only the PBS resource managers are
 
JAXB-configurable).</b>
 
</p>
 
<hr>
 
 
== [[JAXBDemo.pdf|Configuring/Customizing the Resource Manager]] ==
 
 
<p>We provide here an introductory tutorial slide set demonstrating
 
some simple additions to a pre-existing resource manager definition
 
file.</p>
 
 
== [[The JAXB Configurable Resource Manager XML Schema]] ==
 
 
<p>
 
The JAXB Resource Manager is <b><i>model-driven</i> </b>; this means
 
that its functioning and appearance are determined by a set of
 
definitions provided via an XML file. What follows is a detailed
 
explanation of the [[PTP/designs/resource manager xsd| schema]] governing the resource manager XML
 
definition.
 
</p>
 
 
=== The Resource Manager Data Type ===
 
<br>
 
[[Image:01rm-data.jpeg]]
 
 
<p>
 
The top-level of the definition tree consists of three elements: <b>site-</b>,
 
<b>control-</b> and <b>monitor-data</b>. In addition, a resource
 
manager should be given a name which sufficiently distinguishes it from
 
others of a similar type; e.g., <i>pbs-torque-v_2.3.7_abe</i> is
 
specific to an installation on the host abe, <i>ll-v_4.0</i> suits all
 
installations of LoadLeveler version 4, etc.
 
</p>
 
 
<p>
 
The <b>site-data</b> element provides an optional place to set fixed or
 
default remote site information. The connection strings are URIs which
 
are specific to the PTP RemoteServices definitions. The scheme for
 
these URIs will usually name the specific remote service (e.g,
 
<code>rse:</code>
 
or
 
<code>remotetools:</code>
 
; local is simply
 
<code>file:</code>
 
). The host name and port given here will appear as defaults in the
 
resource manager selection wizard when you create a new connection.
 
</p>
 
 
<p>
 
The principal section of the schema is devoted to defining the resource
 
manager's <b>control</b> part. The top-level control elements include
 
properties and attributes, files to be staged, job script to be
 
generated (if any), commands specific to the resource manager, and the
 
layout of the Launch Tab.
 
</p>
 
 
==== Resource Manager Environment ====
 
 
<p>
 
The resource manager implementation constructs a variable map from the
 
defined properties and attributes which serves as the resource manager
 
"environment". Some elements directly reference these by name; a
 
text/string representation of property or attribute fields can be
 
obtained via the Eclipse variable resolver syntax, with the namespace
 
prefix set to <i>ptp_rm</i>:
 
<code>
 
${ptp_rm:name#<i>fieldName</i>}
 
</code>
 
, e.g.,
 
<code>${ptp_rm:queues#value}</code>
 
(see further [[#1. Property and Attribute Types]] on the specific fields
 
for properties and attributes).
 
</p>
 
<p>
 
All properties and attributes defined in the configuration are mapped.
 
The following hard-coded properties are also added at runtime: <br>
 
<br>
 
<code>control.user.name</code>
 
<br>
 
<code>control.address</code>
 
<br>
 
<code>control.working.dir</code>
 
<br>
 
<code>executablePath</code>
 
<br>
 
<code>progArgs</code>
 
<br>
 
<code>directory</code>
 
<br> <br> In addition, these properties may be linked (see
 
[[1. Property and Attribute Types]]) to other attributes to furnish the
 
resource manager with an implementation-independent variable for the
 
queue and for any remote output files produced in connection with the
 
job submission. <br> <br>
 
<code>control.queue.name</code>
 
<br>
 
<code>stdout_remote_path</code>
 
<br>
 
<code>stderr_remote_path</code>
 
<br>
 
</p>
 
 
==== Resource Manager Command Types ====
 
 
<p>
 
<i>Commands</i> are system calls, either to a local or remote OS,
 
depending on the connection defined for the resource manager. The <b>start-up-</b>
 
and <b>shut-down-command</b>s are arbitrary commands to be run
 
(serially in order) when the resource manager is started or stopped.
 
The <b>submit</b> commands are those used to launch jobs. Currently a
 
configuration may have only a batch or an interactive mode. Thus it may
 
have only two submission modes, a run and a debug, for the given type.
 
In the future we may allow all four to coexist in a single
 
configuration. <b>get-job-status</b> is a user-initiated (on-demand)
 
request to refresh the status information for a submission. Normal
 
(polled) updates, on the other hand, are the responsibility of the
 
<code>monitor</code>
 
component. The status command nevertheless needs to be implemented in
 
most cases, as it will be called internally just after submission. The
 
remaining "-job" commands are operations which can be executed on
 
submitted jobs; with the exception of <i>terminate</i>, the rest of
 
these have to do with schedulers (batch-systems) and do not apply to
 
resource managers which connect to interactive runtime-systems such as
 
OpenMPI or PE. <b>Note</b>: if the submission type is interactive, the
 
<b>terminate-job</b> command usually does not need to be implemented,
 
as the process termination will be handled internally. However, in some
 
cases (such as PBS -I) which require the interactive job to run as a
 
pseudo-terminal, one may need this command in order to force its
 
termination externally. Finally, a <b>button-action</b> is an arbitrary
 
command associated with a button exposed through the
 
<code>Launch Tab</code>
 
(see further [[Widget]]).
 
</p>
 
 
=== The Control Data Type ===
 
<br>
 
[[Image:02control.jpeg]]
 
 
<p>The majority of the XML definition is given over to the set-up of
 
the resource manager control. One can think of this section as having
 
four subdivisions:</p>
 
 
<ol>
 
<li>Configuration Variable Definitions (the <i>Environment</i>)</li>
 
<li>Files and Scripts</li>
 
<li>External Commands and their Stream Parsers</li>
 
<li>UI Configuration (Launch Tab)</li>
 
</ol>
 
 
<p>We will look at these each in turn.</p>
 
 
==== 1. Property and Attribute Types ====
 
 
<p>
 
A property is any variable necessary for the functioning of the
 
resource manager. Properties often (but not necessarily) are not
 
visible. The value for properties can be any primitive type, or lists
 
or maps of strings. If
 
<code>stdout</code>
 
and
 
<code>stderr</code>
 
from a scheduled job is to be delivered to the client, the properties <i>stdout_remote_path</i>
 
and <i>stderr_remote_path</i> should be included in the resource
 
manager property set. Simarly, the native designation for the selected
 
queue, if used, should be linked to <i>control.queue.name</i>.
 
</p>
 
 
<p>The distinction between attribute and property is not hard and
 
fast, but the intention is to provide a way of differentiating between
 
external, system-determined variables (attributes) and variables only
 
required by the PTP implementation itself. There are several other
 
elements and fields on the attribute, e.g., for type-specific defaults
 
(min/max, choice). Generally, if the variable is exposed to the user,
 
who should also be provided with a description or instructions for use,
 
then it should be defined as an attribute.</p>
 
 
[[Image:040attribute.jpeg]]
 
 
<p>
 
The <i>visible</i> attribute is a way of indicating to the resource
 
manager that the user will not be directly changing the value of the
 
property or attribute via the user interface. Certain widgets (such as
 
the
 
<code>attribute viewer</code>
 
) check this to see if the property or attribute should be included
 
automatically in its list. <i>status</i> is an optional field for
 
capturing the validity of the attribute at runtime or for a particular
 
installation, if such information is made available by the system. The
 
<i>readOnly</i> property can be defined here, but more often will be
 
enforced directly on the widget which is connected to the property or
 
attribute. <i>min</i> and <i>max</i> give the boundaries for integer
 
values, usually represented by spinner widgets.
 
</p>
 
 
<p>
 
<code>description</code>
 
is meant to be a brief one-sentence definition; most of the time
 
detailed information will go into the
 
<code>tooltip</code>
 
element.
 
<code>choice</code>
 
is a predetermined, fixed set of values to choose from; these are
 
comma-delimited and will appear as the items of a combo-box.
 
<code>items-from</code>
 
instead links the combo items (choice) to another property or attribute
 
value (whose type must be
 
<code>java.util.Collection</code>
 
).
 
</p>
 
 
===== Property and Attribute Values =====
 
 
<p>
 
The untyped
 
<code>value</code>
 
element on properties and attributes is for internal use only; to give
 
a predefined (primitive) value, use the
 
<code>default</code>
 
element along with the <i>type</i> attribute.
 
</p>
 
 
<p>
 
<code>link-value-to</code>
 
works as follows: the property or attribute gets its value from the
 
property or attributed linked to, unless that property or attribute has
 
an undefined (empty) value; in the latter case, any default defined on
 
the present property or attribute will be used. This feature is
 
primarily intended for defining dependent properties or attributes
 
whose values are not directly modified by the user.
 
</p>
 
 
<p>Attributes also carry optional validators which allow you to
 
enforce syntactic rules or file-system semantics on the value when the
 
user enters text.</p>
 
 
[[Image:041validator.jpeg]]
 
<br>
 
===== Regex and File Match Types =====
 
 
<p>
 
The validator makes use of the
 
<code>regex</code>
 
type (also used in the parser or tokenizer; see [[Stream Parsers]]),
 
along with a special
 
<code>file-match</code>
 
type. A regex can be used to match by setting the <i>expression</i>
 
field; to split the segment into tokens on the basis of the expression,
 
set the <i>split</i> field to true (this applies only to the
 
<code>match</code>
 
type discussed [[Match Type]]). The expression should follow the
 
grammar in
 
<code>java.util.regex</code>
 
; the <i>flags</i> are those made available in the
 
<code>java.util.regex.Pattern</code>
 
class (consult the Javadoc for explanations):
 
</p>
 
<ul>
 
<li>CASE_INSENSITIVE</li>
 
<li>MULTILINE</li>
 
<li>DOTALL</li>
 
<li>UNICODE_CASE</li>
 
<li>CANON_EQ</li>
 
<li>LITERAL</li>
 
<li>COMMENTS</li>
 
<li>UNIX_LINES</li>
 
</ul>
 
 
<p>These can be OR'd in the usual manner.</p>
 
 
<p>
 
<code>file-match</code>
 
exports the attributes pertaining to
 
<code>org.eclipse.core.filesystem.IFileInfo</code>
 
; <i>efsAttributes</i> is an OR'd string of the EFS constants:
 
</p>
 
 
<ul>
 
<li>ATTRIBUTE_READ_ONLY</li>
 
<li>ATTRIBUTE_IMMUTABLE</li>
 
<li>ATTRIBUTE_OWNER_READ</li>
 
<li>ATTRIBUTE_OWNER_WRITE</li>
 
<li>ATTRIBUTE_OWNER_EXECUTE</li>
 
<li>ATTRIBUTE_GROUP_READ</li>
 
<li>ATTRIBUTE_GROUP_WRITE</li>
 
<li>ATTRIBUTE_GROUP_EXECUTE</li>
 
<li>ATTRIBUTE_OTHER_READ</li>
 
<li>ATTRIBUTE_OTHER_WRITE</li>
 
<li>ATTRIBUTE_OTHER_EXECUTE</li>
 
<li>ATTRIBUTE_EXECUTABLE</li>
 
<li>ATTRIBUTE_ARCHIVE</li>
 
<li>ATTRIBUTE_HIDDEN</li>
 
<li>ATTRIBUTE_SYMLINK</li>
 
<li>ATTRIBUTE_LINK_TARGET</li>
 
</ul>
 
 
<p>
 
The <i>lastModified...</i> fields require the format
 
<code>yyyy/MM/dd HH:mm:ss</code>
 
.
 
</p>
 
 
==== 2. Managed Files ====
 
 
<p>
 
By "managed file" is meant a local file required by the executable but
 
which may not automatically be present on the host on which the job
 
will run; hence, these files may either be external or may actually be
 
generated from the resource manager environment in conjunction with the
 
job submission, but in any case need to be copied to that host just
 
prior to it. The
 
<code>script</code>
 
file used in connection with scheduler (batch) jobs is a special
 
category of the
 
<code>managed-file</code>
 
type, and will be discussed in the next sub-section.
 
</p>
 
 
[[Image:05managed-files.jpeg]]
 
 
<p>
 
Managed files are added to the definition in groups determined by their
 
shared staging location, which is a path relative to the working
 
directory of the connection. (The batch script is normally staged to <i>
 
.eclipsesettings</i> in the user home directory, since it is by default
 
temporary and deleted after the submit call returns.) The file itself
 
can be set to be deleted after submission (<i>deleteTargetAfterUse</i>;
 
this is currently not implemented in the general case) and if the file
 
is actually generated by the resource manager, the local temporary copy
 
can be deleted or retained (<i>deleteSourceAfterUse</i>). In the latter
 
case, one can also distinguish multiple copies of the generated file by
 
setting <i>uniqueIdPrefix</i> to true.
 
</p>
 
 
<p>The managed file definition allows one of three possibilities as
 
to specifying content.</p>
 
<ol>
 
<li>If it is an external file or one edited perhaps through the
 
workspace, one can use the <code>path</code> element to indicate
 
location; this can be either a hard-coded path or a reference to a
 
property or attribute value.</li>
 
<li>The <code>contents</code> element is a string which literally
 
represents the file contents. The <i>resolveContents</i> attribute in
 
this case is used to indicate whether to pass this string through the
 
variable resolver, substituting any references to property or
 
attribute values it may contain. However, caution should be exercised
 
here in that this string should not contain "${...}" sequences which
 
do not actually refer to Eclipse variables (such as batch script
 
variables), or the resolution will fail. If <i>resolveContents</i> is
 
set to false, you can still provide this text element with a single
 
reference to a property or attribute, in which case the value of that
 
property or attribute will be used <i>as is</i>, without further
 
dereferencing.</li>
 
<li>The preferred, and most flexible way to represent the contents
 
of a file to be generated, however, is to use the <code>line</code>
 
type which is discussed [[line and arg types]] in connection with the
 
<code>script</code> type.</li>
 
 
</ol>
 
 
<p>When the submit call is executed, managed files are written out,
 
if so indicated, and then their target paths are determined as follows:</p>
 
 
<ul>
 
<li>If the <code>path</code> element is used, the target path
 
becomes <i>staging directory / name of pre-existing file</i>;</li>
 
<li>If the <code>content</code> or <code>line</code> elements are
 
used, the target path becomes <i>staging directory/
 
[uniqueIdPrefix]managed-file-name</i>);</li>
 
<li>A property is placed in the environment whose <i>name</i> is
 
the managed-file <i>name</i> and whose <i>value</i> is this target
 
path.</li>
 
</ul>
 
 
===== The (Batch) Script Element =====
 
 
<p>A resource manager definition for a scheduler system such as PBS
 
or LoadLeveler can be instrumented to work without a batch script (by
 
setting command-line flags or passing all the job control information
 
as environment variables, for instance), but most frequently the use of
 
a script allows more flexibility in configuring the job (interactive
 
managers of course have no need of a script).</p>
 
 
[[Image:06script.jpeg]]
 
 
<p>
 
If the script is specified in the XML definition, its path is
 
automatically added to the list of managed files to be staged to the <i>.eclipsesettings</i>
 
directory, and so there is no need to include a script entry explicitly
 
under the
 
<code>managed-files</code>
 
element. As with the
 
<code>managed-file</code>
 
, <i>deleteAfterSubmit</i> indicates that the script target should not
 
be retained (this is the default behavior); unlike the
 
<code>managed-file</code>
 
, however, the local copy of the generated script is always deleted. A
 
reserved property,
 
<code>managed_file_for_script</code>
 
, should be used to reference the script's path on the target resource;
 
for instance, in the PBS submit command:
 
</p>
 
 
<code>
 
&lt;arg&gt;qsub&lt;/arg&gt;<br>
 
&lt;arg&gt;${ptp_rm:managed_file_for_script#value}&lt;/arg&gt;
 
</code>
 
<br>
 
 
<p>
 
<b>Note</b>: If the
 
<code>import</code>
 
tab (see [[4. The Launch Tab]]) is used to provide an external or
 
workspace edited batch script to the run, nothing extra need be done in
 
the definition XML, as the presence of any external path for the script
 
is handled under the covers.
 
</p>
 
 
<p>
 
<i>insertEnvironmentAfter</i> is a line number indicating where in the
 
script to add any extra environment variables set through the <b>Environment</b>
 
tab provided as part of the <b>Run Configuration</b> wizard. This way
 
the user has control over whether these should overwrite previously
 
defined environment variable values.
 
</p>
 
 
<p></p>
 
 
=====
 
<code>line</code>
 
and
 
<code>arg</code>
 
types =====
 
 
<p>
 
The
 
<code>line</code>
 
element was mentioned [[Files">above</a> in connection with managed file
 
content; it is essentially a wrapper around a series of
 
<code>arg</code>
 
elements, all of which are placed on a single line (that is, the group
 
is terminated by a line separator).
 
</p>
 
 
[[Image:07line-arg.jpeg]]
 
 
<p>
 
The
 
<code>arg</code>
 
element is used for script and managed file content as well as in the
 
definition of commands. Its text element can contain variable
 
references to be resolved against the environment, but also allows for
 
the entire string to be treated as a literal by setting <i>resolve</i>
 
to false (default is true). This is useful in the context of the
 
<code>script</code>
 
definition inasmuch as it allows for the presence of batch-type
 
variables (e.g., ${HOME}) which should be resolved by the remote shell
 
and not inside the Eclipse client.
 
</p>
 
<p>
 
The default behavior of the argument resolver is not to write out or
 
include arguments whose value is undefined (either
 
<code>null</code>
 
or zero-length). <i>isUndefinedIfMatches</i> affords more nuanced
 
control over whether an argument should be so eliminated. If the
 
argument references property or attribute values, but also has
 
text-literal segments, a regex can be provided to define what an
 
"empty" argument would be in this case. For instance, if an argument
 
flag should not appear when the value it precedes is an empty string,
 
one could write:
 
</p>
 
 
<code> &lt;arg isUndefinedIfMatches="-f"&gt;-f
 
${ptp_rm:flag#value}&lt;/arg&gt; </code>
 
<br>
 
 
<p>For the purposes of matching, trailing whitespace is trimmed from
 
the resolved argument, so there is no need to specify this as part of
 
the regex used to match.</p>
 
 
===== "Just-in-time" resolution of
 
<i>@jobId</i>
 
and
 
<code>managed-file</code>
 
paths =====
 
 
<p>
 
<i>@jobId</i> is a special property name designating the runtime id for
 
a job instance. In the lifecycle of the run/launch (submit) call, this
 
value begins as an internally generated unique id which then is swapped
 
for the id returned by the scheduler or runtime system.
 
</p>
 
 
<p>
 
The <i>@jobId</i>, along with the target paths for
 
<code>managed-file</code>
 
elements, are not known at configuration time (i.e., before the user
 
hits "Run"). While the former is made visible to the parsers and the
 
returned status object of the submit command, neither is available for
 
reference in other managed files or in the
 
<code>script</code>
 
element, because these elements are generated prior to the actual
 
submission.
 
</p>
 
 
<p>
 
If the
 
<code>script</code>
 
needs to refer to the <i>@jobId</i>, it must do so via the variable
 
made available by the particular scheduler it is written for. An
 
example of how to reference the target path of a
 
<code>managed-file</code>
 
inside the
 
<code>script</code>
 
is included in the [[JAXBDemo.pdf|tutorial slides]]; this essentially
 
involves defining a variable in the submission command's environment,
 
with a reference to the
 
<code>managed-file</code>
 
path property as its value, and then using this environment variable
 
inside the
 
<code>script</code>
 
.
 
</p>
 
 
==== 3. Commands ====
 
 
<p>
 
As mentioned [[Resource Manager Command Types]], the resource manager
 
<code>command</code>
 
denotes a [UNIX-type] system call made on the resource manager's remote
 
(target) connection (PTP does not generally support execution on
 
Windows systems). The command is always configured and executed through
 
a Java API (the "process builder") which bottoms out in a
 
<code>bash -c</code>
 
command. The first argument of the command thus must be the name/path
 
of the executable only. Its own arguments can then be subsequently
 
specified by an arbitrary number of
 
<code>arg</code>
 
elements.
 
</p>
 
 
[[Image:08command.jpeg]]
 
 
<p>
 
There are a number of important attributes on the
 
<code>command-type</code>
 
element which bear detailed discussion here. <i>directory</i> of course
 
refers to where the command will be executed; also as expected, <i>redirectStderr</i>
 
means that both output and error streams are sent back on
 
<code>stdout</code>
 
. One can, if necessary, tune the buffer sizes on the stream readers
 
via the <i>streamBufferLimit</i>. If the environment set on the command
 
should entirely replace the shell environment (the default behavior is
 
to append the command environment), set <i>replaceEnvironment</i> to
 
true.
 
</p>
 
 
<p>
 
If you do not wish an error to be thrown in the case of non-zero exit
 
of the command, set <i>ignoreExitStatus</i> to true. The <i>flags</i>
 
attribute is an OR'd string of three possible values:
 
</p>
 
 
<ul>
 
<li>NONE (default)</li>
 
<li>ALLOCATE_PTY (allocates a pseudo-terminal)</li>
 
<li>FORWARD_X11</li>
 
</ul>
 
 
<p>
 
Two crucial fields for command control are <i>waitForId</i> and <i>keepOpen</i>.
 
The former indicates to the resource manager that the output stream for
 
the command is being parsed for an id which will appear as a property
 
in the environment during the command execution, and that the execution
 
should not return until it sees this id. Very often the submit commands
 
will have these semantics. The latter field indicates that the command
 
should be held open for potentially repeated redirection of input (see
 
next paragraph). There can only be one such process open inside the
 
resource manager at a time (these semantics will usually pertain to
 
interactive managers using a pseudo-terminal mode to control job
 
submission).
 
</p>
 
 
<p>
 
We have discussed the
 
<code>arg</code>
 
type [[line and arg types]]. Note that the command arguments, input and
 
even environment variables make use of this element. For the
 
<code>name-value-pair</code>
 
type comprising the latter one can as simple alternative set the <i>value</i>
 
attribute to a string (which will be resolved first in the current
 
environment); finer-grained control over the resolution of the value,
 
however, requires the use of the
 
<code>arg</code>
 
type. When there is
 
<code>input</code>
 
present, it is directed to the input stream of the command. If the <i>keepOpen</i>
 
attribute is true, a check will be made to see if there already exists
 
an open process (which is also alive), and use that; otherwise, the
 
arguments are executed, then the input arguments are given to the
 
process. With an open command/process, the input arguments can be fed
 
repeatedly to the same process; this allows, for instance, for
 
continuous testing of an interactive job in the same interactive
 
session.
 
</p>
 
 
===== Stream Parsers =====
 
 
<p>
 
One can attach parsers (which we also refer to as tokenizers) to the
 
output and error streams of any
 
<code>command</code>
 
in order to capture information and use it to side-effect existing
 
properties or attributes, or to generate new ones on the fly. While the
 
parser is not completely general, it is capable of a wide range of
 
tasks which would typically be required in the handling of output from
 
batch and runtime systems. We here explain the main elements (
 
<code>target, match, test</code>
 
) used by the tokenizer; one should further consult the [[Tokenizer
 
Examples]] demonstrating various usage scenarios.
 
</p>
 
 
[[Image:090tokenizer.jpeg]]
 
 
<p>
 
The
 
<code>type</code>
 
element will most commonly not be set, meaning the built-in parser will
 
be used; however, it is possible to implement a custom parser as a
 
contribution to the
 
<code>org.eclipse.ptp.rm.jaxb.core.streamParserTokenizer</code>
 
extension point, in which case this element should be set to its
 
extension id.
 
</p>
 
 
<p>
 
The built-in tokenizer can read the stream in two different ways. If <i>delim</i>
 
is provided, the stream is split using the indicated value. The string
 
should only be one character in length (escaped or non-escaped).
 
Provision is made for the '\r\n' (Windows) two-character delimiter
 
internally; in this case the delimiter should be set to "\r" (however,
 
as already mentioned, PTP does not generally guarantee that system
 
calls will work on Windows). Setting <i>includeDelim</i> means that the
 
delimiter will appear as the last char on the returned stream segment.
 
</p>
 
 
<p>
 
The second way to read from the stream is to provide a <i>maxMatchLen</i>
 
size; what this indicates is that whatever substring needs to be found
 
on the stream will not exceed this length. The stream is then read in
 
swatches of <i>maxMatchLen</i>, with the internal buffer set to twice
 
this size, so that each successive read shifts the buffer to the "left"
 
by one length. This guarantees that all such substrings will eventually
 
be matched.
 
</p>
 
 
<p>
 
Sometimes a sort of "look-ahead" paradigm is necessary. For instance,
 
one may need to match a segment or segments whose position is defined
 
from the end of the output, but you do not know in advance the actual
 
stream length. In this case, one can opt to read until the end of the
 
stream (<i>all</i>="true"), retaining only the last N buffer-lengths or
 
delimited segments, as indicated by the <i>save</i> field. When the
 
parser reaches the end of the stream, it will then apply the various
 
targets to each saved segment in order.
 
</p>
 
 
<p>
 
<i>applyToAll</i> is discussed further under
 
<code>target</code>
 
. The
 
<code>exit-on</code>
 
element indicates that the tokenizer should quit immediately when it
 
encounters this pattern;
 
<code>exit-after</code>
 
indicates that the tokenizer should quit when it encounters this
 
pattern, but should first apply the current segment to its targets.
 
</p>
 
 
====== Target Type ======
 
<br>
 
[[Image:091target.jpeg]]
 
 
<p>
 
A tokenizer may be given any number of
 
<code>target</code>
 
elements. The target denotes a particular value (object) currently in,
 
or to be written to, the environment, which will be side-effected on
 
the basis of the result of the tokenization. A target in turn contains
 
<code>match</code>
 
elements and
 
<code>test</code>
 
elements; the former are run as part of the stream processing; the
 
latter are run after the stream processing has been completed.
 
</p>
 
 
<p>
 
The target object is either to be constructed at match time, or it
 
pre-exists in the environment. If constructed, the <i>type</i> field is
 
used to indicate whether the object is a
 
<code>property</code>
 
or an
 
<code>attribute</code>
 
type; otherwise, <i>ref</i> points to the name of the
 
<code>property</code>
 
or
 
<code>attribute</code>
 
in the environment (recall that for the runtime job identifier, <i>@jobId</i>
 
is used).
 
</p>
 
<p>
 
<b>Note</b>: when new targets are constructed, there is a merge
 
operation at the end of tokenization which attempts to combine objects
 
into a single instance identified by their <i>name</i> attribute. This
 
assumes that such names will be unique and that any other values to be
 
set on the object which are not explicitly bound in some way to that
 
name via the match pattern will appear on the stream before a new name
 
does (see ex. 5 in [[Tokenizer Examples]]).
 
</p>
 
 
<p>The default behavior of the tokenizer read-match sequence is as
 
follows:</p>
 
 
<ol>
 
<li>read from the stream either a set number of chars or until the
 
delimiter is found;</li>
 
<li>for each target:
 
<ul>
 
<li>for each match:
 
<ul>
 
<li>if the match is positive, process each of the actions, and
 
go to (1).</li>
 
</ul>
 
</ul></li>
 
</ol>
 
 
<p>
 
Only one qualifying target is processed for any given segment read, and
 
for the given target, the first pattern matched is the one processed
 
for its actions. This is basically the "OR" semantics of normal logic
 
programming; hence <i>the implementer must be careful to arrange
 
the matches inside a target in such a way that the more specific match
 
patterns precede the more general</i>.
 
</p>
 
<p>Three boolean fields allow you to modify this behavior.</p>
 
 
<ol>
 
<li>The <i>applyToAll</i> field on the <code>tokenizer-type</code>
 
element means take the unmatched part of the read stream and pass it
 
to the next target, even if there was a previous match; this allows
 
you to capture more than one regex pattern per stream segment (see ex.
 
6 in [[Tokenizer Examples]]).</li>
 
<li>The <i>matchAll</i> field on the <code>target-type</code>
 
element means do not try to match an already matched expression until
 
all the others are matched (i.e., a logical AND instead of OR governs
 
the set of matches at successive calls to the target match operation);
 
this allows one to use, for instance, .* repeatedly but set different
 
fields of the object with the resulting match (see ex. 5 in
 
[[Tokenizer Examples]]).</li>
 
<li>The <i>moveToTop</i> field on the <code>match-type</code>
 
element indicates to the tokenizer that the matched target be promoted
 
to first position in the list of targets. This is useful when there is
 
an ordering which expects types of attributes or properties to be
 
grouped in sequence on the stream (see ex. 4 in [[Tokenizer
 
Examples]]).</li>
 
</ol>
 
 
<p>When a match is found, the set of action types it contains are
 
all applied.</p>
 
 
====== Match Type ======
 
<br>
 
[[Image:10match.jpeg]]
 
 
<p>Each of these types corresponds to an action to be taken on the
 
indicated field of the target object.</p>
 
 
<table align="center" rules="all">
 
<tr>
 
<td><code>set</code></td>
 
<td>sets the value of that field</td>
 
</tr>
 
<tr>
 
<td><code>append</code></td>
 
<td>adds to a string buffer, whose string value will be set on
 
the field</td>
 
</tr>
 
<tr>
 
<td><code>add</code></td>
 
<td>adds to a trst to which the value of that field will be set</td>
 
</tr>
 
<tr>
 
<td><code>put</code></td>
 
<td>places a key-value pair in a map to which the value of that
 
field will be set</td>
 
</tr>
 
<tr>
 
<td><code>throw</code></td>
 
<td>throws an exception and (optionally) also sets the value of
 
the field</td>
 
</tr>
 
</table>
 
 
<p>
 
The actions listed here all have
 
<code>entry-type</code>
 
children, either single (
 
<code>set, throw</code>
 
) or potentially multiple.
 
</p>
 
 
====== Entry Type ======
 
<br>
 
[[Image:11entry.jpeg]]
 
 
<p>
 
This value-abstraction allows one to set <i>key</i> (for maps) and <i>value</i>
 
as literals or references to other properties or attributes to be
 
resolved in the current environment; to reference the matched segment
 
parts one sets <i>keyIndex</i> and <i>valueIndex</i> if the regex was
 
used to split the segment; otherwise, <i>keyGroup</i> and <i>valueGroup</i>
 
refer to the capture group of the regex pattern, with group 0 referring
 
to the entire match.
 
</p>
 
 
====== Test Type ======
 
<br>
 
[[Image:12test.jpeg]]
 
 
<p>
 
As mentioned [[Target Type]], the
 
<code>test-type</code>
 
elements are all run after the tokenization has reached the end of the
 
stream. This class of actions is useful for setting values based on
 
other values produced during tokenization. A test is one or more
 
comparison operations plus a set of actions to apply to the target
 
fields in the case of either success or failure (the "else" element);
 
see ex. 3 or the "get-job-status" example in[[Tokenizer Examples]].
 
</p>
 
 
<p>
 
The <i>op</i> attribute can be one of the following comparisons:
 
</p>
 
 
<table align="center">
 
<tr>
 
<td>EQ</td>
 
<td>:</td>
 
<td>equals</td>
 
</tr>
 
<tr>
 
<td>LT</td>
 
<td>:</td>
 
<td>less than</td>
 
</tr>
 
<tr>
 
<td>LE</td>
 
<td>:</td>
 
<td>less than or equal to</td>
 
</tr>
 
<tr>
 
<td>GT</td>
 
<td>:</td>
 
<td>greater than</td>
 
</tr>
 
<tr>
 
<td>GE</td>
 
<td>:</td>
 
<td>greater than or equal to</td>
 
</tr>
 
</table>
 
 
<p>
 
When the operation is set to one of these, it is expected that the two
 
<code>value</code>
 
elements will be used. As usual, these elements can be literals or can
 
contain variables to be resolved into a string type;
 
<code>#FIELD</code>
 
refers to the value of the given field on the current target; the
 
strings will be converted in conformity with the inferred (primitive)
 
type of the comparison. The
 
<code>else</code>
 
element also pertains to comparison tests; the actions listed there
 
will be taken upon failure of the comparison.
 
</p>
 
 
<p>
 
The <i>op</i> attribute can also be a logical operator [AND, OR, NOT],
 
in which case the embedded
 
<code>test</code>
 
object should be used; these can be nested to an arbitrary depth, but
 
of course must bottom out in a comparison operation.
 
</p>
 
 
===== Tokenizer Examples
 
([[tokenizer-examples.xml|tokenizer-examples.xml]]) =====
 
<br>
 
 
<table align="center" rules="all">
 
<tr>
 
<th>Example</th>
 
<th>Description</th>
 
</tr>
 
<tr>
 
<td>1</td>
 
<td>output is a list of line-separated queue names to be assigned
 
to the known property "available-queues"</td>
 
</tr>
 
<tr>
 
<td>2</td>
 
<td>output is to be searched for its final line which should
 
contain a job id of the form "[digits].[chars]"</td>
 
</tr>
 
<tr>
 
<td>3</td>
 
<td>indeterminate number and order of lines containing parts of
 
attribute definitions, but each line bearing a distinct id (e.g.,
 
openMPI attribute discovery)</td>
 
</tr>
 
<tr>
 
<td>4</td>
 
<td>indeterminate number of definitions, but grouped by caption;
 
use of <i>moveToTop</i> to promote the target to the top of the list
 
when the caption appears</td>
 
</tr>
 
<tr>
 
<td>5</td>
 
<td>similar to 4, but without delimiter (implicit ordering)</td>
 
</tr>
 
<tr>
 
<td>6</td>
 
<td>similar to 4, but with indeterminate type order and using
 
buffer + DOTALL | UNIX_LINES</td>
 
</tr>
 
<tr>
 
<td>7</td>
 
<td>indeterminate number of property definitions, but on single
 
line</td>
 
</tr>
 
<tr>
 
<td>8</td>
 
<td>looking for values interspersed in the stream but which will
 
not exceed 32 chars</td>
 
</tr>
 
<tr>
 
<td>9</td>
 
<td>successive names/values, in order, but staggered</td>
 
</tr>
 
<tr>
 
<td>10</td>
 
<td>forced merge</td>
 
</tr>
 
<tr>
 
<td>11</td>
 
<td>exit-on</td>
 
</tr>
 
<tr>
 
<td>12</td>
 
<td>exit-after</td>
 
</tr>
 
<tr>
 
<td>13</td>
 
<td>get-job-status (use of tests)</td>
 
</tr>
 
</table>
 
<br>
 
 
==== 4. The Launch Tab ====
 
 
<p>
 
The UI component which needs to be configured in conjunction with the
 
resource manager control is the <b>Launch Tab</b>, which is actually
 
the main area of the <b>Resources Tab</b>, one of the six tabs
 
comprising the <b>Run Configuration</b> wizard or the seven tabs
 
comprising the <b>Debug Configuration</b> wizard. The purpose of this
 
component is to allow the user to set up the job by providing values
 
relating to resource requirements or to the properties of the job in
 
general. In other words, it is in this component that the user can set
 
the values on the
 
<code>attribute</code>
 
elements making up the configurable environment as defined in the XML.
 
</p>
 
 
<p>
 
Specifying the composition and layout of this component can be tricky
 
and tedious because it deals with widgets defined by the Eclipse
 
<code>JFace</code>
 
library and with their underlying implementation in
 
<code>SWT</code>
 
. We intend in the near future to provide some standard "templates" for
 
typical widget groups that can be cut and pasted into the XML
 
definition. Some of this can already be achieved by importing into the
 
workspace a provided definition (such as for the PBS resource manager)
 
and modifying it or borrowing from it. This is, in fact, the approach
 
demostrated in the [[JAXBDemo.pdf|tutorial]].
 
</p>
 
 
[[Image:13launch-tab.jpeg]]
 
 
<p>
 
As seen from this top-level specification, the Launch Tab can have any
 
number of
 
<code>dynamic</code>
 
tab-controllers, "dynamic" meaning configurable from the XML. There is
 
also a fixed
 
<code>import</code>
 
controller type; the text of this element is the label/title that will
 
appear on the tab. This component allows you to browse the workspace to
 
set a custom script as the one to run. Its main text area widget is
 
read-only; any editing of the script must be done through the workspace
 
editor. The browse is local only, so remote scripts should first be
 
imported into a local project in the workspace (using the remote
 
systems import wizard), and then captured by this controller's browse
 
button.
 
</p>
 
 
===== Tab Controller =====
 
 
<p>
 
The
 
<code>dynamic</code>
 
controllers belong to the
 
<code>tab-controller-type</code>
 
. It contains an arbitrary number of
 
<code>tab-folder</code>
 
or
 
<code>composite</code>
 
elements; as will be seen shortly, these both have potentially
 
recursive elements, so that one can nest "containers" in the usual
 
manner.
 
</p>
 
 
[[Image:14tab-controller.jpeg]]
 
 
<p>
 
The <i>includeWidgetValuesFrom</i> field is important. By default, it
 
is set to empty, meaning that the subset of the total resource manager
 
environment represented by the controller's widgets is all that will be
 
passed to the actual job configuration when the job is launched. This
 
behavior can be changed by giving a comma-delimited list of the
 
<code>title</code>
 
values for other controllers. In this case, the configuration for the
 
job, when the "Run" button is pressed with this controller being the
 
visible one, will also include the values of the widgets on the listed
 
controllers. <b>NOTE:</b> while this field controls the inclusion or
 
exclusion of attribute and property names in the configuration, their
 
values are always shared across the controllers (there is only one
 
environment); thus if a variable value is changed on one controller,
 
and this variable is also exposed on another, the value for that
 
variable will also change on the other controller when it becomes
 
visible; similarly, if the user switches off a controller to another
 
having only a subset of the first controller's variables, the variables
 
not represented on the second controller will become undefined or
 
return to their defaults.
 
</p>
 
 
<p>
 
<b> Throughout the following, it may generally be assumed that
 
fields such as <i>style</i>, <i>foreground</i>, <i>background</i>,
 
etc., take string equivalents of the corresponding <code>SWT</code>
 
constants (e.g., "SWT.LEFT", "SWT.VERTICAL", "SWT.NONE") which can be
 
OR'd (using "|") wherever they would be in Java code. We will <i>not</i>
 
exhaustively specify here which constants pertain to which widgets,
 
because in most cases we have tried to reflect very closely the names
 
of the <code>SWT</code> object types and fields, and this information
 
can be found by consulting the Javadocs relative to the widgets in
 
question. </b>
 
</p>
 
 
===== Tab Folders and Tab Items =====
 
<br>
 
[[Image:15tab-folder.jpeg]]
 
 
<p>
 
The
 
<code>tab-folder</code>
 
is a container which looks like a file-folder, with tabs running across
 
the top or bottom ("SWT.TOP, SWT.BOTTOM"). Each tab label corresponds
 
to a
 
<code>tab-item</code>
 
which provides the actual visible content. The
 
<code>tooltip</code>
 
pertains to the entire folder.
 
</p>
 
 
<p>
 
The
 
<code>tab-item</code>
 
is an all-purpose "container" in which all widget types can be
 
embedded. It is distinguished from the
 
<code>composite group</code>
 
in that it can only be the child of a
 
<code>tab-folder</code>
 
, that it can have a tooltip (which appears on the tab).
 
</p>
 
 
<p>
 
As with
 
<code>composite</code>
 
(see [[Composite/Group]]), the tab folder and tab item take
 
<code>layout</code>
 
and
 
<code>layout-data</code>
 
elements; these closely reflect their
 
<code>SWT</code>
 
objects and types; for further explanation we refer the reader once
 
again to the relevant Javadocs.
 
</p>
 
 
===== Layout =====
 
<br>
 
[[Image:17layout.jpeg]]
 
<br>
 
===== Layout Data =====
 
<br>
 
[[Image:18layout-data.jpeg]]
 
<br>
 
===== Composite/Group =====
 
 
<p>
 
The main container, of course, is the
 
<code>composite</code>
 
; its sub-type, the group (<i>group</i>="true"), allows for decoration
 
and a title, while the simple composite acts as a widget holder and has
 
no visible characteristics, though it does have a layout. As is
 
evident, composites can be contained in composites and tab-items, and
 
tab-folders can be contained in composites.
 
</p>
 
 
[[Image:16composite.jpeg]]
 
<br>
 
 
<p>
 
We now come to the three non-container widget elements with functional
 
characteristics. The first of these is the
 
<code>widget</code>
 
, which comprises a number of simple widget types.
 
</p>
 
===== Widget =====
 
<br>
 
[[Image:19widget.jpeg]]
 
<p>
 
The <i>type</i> of the widget can be one of the following:
 
</p>
 
<br>
 
<table align="center" rules="all">
 
<tr>
 
<td><code>label</code></td>
 
<td>fixed text for display</td>
 
</tr>
 
<tr>
 
<td><code>text</code></td>
 
<td>area for entering/editing text</td>
 
</tr>
 
<tr>
 
<td><code>checkbox</code></td>
 
<td>corresponds to a boolean choice</td>
 
</tr>
 
<tr>
 
<td><code>radiobutton</code></td>
 
<td>usually used in connection with <code>button-group</code></td>
 
</tr>
 
<tr>
 
<td><code>spinner</code></td>
 
<td>provides a continuous range of integer values</td>
 
</tr>
 
<tr>
 
<td><code>combo</code></td>
 
<td>select from a list of items</td>
 
</tr>
 
<tr>
 
<td><code>browse</code></td>
 
<td>a text widget followed by a push button allowing the user to
 
browse for directory or file.</td>
 
</tr>
 
<tr>
 
<td><code>action</code></td>
 
<td>a push button associated with a <code>button-action</code>
 
command</td>
 
</tr>
 
</table>
 
<br>
 
<p>
 
Not all attributes and elements of the
 
<code>widget</code>
 
descriptor are applicable to all types.
 
</p>
 
<br>
 
<table align="center" rules="all">
 
<tr>
 
<td><i>title</i>
 
</td>
 
<td>used with <code>checkbox</code> and <code>push button</code>
 
widgets (<code>browse, action</code>) for the button label</td>
 
</tr>
 
<tr>
 
<td><i>style</i>
 
</td>
 
<td>carries the <code>SWT</code> style constants appropriate to
 
the widget type</td>
 
</tr>
 
<tr>
 
<td><i>directory</i>
 
</td>
 
<td>limit the <code>browse</code> widget to directories</td>
 
</tr>
 
<tr>
 
<td><i>uri</i>
 
</td>
 
<td>have the <code>browse</code> widget set a URI as the text
 
(default is false, in which case the text is an absolute path)</td>
 
</tr>
 
<tr>
 
<td><i>localOnly</i>
 
</td>
 
<td>limit the <code>browse</code> widget to the local file system
 
(otherwise, the choice of local or remote is enabled)</td>
 
</tr>
 
<tr>
 
<td><i>readOnly</i>
 
</td>
 
<td>applies to <code>text</code> and <code>combo</code> widgets;
 
the text area in this case is not editable</td>
 
</tr>
 
<tr>
 
<td><i>saveValueTo</i>
 
</td>
 
<td>applies to all widgets except <code>label</code> and <code>action</code>;
 
the name of the property or attribute whose value should be set on
 
the basis of the widget's "selected" value or text<br> <b>Note:</b>
 
use of this attribute is mutually exclusive with the <code>fixed-</code>
 
and <code>dynamic-text</code> elements.</td>
 
</tr>
 
<tr>
 
<td><i>translateBooleanAs</i>
 
</td>
 
<td>applies to the <code>checkbox</code> widget; a
 
comma-delimited pair indicating a string equivalent for the boolean
 
to be used as the actual value for the property or attribute set by
 
the widget<br> <i>Example</i>: "YES,NO" would mean true yields
 
the first string and false the second</td>
 
</tr>
 
<tr>
 
<td><code>sub-layout-data</code>
 
</td>
 
<td>applies to the <code>browse</code> widget; applies to the
 
button component, whereas <code>layout-data</code> applies to the
 
text area</td>
 
</tr>
 
<tr>
 
<td><code>items-from</code>
 
</td>
 
<td>applies to the <code>combo</code> widget; indicates a
 
property or attribute <i>value</i> (of type <code>java.util.Collection</code>)
 
to use to populate the items<br> <b>Note:</b> if a combo widget
 
saves its value to an attribute and the present element on the widget
 
descriptor is not set, the attribute will be checked for non-empty <code>choice</code>
 
and <code>items-from</code> values, which then will be used to
 
populate the combo items; the <code>items-from</code> field on the
 
widget is for added flexibility (for instance, linking up a target
 
property with another property providing the list of choices)</td>
 
</tr>
 
<tr>
 
<td><code>fixed-text</code>
 
</td>
 
<td>applies to the <code>label</code> and (read-only)<code>text</code>
 
widgets; text is resolved once and remains constant thereafter</td>
 
</tr>
 
<tr>
 
<td><code>dynamic-text</code>
 
</td>
 
<td>applies only to (read-only)<code>text</code> widgets; text is
 
resolved each time there is an update of a value from the Launch Tab</td>
 
</tr>
 
<tr>
 
<td><code>button-action</code>
 
</td>
 
<td>applies to the <code>action</code> widget; the <code>button-action-type</code>
 
specifies the name of a command (<code>action</code>) defined in the
 
XML; this can be one of the <code>start-up</code>, <code>shut-down</code>,
 
commands, or a special <code>button-action</code> command (<b>note
 
</b>that it cannot, however, be a <code>-job</code> command, as the Launch
 
Tab is not coupled to any submitted jobs); the <code>button-action-type</code>
 
also indicates whether the variable affected by the command should be
 
cleared prior to the command execution, and whether the launch tab
 
should be refreshed (default is true) afterwards</td>
 
</tr>
 
</table>
 
<br>
 
 
<p>Widget foreground, background (color) and font are in principle
 
configurable, though the font setting may not always work. The tooltip
 
will appear on the widget whereever it usually does.</p>
 
 
===== Button Group =====
 
<br>
 
[[Image:20button-group.jpeg]]
 
 
<p>
 
The button group provides an explicit selection of a single value based
 
on a mutually exclusive set of button labels. Just as with the
 
<code>widget</code>
 
, one uses <i>saveValueTo</i> to indicate what property or attribute
 
value to set. The
 
<code>button</code>
 
elements, which can be arranged horizontally or vertically using the <i>style</i>
 
attribute ("SWT.HORIZONTAL","SWT.VERTICAL"), will be
 
<code>widget</code>
 
elements whose type is either <i>checkbox</i> or <i>radiobutton</i> (if
 
a different widget type is given, an error will occur); the <i>saveValueTo</i>
 
attribute on the individual button will be ignored. Radio buttons are
 
"sticky" in the sense that once they are selected, they cannot be
 
"unchecked" until a different button in the group is selected. It is
 
thus advisable always to provide a default value for the property or
 
attribute associated with the group value if radio buttons are used. If
 
check boxes are used, they can be individually checked on and off (one
 
at a time), thus allowing for the value of the group to be potentially
 
empty.
 
</p>
 
 
<p>Below is an example of a button group using radio buttons,
 
disposed vertically.</p>
 
<br>
 
[[Image:ButtonGroup.jpeg]]
 
<br>
 
 
===== Attribute Viewer =====
 
<br>
 
[[Image:21attribute-viewer.jpeg]]
 
 
<p>
 
The last of the widget types, the
 
<code>attribute-viewer</code>
 
, displays visible properties and attributes in a table or tree viewer,
 
with the value columns as editable widgets. The type of cell editor is
 
determined implicitly here by the type of the property or attribute;
 
the presence of a combo editor is determined by an attribute whose
 
<code>choice</code>
 
or
 
<code>items-from</code>
 
element is defined. (This is the only viable possibility for a combo in
 
the table, as there would also need to be a target to save the selected
 
item to, viz., the value of this same attribute).
 
</p>
 
 
<p>Each entry in the viewer is provided with a checkbox to indicate
 
which attributes have been chosen. A checkbox is also placed above the
 
viewer to allow for filtering the unchecked items. The viewer outputs
 
its checked values to the environment (and on update removes unselected
 
ones). The name of the viewer is also stored against a string of all
 
selected values, constructed from a template ( further discussion at
 
the end of this section).</p>
 
 
<p>
 
The viewer <i>type</i> can be either "table" or "tree"; in the case of
 
the tree, the type, default, status and description fields of the
 
attribute or property are displayed as collapsible child rows hanging
 
off the main name entry. Either table or tree can have up to seven
 
columns assigned to the various fields of the attribute. These are
 
defined by the
 
<code>column-data</code>
 
elements. Tooltips for the column appear when hovering over the column
 
header. (<i>A caveat on the foreground and background settings for
 
this type: they are exposed here but may not work as expected: these
 
are currently applied to the column through the cell label provider;
 
foreground does not change the font color but applies the color to the
 
entire cell.</i>)
 
</p>
 
 
<p>
 
<i>sort</i> is done on the name field/column. This is a toggle sort,
 
such that alternate clicks reverse the sort direction. <i>headerVisible</i>
 
and <i>linesVisible</i> control the look of the table. <i>tooltipEnabled</i>
 
enables column-viewer label provider tooltip support. The tooltip
 
defined for an attribute will appear on the row of the table or the
 
parent node of the tree. The attribute description will also appear as
 
a tooltip on the description columns if they exist.
 
</p>
 
 
<p>
 
Control over the actual contents of the viewer is achieved through the
 
<code>viewer-items-type</code>
 
; one can here explicitly list properties or attributes for inclusion
 
using the
 
<code>include</code>
 
element, or one can set one or both of the <i>all</i> attributes; in
 
the latter case, attributes and properties can be excluded from the set
 
using
 
<code>exclude</code>
 
.
 
</p>
 
 
<p>
 
A property bearing the name given to this widget is written to the
 
environment at each update/refresh; the value of the property is a
 
string formed from the selected (checked) rows of the table using the
 
<code>template-type</code>
 
(the
 
<code>value</code>
 
element). The <i>pattern</i> can be any literal string embedding <i>@name</i>
 
and <i>@value</i> tags as placeholders for the row's name and value;
 
for instance, '@name="@value"' would generate a string of name-value
 
assignments. The default <i>separator</i> between patterned segments is
 
a single space.
 
</p>
 
 
<p>Below is an example of the tree version of the attribute viewer.
 
The text area above it displays the current value of its templated
 
pattern string. The child rows reporting status, default, etc., cannot
 
be selected or unselected (only the parent row can). Hovering over the
 
name (here walltime) displays the tooltip.</p>
 
<br>
 
[[Image:AttribViewerTree.jpeg]]
 
<br>
 
 
=== The Monitor Data Type ===
 
 
<p>At present, the monitor component has less elements to define;
 
this may change in future releases, when certain hard-coded features of
 
the driver may be handed over to the client for configuration.</p>
 
 
[[Image:22monitor.jpeg]]
 
 
<p>
 
This component can be furnished with its own set of properties
 
(currently unused). What is necessary to set at present is only the <i>schedulerType</i>
 
attribute (e.g., "PBS"). <i>refreshFrequencyInSeconds</i> defaults to
 
60, but this can be changed according to the needs of the user. Be
 
aware that too low a setting will probably not work, as the command on
 
an average sized system will take upwards of five seconds to complete
 
(XML is being streamed to the driver and a
 
<code>diff</code>
 
is sent back to the client ).
 
</p>
 
 
<p>
 
If the
 
<code>driver</code>
 
element is configured, then the default behavior, which is to stage
 
over the necessary driver scripts to the <i>.eclipsesettings</i>
 
directory in the user's home, is overridden by connecting to a
 
pre-existent installation. This can be specified either using the
 
<code>url</code>
 
, or a combination of the
 
<code>name</code>
 
,
 
<code>path</code>
 
and
 
<code>args</code>
 
elements.
 
</p>
 

Revision as of 11:42, 20 June 2011

Back to the top