Class ByteArrayBuilder

java.lang.Object
org.opends.server.replication.protocol.ByteArrayBuilder

public final class ByteArrayBuilder extends Object
Byte array builder class encodes data into byte arrays to send messages over the replication protocol. Built on top of ByteStringBuilder, it isolates the latter against legacy type conversions from the replication protocol. It exposes a fluent API.
See Also:
  • Constructor Details

    • ByteArrayBuilder

      public ByteArrayBuilder()
      Constructs a ByteArrayBuilder.
    • ByteArrayBuilder

      public ByteArrayBuilder(int capacity)
      Constructs a ByteArrayBuilder.
      Parameters:
      capacity - the capacity of the underlying ByteStringBuilder
  • Method Details

    • appendBoolean

      public ByteArrayBuilder appendBoolean(boolean b)
      Append a boolean to this ByteArrayBuilder.
      Parameters:
      b - the boolean to append.
      Returns:
      this ByteArrayBuilder
    • appendByte

      public ByteArrayBuilder appendByte(int b)
      Append a byte to this ByteArrayBuilder.
      Parameters:
      b - the byte to append.
      Returns:
      this ByteArrayBuilder
    • appendShort

      public ByteArrayBuilder appendShort(int s)
      Append a short to this ByteArrayBuilder.
      Parameters:
      s - the short to append.
      Returns:
      this ByteArrayBuilder
    • appendInt

      public ByteArrayBuilder appendInt(int i)
      Append an int to this ByteArrayBuilder.
      Parameters:
      i - the long to append.
      Returns:
      this ByteArrayBuilder
    • appendLong

      public ByteArrayBuilder appendLong(long l)
      Append a long to this ByteArrayBuilder.
      Parameters:
      l - the long to append.
      Returns:
      this ByteArrayBuilder
    • appendIntUtf8

      public ByteArrayBuilder appendIntUtf8(int i)
      Append an int to this ByteArrayBuilder by converting it to a String then encoding that string to a UTF-8 byte array.
      Parameters:
      i - the int to append.
      Returns:
      this ByteArrayBuilder
    • appendLongUtf8

      public ByteArrayBuilder appendLongUtf8(long l)
      Append a long to this ByteArrayBuilder by converting it to a String then encoding that string to a UTF-8 byte array.
      Parameters:
      l - the long to append.
      Returns:
      this ByteArrayBuilder
    • appendStrings

      public ByteArrayBuilder appendStrings(Collection<String> col)
      Append a Collection of Strings to this ByteArrayBuilder.
      Parameters:
      col - the Collection of Strings to append.
      Returns:
      this ByteArrayBuilder
    • appendString

      public ByteArrayBuilder appendString(String s)
      Append a String with a zero separator to this ByteArrayBuilder, or only the zero separator if the string is null or if the string length is zero.
      Parameters:
      s - the String to append. Can be null.
      Returns:
      this ByteArrayBuilder
    • appendUUID

      public ByteArrayBuilder appendUUID(UUID uuid)
      Append an UUID with a zero separator to this ByteArrayBuilder, or only the zero separator if the UUID is null.
      Parameters:
      uuid - the UUID to append. Can be null.
      Returns:
      this ByteArrayBuilder
    • appendGroupId

      public ByteArrayBuilder appendGroupId(com.forgerock.opendj.discovery.GroupId groupId)
      Appends the encoded version of a GroupId to this ByteArrayBuilder.
      Parameters:
      groupId - the group id to append.
      Returns:
      this ByteArrayBuilder
    • appendReplicaId

      public ByteArrayBuilder appendReplicaId(ReplicaId replicaId)
      Appends the encoded version of this ReplicaId to this ByteArrayBuilder.
      Parameters:
      replicaId - the replica id to append.
      Returns:
      this ByteArrayBuilder
    • appendReplicationServerId

      public ByteArrayBuilder appendReplicationServerId(ReplicationServerId replicationServerId)
      Appends the encoded version of this ReplicationServerId to this ByteArrayBuilder.
      Parameters:
      replicationServerId - the replication server id to append.
      Returns:
      this ByteArrayBuilder
    • appendServerId

      public ByteArrayBuilder appendServerId(ServerId<?> serverId)
      Appends a server id.
      Parameters:
      serverId - the ServerId to append.
      Returns:
      this ByteArrayBuilder
    • appendCsn

      public ByteArrayBuilder appendCsn(CSN csn, CSN.CsnVersion version)
      Append a CSN to this ByteArrayBuilder.
      Parameters:
      csn - the CSN to append.
      version - the CSN version to use for encoding
      Returns:
      this ByteArrayBuilder
    • appendCsnUtf8

      public ByteArrayBuilder appendCsnUtf8(CSN csn, CSN.CsnVersion version)
      Append a CSN to this ByteArrayBuilder by converting it to a String then encoding that string to a UTF-8 byte array.
      Parameters:
      csn - the CSN to append.
      version - the CSN version to use for encoding.
      Returns:
      this ByteArrayBuilder
    • appendDn

      public ByteArrayBuilder appendDn(Dn dn)
      Append a DN to this ByteArrayBuilder by converting it to a String then encoding that string to a UTF-8 byte array.
      Parameters:
      dn - the DN to append.
      Returns:
      this ByteArrayBuilder
    • appendRdn

      public ByteArrayBuilder appendRdn(Rdn rdn)
      Append an RDN to this ByteArrayBuilder by converting it to a String then encoding that string to a UTF-8 byte array.
      Parameters:
      rdn - the RDN to append.
      Returns:
      this ByteArrayBuilder
    • appendByteArray

      public ByteArrayBuilder appendByteArray(byte[] bytes)
      Append all the bytes from the byte array to this ByteArrayBuilder.
      Parameters:
      bytes - the byte array to append.
      Returns:
      this ByteArrayBuilder
    • appendZeroTerminatedByteArray

      public ByteArrayBuilder appendZeroTerminatedByteArray(byte[] bytes)
      Append all the bytes from the byte array to this ByteArrayBuilder and then append a final zero byte separator for compatibility with legacy implementations.

      Note: the super long method name it is intentional: nobody will want to use it, which is good because nobody should.

      Parameters:
      bytes - the byte array to append.
      Returns:
      this ByteArrayBuilder
    • appendServerStateMustComeLast

      public ByteArrayBuilder appendServerStateMustComeLast(ServerState serverState)
      Append the byte representation of a ServerState to this ByteArrayBuilder and then append a final zero byte separator.

      Caution: ServerState MUST be the last field. Because ServerState can contain null character (string termination of replica id string ..) it cannot be decoded using ByteArrayScanner.nextString() like the other fields. The only way is to rely on the end of the input buffer: and that forces the ServerState to be the last field. This should be changed if we want to have more than one ServerState field.

      Note: the super long method name it is intentional: nobody will want to use it, which is good because nobody should.

      Parameters:
      serverState - the ServerState to append.
      Returns:
      this ByteArrayBuilder
      See Also:
    • toByteArray

      public byte[] toByteArray()
      Converts the content of this ByteStringBuilder to a byte array.
      Returns:
      the content of this ByteStringBuilder converted to a byte array.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • bytes

      public static int bytes(int nbFields)
      Helper method that returns the number of bytes that would be used by the byte fields when appended to a ByteArrayBuilder.
      Parameters:
      nbFields - the number of byte fields that will be appended to a ByteArrayBuilder
      Returns:
      the number of bytes occupied by the appended byte fields.
    • shorts

      public static int shorts(int nbFields)
      Helper method that returns the number of bytes that would be used by the short fields when appended to a ByteArrayBuilder.
      Parameters:
      nbFields - the number of short fields that will be appended to a ByteArrayBuilder
      Returns:
      the number of bytes occupied by the appended short fields.
    • csnsV1

      public static int csnsV1(int nbFields)
      Helper method that returns the number of bytes that would be used by the CSN fields when appended to a ByteArrayBuilder.
      Parameters:
      nbFields - the number of CSN fields that will be appended to a ByteArrayBuilder
      Returns:
      the number of bytes occupied by the appended CSN fields.