Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2010-2024 60East Technologies Inc., All Rights Reserved.
//
// This computer software is owned by 60East Technologies Inc. and is
// protected by U.S. copyright laws and other laws and by international
// treaties. This computer software is furnished by 60East Technologies
// Inc. pursuant to a written license agreement and may be used, copied,
// transmitted, and stored only in accordance with the terms of such
// license agreement and with the inclusion of the above copyright notice.
// This computer software or any other copies thereof may not be provided
// or otherwise made available to any other person.
//
// U.S. Government Restricted Rights. This computer software: (a) was
// developed at private expense and is in all respects the proprietary
// information of 60East Technologies Inc.; (b) was not developed with
// government funds; (c) is a trade secret of 60East Technologies Inc.
// for all purposes of the Freedom of Information Act; and (d) is a
// commercial item and thus, pursuant to Section 12.212 of the Federal
// Acquisition Regulations (FAR) and DFAR Supplement Section 227.7202,
// Government's use, duplication or disclosure of the computer software
// is subject to the restrictions set forth by 60East Technologies Inc..
//
////////////////////////////////////////////////////////////////////////////
package com.crankuptheamps.client;
import java.nio.ByteBuffer;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;
import com.crankuptheamps.client.fields.*;
import com.crankuptheamps.client.exception.*;
/**
* All communication with AMPS occurs through passing Messages.
* Generally when sending messages to AMPS an application we would
* use {@link Command} API.
* The AMPS clients provide named convenience methods for core AMPS
* functionality. These named methods work by creating and sending
* Messages to AMPS.
*/
public abstract class Message {
// Not using enums here looks like Java 1.4 circa 2003.
// That said, it's fast, low-cost, and safe enough if
// guarded against mis-use (which we do.)
/**
* Tells AMPS how to interpret a message.
*
* Without a command, AMPS will reject the message.
*
* The relevancy or meaning of other Message fields like options
* will depend upon the value of its command field.
*
*/
static public final class Command {
public static final int Unknown = 0;
public static final int Publish = 1;
public static final int Subscribe = 2;
public static final int Unsubscribe = 4;
public static final int SOW = 8;
public static final int Heartbeat = 16;
public static final int SOWDelete = 32;
public static final int DeltaPublish = 64;
public static final int Logon = 128;
public static final int SOWAndSubscribe = 256;
public static final int DeltaSubscribe = 512;
public static final int SOWAndDeltaSubscribe = 1024;
public static final int StartTimer = 2048;
public static final int StopTimer = 4096;
public static final int GroupBegin = 8192;
public static final int GroupEnd = 16384;
public static final int OOF = 32768;
public static final int Ack = 65536;
public static final int Flush = 131072;
public static final int NoDataCommands = Publish | Unsubscribe | Heartbeat | SOWDelete | DeltaPublish | Logon
| StartTimer | StopTimer | Flush;
}
// These AckTypes are often combined for a single command
// so we favor the int 'mask' versus a heavy EnumSet.
/**
* Container class of maskable ints that represent the available types of
* Message acknowledgement.
*
*
* @see com.crankuptheamps.client.Command#getAckType()
* @see com.crankuptheamps.client.Command#setAckType(int)
* @see com.crankuptheamps.client.Command#addAckType(int)
* @see com.crankuptheamps.client.fields.AckTypeField
*/
static public final class AckType {
public static final int None = 0;
public static final int Received = 1;
public static final int Parsed = 2;
public static final int Processed = 4;
public static final int Persisted = 8;
public static final int Completed = 16;
public static final int Stats = 32;
}
/**
* Container class of ints that represent the possible
* values for Message status.
*
*
* @see Message#getStatus()
* @see Message#setStatus(int)
*/
static public final class Status {
public static final int None = 0;
public static final int Success = 1;
public static final int Failure = 2;
public static final int Retry = 3;
}
/**
* Container class of ints that represent the possible
* values for Message reason.
*
*
* @see Message#setReason(int)
* @see Message#getReason()
*/
static public final class Reason {
/**
* This is the default state, typically indicating no specific reason or a successful operation.
*/
public static final int None = 0;
/**
* When a publish indicates that the message, as identified by the bookmark, is already present in
* this instance of AMPS.
*/
public static final int Duplicate = 1;
/**
* Indicates a problem when the AMPS server reports that a filter could not be successfully processed.
*/
public static final int BadFilter = 2;
/**
* Represents an issue with a regular expression used for topic filtering. OR
* When the AMPS server reports that the regex provided as the topic for a subscription or query could
* not be processed.
*/
public static final int BadRegexTopic = 3;
/**
* Occurs when a client attempts to register a subscription that already exists.
*/
public static final int SubscriptionAlreadyExists = 4;
/**
* Indicates that the data has been deleted.
*/
public static final int Deleted = 5;
/**
* Used when data has exceeded its validity or expiration.
*/
public static final int Expired = 6;
/**
* Signifies a successful match or operation.
*/
public static final int Match = 7;
/**
* Indicates an issue when the AMPS server reports that the command requested is
* not valid for the topic specified.
*/
public static final int InvalidTopic = 8;
/**
* When an error occurs with the name of a client.
*/
public static final int NameInUse = 9;
/**
* Represents authentication failure.
*/
public static final int AuthFailure = 10;
/**
* Used when a user doesn't have permission to logon or use a specific topic or command.
*/
public static final int NotEntitled = 11;
/**
* Using the default authenication module, which allows everything.
*/
public static final int AuthDisabled = 12;
/**
* Represents an issue with a bookmark, which is a saved message positions.
*/
public static final int InvalidBookmark = 13;
/**
* Occurs when there is an issue with the specified ordering of messages.
*/
public static final int InvalidOrderBy = 14;
/**
* When the specified subscription ID is already in use for this client.
*/
public static final int SubidInUse = 15;
/**
* Occurs when there is no topic specified.
*/
public static final int NoTopic = 16;
/**
* Indicates a failure during the login process.
*/
public static final int LogonFailed = 17;
/**
* Signifies that a login is required to perform the operation.
*/
public static final int LogonRequired = 18;
/**
* Indicates an issue with both the topic and the filter.
*/
public static final int InvalidTopicOrFilter = 19;
/**
* Occurs when an invalid subscription ID is provided.
*/
public static final int InvalidSubId = 20;
/**
* Indicates that neither a topic nor a filter is specified.
*/
public static final int NoTopicOrFilter = 21;
/**
* Occurs when there is no client name provided.
*/
public static final int NoClientName = 22;
/**
* Represents an issue with the storage of messages.
*/
public static final int BadSowKey = 23;
/**
* Indicates that regular expression topics are not supported.
*/
public static final int RegexTopicNotSupported = 24;
/**
* Occurs when there is a failure in storing messages.
*/
public static final int SowStoreFailed = 25;
/**
* Signifies an error in parsing data.
*/
public static final int ParseError = 26;
/**
* Used when an operation or feature is not supported.
*/
public static final int NotSupported = 27;
/**
* Indicates a failure in transactional message storage.
*/
public static final int TxStoreFailure = 28;
/**
* When the AMPS server reports that a filter could not be
* successfully processed.
*/
public static final int DuplicateLogon = 29;
/**
* Represents a failure in transaction replay.
*/
public static final int TxnReplayFailed = 30;
/**
* Occurs when a SOW query is canceled.
*/
public static final int SowCanceled = 31;
/**
* Indicates issues with provided options.
*/
public static final int InvalidOptions = 32;
/**
* Signifies an issue with the message type.
*/
public static final int InvalidMessageType = 33;
/**
* Indicates that the requested order-by condition is too large.
*/
public static final int OrderByTooLarge = 34;
/**
* Used when a message is rejected by a transport filter.
*/
public static final int RejectedByTransportFilter = 35;
/**
* Represents an attempt to delete invalid state of the world.
*/
public static final int SowDeleteInvalid = 36;
/**
* This might never be used.
*/
public static final int PublishFilterNoMatch = 37;
/**
* Used for other, unspecified reasons or states.
*/
public static final int Other = 38;
}
/**
* Represents the possible values for message options in an AMPS command.
* Options in a message are combined into a comma-delimited list. Each of
* these option values is comma-terminated, so they can be easily combined
* by simple string concatenation. For example,
* to provide the options OOF and NoEmpties to a SOW and Subscribe
* command, you can use the following code:
*
*
* Command c = new Command("sow_and_subscribe")
* .setOptions(Message.Options.OOF +
* Message.Options.NoEmpties)
* // other parameters for command here
* ;
*
*
* For options that take a list of parameters, this class provides
* convenience constructors to format the list.
*
* @see Command#getOptions()
* @see Command#setOptions(String)
* @see Message#getOptions()
* @see Message#setOptions(String)
*/
static public final class Options {
public static final String None = null;
/**
* Constant string for the live option.
* which requests that a bookmark subscription should receive
* messages before they are written to the transaction
* log once replay is complete. This could potentially slightly
* reduce latency in some configurations, although subscriptions
* using this option increase the risk of inconsistent data in
* failover situations.
*
*/
public static final String Live = "live,";
/**
* Constant string for the oof (out of focus) option.
* When used with a subscription, the oof option
* requests notification messages when a message that previously
* matched the subscription no longer matches the subscription.
*
*/
public static final String OOF = "oof,";
/**
* Constant string for the replace option.
* When this option is provided on a command, AMPS updates
* the existing subscription specified in the
*
*
* SubId
*
*
* for the
* command rather than creating a new subscription.
* See the AMPS User Guide for details.
*
*/
public static final String Replace = "replace,";
/**
* Constant string for the no_empties option.
* When used with a delta subscription, this option
* specifies that AMPS will not create a message to this
* subscription when a publish happens that does not change the
* value of any field in the message.
*
*/
public static final String NoEmpties = "no_empties,";
/**
* Constant string for the send_keys option.
* This option is the current server default, and does not
* need to be specified. When set, AMPS provides the
* key fields for a message along with changed fields in
* messages to a delta subscription.
*
*/
public static final String SendKeys = "send_keys,";
/**
* Constant string for the timestamp option.
* When specified on a command, AMPS will include the
* timestamp header on data messages sent in response
* to that command.
*
*/
public static final String Timestamp = "timestamp,";
/**
* Constant string for the no_sow_key option.
* When specified on a command, AMPS will not provide the
* SOW key field on messages provided in response to the command.
*
*/
public static final String NoSowKey = "no_sowkey,";
/**
* Constant string for the cancel option, used
* when acknowledging (sow_delete) a leased message
* to return the message to the queue rather than acknowledging
* the message as processed.
*
*/
public static final String Cancel = "cancel,";
/**
* Constant string for the expire option, used
* when acknowledging (sow_delete) a leased message
* to immediately expire the message from the queue rather than
* acknowledging the message as processed.
*/
public static final String Expire = "expire,";
/**
* Constant string for the resume option.
* This option is to start a set of bookmark subscriptions
* that have been entered in a paused state.
* See the AMPS User Guide for details.
*
*/
public static final String Resume = "resume,";
/**
* Constant string for the pause option.
* This option is used to group bookmark subscriptions so
* that a set of independent subscriptions can be started simultaneously
* and proceed through replay together, typically used for
* testing or auditing purposes.
* See the AMPS User Guide for details.
*
*/
public static final String Pause = "pause,";
/**
* Constant string for the fully_durable option.
* This option specifies that a message will not be provided
* to a bookmark replay until it has been acknowledged as
* persisted by all synchronous replication destinations. The
* option is used to provide increased repeatability of bookmark
* subscriptions, although it may increase the latency for
* current publishes to be delivered to the subscriber due to the persistence
* requirement.
*
*/
public static final String FullyDurable = "fully_durable,";
/**
* Formats the conflation option for a command.
* This option can be used with subscriptions to topics in the
* State-of-the-World to request that AMPS conflate publishes
* to the same record. This can reduce bandwidth and processing
* requirements for the the subscriber. If a large number
* of subscribers will use the same conflation
* setting for the same topic, consider configuring a
* ConflatedTopic on the server.
*
* See the AMPS User Guide for details.
*
* @param conflation the conflation interval
* @return the formatted value
*/
public static String Conflation(String conflation) {
return String.format("conflation=%s,", conflation);
}
/**
* Formats the conflation_key option for a command
* that uses the conflation option.
* This option can be used with subscriptions to topics in the
* State-of-the-World to request that AMPS conflate publishes
* to messages with a common value for a field or set of fields
* that is not the key for the topic.
*
* This option must be used with the conflation option.
*
* @param conflationKey the field or fields to use as a conflation key
* @return the formatted value
*/
public static String ConflationKey(String conflationKey) {
return String.format("conflation_key=%s,", conflationKey);
}
/**
* Formats the top_n option for a command.
* When this option is specified, AMPS will return the
* specified number of messages from the results.
* See the AMPS Command Reference for
* details.
*
* @param topN the number of messages to return from the result set
* @return the formatted value
*/
public static String TopN(int topN) {
return String.format("top_n=%d,", topN);
}
/**
* Formats the skip_n option for a
* sow or sow_and_subscribe command.
* When this option is provided, AMPS will skip the specified
* number of messages before returning the top_n
* records specified. See the AMPS Command Reference
* and the Developer Guide for details.
*
* @param skipN the number of results to skip before beginning to return results
* @return the formatted value
*/
public static String SkipN(int skipN) {
return String.format("skip_n=%d,", skipN);
}
/**
* Formats the max_backlog option for a command,
* used when subscribing to a queue.
* When consuming from a queue, this option sets the maximum
* number of messages the client is willing to have outstanding
* at a given time. (The actual number of messages provided
* is determined by both this parameter and the server
* configuration.) See the AMPS User Guide and the
* AMPS Command Reference for details.
*
* @param maxBacklog the maximum number of messages to provide to this
* subscription at a given time
* @return the formatted value
*/
public static String MaxBacklog(int maxBacklog) {
return String.format("max_backlog=%d,", maxBacklog);
}
/**
* Formats the rate option for a command,
* used to slow down the rate of a bookmark replay.
* When used with a bookmark replay, this option directs
* AMPS to slow down the replay to approximately the rate
* specified. See the AMPS Command Reference for
* details.
*
* @param rate the requested rate limit for the bookmark replay
* @return the formatted value
*/
public static String Rate(String rate) {
return String.format("rate=%s,", rate);
}
/**
* Formats the rate_max_gap option for a
* command, which can be used when a bookmark replay specifies
* a relative rate. When used with a bookmark replay that
* specifies a relative rate (for example, that the replay should be
* slowed down to no more than 2X the original publish
* rate), this option sets the maximum amount of time for the replay
* to go without producing a message. See the AMPS User Guide
* for details.
*
* @param rateMaxGap the maximum amount of time without producing a message
* @return the formatted value
*/
public static String RateMaxGap(String rateMaxGap) {
return String.format("rate_max_gap=%s,", rateMaxGap);
}
/**
* Formats the select option for a subscription
* or SOW query, which specifies the fields produced
* in the delivered messages. This overload of the method expects
* a string that contains a comma-delimited list of field directives.
*
* See the AMPS User Guide for details.
*
* @param selectList the list of fields to produce
* @return the formatted value
*/
public static String Select(String selectList) {
return String.format("select=[%s],", selectList);
}
/**
* Formats the select option for a subscription
* or SOW query, which specifies the fields produced
* in the delivered messages. This overload of the method expects a
* {@link java.lang.Iterable} that contains individual field
* directives. The method formats the field directives into a
* comma-delimited list.
*
* See the AMPS User Guide for details.
*
* @param selectList a list of fields to produce
* @return the formatted value
*/
public static String Select(Iterable selectList) {
StringBuilder builder = new StringBuilder();
builder.append("select=[");
for (String s : selectList) {
builder.append(s);
builder.append(',');
}
builder.setCharAt(builder.length() - 1, ']');
builder.append(',');
return builder.toString();
}
/**
* Formats the projection option for an
* aggregated subscription, which specifies the fields produced
* by the aggregation. When this option is provided,
* a grouping option must also be provided.
* This overload of the method expects a string that
* contains a comma-delimited list of projections.
* See the AMPS User Guide for details.
*
* @param projection the fields to produce
* @return the formatted value
*/
public static String Projection(String projection) {
return String.format("projection=[%s],", projection);
}
/**
* Formats the projection option for an
* aggregated subscription, which specifies the fields produced
* by the aggregation. When this option is provided,
* a grouping option must also be provided.
* This overload of the method expects a {@link java.lang.Iterable}
* that contains individual field projections. The method
* formats the field projections into a comma-delimited list.
*
* See the AMPS User Guide for details.
*
* @param projection a list of fields to produce
* @return the formatted value
*/
public static String Projection(Iterable projection) {
StringBuilder builder = new StringBuilder();
builder.append("projection=[");
for (String s : projection) {
builder.append(s);
builder.append(',');
}
builder.setCharAt(builder.length() - 1, ']');
builder.append(',');
return builder.toString();
}
/**
* Formats the grouping option for an
* aggregated subscription, which specifies how to determine
* which records to aggregate together. When this option is provided,
* a projection option must also be provided.
* This overload of the method expects a String
* that contains a comma-delimited list of fields to group
* by. See the AMPS User Guide for details.
*
* @param grouping the fields to group by
* @return the formatted value
*/
public static String Grouping(String grouping) {
return String.format("grouping=[%s],", grouping);
}
/**
* Formats the grouping option for an
* aggregated subscription, which specifies how to determine
* which records to aggregate together. When this option is provided,
* a projection option must also be provided.
* This overload of the method expects a {@link java.lang.Iterable}
* that contains individual fields. This method formats the contents of
* the Iterable into a comma-delimited list.
* See the AMPS User Guide for details.
*
* @param grouping the list of fields to group by
* @return the formatted value
*/
public static String Grouping(Iterable grouping) {
StringBuilder builder = new StringBuilder();
builder.append("grouping=[");
for (String s : grouping) {
builder.append(s);
builder.append(',');
}
builder.setCharAt(builder.length() - 1, ']');
builder.append(',');
return builder.toString();
}
/**
* Formats the ack_conflation interval for a logon command.
* This option can be used to request that, for this connection,
* the server return persisted acknowledgements for publishes more
* frequently than the default 1s interval. Notice that,
* if the server replicates messages to other destinations, the
* effective conflation interval may depend on the replication
* configuration of this server and the replication configuration of
* the destinations that this server replicates to: AMPS will not
* provide a persisted acknowledgment for a message that
* has not been properly acknowledged by the applicable
* replication destinations.
*
* This option is only valid on a logon command.
*
* @param interval the interval at which to conflate persisted publish
* acknowledgements for this connection
* @return the formatted value
*/
public static String AckConflationInterval(String interval) {
return String.format("ack_conflation=%s,", interval);
}
}
/**
* Used by associated {@link com.crankuptheamps.client.fields.Field} classes
* to encode byte data
*/
protected final CharsetEncoder encoder;
/**
* Used by associated {@link com.crankuptheamps.client.fields.Field} classes
* to decode byte data
*/
protected final CharsetDecoder decoder;
/**
* Defines the lower bound for {@link #getVersionAsInt()}
*/
static final int MINIMUM_SERVER_VERSION = 99999999;
protected Message(CharsetEncoder encoder,
CharsetDecoder decoder) {
this.encoder = encoder;
this.decoder = decoder;
}
/**
* Returns the CharsetEncoder for this Message.
* The encoder is used by the Message to encode the fields.
*
* @return The CharsetEncoder for this Message.
*/
public CharsetEncoder getEncoder() {
return this.encoder;
}
/**
* Returns the CharsetDecoder for this Message.
* The decoder is used by the Message to decode the fields.
*
* @return The CharsetDecoder for this Message.
*/
public CharsetDecoder getDecoder() {
return this.decoder;
}
/**
* Private field to store the bookmark sequence number for this Message.
* The _bookmarkSeqNo is used by bookmark stores to track Messages. It
* represents the position or sequence number of the message within a data
* stream. A bookmark store is responsible for maintaining information about the
* last processed message by a consumer. It facilitates the ability of the
* consumer to resume processing from the point where it left off, especially
* after reconnecting to the system.
*/
private long _bookmarkSeqNo = 0;
/**
* This field is only used internally by bookmark store implementations
* to cache a tracking index for undiscarded messages, so they can be
* looked up quickly when discarded for a bookmark subscription. There
* is generally no reason for end-user applications to use this.
*
* @param val The value to set as the new BookmarkSeqNo for this Message.
*/
public void setBookmarkSeqNo(long val) {
_bookmarkSeqNo = val;
}
/**
* Returns the bookmark sequence number for this Message.
* This field is only used internally by bookmark store implementations
* to cache a tracking index for undiscarded messages, so they can be
* looked up quickly when discarded for a bookmark subscription. There
* is generally no reason for end-user applications to use this.
*
* @return The bookmark sequence number for this Message.
*/
public long getBookmarkSeqNo() {
return _bookmarkSeqNo;
}
/**
* Initially, _subscription does not reference any object; it is empty
*/
private Subscription _subscription = null;
/**
* Sets the Subscription for this Message.
* This field is only used internally by bookmark store implementations to
* establish a link between a message and its corresponding subscription,
* enabling the tracking of messages for delivery and acknowledgment.
*
* @param subscription the subscription to set
*/
public void setSubscription(Subscription subscription) {
_subscription = subscription;
}
/**
* Gets the Subscription for this Message.
* This method is only used internally by bookmark store implementations to
* access the subscription object for the message being tracked. This method
* help identify which subscriber acknowledged the message.
*
* @return The Subscription used for this Message.
*/
public Subscription getSubscription() {
return _subscription;
}
private byte[] buffer = null;
/**
* Sets the byte buffer used for this Message.
* It is uncommon for applications to use this directly.
*
* @param buffer the byte buffer to use for the Message.
*/
public void setBuffer(byte[] buffer) {
this.buffer = buffer;
}
/**
* Gets the byte buffer used by the Message.
* It is uncommon for applications to use this directly.
*
* @return the raw byte buffer backing this Message object.
*/
public byte[] getBuffer() {
return this.buffer;
}
private int _rawBufferOffset = 0;
/**
* Sets the Offset into the byte buffer where this Message begins.
* It is uncommon for applications to use this directly.
*
* @param offset Offset of first byte of Message within the buffer.
*/
public void setRawBufferOffset(int offset) {
this._rawBufferOffset = offset;
}
/**
* Gets the offset into the byte buffer where this Message begins.
* It is uncommon for applications to use this directly.
*
* @return Offset of first byte of Message within the buffer.
*/
public int getRawBufferOffset() {
return this._rawBufferOffset;
}
private int _rawBufferLength = 0;
/**
* Set the length of the Message within the byte buffer.
* It is uncommon for applications to use this directly.
* It indicates how many bytes the message occupies within the buffer.
* This method is typically used by the library or code to set the message
* length for outgoing messages.
*
* @param length The length of the Message within the buffer.
*/
public void setRawBufferLength(int length) {
this._rawBufferLength = length;
}
/**
* Gets the length of the Message within the byte buffer.
* It is uncommon for applications to use this directly.
*
* @return Length of Message within the buffer.
*/
public int getRawBufferLength() {
return this._rawBufferLength;
}
/**
* Returned by calls to {@link #serialize(ByteBuffer)}
*/
public enum SerializationResult {
OK, BufferTooSmall
}
/**
* Serializes this message into the provided byte buffer at its current
* position.
*
* @param buffer The byte buffer to write into.
* @return A result enum that either indicates success or that the
* provided buffer doesn't have enough remaining space to hold
* the serialized representation of the message.
*/
public abstract SerializationResult serialize(ByteBuffer buffer);
/**
* Resets all {@link Field} members to null.
*
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message reset() {
for (Field f : _fields) {
f.reset();
}
_bookmarkSeqNo = 0;
_subscription = null;
_ignoreAutoAck = false;
return this;
}
protected final AckTypeField _AckType = new AckTypeField();
/**
* Returns the type of acknowledgement for an acknowledgement Message.
*
* @return The AckType for this acknowledgement Message.
*/
public int getAckType() {
return _AckType.getValue();
}
/**
* Returns the type of acknowledgement for an outgoing Message.
*
* @return The AckType for an outgoing Message.
*/
public int getAckTypeOutgoing() {
if (_AckType.isNull())
return AckType.None;
int ackType = AckType.None;
int len = 0;
for (int start = _AckType.position; start <= _AckType.position + _AckType.length; ++start) {
if (start == _AckType.position + _AckType.length ||
_AckType.buffer[start] == (byte) ',') {
ackType |= AckTypeField.decodeAckType(_AckType.buffer, start - len, len);
len = 0;
} else
++len;
}
return ackType;
}
/**
* Sets the type of acknowledgement for an acknowledgement Message.
*
* @param v The value to set as the AckType for the acknowledgement Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setAckType(int v) {
_AckType.setValue(v);
return this;
}
/**
* Sets the type of acknowledgement for an acknowledgement Message.
*
* @param v The value to set as the AckType for the acknowledgement Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setAckType(String v) {
_AckType.set(v.getBytes(StandardCharsets.ISO_8859_1));
return this;
}
/**
* Checks whether the AckType field is null.
*
* @return True if AckType field is null, false if not.
*/
public boolean isAckTypeNull() {
return _AckType.isNull();
}
protected final IntegerField _BatchSize = new IntegerField();
/**
* Returns the BatchSize for this Message.
*
* @return The BatchSize for this Message.
*/
public int getBatchSize() {
return _BatchSize.getValue();
}
/**
* Sets the BatchSize for this Message.
*
* @param v the batch size to set
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setBatchSize(int v) {
_BatchSize.setValue(v);
return this;
}
/**
* Checks whether the BatchSize field is null.
*
* @return True if the BatchSize field is null, false if not.
*/
public boolean isBatchSizeNull() {
return _BatchSize.isNull();
}
protected final BookmarkField _Bookmark = new BookmarkField();
/**
* Returns the AMPS Bookmark for this Message. The Bookmark is an
* identifier assigned by AMPS to locate a Message in the transaction
* log.
*
* @return AMPS Bookmark for this Message.
*/
public String getBookmark() {
return _Bookmark.getValue(decoder);
}
/**
* Gets the raw value for the AMPS Bookmark. The Bookmark is an identifier
* assigned by AMPS to locate a Message in the transaction log.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw value for the AMPS Bookmark.
*/
public BookmarkField getBookmarkRaw() {
return _Bookmark;
}
/**
* Sets the value for the AMPS Bookmark. The Bookmark is an identifier
* assigned by AMPS to locate a Message in the transaction log. Setting
* the Bookmark is used for commands that locate Messages in the log,
* such as a Bookmark subscribe or historical SOW query. Setting the
* bookmark on a publish Message has no effect.
*
* @param v The string used to set the value of the AMPS Bookmark.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setBookmark(String v) {
_Bookmark.setValue(v, encoder);
return this;
}
/**
* Sets the value for the AMPS Bookmark. The Bookmark is an identifier
* assigned by AMPS to locate a Message in the transaction log. Setting
* the Bookmark is used for commands that locate Messages in the log,
* such as a Bookmark subscribe or historical SOW query. Setting the
* Bookmark on a publish Message has no effect.
*
* @param buffer The buffer containing the value for the Bookmark.
* @param offset The location at which the value begins.
* @param length The length of the value in the buffer.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setBookmark(byte[] buffer, int offset, int length) {
_Bookmark.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Bookmark field is null.
*
* @return True if the Bookmark field is null, false if not.
*/
public boolean isBookmarkNull() {
return _Bookmark.isNull();
}
protected final StringField _ClientName = new StringField();
/**
* Gets the ClientName on this Message.
*
* @return The decoded Client name for this Message.
*/
public String getClientName() {
return _ClientName.getValue(decoder);
}
/**
* Gets the ClientName on this Message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw ClientName on this Message.
*/
public Field getClientNameRaw() {
return _ClientName;
}
/**
* Sets the name of the Client sending the Message.
*
* @param v The string used to set the ClientName.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setClientName(String v) {
_ClientName.setValue(v, encoder);
return this;
}
/**
* Sets the name of the Client sending the Message.
*
* @param buffer The buffer containing the ClientName.
* @param offset The location at which the ClientName begins.
* @param length The length of the ClientName.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setClientName(byte[] buffer, int offset, int length) {
_ClientName.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the ClientName field is null.
*
* @return True if the ClientName field is null, false if not.
*/
public boolean isClientNameNull() {
return _ClientName.isNull();
}
protected final StringField _CommandId = new StringField();
/**
* Gets the CommandId on this Message. The CommandId is an identifier
* set by the client that is used to correlate later Messages. For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe.
*
* @return The decoded CommandId on this Message.
*/
public String getCommandId() {
return _CommandId.getValue(decoder);
}
/**
* Gets the CommandId on this Message. The CommandId is an identifier
* set by the client that is used to correlate later Messages. For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw CommandId on this Message.
*/
public Field getCommandIdRaw() {
return _CommandId;
}
/**
* Gets the CommandId on this Message by copying it into the provided
* CommandId object. The CommandId is an identifier
* set by the client that is used to correlate later messages.
* For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe. The CommandId is returned on
* ack messages in response to the command.
*
* @param v The object to hold the value of the CommandId object.
* @return A copy of the message in the provided CommandId object.
*/
public boolean getCommandId(CommandId v) {
return _CommandId.getValue(v);
}
/**
* Sets the CommandId on this Message. The CommandId is an identifier
* set by the client that is used to correlate later messages and commands.
* For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe. The CommandId is returned on
* ack messages in response to the command.
*
* @param v The string CommandId to set on this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCommandId(String v) {
_CommandId.setValue(v, encoder);
return this;
}
/**
* Sets the CommandId on this Message. The CommandId is an identifier
* set by the client that is used to correlate later messages and commands.
* For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe. The CommandId is returned on
* ack messages in response to the command.
*
* @param v The CommandId object to set on this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCommandId(CommandId v) {
_CommandId.setValue(v);
return this;
}
/**
* Sets the CommandId on this Message. The CommandId is an identifier
* set by the client that is used to correlate later messages and commands.
* For example,
* the client sets a CommandId on a subscription request to AMPS, and can
* later use that CommandId to unsubscribe. The CommandId is returned on
* ack messages in response to the command.
*
* @param buffer The buffer containing the CommandId on this Message.
* @param offset The location at which the CommandId begins.
* @param length The length of the CommandId.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCommandId(byte[] buffer, int offset, int length) {
_CommandId.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the CommandId is null.
*
* @return True if the CommandId field is null, false if not.
*/
public boolean isCommandIdNull() {
return _CommandId.isNull();
}
protected final CommandField _Command = new CommandField();
/**
* Returns the Command for this Message, indicating the type of
* of message this is. The fields that are supported by this message,
* and how they are set and interpreted, depend on the type of message.
* See the AMPS Command Reference for details.
*
* @return The Command for this Message.
*/
public int getCommand() {
return _Command.getValue();
}
/**
* Sets the Command for this Message, indicating the type of
* of Message this is. The fields that are supported by this message,
* and how they are set and interpreted, depend on the type of message.
* See the AMPS Command Reference for details.
*
* @param v The integer Command to set on this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCommand(int v) {
_Command.setValue(v);
return this;
}
/**
* Sets the Command for this Message, indicating the type of
* of Message this is. The fields that are supported by this message,
* and how they are set and interpreted, depend on the type of message.
* See the AMPS Command Reference for details.
*
* @param v The Command to set on this Message. The value provided must
* be a value supported by the AMPS server, or the server will refuse
* to process the command.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCommand(String v) {
_Command.set(v.getBytes(StandardCharsets.ISO_8859_1));
return this;
}
/**
* Checks whether the Command field is null.
*
* @return True if the Command field is null, false if not.
*/
public boolean isCommandNull() {
return _Command.isNull();
}
protected final StringField _Data = new StringField();
/**
* Returns the payload of the Message.
*
* @return The decoded payload for this Message.
*/
public String getData() {
return _Data.getValue(decoder);
}
/**
* Returns the payload of the Message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw payload for this Message.
*/
public Field getDataRaw() {
return _Data;
}
/**
* Sets the payload of the Message.
*
* @param v The string to set as the payload of this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setData(String v) {
_Data.setValue(v, encoder);
return this;
}
/**
* Sets the payload of the Message.
*
* @param buffer The buffer containing the Data.
* @param offset The location at which the Data begins.
* @param length The length of the data.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setData(byte[] buffer, int offset, int length) {
_Data.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Data field is null.
*
* @return True if the Data field is null, false if not.
*/
public boolean isDataNull() {
return _Data.isNull();
}
protected final IntegerField _Expiration = new IntegerField();
/**
* Returns the Expiration field set for this Message.
*
* @return The Expiration for this Message.
*/
public int getExpiration() {
return _Expiration.getValue();
}
/**
* Returns the Expiration field set for this Message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw Expiration for this Message.
*/
public IntegerField getExpirationRaw() {
return _Expiration;
}
/**
* Sets the Expiration field for this Message.
* The expiration is used on a publish command to set the lifetime
* of a message. For the lifetime to be processed by AMPS, the
* message must be published to a SOW topic that supports message
* expiration. See the AMPS User Guide for details.
*
* @param v The lifetime of the Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setExpiration(int v) {
_Expiration.setValue(v);
return this;
}
/**
* Checks whether the Expiration field is null.
*
* @return True if the Expiration field is null, false if not.
*/
public boolean isExpirationNull() {
return _Expiration.isNull();
}
protected final StringField _Filter = new StringField();
/**
* Returns the Filter field on this Message.
* Filters are used for commands that provide content filtering,
* such as SOW queries, subscriptions, and SOW delete.
*
* @return The decoded Filter on this Message.
*/
public String getFilter() {
return _Filter.getValue(decoder);
}
/**
* Returns the Filter field on this Message.
* Filters are used for commands that provide content filtering,
* such as SOW queries, subscriptions, and SOW delete.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw Filter on this Message.
*/
public Field getFilterRaw() {
return _Filter;
}
/**
* Sets the Filter field on this Message.
* Filters are used for commands that provide content filtering,
* such as SOW queries, subscriptions, and SOW delete.
*
* @param v The string to set as the Filter on this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setFilter(String v) {
_Filter.setValue(v, encoder);
return this;
}
/**
* Sets the Filter field on this Message.
* Filters are used for commands that provide content filtering,
* such as SOW queries, subscriptions, and SOW delete.
*
* @param buffer The buffer containing the Filter for this Message.
* @param offset The location at which the Filter begins.
* @param length The length of the Filter.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setFilter(byte[] buffer, int offset, int length) {
_Filter.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Filter field is null.
*
* @return True if the Filter field is null, false if not.
*/
public boolean isFilterNull() {
return _Filter.isNull();
}
/**
* set by the server messages on messages received from a queue
* and indicates the point in time at which the server will break
* the lease on the message if the message is still leased to the
* subscription. During this time frame, the subscriber is granted
* exclusive access to the message, allowing it to be processed or
* acknowledged. If the message is not acknowledged within the
* LeasePeriod, AMPS may take predefined actions, such as re-delivery
* or error handling, to ensure message reliability and resource
* efficiency.
* LeasePeriods are often configurable to accommodate diverse use
* cases and requirements: shorter periods for rapid processing
* and recovery from subscriber failures while the longer ones for
* extended tasks or deliberation.
*/
protected final StringField _LeasePeriod = new StringField();
/**
* Check whether the LeasePeriod field is null.
*
* @return true if LeasePeriod is null.
*/
public boolean isLeasePeriodNull() {
return _LeasePeriod.isNull();
}
/**
* Gets the decoded version of the LeasePeriod for the Message.
*
* @return Decoded LeasePeriod for the Message.
*/
public String getLeasePeriod() {
return _LeasePeriod.getValue(decoder);
}
/**
* Gets the raw version of the LeasePeriod filter for the Message.
*
* @return Raw LeasePeriod for the Message.
*/
public StringField getLeasePeriodRaw() {
return _LeasePeriod;
}
/**
* this is only used for logon commands -- people sometimes try to
* use multiple message types over a single connection by setting
* message type, but that doesn't work.
*/
protected final StringField _MessageType = new StringField();
/**
* Returns the MessageType field on this message.
* When the client library produces a logon command, it uses uses
* the MessageType field to specify the message type for the connection
* when a message type is provided in the connection URI.
*
* @return The MessageType on this message.
*/
public String getMessageType() {
return _MessageType.getValue(decoder);
}
/**
* sets the MessageType field on this message. When the client library
* produces a logon command, it uses the MessageTpe field to specify the
* message type for the connection when a message type is provided in the
* connection URI.
*
* @param v The string MessageType to set on this message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setMessageType(String v) {
_MessageType.setValue(v, encoder);
return this;
}
/**
* Checks whether the MessageType field is null.
*
* @return True if MessageType field is null, false if not.
*/
public boolean isMessageTypeNull() {
return _MessageType.isNull();
}
protected final StringField _OrderBy = new StringField();
/**
* Get the OrderBy parameter for this Message.
* For commands that support ordering, this parameter provides the
* order in which AMPS returns results.
*
* @return The decoded OrderBy parameter for this Message.
*/
public String getOrderBy() {
return _OrderBy.getValue(decoder);
}
/**
* Get the OrderBy parameter for this Message.
* For commands that support ordering, this parameter provides the
* order in which AMPS returns results.
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw OrderBy parameter for this Message.
*/
public Field getOrderByRaw() {
return _OrderBy;
}
/**
* Set the OrderBy parameter for this Message.
* For commands that support ordering, this parameter provides the
* order in which AMPS returns results. See the AMPS User Guide for
* details.
*
* @param v The ordering expression to set for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setOrderBy(String v) {
_OrderBy.setValue(v, encoder);
return this;
}
/**
* Set the OrderBy parameter for this Message.
* For commands that support ordering, this parameter provides the
* order in which AMPS returns results. See the AMPS User Guide for
* details.
*
* @param buffer The buffer that contains the expression.
* @param offset The location at which the expression begins.
* @param length The length of the expression.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setOrderBy(byte[] buffer, int offset, int length) {
_OrderBy.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the OrderBy field is null.
*
* @return True if the OrderBy field is null, false if not.
*/
public boolean isOrderByNull() {
return _OrderBy.isNull();
}
/**
* When executing a SOW query and AMPS returns a batch of query results,
* this sequence number is set on each message within the result batch
* to indicate it's postion within the batch. Generally applications
* do not need to use this.
*/
protected final LongField _GroupSeqNo = new LongField();
/**
* When executing a SOW query and AMPS returns a batch of query results,
* this sequence number is set on each message within the result batch
* to indicate it's postion within the batch. Generally applications
* do not need to use this.
*
* @return The group sequence number.
*/
public long getGroupSeqNo() {
return _GroupSeqNo.getValue();
}
/**
* When executing a SOW query and AMPS returns a batch of query results,
* this sequence number is set on each message within the result batch
* to indicate it's postion within the batch. Generally applications
* do not need to use this.
*
* @param v The number set as the group sequence number.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setGroupSeqNo(long v) {
_GroupSeqNo.setValue(v);
return this;
}
/**
* Checks whether the GroupSeqNo field is null.
*
* @return True if the GroupSeqNo field is null, false if not.
*/
public boolean isGroupSeqNoNull() {
return _GroupSeqNo.isNull();
}
protected final LongField _Matches = new LongField();
/**
* Returns the number of matches in the command this Message acknowledges.
* This header is provided on an acknowledgement message that includes
* information on the number of matches. See the AMPS Command Reference for
* details.
*
* @return The number of matches in the command this Message acknowledges.
*/
public long getMatches() {
return _Matches.getValue();
}
/**
* Sets the matches field on this Message. This header is typically
* provided by AMPS.
*
* @param v The number to set as the Matches field in this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setMatches(long v) {
_Matches.setValue(v);
return this;
}
/**
* Checks whether the Matches field is Null.
*
* @return True if the Matches field is null, false if not.
*/
public boolean isMatchesNull() {
return _Matches.isNull();
}
protected final StringField _Password = new StringField();
/**
* Returns the Password set on the Message.
* This field is typically used during the logon sequence.
*
* @return The decoded Password set on specified Message.
*/
public String getPassword() {
return _Password.getValue(decoder);
}
/**
* Returns the Password set on the Message.
* This field is used during the logon sequence.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw Password set on this Message.
*/
public Field getPasswordRaw() {
return _Password;
}
/**
* Set the Password on the Message.
* This field is typically used during the logon sequence.
*
* @param v The string Password to set.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setPassword(String v) {
_Password.setValue(v, encoder);
return this;
}
/**
* Set the Password on the Message.
* This field is typically used during the logon sequence.
*
* @param buffer The buffer that contains the Password.
* @param offset The location where the Password starts.
* @param length The length of the Password.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setPassword(byte[] buffer, int offset, int length) {
_Password.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Password field is null.
*
* @return True if the Password field is null, false if not.
*/
public boolean isPasswordNull() {
return _Password.isNull();
}
protected final IntegerField _Length = new IntegerField();
/**
* Returns the Length of the Message.
*
* @return Length of the message.
*/
public int getLength() {
return _Length.getValue();
}
/**
* Sets the Length of the Message.
* This field is typically set by the AMPS client API rather than
* by application code.
*
* @param v The value to be set as the Length of the Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setLength(int v) {
_Length.setValue(v);
return this;
}
/**
* Checks whether the Length field is null.
*
* @return True if the Length field of the Message is null, false if not.
*/
public boolean isLengthNull() {
return _Length.isNull();
}
protected final OptionsField _Options = new OptionsField();
/**
* Returns the Options to be set on this Message.
*
* @return The decoded Options set on this Message.
*/
public String getOptions() {
return _Options.getValue(decoder);
}
/**
* Returns the Options to be set on this Message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The decoded Options set on this Message.
*/
public Field getOptionsRaw() {
return _Options;
}
/**
* Sets the Options for the Message.
* Options are a comma-delimited list of parameters. The values accepted
* for options depend on the command: see the AMPS Command Reference for
* details.
*
* @param v The string to be used as the Options for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setOptions(String v) {
_Options.setValue(v, encoder);
return this;
}
/**
* Checks whether the Options field is null.
*
* @return True if the Options field is null, false if not.
*/
public boolean isOptionsNull() {
return _Options.isNull();
}
protected final StringField _QueryId = new StringField();
/**
* Returns the QueryId for this Message.
* The QueryId returned on a message is the CommandId of the command
* that ran the query. For example, when sending a SOW command to AMPS,
* messages returned in response to that command will have the QueryId
* set to the CommandId of the SOW command.
*
* @return The decoded QueryId for this Message.
*/
public String getQueryId() {
return _QueryId.getValue(decoder);
}
/**
* Returns the QueryId for this Message.
* The QueryId returned on a message is the CommandId of the command
* that ran the query. For example, when sending a SOW command to AMPS,
* messages returned in response to that command will have the QueryId
* set to the CommandId of the SOW command.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw QueryId for this Message.
*/
public Field getQueryIdRaw() {
return _QueryId;
}
/**
* Returns the QueryId for this Message by copying it into the provided
* CommandId.
* The QueryId returned on a message is the CommandId of the command
* that ran the query. For example, when sending a SOW command to AMPS,
* messages returned in response to that command will have the QueryId
* set to the CommandId of the SOW command.
*
* @param v The CommandId to be used to copy the QueryId.
* @return true if a QueryId is set on this message, false otherwise
*/
public boolean getQueryId(CommandId v) {
return _QueryId.getValue(v);
}
/**
* Sets the QueryId field for this Message.
* Typically, the QueryId is set by the AMPS client on incoming messages.
*
* @param v The string to be set as the QueryId for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setQueryId(String v) {
_QueryId.setValue(v, encoder);
return this;
}
/**
* Sets the QueryId field for this Message by copying it from a CommandId
* object.
* Typically, the QueryId is set for incoming messages by the AMPS client.
*
* @param v The CommandId to be set as the QueryId for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setQueryId(CommandId v) {
_QueryId.setValue(v);
return this;
}
/**
* Sets the QueryId for this Message.
* Typically, the QueryId is set by the AMPS client on incoming messages.
*
* @param buffer The buffer containing the QueryId.
* @param offset The location in the buffer where the QueryId begins.
* @param length The length of the QueryId to be set.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setQueryId(byte[] buffer, int offset, int length) {
_QueryId.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the QueryId field is null.
*
* @return True if the QueryId field is null, false if not.
*/
public boolean isQueryIdNull() {
return _QueryId.isNull();
}
protected final ReasonField _Reason = new ReasonField();
/**
* Returns the Reason value of this Message.
* The reason is set on acknowledgement messages to provide more
* information about the acknowledgement.
*
* @return The value in the Reason field of this Message.
*/
public int getReason() {
return _Reason.getValue();
}
/**
* Returns the Reason value of this Message.
* Typically, the reason is set for incoming messages by the AMPS client.
*
* @return The text from the Reason field of the Message.
*/
public String getReasonText() {
return _Reason.getText();
}
/**
* Sets the Reason value of this Message.
* Typically, the reason is set for incoming messages by the AMPS client.
*
* @param v The Reason value to set for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setReason(int v) {
_Reason.setValue(v);
return this;
}
/**
* Checks whether the Reason is null.
*
* @return True if the Reason field of the message is null, false if not.
*/
public boolean isReasonNull() {
return _Reason.isNull();
}
protected final LongField _RecordsInserted = new LongField();
/**
* Returns the number of records inserted for the command that this Message
* was produced in response to.
* This header is provided on an acknowledgement message that includes
* information on the number of records inserted. See the AMPS Command
* Reference for details.
*
* @return The number of records inserted for the command that produced this
* Message.
*/
public long getRecordsInserted() {
return _RecordsInserted.getValue();
}
/**
* Returns the number of records inserted for the command that this Message
* was produced in response to.
* This header is provided on an acknowledgement message.
* An application does not typically need to set this field.
* See the AMPS Command Reference for details.
*
* @param v The value to set as the RecordsInserted field of the Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setRecordsInserted(long v) {
_RecordsInserted.setValue(v);
return this;
}
/**
* Checks whether the RecordsInserted field is null.
*
* @return True if the RecordsInserted field is null, false if not.
*/
public boolean isRecordsInsertedNull() {
return _RecordsInserted.isNull();
}
protected final LongField _RecordsUpdated = new LongField();
/**
* Returns the number of records updated for the command that this Message
* was produced in response to.
* This header is provided on an acknowledgement message. See the
* AMPS Command Reference for details.
*
* @return Number of records updated for the command that this Message was
* produced for.
*/
public long getRecordsUpdated() {
return _RecordsUpdated.getValue();
}
/**
* Sets the records updated header field.
* This header is provided on an acknowledgement message.
* An application does not typically need to set this field.
* See the AMPS Command Reference for details.
*
* @param v Value to set the RecordsUpdated field to.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setRecordsUpdated(long v) {
_RecordsUpdated.setValue(v);
return this;
}
/**
* Checks whether the RecordsUpdated field is null.
*
* @return True if the RecordsUpdated field is null, false if not.
*/
public boolean isRecordsUpdatedNull() {
return _RecordsUpdated.isNull();
}
protected final LongField _RecordsDeleted = new LongField();
/**
* Returns the number of records deleted for the command that this Message
* was produced in response to.
* This header is provided on an acknowledgement message. See the
* AMPS Command Reference for details.
*
* @return The number of RecordsDeleted for the command that this Message was
* produced for.
*/
public long getRecordsDeleted() {
return _RecordsDeleted.getValue();
}
/**
* Sets the records deleted header field.
* This header is provided on an acknowledgement message.
* An application does not typically need to set this field.
* See the AMPS Command Reference for details.
*
* @param v Value to set as the RecordsDeleted field.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setRecordsDeleted(long v) {
_RecordsDeleted.setValue(v);
return this;
}
/**
* Checks whether the RecordsDeleted field is null.
*
* @return True if the RecordsDeleted field is null, false if not.
*/
public boolean isRecordsDeletedNull() {
return _RecordsDeleted.isNull();
}
protected final LongField _RecordsReturned = new LongField();
/**
* Returns the number of records returned for the command that this Message
* was produced in response to.
* This header is provided on an acknowledgement message. See the
* AMPS Command Reference for details.
*
* @return The number of RecordsReturned for the command that this Message was
* produced for.
*/
public long getRecordsReturned() {
return _RecordsReturned.getValue();
}
/**
* Sets the records returned header field.
* This header is provided on an acknowledgement message.
* An application does not typically need to set this field.
* See the AMPS Command Reference for details.
*
* @param v Value to set as the RecordsReturn field.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setRecordsReturned(long v) {
_RecordsReturned.setValue(v);
return this;
}
/**
* Checks whether the RecordsReturned field is null.
*
* @return True if the RecordsReturned field is null, false if not.
*/
public boolean isRecordsReturnedNull() {
return _RecordsReturned.isNull();
}
protected final LongField _Sequence = new LongField();
/**
* Returns the sequence number for this Message.
* On outgoing messages, this field is typically set by the AMPS client.
* The sequence number is used by AMPS for duplicate detection. Each
* combination of client name and sequence number should be a unique
* message. In the response to a login, AMPS may return the last sequence
* number received from a client to assist in recovery.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw sequence number for this Message.
*/
public Field getSequenceRaw() {
return _Sequence;
}
/**
* Returns the sequence number for this Message.
* On outgoing messages, this field is typically set by the AMPS client.
* The sequence number is used by AMPS for duplicate detection. Each
* combination of client name and sequence number should be a unique
* message. In response to a logon, AMPS may return the last sequence
* number received from a client to assist in recovery.
*
* @return The decoded sequence number for this Message.
*/
public long getSequence() {
return _Sequence.getValue();
}
/**
* Sets the sequence number for this Message.
* This field is typically set by the AMPS client.
* The AMPS client uses the sequence number in outgoing messages.
* The sequence number is used by AMPS for duplicate detection. Each
* combination of client name and sequence number should be a unique
* message.
*
* @param v The value to set as the sequence number for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSequence(long v) {
_Sequence.setValue(v);
return this;
}
/**
* Checks whether the Sequence field is null.
*
* @return True if the Sequence field is null, false if not.
*/
public boolean isSequenceNull() {
return _Sequence.isNull();
}
protected final StringField _SowKey = new StringField();
/**
* Returns the SowKey for this Message.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SowKey on each message.
*
* @return The decoded SowKey for this Message.
*/
public String getSowKey() {
return _SowKey.getValue(decoder);
}
/**
* Returns the SowKey for this Message.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SowKey on each message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw SowKey for this Message.
*/
public Field getSowKeyRaw() {
return _SowKey;
}
/**
* Sets the SowKey for this Message.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* @param v The string to be used for the SowKey.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSowKey(String v) {
_SowKey.setValue(v, encoder);
return this;
}
/**
* Sets the SowKey for this Message.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* @param buffer The buffer that contains the SOW Key.
* @param offset The location within the buffer where the SOW Key begins.
* @param length The length of the SOW Key.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSowKey(byte[] buffer, int offset, int length) {
_SowKey.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the SowKey field is null.
*
* @return True if the SowKey field is null, false if not.
*/
public boolean isSowKeyNull() {
return _SowKey.isNull();
}
protected final StringField _SowKeys = new StringField();
/**
* Gets the set of SowKeys this message applies to.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* @return The decoded set of SowKeys this message applies to.
*/
public String getSowKeys() {
return _SowKeys.getValue(decoder);
}
/**
* Gets the set of SowKeys this message applies to.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw SowKeys this message applies to.
*/
public Field getSowKeysRaw() {
return _SowKeys;
}
/**
* Sets the set of SowKeys this message applies to, as a comma-delimited
* list of identifiers.
* This can be useful for commands that operate on multiple SOW records,
* such as a sow_delete that specifies a set of keys to remove.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* @param v A comma-delimited list of identifiers to be set as the SowKeys that
* this message applies to.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSowKeys(String v) {
_SowKeys.setValue(v, encoder);
return this;
}
/**
* Sets the set of SowKeys this message applies to, as a comma-delimited
* list of identifiers.
* This can be useful for commands that operate on multiple SOW records,
* such as a sow_delete that specifies a set of keys to remove.
* The SowKey is an opaque identifier used to uniquely identify a
* SOW record within AMPS. For messages received from a SOW, AMPS provides
* the SOW key on each message.
*
* @param buffer The buffer that contains the SOW Key.
* @param offset The location within the buffer where the SOW Key begins.
* @param length The length of the SOW Key.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSowKeys(byte[] buffer, int offset, int length) {
_SowKeys.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the SowKeys field is null.
*
* @return True if the SowKeys field is null, false if not.
*/
public boolean isSowKeysNull() {
return _SowKeys.isNull();
}
protected final StatusField _Status = new StatusField();
/**
* Returns the Status of this Message. This field is provided by AMPS
* on acknowledgements to indicate the success or failure of the
* command being acknowledged.
*
* @return The Status of this Message.
*/
public int getStatus() {
return _Status.getValue();
}
/**
* Sets the Status of this Message. This field is provided by AMPS
* on acknowledgements to indicate the success or failure of the
* command being acknowledged.
*
* @param v The value to be set as the Status of the Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setStatus(int v) {
_Status.setValue(v);
return this;
}
protected final StringField _SubId = new StringField();
/**
* Gets the SubId of this Message.
* The SubId is a reference to the CommandId of the command that
* created the subscription.
*
* @return The decoded SubId of this Message.
*/
public String getSubId() {
return _SubId.getValue(decoder);
}
/**
* Gets the SubId of this Message.
* The SubId is a reference to the CommandId of the command that
* created the subscription.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw SubId of this Message.
*/
public Field getSubIdRaw() {
return _SubId;
}
/**
* Gets the SubId of this Message by copying it into the provided CommandId.
* The SubId is a reference to the CommandId of the command that
* created the subscription.
*
* @param v The CommandId into which to copy the SubId.
* @return true if a SubId is set on this message, false otherwise
*/
public boolean getSubId(CommandId v) {
return _SubId.getValue(v);
}
/**
* Sets the SubId of this Message.
* The SubId is a reference to the CommandId of the command that
* created the subscription.
*
* @param v The string used to set the SubId of this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSubId(String v) {
_SubId.setValue(v, encoder);
return this;
}
/**
* Sets the SubId of this Message by copying it from a CommandId object.
* The SubId is the CommandId of the command that
* created the subscription. For example, to replace a subscription,
* you provide the SubId of the subscription to be replaced with the
* command that replaces the subscription.
*
* @param v The CommandId to be set as the SubId for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSubId(CommandId v) {
_SubId.setValue(v);
return this;
}
/**
* Sets the SubId of this Message.
* The SubId is a reference to the CommandId of the command that
* created the subscription. For example, messages returned for a
* subscription contain the SubId of the subscription.
*
* @param buffer The buffer that contains the SubId key.
* @param offset The location within the buffer where the SubId begins.
* @param length The length of the SubId.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSubId(byte[] buffer, int offset, int length) {
_SubId.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the SubId field is null.
*
* @return True if the SubId is null, false if not.
*/
public boolean isSubIdNull() {
return _SubId.isNull();
}
protected final StringField _SubIds = new StringField();
/**
* The set of SubIds for this Message. AMPS returns a SubId for each
* subscription that matches the message as a comma-delimited list.
* The SubId is the identifier provided when the subscription was
* registered with AMPS.
*
* @return The decoded set of SubIds for this Message.
*/
public String getSubIds() {
return _SubIds.getValue(decoder);
}
/**
* The set of SubIds for this message. AMPS returns a SubId for each
* subscription that matches the message as a comma-delimited list.
* The SubId is the identifier provided when the subscription was
* registered with AMPS.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw set of SubIds for this message.
*/
public Field getSubIdsRaw() {
return _SubIds;
}
/**
* The set of SubIds for this message. AMPS returns a SubId for each
* subscription that matches the message as a comma-delimited list.
* The SubId is the identifier provided when the subscription was
* registered with AMPS.
*
* @param v The comma-delimited list to be set as the SubIds for this message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSubIds(String v) {
_SubIds.setValue(v, encoder);
return this;
}
/**
* The set of SubIds for this message. AMPS returns a SubId for each
* subscription that matches the message.
* The SubId is the identifier provided when the subscription was
* registered with AMPS.
*
* @param buffer The buffer containing the SubIds for this message.
* @param offset The location of where the SubIds begin.
* @param length The length of the list of SubIds.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setSubIds(byte[] buffer, int offset, int length) {
_SubIds.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the SubIds field is null.
*
* @return True if the SubIds field is null, false if not.
*/
public boolean isSubIdsNull() {
return _SubIds.isNull();
}
protected final StringField _Timestamp = new StringField();
/**
* Returns the timestamp for this message, an ISO-8601 formatted string.
* The timestamp is set by AMPS at the time that AMPS processes the message.
*
* @return The Timestamp for this Message as an ISO-8601 formatted string.
*/
public String getTimestamp() {
return _Timestamp.getValue(decoder);
}
/**
* Returns the timestamp for this message, an ISO-8601 formatted string.
* The timestamp is set by AMPS at the time that AMPS processes
* the message.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw Timestamp for this Message.
*/
public Field getTimestampRaw() {
return _Timestamp;
}
/**
* Sets the Timestamp for this Message. The timestamp is set by AMPS
* at the time that AMPS processes the message. There is generally no
* need to set this field in your application.
*
* @param v The string to set as the Timestamp for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTimestamp(String v) {
_Timestamp.setValue(v, encoder);
return this;
}
/**
* Sets the timestamp for this message. The timestamp is set by AMPS
* at the time that AMPS processes the message. There is generally no
* need to set this field in your application.
*
* @param buffer the buffer that contains the timestamp
* @param offset the location within the buffer where the timestamp begins
* @param length the length of the timestamp
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTimestamp(byte[] buffer, int offset, int length) {
_Timestamp.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Timestamp field is null.
*
* @return True if the Timestamp field is null, false if not.
*/
public boolean isTimestampNull() {
return _Timestamp.isNull();
}
protected final LongField _TopN = new LongField();
/**
* Get the TopN parameter for this message.
* For commands that support limiting the number of messages in the result
* set, this parameter provides the limit to AMPS.
*
* @return The TopN parameter for this Message.
*/
public long getTopN() {
return _TopN.getValue();
}
/**
* Set the TopN parameter for this message.
* For commands that support limiting the number of messages in the result
* set, this parameter provides the limit to AMPS.
*
* @param v The value to be set as the TopN parameter.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTopN(long v) {
_TopN.setValue(v);
return this;
}
/**
* Checks whether the TopN field is null.
*
* @return True if the TopN field is null, false if not.
*/
public boolean isTopNNull() {
return _TopN.isNull();
}
protected final StringField _Topic = new StringField();
/**
* Return the topic that the message applies to.
*
* @return The decoded Topic that the Message applies to.
*/
public String getTopic() {
return _Topic.getValue(decoder);
}
/**
* Return the topic that the message applies to.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw Topic that the Message applies to.
*/
public Field getTopicRaw() {
return _Topic;
}
/**
* Set the topic that the message applies to.
*
* @param v The string to be set as the Topic that the Message applies to.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTopic(String v) {
_Topic.setValue(v, encoder);
return this;
}
/**
* Set the topic that the message applies to.
*
* @param buffer the buffer that contains the Topic
* @param offset the location within the buffer where the Topic begins
* @param length the length of the Topic
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTopic(byte[] buffer, int offset, int length) {
_Topic.setValue(buffer, offset, length);
return this;
}
/**
* Checks whether the Topic field is null.
*
* @return True if the Topic field is null, false if not.
*/
public boolean isTopicNull() {
return _Topic.isNull();
}
protected final LongField _TopicMatches = new LongField();
/**
* Returns the number of matching topics for the command that this message
* was produced in response to.
* This header is provided on an acknowledgement message that includes
* information on the number of records inserted. See the AMPS Command
* Reference for details.
*
* @return The number of matching topics for the command that this Message was
* produced in response to.
*/
public long getTopicMatches() {
return _TopicMatches.getValue();
}
/**
* Checks whether the TopicMatches field is null.
*
* @return True if the TopicMatches field is null, false if not.
*/
public boolean isTopicMatchesNull() {
return _TopicMatches.isNull();
}
/**
* Sets the topic matches field on this message. This header is typically
* provided by AMPS.
*
* @param v The value to set as the TopicMatches field on this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setTopicMatches(long v) {
_TopicMatches.setValue(v);
return this;
}
protected final StringField _UserId = new StringField();
/**
* Get the UserId for this message. This field is typically set during
* the logon sequence. The field may also be provided on published
* messages, depending on the authentication used in AMPS. When provided
* on a published message, AMPS provides the identity of the connection
* that sent the message, not the value provided with the message
* as published.
*
* @return The decoded UserId for this message.
*/
public String getUserId() {
return _UserId.getValue(decoder);
}
/**
* Checks whether the UserId field is null.
*
* @return True if the UserId field is null, false if not.
*/
public boolean isUserIdNull() {
return _UserId.isNull();
}
/**
* Get the UserId for this message. This field is typically set during
* the logon sequence. The field may also be provided on published
* messages, depending on the authentication used in AMPS. When provided
* on a published message, AMPS provides the identity of the connection
* that sent the message, not the value provided with the message
* as published.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw UserId for this Message.
*/
public Field getUserIdRaw() {
return _UserId;
}
/**
* Set the UserId for this message. This field is typically set during
* the logon sequence. The field may also be provided on published
* messages, depending on the authentication used in AMPS. When provided
* on a published message, AMPS provides the identity of the connection
* that sent the message, not the value provided with the message
* as published. Therefore, applications generally only set this
* value during logon.
*
* @param v The string to be set as the UserId for this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setUserId(String v) {
_UserId.setValue(v, encoder);
return this;
}
/**
* Set the UserId for this message. This field is typically set during
* the logon sequence. The field may also be provided on published
* messages, depending on the authentication used in AMPS. When provided
* on a published message, AMPS provides the identity of the connection
* that sent the message, not the value provided with the message
* as published. Therefore, applications generally only set this
* value during logon.
*
* @param buffer the buffer that contains the UserId
* @param offset the position where the UserId begins
* @param length the length of the UserId
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setUserId(byte[] buffer, int offset, int length) {
_UserId.setValue(buffer, offset, length);
return this;
}
protected final StringField _Version = new StringField();
/**
* Returns the version of the AMPS server, provided in response to a logon.
*
* @return The decoded version of the AMPS server.
*/
public String getVersion() {
return _Version.getValue(decoder);
}
/**
* Returns the version of the AMPS server, provided in response to a logon.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw version of the AMPS server.
*/
public Field getVersionRaw() {
return _Version;
}
/**
* Checks whether the Version field is null.
*
* @return True if the Version field is null, false if not.
*/
public boolean isVersionNull() {
return _Version.isNull();
}
/**
* Returns the version of the AMPS server, provided in response to a logon.
*
* @return The version of AMPS server.
*/
public int getVersionAsInt() {
// No version is 0
if (_Version.isNull())
return 0;
int version;
try {
version = Client.getVersionAsInt(_Version.getValue(decoder));
} catch (CommandException e) {
version = 0;
}
if (version == 0)
version = MINIMUM_SERVER_VERSION;
return version;
}
/**
* Sets the version field of this message. This is typically done by
* the AMPS client API when a message with this field set is received.
*
* @param v The string used to set the Version field of this Message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setVersion(String v) {
_Version.setValue(v, encoder);
return this;
}
/**
* Sets the version field of this message. This is typically done by
* the AMPS client API when a message with this field set is received.
*
* @param buffer the buffer that contains the version string
* @param offset the position where the version string begins
* @param length the length of the version string
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setVersion(byte[] buffer, int offset, int length) {
_Version.setValue(buffer, offset, length);
return this;
}
protected final StringField _CorrelationId = new StringField();
/**
* Set the CorrelationId on this message. The CorrelationId
* is an opaque identifier provided by the publisher of a message.
* AMPS provides the identifier to subscribers of the message without
* interpreting or changing the identifier. The CorrelationId may only
* contain characters that are valid in base-64 encoding.
* Base-64 encoding uses a subset of characters, typically consisting of
* uppercase letters (A-Z), lowercase letters (a-z), digits (0-9), and two
* additional characters, usually '+' and '/'.
*
* @param v The string used to set the CorrelationId on this message.
* @return Returns this instance so that various operations can be chained
* together.
*/
public Message setCorrelationId(String v) {
_CorrelationId.setValue(v, encoder);
return this;
}
/**
* Get the CorrelationId on this message. The CorrelationId
* is an opaque identifier provided by the publisher of a message.
* AMPS provides the identifier to subscribers of the message without
* interpreting or changing the identifier.
*
* @return The decoded version of the CorrelationId on this Message.
*/
public String getCorrelationId() {
return _CorrelationId.getValue(decoder);
}
/**
* Get the CorrelationId on this message. The CorrelationId
* is an opaque identifier provided by the publisher of a message.
* AMPS provides the identifier to subscribers of the message without
* interpreting or changing the identifier.
*
* The Raw variation of this getter allows for finer-grained performance tuning.
* It provides direct access to the {@link Field} that encapsulates the data.
*
* This does not incur any additional heap allocation or unnecessary decoding
* of the byte[] in which the data is stored. The lifetime of the
* underlying buffer for the field is the lifetime of the Message.
* If you need the data to persist longer than the lifetime of the
* Message, you must copy the {@link Field}.
*
* @return The raw CorrelationId on this Message.
*/
public StringField getCorrelationIdRaw() {
return _CorrelationId;
}
/**
* Checks whether the CorrelationId field is null.
*
* @return True if the CorrelationId field is null, false if not.
*/
public boolean isCorrelationIdNull() {
return _CorrelationId.isNull();
}
private final Object[][] _toStringFields = new Object[][] {
{ "Command", }
};
/**
* Return the message as a string. This serializes the message and returns
* the serialized value.
*
* @return The Message as a serialized value.
*/
public String toString() {
StringBuilder s = new StringBuilder(1024);
s.append("Message{");
s.append("Command=").append(CommandField.encodeCommand(getCommand())).append("; ");
if (!_AckType.isNull())
s.append("AckType=").append(_AckType).append("; ");
if (!_BatchSize.isNull())
s.append("BatchSize=").append(getBatchSize()).append("; ");
if (!_Bookmark.isNull())
s.append("Bookmark=").append(getBookmark()).append("; ");
if (!_ClientName.isNull())
s.append("ClientName=").append(getClientName()).append("; ");
if (!_CommandId.isNull())
s.append("CommandId=").append(getCommandId()).append("; ");
if (!_Expiration.isNull())
s.append("Expiration=").append(getExpiration()).append("; ");
if (!_Filter.isNull())
s.append("Filter=").append(getFilter()).append("; ");
if (!_LeasePeriod.isNull())
s.append("LeasePeriod=").append(getLeasePeriod()).append("; ");
if (!_OrderBy.isNull())
s.append("OrderBy=").append(getOrderBy()).append("; ");
if (!_GroupSeqNo.isNull())
s.append("GroupSeqNo=").append(getGroupSeqNo()).append("; ");
if (!_Matches.isNull())
s.append("Matches=").append(getMatches()).append("; ");
if (!_MessageType.isNull())
s.append("MessageType=").append(getMessageType()).append("; ");
if (!_Length.isNull())
s.append("Length=").append(getLength()).append("; ");
if (!_Options.isNull())
s.append("Options=").append(getOptions()).append("; ");
if (!_Password.isNull())
s.append("Password=").append(getPassword()).append("; ");
if (!_QueryId.isNull())
s.append("QueryId=").append(getQueryId()).append("; ");
if (!_Reason.isNull())
s.append("Reason=").append(ReasonField.encodeReason(getReason())).append("; ");
if (!_RecordsUpdated.isNull())
s.append("RecordsUpdated=").append(getRecordsUpdated()).append("; ");
if (!_RecordsInserted.isNull())
s.append("RecordsInserted=").append(getRecordsInserted()).append("; ");
if (!_RecordsReturned.isNull())
s.append("RecordsReturned=").append(getRecordsReturned()).append("; ");
if (!_RecordsDeleted.isNull())
s.append("RecordsDeleted=").append(getRecordsDeleted()).append("; ");
if (!_Sequence.isNull())
s.append("Sequence=").append(getSequence()).append("; ");
if (!_SowKey.isNull())
s.append("SowKey=").append(getSowKey()).append("; ");
if (!_SowKeys.isNull())
s.append("SowKeys=").append(getSowKeys()).append("; ");
if (!_Status.isNull())
s.append("Status=").append(StatusField.encodeStatus(getStatus())).append("; ");
if (!_SubId.isNull())
s.append("SubId=").append(getSubId()).append("; ");
if (!_SubIds.isNull())
s.append("SubIds=").append(getSubIds()).append("; ");
if (!_Timestamp.isNull())
s.append("Timestamp=").append(getTimestamp()).append("; ");
if (!_TopN.isNull())
s.append("TopN=").append(getTopN()).append("; ");
if (!_Topic.isNull())
s.append("Topic=").append(getTopic()).append("; ");
if (!_TopicMatches.isNull())
s.append("TopicMatches=").append(getTopicMatches()).append("; ");
if (!_CorrelationId.isNull())
s.append("CorrelationId=").append(getCorrelationId()).append("; ");
if (!_UserId.isNull())
s.append("UserId=").append(getUserId()).append("; ");
if (!_Data.isNull())
s.append("Data=").append(getData()).append("; ");
s.append('}');
return s.toString();
}
public abstract Message copy();
protected Client _client = null;
/**
* Returns the client who allocated this message.
*
* @return A {@link com.crankuptheamps.client.Client} instance.
*/
public Client getClient() {
return _client;
}
/**
* Used to acknowledge a queue message is processed.
*
* @throws AMPSException An error occurred sending this acknowledgement to AMPS.
*/
public void ack() throws AMPSException {
if (_client != null && (!_client.getAutoAck() || _ignoreAutoAck)) {
_client._ack(_Topic.buffer, _Topic.position, _Topic.length,
_Bookmark.buffer, _Bookmark.position, _Bookmark.length,
null, 0, 0);
}
}
/**
* Used to acknowledge a queue message is processed.
*
* @param options The bytes of the options for the ack
* @param optionsPos The starting position in options
* @param optionsLen The length of the options
* @throws AMPSException An error occurred sending this acknowledgement to AMPS.
*/
public void ack(byte[] options, int optionsPos, int optionsLen) throws AMPSException {
if (_client != null && (!_client.getAutoAck() || _ignoreAutoAck)) {
_client._ack(_Topic.buffer, _Topic.position, _Topic.length,
_Bookmark.buffer, _Bookmark.position, _Bookmark.length,
options, optionsPos, optionsLen);
}
}
/**
* Used to acknowledge a queue message is processed.
*
* @param options The options to include with the ack.
* @throws AMPSException An error occurred sending this acknowledgement to AMPS.
*/
public void ack(Field options) throws AMPSException {
if (_client != null && (!_client.getAutoAck() || _ignoreAutoAck)) {
_client._ack(_Topic, _Bookmark, options);
}
}
/**
* Used to acknowledge a queue message is processed.
*
* @param options The options to include with the ack.
* @throws AMPSException An error occurred sending this acknowledgement to AMPS.
*/
public void ack(String options) throws AMPSException {
if (_client != null && (!_client.getAutoAck() || _ignoreAutoAck)) {
_client._ack(_Topic, _Bookmark, new Field(options));
}
}
private boolean _ignoreAutoAck = false;
/**
* Used to check if automatic acking of this Message by the Client
* should be skipped.
*
* @return If automatic acking is ignored for this Message.
*/
public boolean isIgnoreAutoAck() {
return _ignoreAutoAck;
}
/**
* Used to disable automatic acking of this Message by the Client
* after the {@link com.crankuptheamps.client.MessageHandler} completes.
*/
public void setIgnoreAutoAck() {
_ignoreAutoAck = true;
}
/**
* Overwrites destination data with this Message.
*
* Every field of destination is overwritten with this Message's data, though
* destination retains the encoder and decoder it was originally constructed
* with.
*
* @param destination overwritten with this Message's data.
*/
protected void _copyTo(Message destination) {
destination._ignoreAutoAck = _ignoreAutoAck;
destination._rawBufferLength = _rawBufferLength;
destination._rawBufferOffset = 0;
// If using buffer, copy the relevant portion
if (this.buffer != null) {
destination.buffer = new byte[_rawBufferLength];
System.arraycopy(buffer, _rawBufferOffset, destination.buffer, 0, _rawBufferLength);
}
for (int i = 0; i < _fields.length; ++i) {
// If in buffer, set there
if (this.buffer != null && _fields[i].buffer == this.buffer) {
final Field f = _fields[i];
destination._fields[i].set(destination.buffer, f.position - _rawBufferOffset, f.length);
} else { // Set as a copy
destination._fields[i].copyFrom(_fields[i]);
}
}
destination._bookmarkSeqNo = _bookmarkSeqNo;
destination._subscription = _subscription;
destination._client = _client;
}
/**
* Need to visit every Field? Use this!
*/
protected final Field[] _fields = new Field[] {
_AckType,
_BatchSize,
_Bookmark,
_ClientName,
_CommandId,
_Command,
_CorrelationId,
_Data,
_Expiration,
_Filter,
_OrderBy,
_GroupSeqNo,
_Length,
_LeasePeriod,
_Matches,
_MessageType,
_Options,
_QueryId,
_Reason,
_RecordsInserted,
_RecordsUpdated,
_RecordsDeleted,
_RecordsReturned,
_Sequence,
_SowKey,
_SowKeys,
_Status,
_SubId,
_SubIds,
_Timestamp,
_TopN,
_Topic,
_TopicMatches,
_UserId,
_Version,
_Password,
};
}