FileDocCategorySizeDatePackage
ProtoBufUtil.javaAPI DocAndroid 1.5 API7856Wed May 06 22:41:34 BST 2009com.google.common.io.protocol

ProtoBufUtil

public final class ProtoBufUtil extends Object
Utility functions for dealing with ProtoBuf objects consolidated from previous spot implementations across the codebase.

Fields Summary
Constructors Summary
private ProtoBufUtil()

  
Methods Summary
public static ProtoBufaddProtoBuf(ProtoBuf proto, int tag)
Creates a sub ProtoBuf of the given Protobuf and adds it.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to add.
return
the sub ProtoBuf generated.

    ProtoBuf child = proto.createGroup(tag);
    proto.addProtoBuf(tag, child);
    return child;
  
public static ProtoBufcreateProtoBuf(ProtoBuf proto, int tag)
Creates a sub ProtoBuf of the given Protobuf and sets it.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to create.
return
the sub ProtoBuf generated.

    ProtoBuf child = proto.createGroup(tag);
    proto.setProtoBuf(tag, child);
    return child;
  
public static longgetProtoLongValueOrZero(ProtoBuf proto, int tag)
Get an Long with "tag" from the proto buffer. If the given field can't be retrieved, return 0.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
return
The result which should be an integer.

    try {
      return (proto != null && proto.has(tag)) ? proto.getLong(tag) : 0L;
    } catch (IllegalArgumentException e) {
      return 0L;
    } catch (ClassCastException e) {
      return 0L;
    }
  
public static intgetProtoValueOrDefault(ProtoBuf proto, int tag, int defaultValue)
Get an int with "tag" from the proto buffer. If the given field can't be retrieved, return the provided default value.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
param
defaultValue The value to return if the field can't be retrieved.
return
The result which should be an integer.

    try {
      return (proto != null && proto.has(tag))
          ? proto.getInt(tag) : defaultValue;
    } catch (IllegalArgumentException e) {
      return defaultValue;
    } catch (ClassCastException e) {
      return defaultValue;
    }
  
public static java.lang.StringgetProtoValueOrEmpty(ProtoBuf proto, int tag)
Convenience method to return a string value from of a proto or "".

    try {
      return (proto != null && proto.has(tag)) ? proto.getString(tag) : "";
    } catch (ClassCastException e) {
      return "";
    }
  
public static longgetProtoValueOrNegativeOne(ProtoBuf proto, int tag)
Get an Int with "tag" from the proto buffer. If the given field can't be retrieved, return -1.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
return
The result which should be a long.

    try {
      return (proto != null && proto.has(tag)) ? proto.getLong(tag) : -1;
    } catch (IllegalArgumentException e) {
      return -1;
    } catch (ClassCastException e) {
      return -1;
    }
  
public static intgetProtoValueOrZero(ProtoBuf proto, int tag)
Get an Int with "tag" from the proto buffer. If the given field can't be retrieved, return 0.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
return
The result which should be an integer.

    return getProtoValueOrDefault(proto, tag, 0);
  
public static ProtoBufgetSubProtoOrNull(ProtoBuf proto, int sub)
Convenience method to get a subproto if the proto has it.

    return (proto != null && proto.has(sub)) ? proto.getProtoBuf(sub) : null;
  
public static intgetSubProtoValueOrDefault(ProtoBuf proto, int sub, int tag, int defaultValue)
A wrapper for {@link #getProtoValueOrDefault(ProtoBuf, int, int)} that drills into a sub message returning the int value if it exists, returning the given default if it does not.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
param
sub The sub tag value that identifies which protocol buffer sub-field to retrieve.
param
defaultValue The value to return if the field is not present.
return
The result which should be a long.

    try {
      return getProtoValueOrDefault(getSubProtoOrNull(proto, sub), tag, 
          defaultValue);
    } catch (IllegalArgumentException e) {
      return defaultValue;
    } catch (ClassCastException e) {
      return defaultValue; 
    }
  
public static java.lang.StringgetSubProtoValueOrEmpty(ProtoBuf proto, int sub, int tag)
Convenience method to return a string value from of a sub-proto or "".

    try {
      return getProtoValueOrEmpty(getSubProtoOrNull(proto, sub), tag);
    } catch (ClassCastException e) {
      return "";
    }
  
public static longgetSubProtoValueOrNegativeOne(ProtoBuf proto, int sub, int tag)
A wrapper for getProtoValueOrNegativeOne that drills into a sub message returning the long value if it exists, returning -1 if it does not.

param
proto The proto buffer.
param
tag The tag value that identifies which protocol buffer field to retrieve.
param
sub The sub tag value that identifies which protocol buffer sub-field to retrieve.n
return
The result which should be a long.

    try {
      return getProtoValueOrNegativeOne(getSubProtoOrNull(proto, sub), tag);
    } catch (IllegalArgumentException e) {
      return -1;
    } catch (ClassCastException e) {
      return -1; 
    }
  
public static intreadNextProtoBuf(ProtoBufType umbrellaType, java.io.InputStream is, ProtoBuf result)
Reads a single protocol buffer from the given input stream. This method is provided where the client needs incremental access to the contents of a protocol buffer which contains a sequence of protocol buffers.

Please use {@link #getInputStreamForProtoBufResponse} to obtain an input stream suitable for this method.

param
umbrellaType the type of the "outer" protocol buffer containing the message to read
param
is the stream to read the protocol buffer from
param
result the result protocol buffer (must be empty, will be filled with the data read and the type will be set)
return
the tag id of the message, -1 at the end of the stream

    long tagAndType = ProtoBuf.readVarInt(is, true /* permits EOF */);
    if (tagAndType == -1) {
      return -1;
    }
    
    if ((tagAndType & 7) != ProtoBuf.WIRETYPE_LENGTH_DELIMITED) {
      throw new IOException("Message expected");
    }
    int tag = (int) (tagAndType >>> 3);
    
    result.setType((ProtoBufType) umbrellaType.getData(tag));
    int length = (int) ProtoBuf.readVarInt(is, false);
    result.parse(is, length);
    return tag;
  
public static voidwriteProtoBufToOutput(java.io.DataOutput output, ProtoBuf protoBuf)
Writes the ProtoBuf to the given DataOutput. This is useful for unit tests.

param
output The data output to write to.
param
protoBuf The proto buffer.

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    protoBuf.outputTo(baos);
    byte[] bytes = baos.toByteArray();
    output.writeInt(bytes.length);
    output.write(bytes);