Rational Developer for Power Systems Software
V7.6

com.ibm.etools.iseries.rse.ui.validators
Class ValidatorQSYSCommandString

java.lang.Object
  extended by com.ibm.etools.iseries.rse.ui.validators.ValidatorQSYSCommandString
All Implemented Interfaces:
IIBMiMessageIDs
Direct Known Subclasses:
ValidatorIBMiSBMJOBParms

public class ValidatorQSYSCommandString
extends Object
implements IIBMiMessageIDs

This class is used in dialogs that prompt for a command string, or command parameters

This does basic validation, attempting to look only for blatantly obvious errors. For example, we attempt to check that the string, minus the command start if applicable, is a sequence of XXX(...) keywords and values.


Field Summary
protected  ValidatorQSYSCommandName commandNameValidator
           
static String Copyright
           
protected  SystemMessage currentMessage
           
protected  char[] delimiters
           
static boolean EMPTY_ALLOWED_NO
          Constant to use when empty command strings are allowed: false
static boolean EMPTY_ALLOWED_YES
          Constant to use when empty command strings are not allowed: tru
protected  boolean isEmptyAllowed
           
protected  boolean isParmsOnly
           
static int MAX_CMDSTRING_LENGTH
          Maximum permitted length for a command string: 2000 characters
protected  SystemMessage msg_Empty
           
protected  SystemMessage msg_Invalid
           
static boolean PARMS_ONLY_MODE_NO
          Constant to use when command string is supposed to be a command, optionally followed by parms: false
static boolean PARMS_ONLY_MODE_YES
          Constant to use when command string is supposed to command parms only, and no command name: true
 
