diff --git a/pom.xml b/pom.xml
index ce66ff4159..de025d3b4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,6 +94,7 @@
patterns
pdf
+ protobuffer
querydsl
@@ -204,7 +205,6 @@
rabbitmq
-
diff --git a/protobuffer/pom.xml b/protobuffer/pom.xml
new file mode 100644
index 0000000000..17394716e2
--- /dev/null
+++ b/protobuffer/pom.xml
@@ -0,0 +1,48 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ protobuffer
+
+
+
+ com.google.protobuf
+ protobuf-java
+ ${protobuf.version}
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+ 3.2.0
+ 4.12
+ 3.6.0
+
+
+
\ No newline at end of file
diff --git a/protobuffer/src/main/java/com/baeldung/protobuf/AddressBookProtos.java b/protobuffer/src/main/java/com/baeldung/protobuf/AddressBookProtos.java
new file mode 100644
index 0000000000..c39b4e42b9
--- /dev/null
+++ b/protobuffer/src/main/java/com/baeldung/protobuf/AddressBookProtos.java
@@ -0,0 +1,2989 @@
+/// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: routeguide.proto
+
+package com.baeldung.protobuf;
+
+public final class AddressBookProtos {
+ private AddressBookProtos() {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+
+ public interface PersonOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:protobuf.Person)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * required string name = 1;
+ */
+ boolean hasName();
+
+ /**
+ * required string name = 1;
+ */
+ java.lang.String getName();
+
+ /**
+ * required string name = 1;
+ */
+ com.google.protobuf.ByteString
+ getNameBytes();
+
+ /**
+ * required int32 id = 2;
+ */
+ boolean hasId();
+
+ /**
+ * required int32 id = 2;
+ */
+ int getId();
+
+ /**
+ * optional string email = 3;
+ */
+ boolean hasEmail();
+
+ /**
+ * optional string email = 3;
+ */
+ java.lang.String getEmail();
+
+ /**
+ * optional string email = 3;
+ */
+ com.google.protobuf.ByteString
+ getEmailBytes();
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ java.util.List
+ getPhonesList();
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ AddressBookProtos.Person.PhoneNumber getPhones(int index);
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ int getPhonesCount();
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ java.util.List extends AddressBookProtos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList();
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index);
+ }
+
+ /**
+ * Protobuf type {@code protobuf.Person}
+ */
+ public static final class Person extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:protobuf.Person)
+ PersonOrBuilder {
+ // Use Person.newBuilder() to construct.
+ private Person(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private Person() {
+ name_ = "";
+ id_ = 0;
+ email_ = "";
+ phones_ = java.util.Collections.emptyList();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private Person(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownField(input, unknownFields,
+ extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ com.google.protobuf.ByteString bs = input.readBytes();
+ bitField0_ |= 0x00000001;
+ name_ = bs;
+ break;
+ }
+ case 16: {
+ bitField0_ |= 0x00000002;
+ id_ = input.readInt32();
+ break;
+ }
+ case 26: {
+ com.google.protobuf.ByteString bs = input.readBytes();
+ bitField0_ |= 0x00000004;
+ email_ = bs;
+ break;
+ }
+ case 34: {
+ if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+ phones_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000008;
+ }
+ phones_.add(
+ input.readMessage(AddressBookProtos.Person.PhoneNumber.PARSER, extensionRegistry));
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
+ phones_ = java.util.Collections.unmodifiableList(phones_);
+ }
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_Person_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_Person_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.Person.class, AddressBookProtos.Person.Builder.class);
+ }
+
+ /**
+ * Protobuf enum {@code protobuf.Person.PhoneType}
+ */
+ public enum PhoneType
+ implements com.google.protobuf.ProtocolMessageEnum {
+ /**
+ * MOBILE = 0;
+ */
+ MOBILE(0),
+ /**
+ * HOME = 1;
+ */
+ HOME(1),
+ /**
+ * WORK = 2;
+ */
+ WORK(2),;
+
+ /**
+ * MOBILE = 0;
+ */
+ public static final int MOBILE_VALUE = 0;
+ /**
+ * HOME = 1;
+ */
+ public static final int HOME_VALUE = 1;
+ /**
+ * WORK = 2;
+ */
+ public static final int WORK_VALUE = 2;
+
+
+ public final int getNumber() {
+ return value;
+ }
+
+ /**
+ * @deprecated Use {@link #forNumber(int)} instead.
+ */
+ @java.lang.Deprecated
+ public static PhoneType valueOf(int value) {
+ return forNumber(value);
+ }
+
+ public static PhoneType forNumber(int value) {
+ switch (value) {
+ case 0:
+ return MOBILE;
+ case 1:
+ return HOME;
+ case 2:
+ return WORK;
+ default:
+ return null;
+ }
+ }
+
+ public static com.google.protobuf.Internal.EnumLiteMap
+ internalGetValueMap() {
+ return internalValueMap;
+ }
+
+ private static final com.google.protobuf.Internal.EnumLiteMap<
+ PhoneType> internalValueMap =
+ new com.google.protobuf.Internal.EnumLiteMap() {
+ public PhoneType findValueByNumber(int number) {
+ return PhoneType.forNumber(number);
+ }
+ };
+
+ public final com.google.protobuf.Descriptors.EnumValueDescriptor
+ getValueDescriptor() {
+ return getDescriptor().getValues().get(ordinal());
+ }
+
+ public final com.google.protobuf.Descriptors.EnumDescriptor
+ getDescriptorForType() {
+ return getDescriptor();
+ }
+
+ public static final com.google.protobuf.Descriptors.EnumDescriptor
+ getDescriptor() {
+ return AddressBookProtos.Person.getDescriptor().getEnumTypes().get(0);
+ }
+
+ private static final PhoneType[] VALUES = values();
+
+ public static PhoneType valueOf(
+ com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+ if (desc.getType() != getDescriptor()) {
+ throw new java.lang.IllegalArgumentException(
+ "EnumValueDescriptor is not for this type.");
+ }
+ return VALUES[desc.getIndex()];
+ }
+
+ private final int value;
+
+ private PhoneType(int value) {
+ this.value = value;
+ }
+
+ // @@protoc_insertion_point(enum_scope:protobuf.Person.PhoneType)
+ }
+
+ public interface PhoneNumberOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:protobuf.Person.PhoneNumber)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * required string number = 1;
+ */
+ boolean hasNumber();
+
+ /**
+ * required string number = 1;
+ */
+ java.lang.String getNumber();
+
+ /**
+ * required string number = 1;
+ */
+ com.google.protobuf.ByteString
+ getNumberBytes();
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ boolean hasType();
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ AddressBookProtos.Person.PhoneType getType();
+ }
+
+ /**
+ * Protobuf type {@code protobuf.Person.PhoneNumber}
+ */
+ public static final class PhoneNumber extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:protobuf.Person.PhoneNumber)
+ PhoneNumberOrBuilder {
+ // Use PhoneNumber.newBuilder() to construct.
+ private PhoneNumber(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private PhoneNumber() {
+ number_ = "";
+ type_ = 1;
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private PhoneNumber(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownField(input, unknownFields,
+ extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ com.google.protobuf.ByteString bs = input.readBytes();
+ bitField0_ |= 0x00000001;
+ number_ = bs;
+ break;
+ }
+ case 16: {
+ int rawValue = input.readEnum();
+ AddressBookProtos.Person.PhoneType value = AddressBookProtos.Person.PhoneType.valueOf(rawValue);
+ if (value == null) {
+ unknownFields.mergeVarintField(2, rawValue);
+ } else {
+ bitField0_ |= 0x00000002;
+ type_ = rawValue;
+ }
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_Person_PhoneNumber_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.Person.PhoneNumber.class, AddressBookProtos.Person.PhoneNumber.Builder.class);
+ }
+
+ private int bitField0_;
+ public static final int NUMBER_FIELD_NUMBER = 1;
+ private volatile java.lang.Object number_;
+
+ /**
+ * required string number = 1;
+ */
+ public boolean hasNumber() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public java.lang.String getNumber() {
+ java.lang.Object ref = number_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ number_ = s;
+ }
+ return s;
+ }
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public com.google.protobuf.ByteString
+ getNumberBytes() {
+ java.lang.Object ref = number_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ number_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int TYPE_FIELD_NUMBER = 2;
+ private int type_;
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public boolean hasType() {
+ return ((bitField0_ & 0x00000002) == 0x00000002);
+ }
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public AddressBookProtos.Person.PhoneType getType() {
+ AddressBookProtos.Person.PhoneType result = AddressBookProtos.Person.PhoneType.valueOf(type_);
+ return result == null ? AddressBookProtos.Person.PhoneType.HOME : result;
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ if (!hasNumber()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, number_);
+ }
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ output.writeEnum(2, type_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, number_);
+ }
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeEnumSize(2, type_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof AddressBookProtos.Person.PhoneNumber)) {
+ return super.equals(obj);
+ }
+ AddressBookProtos.Person.PhoneNumber other = (AddressBookProtos.Person.PhoneNumber) obj;
+
+ boolean result = true;
+ result = result && (hasNumber() == other.hasNumber());
+ if (hasNumber()) {
+ result = result && getNumber()
+ .equals(other.getNumber());
+ }
+ result = result && (hasType() == other.hasType());
+ if (hasType()) {
+ result = result && type_ == other.type_;
+ }
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptorForType().hashCode();
+ if (hasNumber()) {
+ hash = (37 * hash) + NUMBER_FIELD_NUMBER;
+ hash = (53 * hash) + getNumber().hashCode();
+ }
+ if (hasType()) {
+ hash = (37 * hash) + TYPE_FIELD_NUMBER;
+ hash = (53 * hash) + type_;
+ }
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(AddressBookProtos.Person.PhoneNumber prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ * Protobuf type {@code protobuf.Person.PhoneNumber}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:protobuf.Person.PhoneNumber)
+ AddressBookProtos.Person.PhoneNumberOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_Person_PhoneNumber_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.Person.PhoneNumber.class, AddressBookProtos.Person.PhoneNumber.Builder.class);
+ }
+
+ // Construct using AddressBookProtos.Person.PhoneNumber.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ }
+ }
+
+ public Builder clear() {
+ super.clear();
+ number_ = "";
+ bitField0_ = (bitField0_ & ~0x00000001);
+ type_ = 1;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return AddressBookProtos.internal_static_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ public AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() {
+ return AddressBookProtos.Person.PhoneNumber.getDefaultInstance();
+ }
+
+ public AddressBookProtos.Person.PhoneNumber build() {
+ AddressBookProtos.Person.PhoneNumber result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public AddressBookProtos.Person.PhoneNumber buildPartial() {
+ AddressBookProtos.Person.PhoneNumber result = new AddressBookProtos.Person.PhoneNumber(this);
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+ to_bitField0_ |= 0x00000001;
+ }
+ result.number_ = number_;
+ if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+ to_bitField0_ |= 0x00000002;
+ }
+ result.type_ = type_;
+ result.bitField0_ = to_bitField0_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.setField(field, value);
+ }
+
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof AddressBookProtos.Person.PhoneNumber) {
+ return mergeFrom((AddressBookProtos.Person.PhoneNumber) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(AddressBookProtos.Person.PhoneNumber other) {
+ if (other == AddressBookProtos.Person.PhoneNumber.getDefaultInstance())
+ return this;
+ if (other.hasNumber()) {
+ bitField0_ |= 0x00000001;
+ number_ = other.number_;
+ onChanged();
+ }
+ if (other.hasType()) {
+ setType(other.getType());
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ if (!hasNumber()) {
+ return false;
+ }
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ AddressBookProtos.Person.PhoneNumber parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (AddressBookProtos.Person.PhoneNumber) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private int bitField0_;
+
+ private java.lang.Object number_ = "";
+
+ /**
+ * required string number = 1;
+ */
+ public boolean hasNumber() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public java.lang.String getNumber() {
+ java.lang.Object ref = number_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ number_ = s;
+ }
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public com.google.protobuf.ByteString
+ getNumberBytes() {
+ java.lang.Object ref = number_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ number_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public Builder setNumber(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000001;
+ number_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public Builder clearNumber() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ number_ = getDefaultInstance().getNumber();
+ onChanged();
+ return this;
+ }
+
+ /**
+ * required string number = 1;
+ */
+ public Builder setNumberBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000001;
+ number_ = value;
+ onChanged();
+ return this;
+ }
+
+ private int type_ = 1;
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public boolean hasType() {
+ return ((bitField0_ & 0x00000002) == 0x00000002);
+ }
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public AddressBookProtos.Person.PhoneType getType() {
+ AddressBookProtos.Person.PhoneType result = AddressBookProtos.Person.PhoneType.valueOf(type_);
+ return result == null ? AddressBookProtos.Person.PhoneType.HOME : result;
+ }
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public Builder setType(AddressBookProtos.Person.PhoneType value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000002;
+ type_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+
+ /**
+ * optional .protobuf.Person.PhoneType type = 2 [default = HOME];
+ */
+ public Builder clearType() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ type_ = 1;
+ onChanged();
+ return this;
+ }
+
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:protobuf.Person.PhoneNumber)
+ }
+
+ // @@protoc_insertion_point(class_scope:protobuf.Person.PhoneNumber)
+ private static final AddressBookProtos.Person.PhoneNumber DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new AddressBookProtos.Person.PhoneNumber();
+ }
+
+ public static AddressBookProtos.Person.PhoneNumber getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ @java.lang.Deprecated
+ public static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ public PhoneNumber parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new PhoneNumber(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ public AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private int bitField0_;
+ public static final int NAME_FIELD_NUMBER = 1;
+ private volatile java.lang.Object name_;
+
+ /**
+ * required string name = 1;
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ name_ = s;
+ }
+ return s;
+ }
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int ID_FIELD_NUMBER = 2;
+ private int id_;
+
+ /**
+ * required int32 id = 2;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000002) == 0x00000002);
+ }
+
+ /**
+ * required int32 id = 2;
+ */
+ public int getId() {
+ return id_;
+ }
+
+ public static final int EMAIL_FIELD_NUMBER = 3;
+ private volatile java.lang.Object email_;
+
+ /**
+ * optional string email = 3;
+ */
+ public boolean hasEmail() {
+ return ((bitField0_ & 0x00000004) == 0x00000004);
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public java.lang.String getEmail() {
+ java.lang.Object ref = email_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ email_ = s;
+ }
+ return s;
+ }
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public com.google.protobuf.ByteString
+ getEmailBytes() {
+ java.lang.Object ref = email_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ email_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int PHONES_FIELD_NUMBER = 4;
+ private java.util.List phones_;
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List getPhonesList() {
+ return phones_;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List extends AddressBookProtos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList() {
+ return phones_;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public int getPhonesCount() {
+ return phones_.size();
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumber getPhones(int index) {
+ return phones_.get(index);
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index) {
+ return phones_.get(index);
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ if (!hasName()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ if (!hasId()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ for (int i = 0; i < getPhonesCount(); i++) {
+ if (!getPhones(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+ }
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ output.writeInt32(2, id_);
+ }
+ if (((bitField0_ & 0x00000004) == 0x00000004)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 3, email_);
+ }
+ for (int i = 0; i < phones_.size(); i++) {
+ output.writeMessage(4, phones_.get(i));
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+ }
+ if (((bitField0_ & 0x00000002) == 0x00000002)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt32Size(2, id_);
+ }
+ if (((bitField0_ & 0x00000004) == 0x00000004)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, email_);
+ }
+ for (int i = 0; i < phones_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(4, phones_.get(i));
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof AddressBookProtos.Person)) {
+ return super.equals(obj);
+ }
+ AddressBookProtos.Person other = (AddressBookProtos.Person) obj;
+
+ boolean result = true;
+ result = result && (hasName() == other.hasName());
+ if (hasName()) {
+ result = result && getName()
+ .equals(other.getName());
+ }
+ result = result && (hasId() == other.hasId());
+ if (hasId()) {
+ result = result && (getId()
+ == other.getId());
+ }
+ result = result && (hasEmail() == other.hasEmail());
+ if (hasEmail()) {
+ result = result && getEmail()
+ .equals(other.getEmail());
+ }
+ result = result && getPhonesList()
+ .equals(other.getPhonesList());
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptorForType().hashCode();
+ if (hasName()) {
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ }
+ if (hasId()) {
+ hash = (37 * hash) + ID_FIELD_NUMBER;
+ hash = (53 * hash) + getId();
+ }
+ if (hasEmail()) {
+ hash = (37 * hash) + EMAIL_FIELD_NUMBER;
+ hash = (53 * hash) + getEmail().hashCode();
+ }
+ if (getPhonesCount() > 0) {
+ hash = (37 * hash) + PHONES_FIELD_NUMBER;
+ hash = (53 * hash) + getPhonesList().hashCode();
+ }
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.Person parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(AddressBookProtos.Person prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ * Protobuf type {@code protobuf.Person}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:protobuf.Person)
+ AddressBookProtos.PersonOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_Person_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_Person_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.Person.class, AddressBookProtos.Person.Builder.class);
+ }
+
+ // Construct using AddressBookProtos.Person.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ getPhonesFieldBuilder();
+ }
+ }
+
+ public Builder clear() {
+ super.clear();
+ name_ = "";
+ bitField0_ = (bitField0_ & ~0x00000001);
+ id_ = 0;
+ bitField0_ = (bitField0_ & ~0x00000002);
+ email_ = "";
+ bitField0_ = (bitField0_ & ~0x00000004);
+ if (phonesBuilder_ == null) {
+ phones_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000008);
+ } else {
+ phonesBuilder_.clear();
+ }
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return AddressBookProtos.internal_static_protobuf_Person_descriptor;
+ }
+
+ public AddressBookProtos.Person getDefaultInstanceForType() {
+ return AddressBookProtos.Person.getDefaultInstance();
+ }
+
+ public AddressBookProtos.Person build() {
+ AddressBookProtos.Person result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public AddressBookProtos.Person buildPartial() {
+ AddressBookProtos.Person result = new AddressBookProtos.Person(this);
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+ to_bitField0_ |= 0x00000001;
+ }
+ result.name_ = name_;
+ if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+ to_bitField0_ |= 0x00000002;
+ }
+ result.id_ = id_;
+ if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+ to_bitField0_ |= 0x00000004;
+ }
+ result.email_ = email_;
+ if (phonesBuilder_ == null) {
+ if (((bitField0_ & 0x00000008) == 0x00000008)) {
+ phones_ = java.util.Collections.unmodifiableList(phones_);
+ bitField0_ = (bitField0_ & ~0x00000008);
+ }
+ result.phones_ = phones_;
+ } else {
+ result.phones_ = phonesBuilder_.build();
+ }
+ result.bitField0_ = to_bitField0_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.setField(field, value);
+ }
+
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof AddressBookProtos.Person) {
+ return mergeFrom((AddressBookProtos.Person) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(AddressBookProtos.Person other) {
+ if (other == AddressBookProtos.Person.getDefaultInstance()) return this;
+ if (other.hasName()) {
+ bitField0_ |= 0x00000001;
+ name_ = other.name_;
+ onChanged();
+ }
+ if (other.hasId()) {
+ setId(other.getId());
+ }
+ if (other.hasEmail()) {
+ bitField0_ |= 0x00000004;
+ email_ = other.email_;
+ onChanged();
+ }
+ if (phonesBuilder_ == null) {
+ if (!other.phones_.isEmpty()) {
+ if (phones_.isEmpty()) {
+ phones_ = other.phones_;
+ bitField0_ = (bitField0_ & ~0x00000008);
+ } else {
+ ensurePhonesIsMutable();
+ phones_.addAll(other.phones_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.phones_.isEmpty()) {
+ if (phonesBuilder_.isEmpty()) {
+ phonesBuilder_.dispose();
+ phonesBuilder_ = null;
+ phones_ = other.phones_;
+ bitField0_ = (bitField0_ & ~0x00000008);
+ phonesBuilder_ =
+ com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+ getPhonesFieldBuilder() : null;
+ } else {
+ phonesBuilder_.addAllMessages(other.phones_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ if (!hasName()) {
+ return false;
+ }
+ if (!hasId()) {
+ return false;
+ }
+ for (int i = 0; i < getPhonesCount(); i++) {
+ if (!getPhones(i).isInitialized()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ AddressBookProtos.Person parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (AddressBookProtos.Person) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private int bitField0_;
+
+ private java.lang.Object name_ = "";
+
+ /**
+ * required string name = 1;
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000001) == 0x00000001);
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ name_ = s;
+ }
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public Builder setName(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000001;
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public Builder clearName() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ name_ = getDefaultInstance().getName();
+ onChanged();
+ return this;
+ }
+
+ /**
+ * required string name = 1;
+ */
+ public Builder setNameBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000001;
+ name_ = value;
+ onChanged();
+ return this;
+ }
+
+ private int id_;
+
+ /**
+ * required int32 id = 2;
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000002) == 0x00000002);
+ }
+
+ /**
+ * required int32 id = 2;
+ */
+ public int getId() {
+ return id_;
+ }
+
+ /**
+ * required int32 id = 2;
+ */
+ public Builder setId(int value) {
+ bitField0_ |= 0x00000002;
+ id_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * required int32 id = 2;
+ */
+ public Builder clearId() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ id_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object email_ = "";
+
+ /**
+ * optional string email = 3;
+ */
+ public boolean hasEmail() {
+ return ((bitField0_ & 0x00000004) == 0x00000004);
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public java.lang.String getEmail() {
+ java.lang.Object ref = email_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ if (bs.isValidUtf8()) {
+ email_ = s;
+ }
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public com.google.protobuf.ByteString
+ getEmailBytes() {
+ java.lang.Object ref = email_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ email_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public Builder setEmail(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000004;
+ email_ = value;
+ onChanged();
+ return this;
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public Builder clearEmail() {
+ bitField0_ = (bitField0_ & ~0x00000004);
+ email_ = getDefaultInstance().getEmail();
+ onChanged();
+ return this;
+ }
+
+ /**
+ * optional string email = 3;
+ */
+ public Builder setEmailBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000004;
+ email_ = value;
+ onChanged();
+ return this;
+ }
+
+ private java.util.List phones_ =
+ java.util.Collections.emptyList();
+
+ private void ensurePhonesIsMutable() {
+ if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+ phones_ = new java.util.ArrayList(phones_);
+ bitField0_ |= 0x00000008;
+ }
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person.PhoneNumber, AddressBookProtos.Person.PhoneNumber.Builder, AddressBookProtos.Person.PhoneNumberOrBuilder> phonesBuilder_;
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List getPhonesList() {
+ if (phonesBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(phones_);
+ } else {
+ return phonesBuilder_.getMessageList();
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public int getPhonesCount() {
+ if (phonesBuilder_ == null) {
+ return phones_.size();
+ } else {
+ return phonesBuilder_.getCount();
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumber getPhones(int index) {
+ if (phonesBuilder_ == null) {
+ return phones_.get(index);
+ } else {
+ return phonesBuilder_.getMessage(index);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder setPhones(
+ int index, AddressBookProtos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.set(index, value);
+ onChanged();
+ } else {
+ phonesBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder setPhones(
+ int index, AddressBookProtos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(AddressBookProtos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.add(value);
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ int index, AddressBookProtos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.add(index, value);
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ AddressBookProtos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.add(builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ int index, AddressBookProtos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addAllPhones(
+ java.lang.Iterable extends AddressBookProtos.Person.PhoneNumber> values) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, phones_);
+ onChanged();
+ } else {
+ phonesBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder clearPhones() {
+ if (phonesBuilder_ == null) {
+ phones_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000008);
+ onChanged();
+ } else {
+ phonesBuilder_.clear();
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder removePhones(int index) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.remove(index);
+ onChanged();
+ } else {
+ phonesBuilder_.remove(index);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumber.Builder getPhonesBuilder(
+ int index) {
+ return getPhonesFieldBuilder().getBuilder(index);
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index) {
+ if (phonesBuilder_ == null) {
+ return phones_.get(index);
+ } else {
+ return phonesBuilder_.getMessageOrBuilder(index);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List extends AddressBookProtos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList() {
+ if (phonesBuilder_ != null) {
+ return phonesBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(phones_);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumber.Builder addPhonesBuilder() {
+ return getPhonesFieldBuilder().addBuilder(
+ AddressBookProtos.Person.PhoneNumber.getDefaultInstance());
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public AddressBookProtos.Person.PhoneNumber.Builder addPhonesBuilder(
+ int index) {
+ return getPhonesFieldBuilder().addBuilder(
+ index, AddressBookProtos.Person.PhoneNumber.getDefaultInstance());
+ }
+
+ /**
+ * repeated .protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List
+ getPhonesBuilderList() {
+ return getPhonesFieldBuilder().getBuilderList();
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person.PhoneNumber, AddressBookProtos.Person.PhoneNumber.Builder, AddressBookProtos.Person.PhoneNumberOrBuilder>
+ getPhonesFieldBuilder() {
+ if (phonesBuilder_ == null) {
+ phonesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person.PhoneNumber, AddressBookProtos.Person.PhoneNumber.Builder, AddressBookProtos.Person.PhoneNumberOrBuilder>(
+ phones_,
+ ((bitField0_ & 0x00000008) == 0x00000008),
+ getParentForChildren(),
+ isClean());
+ phones_ = null;
+ }
+ return phonesBuilder_;
+ }
+
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:protobuf.Person)
+ }
+
+ // @@protoc_insertion_point(class_scope:protobuf.Person)
+ private static final AddressBookProtos.Person DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new AddressBookProtos.Person();
+ }
+
+ public static AddressBookProtos.Person getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ @java.lang.Deprecated
+ public static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ public Person parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new Person(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ public AddressBookProtos.Person getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ public interface AddressBookOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:protobuf.AddressBook)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ java.util.List
+ getPeopleList();
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ AddressBookProtos.Person getPeople(int index);
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ int getPeopleCount();
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ java.util.List extends AddressBookProtos.PersonOrBuilder>
+ getPeopleOrBuilderList();
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ AddressBookProtos.PersonOrBuilder getPeopleOrBuilder(
+ int index);
+ }
+
+ /**
+ * Protobuf type {@code protobuf.AddressBook}
+ */
+ public static final class AddressBook extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:protobuf.AddressBook)
+ AddressBookOrBuilder {
+ // Use AddressBook.newBuilder() to construct.
+ private AddressBook(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+
+ private AddressBook() {
+ people_ = java.util.Collections.emptyList();
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+
+ private AddressBook(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownField(input, unknownFields,
+ extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ people_ = new java.util.ArrayList();
+ mutable_bitField0_ |= 0x00000001;
+ }
+ people_.add(
+ input.readMessage(AddressBookProtos.Person.PARSER, extensionRegistry));
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
+ people_ = java.util.Collections.unmodifiableList(people_);
+ }
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_AddressBook_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_AddressBook_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.AddressBook.class, AddressBookProtos.AddressBook.Builder.class);
+ }
+
+ public static final int PEOPLE_FIELD_NUMBER = 1;
+ private java.util.List people_;
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public java.util.List getPeopleList() {
+ return people_;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public java.util.List extends AddressBookProtos.PersonOrBuilder>
+ getPeopleOrBuilderList() {
+ return people_;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public int getPeopleCount() {
+ return people_.size();
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.Person getPeople(int index) {
+ return people_.get(index);
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.PersonOrBuilder getPeopleOrBuilder(
+ int index) {
+ return people_.get(index);
+ }
+
+ private byte memoizedIsInitialized = -1;
+
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ for (int i = 0; i < getPeopleCount(); i++) {
+ if (!getPeople(i).isInitialized()) {
+ memoizedIsInitialized = 0;
+ return false;
+ }
+ }
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ for (int i = 0; i < people_.size(); i++) {
+ output.writeMessage(1, people_.get(i));
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ for (int i = 0; i < people_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, people_.get(i));
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ private static final long serialVersionUID = 0L;
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof AddressBookProtos.AddressBook)) {
+ return super.equals(obj);
+ }
+ AddressBookProtos.AddressBook other = (AddressBookProtos.AddressBook) obj;
+
+ boolean result = true;
+ result = result && getPeopleList()
+ .equals(other.getPeopleList());
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptorForType().hashCode();
+ if (getPeopleCount() > 0) {
+ hash = (37 * hash) + PEOPLE_FIELD_NUMBER;
+ hash = (53 * hash) + getPeopleList().hashCode();
+ }
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.AddressBook parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.AddressBook parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+
+ public static AddressBookProtos.AddressBook parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() {
+ return newBuilder();
+ }
+
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+
+ public static Builder newBuilder(AddressBookProtos.AddressBook prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+
+ /**
+ * Protobuf type {@code protobuf.AddressBook}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:protobuf.AddressBook)
+ AddressBookProtos.AddressBookOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return AddressBookProtos.internal_static_protobuf_AddressBook_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return AddressBookProtos.internal_static_protobuf_AddressBook_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ AddressBookProtos.AddressBook.class, AddressBookProtos.AddressBook.Builder.class);
+ }
+
+ // Construct using AddressBookProtos.AddressBook.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ getPeopleFieldBuilder();
+ }
+ }
+
+ public Builder clear() {
+ super.clear();
+ if (peopleBuilder_ == null) {
+ people_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ peopleBuilder_.clear();
+ }
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return AddressBookProtos.internal_static_protobuf_AddressBook_descriptor;
+ }
+
+ public AddressBookProtos.AddressBook getDefaultInstanceForType() {
+ return AddressBookProtos.AddressBook.getDefaultInstance();
+ }
+
+ public AddressBookProtos.AddressBook build() {
+ AddressBookProtos.AddressBook result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public AddressBookProtos.AddressBook buildPartial() {
+ AddressBookProtos.AddressBook result = new AddressBookProtos.AddressBook(this);
+ int from_bitField0_ = bitField0_;
+ if (peopleBuilder_ == null) {
+ if (((bitField0_ & 0x00000001) == 0x00000001)) {
+ people_ = java.util.Collections.unmodifiableList(people_);
+ bitField0_ = (bitField0_ & ~0x00000001);
+ }
+ result.people_ = people_;
+ } else {
+ result.people_ = peopleBuilder_.build();
+ }
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.setField(field, value);
+ }
+
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof AddressBookProtos.AddressBook) {
+ return mergeFrom((AddressBookProtos.AddressBook) other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(AddressBookProtos.AddressBook other) {
+ if (other == AddressBookProtos.AddressBook.getDefaultInstance()) return this;
+ if (peopleBuilder_ == null) {
+ if (!other.people_.isEmpty()) {
+ if (people_.isEmpty()) {
+ people_ = other.people_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ ensurePeopleIsMutable();
+ people_.addAll(other.people_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.people_.isEmpty()) {
+ if (peopleBuilder_.isEmpty()) {
+ peopleBuilder_.dispose();
+ peopleBuilder_ = null;
+ people_ = other.people_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ peopleBuilder_ =
+ com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+ getPeopleFieldBuilder() : null;
+ } else {
+ peopleBuilder_.addAllMessages(other.people_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ for (int i = 0; i < getPeopleCount(); i++) {
+ if (!getPeople(i).isInitialized()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ AddressBookProtos.AddressBook parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (AddressBookProtos.AddressBook) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private int bitField0_;
+
+ private java.util.List people_ =
+ java.util.Collections.emptyList();
+
+ private void ensurePeopleIsMutable() {
+ if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+ people_ = new java.util.ArrayList(people_);
+ bitField0_ |= 0x00000001;
+ }
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person, AddressBookProtos.Person.Builder, AddressBookProtos.PersonOrBuilder> peopleBuilder_;
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public java.util.List getPeopleList() {
+ if (peopleBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(people_);
+ } else {
+ return peopleBuilder_.getMessageList();
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public int getPeopleCount() {
+ if (peopleBuilder_ == null) {
+ return people_.size();
+ } else {
+ return peopleBuilder_.getCount();
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.Person getPeople(int index) {
+ if (peopleBuilder_ == null) {
+ return people_.get(index);
+ } else {
+ return peopleBuilder_.getMessage(index);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder setPeople(
+ int index, AddressBookProtos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.set(index, value);
+ onChanged();
+ } else {
+ peopleBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder setPeople(
+ int index, AddressBookProtos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder addPeople(AddressBookProtos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.add(value);
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ int index, AddressBookProtos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.add(index, value);
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ AddressBookProtos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.add(builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ int index, AddressBookProtos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder addAllPeople(
+ java.lang.Iterable extends AddressBookProtos.Person> values) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, people_);
+ onChanged();
+ } else {
+ peopleBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder clearPeople() {
+ if (peopleBuilder_ == null) {
+ people_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ } else {
+ peopleBuilder_.clear();
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public Builder removePeople(int index) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.remove(index);
+ onChanged();
+ } else {
+ peopleBuilder_.remove(index);
+ }
+ return this;
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.Person.Builder getPeopleBuilder(
+ int index) {
+ return getPeopleFieldBuilder().getBuilder(index);
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.PersonOrBuilder getPeopleOrBuilder(
+ int index) {
+ if (peopleBuilder_ == null) {
+ return people_.get(index);
+ } else {
+ return peopleBuilder_.getMessageOrBuilder(index);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public java.util.List extends AddressBookProtos.PersonOrBuilder>
+ getPeopleOrBuilderList() {
+ if (peopleBuilder_ != null) {
+ return peopleBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(people_);
+ }
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.Person.Builder addPeopleBuilder() {
+ return getPeopleFieldBuilder().addBuilder(
+ AddressBookProtos.Person.getDefaultInstance());
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public AddressBookProtos.Person.Builder addPeopleBuilder(
+ int index) {
+ return getPeopleFieldBuilder().addBuilder(
+ index, AddressBookProtos.Person.getDefaultInstance());
+ }
+
+ /**
+ * repeated .protobuf.Person people = 1;
+ */
+ public java.util.List
+ getPeopleBuilderList() {
+ return getPeopleFieldBuilder().getBuilderList();
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person, AddressBookProtos.Person.Builder, AddressBookProtos.PersonOrBuilder>
+ getPeopleFieldBuilder() {
+ if (peopleBuilder_ == null) {
+ peopleBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+ AddressBookProtos.Person, AddressBookProtos.Person.Builder, AddressBookProtos.PersonOrBuilder>(
+ people_,
+ ((bitField0_ & 0x00000001) == 0x00000001),
+ getParentForChildren(),
+ isClean());
+ people_ = null;
+ }
+ return peopleBuilder_;
+ }
+
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:protobuf.AddressBook)
+ }
+
+ // @@protoc_insertion_point(class_scope:protobuf.AddressBook)
+ private static final AddressBookProtos.AddressBook DEFAULT_INSTANCE;
+
+ static {
+ DEFAULT_INSTANCE = new AddressBookProtos.AddressBook();
+ }
+
+ public static AddressBookProtos.AddressBook getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ @java.lang.Deprecated
+ public static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ public AddressBook parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new AddressBook(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ public AddressBookProtos.AddressBook getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_protobuf_Person_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_protobuf_Person_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_protobuf_Person_PhoneNumber_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_protobuf_Person_PhoneNumber_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_protobuf_AddressBook_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_protobuf_AddressBook_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\020routeguide.proto\022\010protobuf\"\333\001\n\006Person\022" +
+ "\014\n\004name\030\001 \002(\t\022\n\n\002id\030\002 \002(\005\022\r\n\005email\030\003 \001(\t" +
+ "\022,\n\006phones\030\004 \003(\0132\034.protobuf.Person.Phone" +
+ "Number\032M\n\013PhoneNumber\022\016\n\006number\030\001 \002(\t\022.\n" +
+ "\004type\030\002 \001(\0162\032.protobuf.Person.PhoneType:" +
+ "\004HOME\"+\n\tPhoneType\022\n\n\006MOBILE\020\000\022\010\n\004HOME\020\001" +
+ "\022\010\n\004WORK\020\002\"/\n\013AddressBook\022 \n\006people\030\001 \003(" +
+ "\0132\020.protobuf.PersonB*\n\025com.baeldung.prot" +
+ "obufB\021AddressBookProtos"
+ };
+ com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+ new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+ public com.google.protobuf.ExtensionRegistry assignDescriptors(
+ com.google.protobuf.Descriptors.FileDescriptor root) {
+ descriptor = root;
+ return null;
+ }
+ };
+ com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[]{
+ }, assigner);
+ internal_static_protobuf_Person_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_protobuf_Person_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_protobuf_Person_descriptor,
+ new java.lang.String[]{"Name", "Id", "Email", "Phones",});
+ internal_static_protobuf_Person_PhoneNumber_descriptor =
+ internal_static_protobuf_Person_descriptor.getNestedTypes().get(0);
+ internal_static_protobuf_Person_PhoneNumber_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_protobuf_Person_PhoneNumber_descriptor,
+ new java.lang.String[]{"Number", "Type",});
+ internal_static_protobuf_AddressBook_descriptor =
+ getDescriptor().getMessageTypes().get(1);
+ internal_static_protobuf_AddressBook_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_protobuf_AddressBook_descriptor,
+ new java.lang.String[]{"People",});
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
\ No newline at end of file
diff --git a/protobuffer/src/main/resources/addressbook.proto b/protobuffer/src/main/resources/addressbook.proto
new file mode 100644
index 0000000000..1c0946b7f7
--- /dev/null
+++ b/protobuffer/src/main/resources/addressbook.proto
@@ -0,0 +1,27 @@
+package protobuf;
+
+option java_package = "com.baeldung.protobuf";
+option java_outer_classname = "AddressBookProtos";
+
+message Person {
+ required string name = 1;
+ required int32 id = 2;
+ optional string email = 3;
+
+ enum PhoneType {
+ MOBILE = 0;
+ HOME = 1;
+ WORK = 2;
+ }
+
+ message PhoneNumber {
+ required string number = 1;
+ optional PhoneType type = 2 [default = HOME];
+ }
+
+ repeated PhoneNumber phones = 4;
+}
+
+message AddressBook {
+ repeated Person people = 1;
+}
\ No newline at end of file
diff --git a/protobuffer/src/test/java/com/baeldung/protobuf/ProtobufTest.java b/protobuffer/src/test/java/com/baeldung/protobuf/ProtobufTest.java
new file mode 100644
index 0000000000..74447eb4a4
--- /dev/null
+++ b/protobuffer/src/test/java/com/baeldung/protobuf/ProtobufTest.java
@@ -0,0 +1,90 @@
+package com.baeldung.protobuf;
+
+
+import org.junit.After;
+import org.junit.Test;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Random;
+
+import static org.junit.Assert.assertEquals;
+
+public class ProtobufTest {
+ private final String filePath = "address_book";
+
+ @After
+ public void cleanup() throws IOException {
+ Files.deleteIfExists(Paths.get(filePath));
+ }
+
+ @Test
+ public void givenGeneratedProtobufClass_whenCreateClass_thenShouldCreateJavaInstance() {
+ //when
+ String email = "j@baeldung.com";
+ int id = new Random().nextInt();
+ String name = "Michael Program";
+ String number = "01234567890";
+ AddressBookProtos.Person.PhoneType type = AddressBookProtos.Person.PhoneType.HOME;
+ AddressBookProtos.Person person =
+ AddressBookProtos.Person.newBuilder()
+ .setId(id)
+ .setName(name)
+ .setEmail(email)
+ .addPhones(
+ AddressBookProtos.Person.PhoneNumber.newBuilder()
+ .setNumber(number)
+ .setType(type))
+ .build();
+ //then
+ assertEquals(person.getEmail(), email);
+ assertEquals(person.getId(), id);
+ assertEquals(person.getName(), name);
+ assertEquals(person.getPhones(0).getNumber(), number);
+ assertEquals(person.getPhones(0).getType(), type);
+ assertEquals(person.getPhonesList().size(), 1);
+ }
+
+
+ @Test
+ public void givenAddressBookWithOnePerson_whenSaveAsAFile_shouldLoadFromFileToJavaClass() throws IOException {
+ //given
+ String email = "j@baeldung.com";
+ int id = new Random().nextInt();
+ String name = "Michael Program";
+ String number = "01234567890";
+ AddressBookProtos.Person.PhoneType type = AddressBookProtos.Person.PhoneType.HOME;
+ AddressBookProtos.Person person =
+ AddressBookProtos.Person.newBuilder()
+ .setId(id)
+ .setName(name)
+ .setEmail(email)
+ .addPhones(
+ AddressBookProtos.Person.PhoneNumber.newBuilder()
+ .setNumber(number)
+ .setType(type))
+ .build();
+
+ //when
+ AddressBookProtos.AddressBook addressBook = AddressBookProtos.AddressBook.newBuilder().addPeople(person).build();
+ FileOutputStream fos = new FileOutputStream(filePath);
+ addressBook.writeTo(fos);
+ fos.close();
+
+ //then
+ FileInputStream fis = new FileInputStream(filePath);
+ AddressBookProtos.AddressBook deserialized =
+ AddressBookProtos.AddressBook.newBuilder().mergeFrom(fis).build();
+ fis.close();
+ assertEquals(deserialized.getPeople(0).getEmail(), email);
+ assertEquals(deserialized.getPeople(0).getId(), id);
+ assertEquals(deserialized.getPeople(0).getName(), name);
+ assertEquals(deserialized.getPeople(0).getPhones(0).getNumber(), number);
+ assertEquals(deserialized.getPeople(0).getPhones(0).getType(), type);
+ assertEquals(deserialized.getPeople(0).getPhonesList().size(), 1);
+
+ }
+}