Fields inherited from interface com.ibm.etools.iseries.rse.ui.IIBMiMessageIDs
FILEMSG_CREATE_RESOURCE_NOTVISIBLE, MSG_2PHASE_SAVE_NO_COPY, MSG_2PHASE_SAVE_NO_CREATE, MSG_2PHASE_SAVE_NO_DELETE, MSG_2PHASE_SAVE_NO_UPLOAD, MSG_ASPDEVNAME_EMPTY, MSG_ASPDEVNAME_NOTVALID, MSG_AUTLNAME_EMPTY, MSG_AUTLNAME_NOTVALID, MSG_CANNOT_POSITION_TO_LINE, MSG_CCSID_EMPTY, MSG_CCSID_NOTVALID, MSG_CMD_COMPLETED, MSG_CMD_DONEINTJOB, MSG_CMD_INTJOB_BUSY, MSG_CMD_MSGSNOTAVAIL, MSG_CMD_NO_CONNECTION, MSG_CMD_NO_INTJOB, MSG_CMD_NOMSGHELP, MSG_CMD_NOMSGS, MSG_CMD_NOTRUN, MSG_CMD_SBMTOINTJOB, MSG_CMD_SUBMITTED, MSG_CMDNAME_EMPTY, MSG_CMDNAME_NOTVALID, MSG_COMM_CACHE_NOT_AVAILABLE, MSG_COMM_CANNOT_FIND_PGM, MSG_COMM_CANNOT_FIND_SRVPGM, MSG_COMM_CANNOT_START_DEBUG_ROUTER, MSG_COMM_CANNOT_START_DEBUG_ROUTER_PORT, MSG_COMM_CANNOT_START_DEBUG_ROUTER_STARTED, MSG_COMM_CANNOT_START_RAC, MSG_COMM_CANNOT_START_SERVER, MSG_COMM_CANNOT_STOP_DEBUG_ROUTER, MSG_COMM_CANNOT_STOP_RAC, MSG_COMM_CANNOT_STOP_SERVER, MSG_COMM_CODE_AUTHORITY, MSG_COMM_CODE_MUSTCLOSE, MSG_COMM_CODE_REG_ERROR, MSG_COMM_CONNECTION_ERROR, MSG_COMM_CONSOLE_IMPORT_CHOOSE, MSG_COMM_CONSOLE_IMPORT_CODESERVER_XML_PARSE_ERROR, MSG_COMM_CONSOLE_IMPORT_CONNECTION_NAME_EXISTS, MSG_COMM_CONSOLE_IMPORT_FVDCSEC_PARSE_ERROR, MSG_COMM_CONSOLE_IMPORT_FVDCSEC_READ_ERROR, MSG_COMM_CONSOLE_IMPORT_FVDCTCP_ACCESS_ERROR, MSG_COMM_CONSOLE_IMPORT_FVDCTCP_NO_FILE, MSG_COMM_CONSOLE_IMPORT_FVDCTCP_READ_ERROR, MSG_COMM_CONSOLE_IMPORT_IMPORT_ERROR, MSG_COMM_CONSOLE_IMPORT_LIBRARY_XML_READ_ERROR, MSG_COMM_CONSOLE_IMPORT_NO_PROFILE_ERROR, MSG_COMM_CONSOLE_IMPORT_SUMMARY, MSG_COMM_ERROR_BIND, MSG_COMM_ERROR_CLIENT_SECURITY, MSG_COMM_ERROR_JDK_MISSING, MSG_COMM_ERROR_RSESERVER_MISSING, MSG_COMM_ERROR_SERVER_SECURITY, MSG_COMM_GENERAL_IO_ERROR, MSG_COMM_HOST_PTF_MISSING, MSG_COMM_HOSTSVR_NOT_STARTED, MSG_COMM_IJOB_BUSY, MSG_COMM_IJOB_DISCONNECTED, MSG_COMM_LOCAL_SERVER_USED, MSG_COMM_MODULE_NOT_IN_PGM, MSG_COMM_MODULE_NOT_IN_SRVPGM, MSG_COMM_NEED_UPDATED_DEBUG_SERVER, MSG_COMM_NETWOR_INTERRUPTED, MSG_COMM_NETWORK_DOWN, MSG_COMM_NO_IJOB, MSG_COMM_OS400_VERSION_NOT_SUPPORTED, MSG_COMM_OUTSTANDING_REQ, MSG_COMM_OUTSTANDING_REQS, MSG_COMM_PGM_NO_DEBUG_DATA, MSG_COMM_PREF_INVALID_PWD_EXPIRATION, MSG_COMM_PREF_INVALID_WAIT_TIMEOUT, MSG_COMM_PTF_MISSING, MSG_COMM_REQUEST_NOT_RESPONDED, MSG_COMM_RQSHELL_PTF_MISSING, MSG_COMM_SRVPGM_NO_DEBUG_DATA, MSG_COMMAND_EMPTY, MSG_COMMAND_INTERACTIVE, MSG_COMMAND_NOTVALID, MSG_COMMAND_SBMJOB, MSG_COMMANDPARMS_EMPTY, MSG_COMMANDPARMS_NOTVALID, MSG_COMPILE_EVENTS_FILE_NOT_PROCESSED, MSG_COMPILE_MEMBER_NOT_PROCESSED, MSG_CONNECTION_COMMPROPERTIES, MSG_CONNECTION_PREFIX, MSG_CONSECUTIVE_SOSI, MSG_COPYLIBRARY_FAILED, MSG_COPYMEMBER_FAILED, MSG_COPYOBJECT_FAILED, MSG_CPA_IMPORT_ERROR_DURING_IMPORT, MSG_CPA_IMPORT_ERROR_READING_TYPES_FILE, MSG_CPA_IMPORT_SELECT_DIRECTORY, MSG_CPA_IMPORT_SPECIFY_CONNECTION_PROFILE, MSG_CPA_IMPORT_SUMMARY_OF_IMPORT, MSG_CPO_IMPORT_DEFAULT_HOST_MUST_BE_SPECIFIED, MSG_CPO_IMPORT_ERROR_DURING_IMPORT, MSG_CPO_IMPORT_FILE_IS_EMPTY, MSG_CPO_IMPORT_FILE_NOT_FOUND, MSG_CPO_IMPORT_FILE_PARSE_ERROR, MSG_CPO_IMPORT_FILE_READ_ERROR, MSG_CPO_IMPORT_FILTER_NAME_EXISTS, MSG_CPO_IMPORT_LIST_OF_FILTERS_IMPORTED, MSG_CPO_IMPORT_NO_FILTERS_TO_IMPORT, MSG_CPO_IMPORT_NO_PROFILE_EXISTS, MSG_CPO_IMPORT_NOT_VALID_CODE_PROJECT, MSG_CPO_IMPORT_PLEASE_ENTER_CPO_FILE, MSG_CPO_IMPORT_PROFILE_NAME_EXISTS, MSG_CPO_IMPORT_SELECT_PROJECT_FILE, MSG_CPO_IMPORT_SPECIFY_CONNECTION_PROFILE, MSG_CPO_IMPORT_SUMMARY_OF_OPERATIONS, MSG_DOWNLOAD_FAILED, MSG_DOWNLOAD_LOCK_NO_READ, MSG_DOWNLOAD_LOCK_NO_WRITE_DSPJOB, MSG_DTAARANAME_EMPTY, MSG_DTAARANAME_NOTVALID, MSG_DTAQNAME_EMPTY, MSG_DTAQNAME_NOTVALID, MSG_DTV_DELETE_ERROR, MSG_DTV_DELETE_REC_MISSING, MSG_DTV_EXCEEDS_FLD_LENGTH, MSG_DTV_FIELD_ATTR_NOT_SUPPORT, MSG_DTV_FILE_EMPTY, MSG_DTV_FILE_OPEN_ERROR, MSG_DTV_FILE_READ_ERROR, MSG_DTV_GET_FILE_INFO_ERROR, MSG_DTV_INVALID_CHAR, MSG_DTV_INVALID_DATETIME, MSG_DTV_INVALID_NUMBER, MSG_DTV_RECORD_NOT_FOUND, MSG_DTV_UPDATE_FILE_OPEN_ERROR, MSG_ERROR_UNEXPECTED, MSG_FILENAME_EMPTY, MSG_FILENAME_NOTVALID, MSG_FLDNAME_EMPTY, MSG_FLDNAME_NOTVALID, MSG_GENERIC_ERROR, MSG_GENERICNAME_NOTVALID, MSG_IASPNAME_NOTVALID, MSG_IFS_SEQUENCE_NUMBERS, MSG_INVALID_HEX, MSG_JOB_NAME_EMPTY, MSG_JOB_NAME_NOTVALID, MSG_JOB_NUMBER_EMPTY, MSG_JOB_NUMBER_NOTVALID, MSG_JOB_PROPERTY_CHG_ERROR, MSG_JOB_PROPERTY_INVALID, MSG_JOB_STATUS_NOT_CHECKED, MSG_JOB_USER_EMPTY, MSG_JOB_USER_NOTVALID, MSG_JOBDNAME_EMPTY, MSG_JOBDNAME_NOTVALID, MSG_JOBMONITOR_REFRESH_HOUR, MSG_JOBMONITOR_REFRESH_HOURS, MSG_JOBMONITOR_REFRESH_MINUTE, MSG_JOBMONITOR_REFRESH_MINUTES, MSG_JOBMONITOR_REFRESH_NEVER, MSG_JOBMONITOR_REFRESH_SECONDS, MSG_LIB_EXISTS, MSG_LIB_NOTFOUND, MSG_LIB_NOTFOUND_CREATE, MSG_LIB_QTEMP_NOTALLOWED, MSG_LIBL_ALREADYCURLIB, MSG_LIBL_ALREADYONLIBL, MSG_LIBL_FILTER_ALREADY_EXISTS, MSG_LIBL_FILTER_QUESTION, MSG_LIBNAME_EMPTY, MSG_LIBNAME_NOTVALID, MSG_LISTRETRIEVAL_CANCELLED, MSG_LISTRETRIEVAL_FAILED, MSG_MBR_SEQUENCE_NUMBERS, MSG_MBR_SRCDTAREQUIRED, MSG_MBRNAME_EMPTY, MSG_MBRNAME_NOTVALID, MSG_MBRTYPE_DUPLICATE, MSG_MBRTYPE_GENERIC_EMPTY, MSG_MBRTYPE_GENERIC_NOTVALID, MSG_MBRTYPE_NOTUNIQUE, MSG_MBRTYPE_SCALAR_EMPTY, MSG_MBRTYPE_SCALAR_NOTVALID, MSG_MEMBER_NOT_FOUND, MSG_MODULENAME_EMPTY, MSG_MODULENAME_NOTVALID, MSG_MOVEMEMBER_FAILED, MSG_MOVEMEMBER_SAMEFILE, MSG_MOVEOBJECT_FAILED, MSG_MOVEOBJECT_SAMELIBRARY, MSG_MSGFILENAME_EMPTY, MSG_MSGFILENAME_NOTVALID, MSG_NEW_COMPILE_MAIN_COMMAND_EMPTY, MSG_NEW_COMPILE_MAIN_COMMAND_INTRO, MSG_NEW_COMPILE_MAIN_DESC, MSG_NEW_COMPILE_MAIN_NAME_DUPLICATE, MSG_NEW_COMPILE_MAIN_NAME_EMPTY, MSG_NEW_COMPILE_MAIN_NAME_INTRO, MSG_NEWMBRTYPE_EMPTY, MSG_NEWMBRTYPE_INUSE, MSG_NFS_CREATE_DIR_QUESTION, MSG_NFS_DIR_NOT_CREATED, MSG_NFS_DISPLAY_ALL_LIB, MSG_NFS_ENTERNAME, MSG_NFS_ENTERNEWNAME, MSG_NFS_ENTERTYPE, MSG_NFS_INVALID_SUBSET_ATTRIB, MSG_NFS_INVALID_SUBSET_NAME, MSG_NFS_INVALID_SUBSET_SIZE, MSG_NFS_INVALID_SUBSET_TYPE, MSG_NFS_INVALID_SUBSVAR, MSG_NFS_INVALIDCHARACTER, MSG_NFS_INVALIDNAME, MSG_NFS_INVALIDTYPE, MSG_NFS_MISSING_SUBSVAR, MSG_NFS_OVERWRITE_FILE_QUESTION, MSG_NFS_READONLY_FILE, MSG_NFS_TYPENOTFOUND, MSG_OBJATTR_EMPTY, MSG_OBJATTR_GENERIC_EMPTY, MSG_OBJATTR_GENERIC_NOTVALID, MSG_OBJATTR_NOTVALID, MSG_OBJATTR_SCALAR_EMPTY, MSG_OBJATTR_SCALAR_NOTVALID, MSG_OBJNAME_EMPTY, MSG_OBJNAME_NOTVALID, MSG_OBJTYPE_ALLALLNOTVALID, MSG_OBJTYPE_DUPLICATE, MSG_OBJTYPE_EMPTY, MSG_OBJTYPE_NOTUNIQUE, MSG_OBJTYPE_NOTVALID, MSG_OBJTYPEATTR_EMPTY, MSG_OBJTYPEATTR_NOTVALID, MSG_OFFLINE_CANT_CONNECT, MSG_OPEN_IN_EDITOR_NO_MEMBER, MSG_PASSWORD_GOING_TO_EXPIRE, MSG_PASSWORD_GOING_TO_EXPIRE_TOMORROW, MSG_PATH_PREFIX, MSG_PATHNAME_EMPTY, MSG_PGMNAME_EMPTY, MSG_PGMNAME_NOTVALID, MSG_PGMSRVPGMNAME_EMPTY, MSG_PGMSRVPGMNAME_NOTVALID, MSG_PREFIX, MSG_PROCEDURE, MSG_QUESTION_CRTLIB, MSG_RCDNAME_EMPTY, MSG_RCDNAME_NOTVALID, MSG_RECORD_LENGTH_EMPTY, MSG_RECORD_LENGTH_NOTVALID, MSG_RECORD_NF, MSG_REFLIB_REQUIRED, MSG_RPGWIZARD_CCSID_EMPTY, MSG_RPGWIZARD_CCSID_INVALID, MSG_RPGWIZARD_CLASS_EMPTY, MSG_SAVEAS_MEMBER_OPEN, MSG_SAVEFILE_CREATING, MSG_SAVEFILE_EXIST_NOTSAVF, MSG_SAVEFILE_EXIST_REPLACE, MSG_SAVEFILE_RESTORING, MSG_SAVEFILE_RSTLIB_EXISTS, MSG_SAVEFILE_UPLOAD_DONE, MSG_SBMJOB_PARMS_NOCMD, MSG_SBMJOB_PARMS_NOJOBD, MSG_SEARCH_COLUMNNUMBER_EMPTY, MSG_SEARCH_EVENTFILE_LOCKED, MSG_SEARCH_INPUT_BOTH, MSG_SEARCH_INPUT_NUMBER, MSG_SEARCH_INPUT_POSITIVE_NUMBER, MSG_SEARCH_RECORD_LENGTH, MSG_SEARCH_SEARCHSTRING_EMPTY, MSG_SEARCH_UNEXPECTED_ERROR, MSG_SIGNON_GENERAL_ERROR, MSG_SIGNON_PASSWORD_ERROR, MSG_SIGNON_PASSWORD_EXPIRED, MSG_SIGNON_PASSWORD_INCORRECT, MSG_SIGNON_PASSWORD_INCORRECT_USER_DISABLED, MSG_SIGNON_PASSWORD_NEW_VERIFY_MISMATCH, MSG_SIGNON_USERID_DISABLED, MSG_SIGNON_USERID_ERROR, MSG_SIGNON_USERID_INVALID, MSG_SRVPGMNAME_EMPTY, MSG_SRVPGMNAME_NOTVALID, MSG_STATUS_UPLOADING, MSG_STATUS_VERIFYING, MSG_SYNTAX_CHECK_ILERPG_DLLS_NOTLOADED, MSG_SYNTAX_CHECK_ILERPG_ERROR, MSG_SYNTAX_CHECK_ILERPG_OK, MSG_SYNTAX_CHECK_MORE_THAN_MAX_MSG, MSG_SYNTAX_CHECK_SQL_OFFLINE, MSG_TABLE_EXPORT_ERROR, MSG_TITLE, MSG_UNEPECTED_UNKNOWN, MSG_UNEXPCTED_UNEXPECTED, MSG_UPLOAD_LOCK_NO_READ, MSG_UPLOAD_LOCK_NO_WRITE, MSG_UPLOAD_LOCK_NO_WRITE_DSPJOB, MSG_UPLOAD_MEMBER_EXISTS, MSG_UPLOAD_NO_MEMBER, MSG_UPLOAD_NO_WRITE, MSG_USERID_EMPTY, MSG_USERID_NOTVALID, MSG_VERIFY_DLLS_NOTLOADED, MSG_VERIFY_ILERPG_COMM_BUSY, MSG_VERIFY_ILERPG_COMPILE_ERR, MSG_VERIFY_ILERPG_DLLS_NOTLOADED, MSG_VERIFY_ILERPG_IO_LISTFIL, MSG_VERIFY_ILERPG_LOW_SEVERITY, MSG_VERIFY_ILERPG_NO_MEMORY, MSG_VERIFY_ILERPG_OK, MSG_VERIFY_ILERPG_OPEN_LISTFIL, MSG_VERIFY_ILERPG_STOP_KEY_PRESSED, MSG_VERIFY_ILERPG_SYSERR, PLUGIN_ID, PREFIX, RESID_PREFIX
 
Constructor Summary
ValidatorQSYSCommandString()
          Constructor with defaults: empty string allowed? yes validating parms only? yes
ValidatorQSYSCommandString(boolean isEmptyAllowed, boolean isParmsOnly)
          Constructor to specify explicitly if empty string is allowed, and if validating command parms versus full command string
 
Method Summary
protected  String doMessageSubstitution(SystemMessage msg, String substitution)
          Helper method to substitute data into a message
 int getMaximumNameLength()
          Return the max length for iSeries commands: 2000 Child classes override if desired
 SystemMessage getSystemMessage()
          When isValid returns non-null, call this to get the SystemMessage object for the error versus the simple string message.
protected  String getSystemMessageText(SystemMessage msg)
          Helper method to set the current system message and return its level one text
protected  boolean isDelimiter(char currChar)
          Check if given character is one of the delimiters
 boolean isEmptyAllowed()
          Return if empty string is allowed.
 boolean isParmsOnly()
          Return if validating command parms only, versus a full command
 SystemMessage isSyntaxOk(String newText)
          Overridable entry point.
 String isValid(Object newValue)
          As required by ICellEditor.
 String isValid(String newText)
          Called to do verification of user-entered text.
 void setEmptyAllowed(boolean allowed)
          Set if empty commands or parms are allowed.
 void setErrorMessages(SystemMessage msg_Empty, SystemMessage msg_NotValid)
          Supply your own error message text.
 void setParmsOnly(boolean parmsOnly)
          Set what we are testing: true - testing for command parameters, that must not be preceded by a command name false - testing for a command string that starts with a command name and optionally follows with command parms
 SystemMessage validate(String text)
          For convenience, this is a shortcut to calling:
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

Copyright

public static final String Copyright
See Also:
Constant Field Values

MAX_CMDSTRING_LENGTH

public static final int MAX_CMDSTRING_LENGTH
Maximum permitted length for a command string: 2000 characters

See Also:
Constant Field Values

EMPTY_ALLOWED_NO

public static final boolean EMPTY_ALLOWED_NO
Constant to use when empty command strings are allowed: false

See Also:
Constant Field Values

EMPTY_ALLOWED_YES

public static final boolean EMPTY_ALLOWED_YES
Constant to use when empty command strings are not allowed: tru

See Also:
Constant Field Values

PARMS_ONLY_MODE_NO

public static final boolean PARMS_ONLY_MODE_NO
Constant to use when command string is supposed to be a command, optionally followed by parms: false

See Also:
Constant Field Values

PARMS_ONLY_MODE_YES

public static final boolean PARMS_ONLY_MODE_YES
Constant to use when command string is supposed to command parms only, and no command name: true

See Also:
Constant Field Values

isEmptyAllowed

protected boolean isEmptyAllowed

isParmsOnly

protected boolean isParmsOnly

msg_Invalid

protected SystemMessage msg_Invalid

msg_Empty

protected SystemMessage msg_Empty

currentMessage

protected SystemMessage currentMessage

commandNameValidator

protected ValidatorQSYSCommandName commandNameValidator

delimiters

protected char[] delimiters
Constructor Detail

ValidatorQSYSCommandString

public ValidatorQSYSCommandString()
Constructor with defaults:


ValidatorQSYSCommandString

public ValidatorQSYSCommandString(boolean isEmptyAllowed,
                                  boolean isParmsOnly)
Constructor to specify explicitly if empty string is allowed, and if validating command parms versus full command string

Parameters:
isEmptyAllowed - true if an empty string is valid
isParmsOnly - true if validating a command parms string that doesn't allow for a command name, false if testing a full command string that must have a command name optionally followed by command parameters
Method Detail

setErrorMessages

public void setErrorMessages(SystemMessage msg_Empty,
                             SystemMessage msg_NotValid)
Supply your own error message text. By default, messages from ISeriesSystemPlugin resource bundle are used.

Parameters:
error - message when entry field is empty (or null if to keep the default msg)
error - message when value entered is not valid (or null if to keep the default msg)

setEmptyAllowed

public void setEmptyAllowed(boolean allowed)
Set if empty commands or parms are allowed. If true, an null or zero-length string is not considered an error.


setParmsOnly

public void setParmsOnly(boolean parmsOnly)
Set what we are testing:


isEmptyAllowed

public boolean isEmptyAllowed()
Return if empty string is allowed. If true, an null or zero-length string is not considered an error.


isParmsOnly

public boolean isParmsOnly()
Return if validating command parms only, versus a full command


isSyntaxOk

public SystemMessage isSyntaxOk(String newText)
Overridable entry point. Called after other base checking succeeds. Override in child to do your own syntax checking.

Parameters:
newText - the input text to be verified
Returns:
A error message if the verify failed, or null if it is successful.

doMessageSubstitution

protected String doMessageSubstitution(SystemMessage msg,
                                       String substitution)
Helper method to substitute data into a message


getSystemMessageText

protected String getSystemMessageText(SystemMessage msg)
Helper method to set the current system message and return its level one text


getMaximumNameLength

public int getMaximumNameLength()
Return the max length for iSeries commands: 2000 Child classes override if desired


isValid

public String isValid(String newText)
Called to do verification of user-entered text.

Parameters:
newText - the input text to be verified
Returns:
A error message string if the verify failed, or null if it is successful.

isDelimiter

protected boolean isDelimiter(char currChar)
Check if given character is one of the delimiters


isValid

public String isValid(Object newValue)
As required by ICellEditor. Simply calls isValid(String)


getSystemMessage

public SystemMessage getSystemMessage()
When isValid returns non-null, call this to get the SystemMessage object for the error versus the simple string message.


validate

public SystemMessage validate(String text)
For convenience, this is a shortcut to calling:

  if (isValid(text) != null)
    msg = getSystemMessage();
 


Rational Developer for Power Systems Software
V7.6

Copyright 2011 IBM Corp. All Rights Reserved.

Note: This documentation is for part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.