From be6f4f7796fd6743d08d5269f9fa2737d23f4f1c Mon Sep 17 00:00:00 2001 From: Akash Raje Date: Sun, 13 Aug 2023 18:04:08 +0530 Subject: [PATCH 1/3] DEVX-9606 Remove SDK protos --- clickstream-api/build.gradle.kts | 2 +- .../kotlin/clickstream/api/CSMetaProvider.kt | 12 +- .../build.gradle.kts | 2 +- .../intermediate/CSHealthEventFactory.kt | 2 +- .../intermediate/CSHealthEventProcessor.kt | 2 +- .../build.gradle.kts | 2 +- .../internal/NoOpCSHealthEventFactory.kt | 2 +- .../internal/NoOpCSHealthEventProcessor.kt | 2 +- clickstream-health-metrics/build.gradle.kts | 2 +- .../internal/DefaultCSHealthEventFactory.kt | 4 +- .../internal/DefaultCSHealthEventProcessor.kt | 16 +- clickstream-health-proto/.gitignore | 1 + clickstream-health-proto/build.gradle.kts | 14 + .../java/clickstream/health/proto/Health.java | 988 ++++++ .../health/proto/HealthDetails.java | 702 ++++ .../health/proto/HealthDetailsOrBuilder.java | 91 + .../clickstream/health/proto/HealthMeta.java | 2838 +++++++++++++++++ .../health/proto/HealthMetaOrBuilder.java | 76 + .../health/proto/HealthMetaProto.java | 16 + .../health/proto/HealthOrBuilder.java | 117 + .../clickstream/health/proto/HealthProto.java | 16 + clickstream/build.gradle.kts | 2 +- .../clickstream/extension/CSMessageExt.kt | 4 +- .../internal/di/CSServiceLocator.kt | 1 - .../impl/DefaultCSMetaProvider.kt | 26 +- .../eventscheduler/CSBaseEventScheduler.kt | 12 +- .../internal/eventscheduler/CSEventData.kt | 2 +- .../internal/networklayer/CSEventService.kt | 8 +- .../internal/networklayer/CSNetworkManager.kt | 6 +- .../networklayer/CSNetworkRepository.kt | 16 +- .../networklayer/CSRetryableCallback.kt | 21 +- .../networklayer/proto/raccoon/Code.java | 186 ++ .../networklayer/proto/raccoon/Event.java | 433 +++ .../proto/raccoon/EventOrBuilder.java | 45 + .../proto/raccoon/EventProto.java | 16 + .../proto/raccoon/SendEventRequest.java | 913 ++++++ .../raccoon/SendEventRequestOrBuilder.java | 100 + .../proto/raccoon/SendEventResponse.java | 974 ++++++ .../raccoon/SendEventResponseOrBuilder.java | 151 + .../networklayer/proto/raccoon/Status.java | 103 + .../clickstream/ClickStreamConnectionTest.kt | 18 +- .../fake/FakeCSHealthEventFactory.kt | 10 - .../clickstream/fake/FakeCSMetaProvider.kt | 2 +- .../DefaultCSHealthEventProcessorTest.kt | 3 - .../impl/DefaultCSHealthEventFactoryTest.kt | 18 +- .../CSBackgroundSchedulerTest.kt | 2 +- .../networklayer/CSConnectionDroppedTest.kt | 18 +- .../CSHealthMetricsBatchTimeoutTest.kt | 6 +- .../CSHealthMetricsConnectionClosedTest.kt | 8 +- .../CSHealthMetricsConnectionFailedTest.kt | 8 +- .../CSHealthMetricsConnectionOpenedTest.kt | 9 +- .../networklayer/CSRetryableCallbackTest.kt | 4 +- libs/proto-sdk-1.18.6.jar | Bin 97493 -> 0 bytes protos/health/Health.proto | 40 + protos/health/HealthMeta.proto | 49 + settings.gradle | 1 + 56 files changed, 7983 insertions(+), 139 deletions(-) create mode 100644 clickstream-health-proto/.gitignore create mode 100644 clickstream-health-proto/build.gradle.kts create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/Health.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetails.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetailsOrBuilder.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMeta.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaOrBuilder.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaProto.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthOrBuilder.java create mode 100644 clickstream-health-proto/src/main/java/clickstream/health/proto/HealthProto.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Code.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Event.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventOrBuilder.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventProto.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequest.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequestOrBuilder.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponse.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponseOrBuilder.java create mode 100644 clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Status.java delete mode 100644 clickstream/src/test/kotlin/clickstream/fake/FakeCSHealthEventFactory.kt delete mode 100644 libs/proto-sdk-1.18.6.jar create mode 100644 protos/health/Health.proto create mode 100644 protos/health/HealthMeta.proto diff --git a/clickstream-api/build.gradle.kts b/clickstream-api/build.gradle.kts index f2ac9e6e..5e8c9ef9 100644 --- a/clickstream-api/build.gradle.kts +++ b/clickstream-api/build.gradle.kts @@ -34,7 +34,7 @@ android { dependencies { // Clickstream - compileOnly(files("$rootDir/libs/proto-sdk-1.18.6.jar")) + compileOnly(projects.clickstreamHealthProto) // Common implementation(deps.utils.protoLite) diff --git a/clickstream-api/src/main/kotlin/clickstream/api/CSMetaProvider.kt b/clickstream-api/src/main/kotlin/clickstream/api/CSMetaProvider.kt index 9c56ba6e..12564222 100644 --- a/clickstream-api/src/main/kotlin/clickstream/api/CSMetaProvider.kt +++ b/clickstream-api/src/main/kotlin/clickstream/api/CSMetaProvider.kt @@ -1,10 +1,12 @@ package clickstream.api -import com.gojek.clickstream.internal.HealthMeta.App -import com.gojek.clickstream.internal.HealthMeta.Customer -import com.gojek.clickstream.internal.HealthMeta.Device -import com.gojek.clickstream.internal.HealthMeta.Location -import com.gojek.clickstream.internal.HealthMeta.Session + +import clickstream.health.proto.HealthMeta.Location +import clickstream.health.proto.HealthMeta.Customer +import clickstream.health.proto.HealthMeta.App +import clickstream.health.proto.HealthMeta.Device +import clickstream.health.proto.HealthMeta.Session + /** * This data source is responsible for providing values for those common keys diff --git a/clickstream-health-metrics-api/build.gradle.kts b/clickstream-health-metrics-api/build.gradle.kts index c5de58e5..24ec1893 100644 --- a/clickstream-health-metrics-api/build.gradle.kts +++ b/clickstream-health-metrics-api/build.gradle.kts @@ -34,7 +34,7 @@ android { dependencies { // Clickstream - compileOnly(files("$rootDir/libs/proto-sdk-1.18.6.jar")) + compileOnly(projects.clickstreamHealthProto) implementation(deps.android.core.annotation) } diff --git a/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventFactory.kt b/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventFactory.kt index 3199b444..c24fcb89 100644 --- a/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventFactory.kt +++ b/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventFactory.kt @@ -1,7 +1,7 @@ package clickstream.health.intermediate import androidx.annotation.RestrictTo -import com.gojek.clickstream.internal.Health +import clickstream.health.proto.Health /** * This is responsible for creating an event object in proto format when provided with user-generated, diff --git a/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventProcessor.kt b/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventProcessor.kt index 0160ba13..f0caa466 100644 --- a/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventProcessor.kt +++ b/clickstream-health-metrics-api/src/main/kotlin/clickstream/health/intermediate/CSHealthEventProcessor.kt @@ -1,7 +1,7 @@ package clickstream.health.intermediate import androidx.annotation.RestrictTo -import com.gojek.clickstream.internal.Health +import clickstream.health.proto.Health /** * [CSHealthEventProcessor] is the Heart of the Clickstream Library. The [CSHealthEventProcessor] diff --git a/clickstream-health-metrics-noop/build.gradle.kts b/clickstream-health-metrics-noop/build.gradle.kts index 76427073..85a1add4 100644 --- a/clickstream-health-metrics-noop/build.gradle.kts +++ b/clickstream-health-metrics-noop/build.gradle.kts @@ -34,7 +34,7 @@ android { dependencies { // Clickstream - compileOnly(files("$rootDir/libs/proto-sdk-1.18.6.jar")) + compileOnly(projects.clickstreamHealthProto) api(projects.clickstreamHealthMetricsApi) api(projects.clickstreamApi) api(projects.clickstreamLifecycle) diff --git a/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventFactory.kt b/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventFactory.kt index 1c1aab6e..ca2f54bd 100644 --- a/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventFactory.kt +++ b/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventFactory.kt @@ -1,7 +1,7 @@ package clickstream.health.internal import clickstream.health.intermediate.CSHealthEventFactory -import com.gojek.clickstream.internal.Health +import clickstream.health.proto.Health internal class NoOpCSHealthEventFactory : CSHealthEventFactory { override suspend fun create(message: Health): Health { diff --git a/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventProcessor.kt b/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventProcessor.kt index 9e4674c3..6d1c6396 100644 --- a/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventProcessor.kt +++ b/clickstream-health-metrics-noop/src/main/kotlin/clickstream/health/internal/NoOpCSHealthEventProcessor.kt @@ -1,7 +1,7 @@ package clickstream.health.internal import clickstream.health.intermediate.CSHealthEventProcessor -import com.gojek.clickstream.internal.Health +import clickstream.health.proto.Health internal class NoOpCSHealthEventProcessor : CSHealthEventProcessor { override suspend fun getAggregateEvents(): List { diff --git a/clickstream-health-metrics/build.gradle.kts b/clickstream-health-metrics/build.gradle.kts index 7587dbcc..6017439e 100644 --- a/clickstream-health-metrics/build.gradle.kts +++ b/clickstream-health-metrics/build.gradle.kts @@ -34,7 +34,7 @@ android { dependencies { // Clickstream - compileOnly(files("$rootDir/libs/proto-sdk-1.18.6.jar")) + compileOnly(projects.clickstreamHealthProto) compileOnly(projects.clickstreamLogger) api(projects.clickstreamHealthMetricsApi) api(projects.clickstreamApi) diff --git a/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventFactory.kt b/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventFactory.kt index 27be101e..15003d3d 100644 --- a/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventFactory.kt +++ b/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventFactory.kt @@ -5,8 +5,8 @@ import clickstream.api.CSMetaProvider import clickstream.health.time.CSTimeStampGenerator import clickstream.health.identity.CSGuIdGenerator import clickstream.health.intermediate.CSHealthEventFactory -import com.gojek.clickstream.internal.Health -import com.gojek.clickstream.internal.HealthMeta +import clickstream.health.proto.Health +import clickstream.health.proto.HealthMeta /** * This is the implementation of [CSHealthEventFactory] diff --git a/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessor.kt b/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessor.kt index a96d380f..77de6533 100644 --- a/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessor.kt +++ b/clickstream-health-metrics/src/main/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessor.kt @@ -9,14 +9,12 @@ import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.internal.CSHealthEventEntity.Companion.dtosMapTo import clickstream.health.model.CSHealthEventConfig import clickstream.health.model.CSHealthEventDTO +import clickstream.health.proto.Health +import clickstream.health.proto.HealthDetails import clickstream.lifecycle.CSAppLifeCycle import clickstream.lifecycle.CSLifeCycleManager import clickstream.logger.CSLogger import clickstream.util.CSAppVersionSharedPref -import com.gojek.clickstream.internal.ErrorDetails -import com.gojek.clickstream.internal.Health -import com.gojek.clickstream.internal.HealthDetails -import com.gojek.clickstream.internal.TraceDetails import com.google.protobuf.Timestamp import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -116,16 +114,6 @@ public class DefaultCSHealthEventProcessor( .addEventBatchGuids(event.eventBatchGuid) .build() ) - .setTraceDetails( - TraceDetails.newBuilder() - .setTimeToConnection(event.timeToConnection.toString()) - .setErrorDetails( - ErrorDetails.newBuilder() - .setReason(event.error) - .build() - ) - .build() - ) .build() logger.debug { "DefaultCSHealthEventProcessor#getInstantEvents : Health Events $health" } healthEventFactory.create(health) diff --git a/clickstream-health-proto/.gitignore b/clickstream-health-proto/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/clickstream-health-proto/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/clickstream-health-proto/build.gradle.kts b/clickstream-health-proto/build.gradle.kts new file mode 100644 index 00000000..6e258f7a --- /dev/null +++ b/clickstream-health-proto/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + id("java-library") + id("org.jetbrains.kotlin.jvm") +} + +java { + sourceCompatibility = JavaVersion.VERSION_1_7 + targetCompatibility = JavaVersion.VERSION_1_7 +} + +dependencies { + // Proto + api(deps.utils.protoLite) +} \ No newline at end of file diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/Health.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/Health.java new file mode 100644 index 00000000..d1ba9ae6 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/Health.java @@ -0,0 +1,988 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Health.proto + +package clickstream.health.proto; + +/** + * Protobuf type {@code clickstream.health.proto.Health} + */ +public final class Health extends + com.google.protobuf.GeneratedMessageLite< + Health, Health.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.Health) + HealthOrBuilder { + private Health() { + eventName_ = ""; + } + public static final int EVENT_NAME_FIELD_NUMBER = 1; + private String eventName_; + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @return The eventName. + */ + @Override + public String getEventName() { + return eventName_; + } + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @return The bytes for eventName. + */ + @Override + public com.google.protobuf.ByteString + getEventNameBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(eventName_); + } + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @param value The eventName to set. + */ + private void setEventName( + String value) { + Class valueClass = value.getClass(); + + eventName_ = value; + } + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + */ + private void clearEventName() { + + eventName_ = getDefaultInstance().getEventName(); + } + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @param value The bytes for eventName to set. + */ + private void setEventNameBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + eventName_ = value.toStringUtf8(); + + } + + public static final int HEALTHDETAILS_FIELD_NUMBER = 2; + private HealthDetails healthDetails_; + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + @Override + public boolean hasHealthDetails() { + return healthDetails_ != null; + } + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + @Override + public HealthDetails getHealthDetails() { + return healthDetails_ == null ? HealthDetails.getDefaultInstance() : healthDetails_; + } + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + private void setHealthDetails(HealthDetails value) { + value.getClass(); + healthDetails_ = value; + + } + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeHealthDetails(HealthDetails value) { + value.getClass(); + if (healthDetails_ != null && + healthDetails_ != HealthDetails.getDefaultInstance()) { + healthDetails_ = + HealthDetails.newBuilder(healthDetails_).mergeFrom(value).buildPartial(); + } else { + healthDetails_ = value; + } + + } + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + private void clearHealthDetails() { healthDetails_ = null; + + } + + public static final int NUMBER_OF_EVENTS_FIELD_NUMBER = 3; + private long numberOfEvents_; + /** + *
+   * Number of events tracked.
+   * 
+ * + * int64 number_of_events = 3; + * @return The numberOfEvents. + */ + @Override + public long getNumberOfEvents() { + return numberOfEvents_; + } + /** + *
+   * Number of events tracked.
+   * 
+ * + * int64 number_of_events = 3; + * @param value The numberOfEvents to set. + */ + private void setNumberOfEvents(long value) { + + numberOfEvents_ = value; + } + /** + *
+   * Number of events tracked.
+   * 
+ * + * int64 number_of_events = 3; + */ + private void clearNumberOfEvents() { + + numberOfEvents_ = 0L; + } + + public static final int NUMBER_OF_BATCHES_FIELD_NUMBER = 4; + private long numberOfBatches_; + /** + *
+   * Number of event batches tracked.
+   * 
+ * + * int64 number_of_batches = 4; + * @return The numberOfBatches. + */ + @Override + public long getNumberOfBatches() { + return numberOfBatches_; + } + /** + *
+   * Number of event batches tracked.
+   * 
+ * + * int64 number_of_batches = 4; + * @param value The numberOfBatches to set. + */ + private void setNumberOfBatches(long value) { + + numberOfBatches_ = value; + } + /** + *
+   * Number of event batches tracked.
+   * 
+ * + * int64 number_of_batches = 4; + */ + private void clearNumberOfBatches() { + + numberOfBatches_ = 0L; + } + + public static final int EVENT_TIMESTAMP_FIELD_NUMBER = 101; + private com.google.protobuf.Timestamp eventTimestamp_; + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + @Override + public boolean hasEventTimestamp() { + return eventTimestamp_ != null; + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + @Override + public com.google.protobuf.Timestamp getEventTimestamp() { + return eventTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : eventTimestamp_; + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + private void setEventTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + eventTimestamp_ = value; + + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeEventTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + if (eventTimestamp_ != null && + eventTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + eventTimestamp_ = + com.google.protobuf.Timestamp.newBuilder(eventTimestamp_).mergeFrom(value).buildPartial(); + } else { + eventTimestamp_ = value; + } + + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + private void clearEventTimestamp() { eventTimestamp_ = null; + + } + + public static final int HEALTHMETA_FIELD_NUMBER = 103; + private HealthMeta healthMeta_; + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + @Override + public boolean hasHealthMeta() { + return healthMeta_ != null; + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + @Override + public HealthMeta getHealthMeta() { + return healthMeta_ == null ? HealthMeta.getDefaultInstance() : healthMeta_; + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + private void setHealthMeta(HealthMeta value) { + value.getClass(); + healthMeta_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeHealthMeta(HealthMeta value) { + value.getClass(); + if (healthMeta_ != null && + healthMeta_ != HealthMeta.getDefaultInstance()) { + healthMeta_ = + HealthMeta.newBuilder(healthMeta_).mergeFrom(value).buildPartial(); + } else { + healthMeta_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + private void clearHealthMeta() { healthMeta_ = null; + + } + + public static final int DEVICE_TIMESTAMP_FIELD_NUMBER = 104; + private com.google.protobuf.Timestamp deviceTimestamp_; + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + @Override + public boolean hasDeviceTimestamp() { + return deviceTimestamp_ != null; + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return deviceTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : deviceTimestamp_; + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + private void setDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + deviceTimestamp_ = value; + + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + if (deviceTimestamp_ != null && + deviceTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + deviceTimestamp_ = + com.google.protobuf.Timestamp.newBuilder(deviceTimestamp_).mergeFrom(value).buildPartial(); + } else { + deviceTimestamp_ = value; + } + + } + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + private void clearDeviceTimestamp() { deviceTimestamp_ = null; + + } + + public static Health parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Health parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Health parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Health parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Health parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Health parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Health parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Health parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Health parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Health parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Health parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Health parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Health prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.Health} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Health, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.Health) + HealthOrBuilder { + // Construct using clickstream.health.proto.Health.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Name of the health event.
+     * 
+ * + * string event_name = 1; + * @return The eventName. + */ + @Override + public String getEventName() { + return instance.getEventName(); + } + /** + *
+     * Name of the health event.
+     * 
+ * + * string event_name = 1; + * @return The bytes for eventName. + */ + @Override + public com.google.protobuf.ByteString + getEventNameBytes() { + return instance.getEventNameBytes(); + } + /** + *
+     * Name of the health event.
+     * 
+ * + * string event_name = 1; + * @param value The eventName to set. + * @return This builder for chaining. + */ + public Builder setEventName( + String value) { + copyOnWrite(); + instance.setEventName(value); + return this; + } + /** + *
+     * Name of the health event.
+     * 
+ * + * string event_name = 1; + * @return This builder for chaining. + */ + public Builder clearEventName() { + copyOnWrite(); + instance.clearEventName(); + return this; + } + /** + *
+     * Name of the health event.
+     * 
+ * + * string event_name = 1; + * @param value The bytes for eventName to set. + * @return This builder for chaining. + */ + public Builder setEventNameBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEventNameBytes(value); + return this; + } + + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + @Override + public boolean hasHealthDetails() { + return instance.hasHealthDetails(); + } + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + @Override + public HealthDetails getHealthDetails() { + return instance.getHealthDetails(); + } + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + public Builder setHealthDetails(HealthDetails value) { + copyOnWrite(); + instance.setHealthDetails(value); + return this; + } + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + public Builder setHealthDetails( + HealthDetails.Builder builderForValue) { + copyOnWrite(); + instance.setHealthDetails(builderForValue.build()); + return this; + } + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + public Builder mergeHealthDetails(HealthDetails value) { + copyOnWrite(); + instance.mergeHealthDetails(value); + return this; + } + /** + *
+     * Health details, captured by the SDK when the mode is verbose.
+     * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + */ + public Builder clearHealthDetails() { copyOnWrite(); + instance.clearHealthDetails(); + return this; + } + + /** + *
+     * Number of events tracked.
+     * 
+ * + * int64 number_of_events = 3; + * @return The numberOfEvents. + */ + @Override + public long getNumberOfEvents() { + return instance.getNumberOfEvents(); + } + /** + *
+     * Number of events tracked.
+     * 
+ * + * int64 number_of_events = 3; + * @param value The numberOfEvents to set. + * @return This builder for chaining. + */ + public Builder setNumberOfEvents(long value) { + copyOnWrite(); + instance.setNumberOfEvents(value); + return this; + } + /** + *
+     * Number of events tracked.
+     * 
+ * + * int64 number_of_events = 3; + * @return This builder for chaining. + */ + public Builder clearNumberOfEvents() { + copyOnWrite(); + instance.clearNumberOfEvents(); + return this; + } + + /** + *
+     * Number of event batches tracked.
+     * 
+ * + * int64 number_of_batches = 4; + * @return The numberOfBatches. + */ + @Override + public long getNumberOfBatches() { + return instance.getNumberOfBatches(); + } + /** + *
+     * Number of event batches tracked.
+     * 
+ * + * int64 number_of_batches = 4; + * @param value The numberOfBatches to set. + * @return This builder for chaining. + */ + public Builder setNumberOfBatches(long value) { + copyOnWrite(); + instance.setNumberOfBatches(value); + return this; + } + /** + *
+     * Number of event batches tracked.
+     * 
+ * + * int64 number_of_batches = 4; + * @return This builder for chaining. + */ + public Builder clearNumberOfBatches() { + copyOnWrite(); + instance.clearNumberOfBatches(); + return this; + } + + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + @Override + public boolean hasEventTimestamp() { + return instance.hasEventTimestamp(); + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + @Override + public com.google.protobuf.Timestamp getEventTimestamp() { + return instance.getEventTimestamp(); + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + public Builder setEventTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.setEventTimestamp(value); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + public Builder setEventTimestamp( + com.google.protobuf.Timestamp.Builder builderForValue) { + copyOnWrite(); + instance.setEventTimestamp(builderForValue.build()); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + public Builder mergeEventTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.mergeEventTimestamp(value); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + */ + public Builder clearEventTimestamp() { copyOnWrite(); + instance.clearEventTimestamp(); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + @Override + public boolean hasHealthMeta() { + return instance.hasHealthMeta(); + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + @Override + public HealthMeta getHealthMeta() { + return instance.getHealthMeta(); + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + public Builder setHealthMeta(HealthMeta value) { + copyOnWrite(); + instance.setHealthMeta(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + public Builder setHealthMeta( + HealthMeta.Builder builderForValue) { + copyOnWrite(); + instance.setHealthMeta(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + public Builder mergeHealthMeta(HealthMeta value) { + copyOnWrite(); + instance.mergeHealthMeta(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + */ + public Builder clearHealthMeta() { copyOnWrite(); + instance.clearHealthMeta(); + return this; + } + + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + @Override + public boolean hasDeviceTimestamp() { + return instance.hasDeviceTimestamp(); + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return instance.getDeviceTimestamp(); + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + public Builder setDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.setDeviceTimestamp(value); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + public Builder setDeviceTimestamp( + com.google.protobuf.Timestamp.Builder builderForValue) { + copyOnWrite(); + instance.setDeviceTimestamp(builderForValue.build()); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + public Builder mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.mergeDeviceTimestamp(value); + return this; + } + /** + *
+     * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + */ + public Builder clearDeviceTimestamp() { copyOnWrite(); + instance.clearDeviceTimestamp(); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.Health) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Health(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "eventName_", + "healthDetails_", + "numberOfEvents_", + "numberOfBatches_", + "eventTimestamp_", + "healthMeta_", + "deviceTimestamp_", + }; + String info = + "\u0000\u0007\u0000\u0000\u0001h\u0007\u0000\u0000\u0000\u0001\u0208\u0002\t\u0003" + + "\u0002\u0004\u0002e\tg\th\t"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Health.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.Health) + private static final Health DEFAULT_INSTANCE; + static { + Health defaultInstance = new Health(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Health.class, defaultInstance); + } + + public static Health getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetails.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetails.java new file mode 100644 index 00000000..e0fa20fe --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetails.java @@ -0,0 +1,702 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Health.proto + +package clickstream.health.proto; + +/** + * Protobuf type {@code clickstream.health.proto.HealthDetails} + */ +public final class HealthDetails extends + com.google.protobuf.GeneratedMessageLite< + HealthDetails, HealthDetails.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthDetails) + HealthDetailsOrBuilder { + private HealthDetails() { + eventGuids_ = com.google.protobuf.GeneratedMessageLite.emptyProtobufList(); + eventBatchGuids_ = com.google.protobuf.GeneratedMessageLite.emptyProtobufList(); + } + public static final int EVENT_GUIDS_FIELD_NUMBER = 1; + private com.google.protobuf.Internal.ProtobufList eventGuids_; + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @return A list containing the eventGuids. + */ + @Override + public java.util.List getEventGuidsList() { + return eventGuids_; + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @return The count of eventGuids. + */ + @Override + public int getEventGuidsCount() { + return eventGuids_.size(); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param index The index of the element to return. + * @return The eventGuids at the given index. + */ + @Override + public String getEventGuids(int index) { + return eventGuids_.get(index); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param index The index of the value to return. + * @return The bytes of the eventGuids at the given index. + */ + @Override + public com.google.protobuf.ByteString + getEventGuidsBytes(int index) { + return com.google.protobuf.ByteString.copyFromUtf8( + eventGuids_.get(index)); + } + private void ensureEventGuidsIsMutable() { + com.google.protobuf.Internal.ProtobufList tmp = + eventGuids_; if (!tmp.isModifiable()) { + eventGuids_ = + com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp); + } + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param index The index to set the value at. + * @param value The eventGuids to set. + */ + private void setEventGuids( + int index, String value) { + Class valueClass = value.getClass(); + ensureEventGuidsIsMutable(); + eventGuids_.set(index, value); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param value The eventGuids to add. + */ + private void addEventGuids( + String value) { + Class valueClass = value.getClass(); + ensureEventGuidsIsMutable(); + eventGuids_.add(value); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param values The eventGuids to add. + */ + private void addAllEventGuids( + Iterable values) { + ensureEventGuidsIsMutable(); + com.google.protobuf.AbstractMessageLite.addAll( + values, eventGuids_); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + */ + private void clearEventGuids() { + eventGuids_ = com.google.protobuf.GeneratedMessageLite.emptyProtobufList(); + } + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param value The bytes of the eventGuids to add. + */ + private void addEventGuidsBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + ensureEventGuidsIsMutable(); + eventGuids_.add(value.toStringUtf8()); + } + + public static final int EVENT_BATCH_GUIDS_FIELD_NUMBER = 2; + private com.google.protobuf.Internal.ProtobufList eventBatchGuids_; + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @return A list containing the eventBatchGuids. + */ + @Override + public java.util.List getEventBatchGuidsList() { + return eventBatchGuids_; + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @return The count of eventBatchGuids. + */ + @Override + public int getEventBatchGuidsCount() { + return eventBatchGuids_.size(); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the element to return. + * @return The eventBatchGuids at the given index. + */ + @Override + public String getEventBatchGuids(int index) { + return eventBatchGuids_.get(index); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the value to return. + * @return The bytes of the eventBatchGuids at the given index. + */ + @Override + public com.google.protobuf.ByteString + getEventBatchGuidsBytes(int index) { + return com.google.protobuf.ByteString.copyFromUtf8( + eventBatchGuids_.get(index)); + } + private void ensureEventBatchGuidsIsMutable() { + com.google.protobuf.Internal.ProtobufList tmp = + eventBatchGuids_; if (!tmp.isModifiable()) { + eventBatchGuids_ = + com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp); + } + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index to set the value at. + * @param value The eventBatchGuids to set. + */ + private void setEventBatchGuids( + int index, String value) { + Class valueClass = value.getClass(); + ensureEventBatchGuidsIsMutable(); + eventBatchGuids_.set(index, value); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param value The eventBatchGuids to add. + */ + private void addEventBatchGuids( + String value) { + Class valueClass = value.getClass(); + ensureEventBatchGuidsIsMutable(); + eventBatchGuids_.add(value); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param values The eventBatchGuids to add. + */ + private void addAllEventBatchGuids( + Iterable values) { + ensureEventBatchGuidsIsMutable(); + com.google.protobuf.AbstractMessageLite.addAll( + values, eventBatchGuids_); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + */ + private void clearEventBatchGuids() { + eventBatchGuids_ = com.google.protobuf.GeneratedMessageLite.emptyProtobufList(); + } + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param value The bytes of the eventBatchGuids to add. + */ + private void addEventBatchGuidsBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + ensureEventBatchGuidsIsMutable(); + eventBatchGuids_.add(value.toStringUtf8()); + } + + public static HealthDetails parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthDetails parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthDetails parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthDetails parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthDetails parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthDetails parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthDetails parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static HealthDetails parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static HealthDetails parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static HealthDetails parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static HealthDetails parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static HealthDetails parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(HealthDetails prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthDetails} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + HealthDetails, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthDetails) + HealthDetailsOrBuilder { + // Construct using clickstream.health.proto.HealthDetails.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @return A list containing the eventGuids. + */ + @Override + public java.util.List + getEventGuidsList() { + return java.util.Collections.unmodifiableList( + instance.getEventGuidsList()); + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @return The count of eventGuids. + */ + @Override + public int getEventGuidsCount() { + return instance.getEventGuidsCount(); + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param index The index of the element to return. + * @return The eventGuids at the given index. + */ + @Override + public String getEventGuids(int index) { + return instance.getEventGuids(index); + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param index The index of the value to return. + * @return The bytes of the eventGuids at the given index. + */ + @Override + public com.google.protobuf.ByteString + getEventGuidsBytes(int index) { + return instance.getEventGuidsBytes(index); + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param index The index to set the value at. + * @param value The eventGuids to set. + * @return This builder for chaining. + */ + public Builder setEventGuids( + int index, String value) { + copyOnWrite(); + instance.setEventGuids(index, value); + return this; + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param value The eventGuids to add. + * @return This builder for chaining. + */ + public Builder addEventGuids( + String value) { + copyOnWrite(); + instance.addEventGuids(value); + return this; + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param values The eventGuids to add. + * @return This builder for chaining. + */ + public Builder addAllEventGuids( + Iterable values) { + copyOnWrite(); + instance.addAllEventGuids(values); + return this; + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @return This builder for chaining. + */ + public Builder clearEventGuids() { + copyOnWrite(); + instance.clearEventGuids(); + return this; + } + /** + *
+     * Array of event guids.
+     * 
+ * + * repeated string event_guids = 1; + * @param value The bytes of the eventGuids to add. + * @return This builder for chaining. + */ + public Builder addEventGuidsBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.addEventGuidsBytes(value); + return this; + } + + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @return A list containing the eventBatchGuids. + */ + @Override + public java.util.List + getEventBatchGuidsList() { + return java.util.Collections.unmodifiableList( + instance.getEventBatchGuidsList()); + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @return The count of eventBatchGuids. + */ + @Override + public int getEventBatchGuidsCount() { + return instance.getEventBatchGuidsCount(); + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the element to return. + * @return The eventBatchGuids at the given index. + */ + @Override + public String getEventBatchGuids(int index) { + return instance.getEventBatchGuids(index); + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the value to return. + * @return The bytes of the eventBatchGuids at the given index. + */ + @Override + public com.google.protobuf.ByteString + getEventBatchGuidsBytes(int index) { + return instance.getEventBatchGuidsBytes(index); + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index to set the value at. + * @param value The eventBatchGuids to set. + * @return This builder for chaining. + */ + public Builder setEventBatchGuids( + int index, String value) { + copyOnWrite(); + instance.setEventBatchGuids(index, value); + return this; + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param value The eventBatchGuids to add. + * @return This builder for chaining. + */ + public Builder addEventBatchGuids( + String value) { + copyOnWrite(); + instance.addEventBatchGuids(value); + return this; + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param values The eventBatchGuids to add. + * @return This builder for chaining. + */ + public Builder addAllEventBatchGuids( + Iterable values) { + copyOnWrite(); + instance.addAllEventBatchGuids(values); + return this; + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @return This builder for chaining. + */ + public Builder clearEventBatchGuids() { + copyOnWrite(); + instance.clearEventBatchGuids(); + return this; + } + /** + *
+     * Array of event batch guids.
+     * 
+ * + * repeated string event_batch_guids = 2; + * @param value The bytes of the eventBatchGuids to add. + * @return This builder for chaining. + */ + public Builder addEventBatchGuidsBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.addEventBatchGuidsBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthDetails) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new HealthDetails(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "eventGuids_", + "eventBatchGuids_", + }; + String info = + "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0002\u0000\u0001\u021a\u0002\u021a" + + ""; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (HealthDetails.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthDetails) + private static final HealthDetails DEFAULT_INSTANCE; + static { + HealthDetails defaultInstance = new HealthDetails(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + HealthDetails.class, defaultInstance); + } + + public static HealthDetails getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetailsOrBuilder.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetailsOrBuilder.java new file mode 100644 index 00000000..67d1d170 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthDetailsOrBuilder.java @@ -0,0 +1,91 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Health.proto + +package clickstream.health.proto; + +public interface HealthDetailsOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthDetails) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @return A list containing the eventGuids. + */ + java.util.List + getEventGuidsList(); + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @return The count of eventGuids. + */ + int getEventGuidsCount(); + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param index The index of the element to return. + * @return The eventGuids at the given index. + */ + String getEventGuids(int index); + /** + *
+   * Array of event guids.
+   * 
+ * + * repeated string event_guids = 1; + * @param index The index of the element to return. + * @return The eventGuids at the given index. + */ + com.google.protobuf.ByteString + getEventGuidsBytes(int index); + + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @return A list containing the eventBatchGuids. + */ + java.util.List + getEventBatchGuidsList(); + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @return The count of eventBatchGuids. + */ + int getEventBatchGuidsCount(); + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the element to return. + * @return The eventBatchGuids at the given index. + */ + String getEventBatchGuids(int index); + /** + *
+   * Array of event batch guids.
+   * 
+ * + * repeated string event_batch_guids = 2; + * @param index The index of the element to return. + * @return The eventBatchGuids at the given index. + */ + com.google.protobuf.ByteString + getEventBatchGuidsBytes(int index); +} diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMeta.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMeta.java new file mode 100644 index 00000000..7e6112aa --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMeta.java @@ -0,0 +1,2838 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HealthMeta.proto + +package clickstream.health.proto; + +/** + * Protobuf type {@code clickstream.health.proto.HealthMeta} + */ +public final class HealthMeta extends + com.google.protobuf.GeneratedMessageLite< + HealthMeta, HealthMeta.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta) + HealthMetaOrBuilder { + private HealthMeta() { + eventGuid_ = ""; + } + public interface AppOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta.App) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * string version = 1; + * @return The version. + */ + String getVersion(); + /** + * string version = 1; + * @return The bytes for version. + */ + com.google.protobuf.ByteString + getVersionBytes(); + } + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.App} + */ + public static final class App extends + com.google.protobuf.GeneratedMessageLite< + App, App.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta.App) + AppOrBuilder { + private App() { + version_ = ""; + } + public static final int VERSION_FIELD_NUMBER = 1; + private String version_; + /** + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return version_; + } + /** + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(version_); + } + /** + * string version = 1; + * @param value The version to set. + */ + private void setVersion( + String value) { + Class valueClass = value.getClass(); + + version_ = value; + } + /** + * string version = 1; + */ + private void clearVersion() { + + version_ = getDefaultInstance().getVersion(); + } + /** + * string version = 1; + * @param value The bytes for version to set. + */ + private void setVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + version_ = value.toStringUtf8(); + + } + + public static App parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static App parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(App prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.App} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + App, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta.App) + AppOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.App.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return instance.getVersion(); + } + /** + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return instance.getVersionBytes(); + } + /** + * string version = 1; + * @param value The version to set. + * @return This builder for chaining. + */ + public Builder setVersion( + String value) { + copyOnWrite(); + instance.setVersion(value); + return this; + } + /** + * string version = 1; + * @return This builder for chaining. + */ + public Builder clearVersion() { + copyOnWrite(); + instance.clearVersion(); + return this; + } + /** + * string version = 1; + * @param value The bytes for version to set. + * @return This builder for chaining. + */ + public Builder setVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setVersionBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta.App) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new App(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "version_", + }; + String info = + "\u0000\u0001\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0001\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (App.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta.App) + private static final App DEFAULT_INSTANCE; + static { + App defaultInstance = new App(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + App.class, defaultInstance); + } + + public static App getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } + } + + public interface CustomerOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta.Customer) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * string signed_up_country = 1; + * @return The signedUpCountry. + */ + String getSignedUpCountry(); + /** + * string signed_up_country = 1; + * @return The bytes for signedUpCountry. + */ + com.google.protobuf.ByteString + getSignedUpCountryBytes(); + + /** + * string current_country = 2; + * @return The currentCountry. + */ + String getCurrentCountry(); + /** + * string current_country = 2; + * @return The bytes for currentCountry. + */ + com.google.protobuf.ByteString + getCurrentCountryBytes(); + + /** + * int32 identity = 3; + * @return The identity. + */ + int getIdentity(); + + /** + * string email = 4; + * @return The email. + */ + String getEmail(); + /** + * string email = 4; + * @return The bytes for email. + */ + com.google.protobuf.ByteString + getEmailBytes(); + } + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Customer} + */ + public static final class Customer extends + com.google.protobuf.GeneratedMessageLite< + Customer, Customer.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta.Customer) + CustomerOrBuilder { + private Customer() { + signedUpCountry_ = ""; + currentCountry_ = ""; + email_ = ""; + } + public static final int SIGNED_UP_COUNTRY_FIELD_NUMBER = 1; + private String signedUpCountry_; + /** + * string signed_up_country = 1; + * @return The signedUpCountry. + */ + @Override + public String getSignedUpCountry() { + return signedUpCountry_; + } + /** + * string signed_up_country = 1; + * @return The bytes for signedUpCountry. + */ + @Override + public com.google.protobuf.ByteString + getSignedUpCountryBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(signedUpCountry_); + } + /** + * string signed_up_country = 1; + * @param value The signedUpCountry to set. + */ + private void setSignedUpCountry( + String value) { + Class valueClass = value.getClass(); + + signedUpCountry_ = value; + } + /** + * string signed_up_country = 1; + */ + private void clearSignedUpCountry() { + + signedUpCountry_ = getDefaultInstance().getSignedUpCountry(); + } + /** + * string signed_up_country = 1; + * @param value The bytes for signedUpCountry to set. + */ + private void setSignedUpCountryBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + signedUpCountry_ = value.toStringUtf8(); + + } + + public static final int CURRENT_COUNTRY_FIELD_NUMBER = 2; + private String currentCountry_; + /** + * string current_country = 2; + * @return The currentCountry. + */ + @Override + public String getCurrentCountry() { + return currentCountry_; + } + /** + * string current_country = 2; + * @return The bytes for currentCountry. + */ + @Override + public com.google.protobuf.ByteString + getCurrentCountryBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(currentCountry_); + } + /** + * string current_country = 2; + * @param value The currentCountry to set. + */ + private void setCurrentCountry( + String value) { + Class valueClass = value.getClass(); + + currentCountry_ = value; + } + /** + * string current_country = 2; + */ + private void clearCurrentCountry() { + + currentCountry_ = getDefaultInstance().getCurrentCountry(); + } + /** + * string current_country = 2; + * @param value The bytes for currentCountry to set. + */ + private void setCurrentCountryBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + currentCountry_ = value.toStringUtf8(); + + } + + public static final int IDENTITY_FIELD_NUMBER = 3; + private int identity_; + /** + * int32 identity = 3; + * @return The identity. + */ + @Override + public int getIdentity() { + return identity_; + } + /** + * int32 identity = 3; + * @param value The identity to set. + */ + private void setIdentity(int value) { + + identity_ = value; + } + /** + * int32 identity = 3; + */ + private void clearIdentity() { + + identity_ = 0; + } + + public static final int EMAIL_FIELD_NUMBER = 4; + private String email_; + /** + * string email = 4; + * @return The email. + */ + @Override + public String getEmail() { + return email_; + } + /** + * string email = 4; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(email_); + } + /** + * string email = 4; + * @param value The email to set. + */ + private void setEmail( + String value) { + Class valueClass = value.getClass(); + + email_ = value; + } + /** + * string email = 4; + */ + private void clearEmail() { + + email_ = getDefaultInstance().getEmail(); + } + /** + * string email = 4; + * @param value The bytes for email to set. + */ + private void setEmailBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + email_ = value.toStringUtf8(); + + } + + public static Customer parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Customer parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Customer parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Customer parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Customer parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Customer parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Customer parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Customer parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Customer parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Customer parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Customer parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Customer parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Customer prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Customer} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Customer, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta.Customer) + CustomerOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.Customer.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * string signed_up_country = 1; + * @return The signedUpCountry. + */ + @Override + public String getSignedUpCountry() { + return instance.getSignedUpCountry(); + } + /** + * string signed_up_country = 1; + * @return The bytes for signedUpCountry. + */ + @Override + public com.google.protobuf.ByteString + getSignedUpCountryBytes() { + return instance.getSignedUpCountryBytes(); + } + /** + * string signed_up_country = 1; + * @param value The signedUpCountry to set. + * @return This builder for chaining. + */ + public Builder setSignedUpCountry( + String value) { + copyOnWrite(); + instance.setSignedUpCountry(value); + return this; + } + /** + * string signed_up_country = 1; + * @return This builder for chaining. + */ + public Builder clearSignedUpCountry() { + copyOnWrite(); + instance.clearSignedUpCountry(); + return this; + } + /** + * string signed_up_country = 1; + * @param value The bytes for signedUpCountry to set. + * @return This builder for chaining. + */ + public Builder setSignedUpCountryBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setSignedUpCountryBytes(value); + return this; + } + + /** + * string current_country = 2; + * @return The currentCountry. + */ + @Override + public String getCurrentCountry() { + return instance.getCurrentCountry(); + } + /** + * string current_country = 2; + * @return The bytes for currentCountry. + */ + @Override + public com.google.protobuf.ByteString + getCurrentCountryBytes() { + return instance.getCurrentCountryBytes(); + } + /** + * string current_country = 2; + * @param value The currentCountry to set. + * @return This builder for chaining. + */ + public Builder setCurrentCountry( + String value) { + copyOnWrite(); + instance.setCurrentCountry(value); + return this; + } + /** + * string current_country = 2; + * @return This builder for chaining. + */ + public Builder clearCurrentCountry() { + copyOnWrite(); + instance.clearCurrentCountry(); + return this; + } + /** + * string current_country = 2; + * @param value The bytes for currentCountry to set. + * @return This builder for chaining. + */ + public Builder setCurrentCountryBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setCurrentCountryBytes(value); + return this; + } + + /** + * int32 identity = 3; + * @return The identity. + */ + @Override + public int getIdentity() { + return instance.getIdentity(); + } + /** + * int32 identity = 3; + * @param value The identity to set. + * @return This builder for chaining. + */ + public Builder setIdentity(int value) { + copyOnWrite(); + instance.setIdentity(value); + return this; + } + /** + * int32 identity = 3; + * @return This builder for chaining. + */ + public Builder clearIdentity() { + copyOnWrite(); + instance.clearIdentity(); + return this; + } + + /** + * string email = 4; + * @return The email. + */ + @Override + public String getEmail() { + return instance.getEmail(); + } + /** + * string email = 4; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return instance.getEmailBytes(); + } + /** + * string email = 4; + * @param value The email to set. + * @return This builder for chaining. + */ + public Builder setEmail( + String value) { + copyOnWrite(); + instance.setEmail(value); + return this; + } + /** + * string email = 4; + * @return This builder for chaining. + */ + public Builder clearEmail() { + copyOnWrite(); + instance.clearEmail(); + return this; + } + /** + * string email = 4; + * @param value The bytes for email to set. + * @return This builder for chaining. + */ + public Builder setEmailBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEmailBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta.Customer) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Customer(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "signedUpCountry_", + "currentCountry_", + "identity_", + "email_", + }; + String info = + "\u0000\u0004\u0000\u0000\u0001\u0004\u0004\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + "\u0003\u0004\u0004\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Customer.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta.Customer) + private static final Customer DEFAULT_INSTANCE; + static { + Customer defaultInstance = new Customer(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Customer.class, defaultInstance); + } + + public static Customer getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } + } + + public interface DeviceOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta.Device) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * string operating_system = 1; + * @return The operatingSystem. + */ + String getOperatingSystem(); + /** + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + com.google.protobuf.ByteString + getOperatingSystemBytes(); + + /** + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + String getOperatingSystemVersion(); + /** + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + com.google.protobuf.ByteString + getOperatingSystemVersionBytes(); + + /** + * string device_make = 3; + * @return The deviceMake. + */ + String getDeviceMake(); + /** + * string device_make = 3; + * @return The bytes for deviceMake. + */ + com.google.protobuf.ByteString + getDeviceMakeBytes(); + + /** + * string device_model = 4; + * @return The deviceModel. + */ + String getDeviceModel(); + /** + * string device_model = 4; + * @return The bytes for deviceModel. + */ + com.google.protobuf.ByteString + getDeviceModelBytes(); + } + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Device} + */ + public static final class Device extends + com.google.protobuf.GeneratedMessageLite< + Device, Device.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta.Device) + DeviceOrBuilder { + private Device() { + operatingSystem_ = ""; + operatingSystemVersion_ = ""; + deviceMake_ = ""; + deviceModel_ = ""; + } + public static final int OPERATING_SYSTEM_FIELD_NUMBER = 1; + private String operatingSystem_; + /** + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return operatingSystem_; + } + /** + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystem_); + } + /** + * string operating_system = 1; + * @param value The operatingSystem to set. + */ + private void setOperatingSystem( + String value) { + Class valueClass = value.getClass(); + + operatingSystem_ = value; + } + /** + * string operating_system = 1; + */ + private void clearOperatingSystem() { + + operatingSystem_ = getDefaultInstance().getOperatingSystem(); + } + /** + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + */ + private void setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystem_ = value.toStringUtf8(); + + } + + public static final int OPERATING_SYSTEM_VERSION_FIELD_NUMBER = 2; + private String operatingSystemVersion_; + /** + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return operatingSystemVersion_; + } + /** + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystemVersion_); + } + /** + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + */ + private void setOperatingSystemVersion( + String value) { + Class valueClass = value.getClass(); + + operatingSystemVersion_ = value; + } + /** + * string operating_system_version = 2; + */ + private void clearOperatingSystemVersion() { + + operatingSystemVersion_ = getDefaultInstance().getOperatingSystemVersion(); + } + /** + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + */ + private void setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystemVersion_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MAKE_FIELD_NUMBER = 3; + private String deviceMake_; + /** + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return deviceMake_; + } + /** + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceMake_); + } + /** + * string device_make = 3; + * @param value The deviceMake to set. + */ + private void setDeviceMake( + String value) { + Class valueClass = value.getClass(); + + deviceMake_ = value; + } + /** + * string device_make = 3; + */ + private void clearDeviceMake() { + + deviceMake_ = getDefaultInstance().getDeviceMake(); + } + /** + * string device_make = 3; + * @param value The bytes for deviceMake to set. + */ + private void setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceMake_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MODEL_FIELD_NUMBER = 4; + private String deviceModel_; + /** + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return deviceModel_; + } + /** + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceModel_); + } + /** + * string device_model = 4; + * @param value The deviceModel to set. + */ + private void setDeviceModel( + String value) { + Class valueClass = value.getClass(); + + deviceModel_ = value; + } + /** + * string device_model = 4; + */ + private void clearDeviceModel() { + + deviceModel_ = getDefaultInstance().getDeviceModel(); + } + /** + * string device_model = 4; + * @param value The bytes for deviceModel to set. + */ + private void setDeviceModelBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceModel_ = value.toStringUtf8(); + + } + + public static Device parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Device parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Device prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Device} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Device, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta.Device) + DeviceOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.Device.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return instance.getOperatingSystem(); + } + /** + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return instance.getOperatingSystemBytes(); + } + /** + * string operating_system = 1; + * @param value The operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystem( + String value) { + copyOnWrite(); + instance.setOperatingSystem(value); + return this; + } + /** + * string operating_system = 1; + * @return This builder for chaining. + */ + public Builder clearOperatingSystem() { + copyOnWrite(); + instance.clearOperatingSystem(); + return this; + } + /** + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemBytes(value); + return this; + } + + /** + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return instance.getOperatingSystemVersion(); + } + /** + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return instance.getOperatingSystemVersionBytes(); + } + /** + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersion( + String value) { + copyOnWrite(); + instance.setOperatingSystemVersion(value); + return this; + } + /** + * string operating_system_version = 2; + * @return This builder for chaining. + */ + public Builder clearOperatingSystemVersion() { + copyOnWrite(); + instance.clearOperatingSystemVersion(); + return this; + } + /** + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemVersionBytes(value); + return this; + } + + /** + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return instance.getDeviceMake(); + } + /** + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return instance.getDeviceMakeBytes(); + } + /** + * string device_make = 3; + * @param value The deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMake( + String value) { + copyOnWrite(); + instance.setDeviceMake(value); + return this; + } + /** + * string device_make = 3; + * @return This builder for chaining. + */ + public Builder clearDeviceMake() { + copyOnWrite(); + instance.clearDeviceMake(); + return this; + } + /** + * string device_make = 3; + * @param value The bytes for deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceMakeBytes(value); + return this; + } + + /** + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return instance.getDeviceModel(); + } + /** + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return instance.getDeviceModelBytes(); + } + /** + * string device_model = 4; + * @param value The deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModel( + String value) { + copyOnWrite(); + instance.setDeviceModel(value); + return this; + } + /** + * string device_model = 4; + * @return This builder for chaining. + */ + public Builder clearDeviceModel() { + copyOnWrite(); + instance.clearDeviceModel(); + return this; + } + /** + * string device_model = 4; + * @param value The bytes for deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModelBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceModelBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta.Device) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Device(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "operatingSystem_", + "operatingSystemVersion_", + "deviceMake_", + "deviceModel_", + }; + String info = + "\u0000\u0004\u0000\u0000\u0001\u0004\u0004\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + "\u0003\u0208\u0004\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Device.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta.Device) + private static final Device DEFAULT_INSTANCE; + static { + Device defaultInstance = new Device(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Device.class, defaultInstance); + } + + public static Device getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } + } + + public interface LocationOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta.Location) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * double latitude = 1; + * @return The latitude. + */ + double getLatitude(); + + /** + * double longitude = 2; + * @return The longitude. + */ + double getLongitude(); + } + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Location} + */ + public static final class Location extends + com.google.protobuf.GeneratedMessageLite< + Location, Location.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta.Location) + LocationOrBuilder { + private Location() { + } + public static final int LATITUDE_FIELD_NUMBER = 1; + private double latitude_; + /** + * double latitude = 1; + * @return The latitude. + */ + @Override + public double getLatitude() { + return latitude_; + } + /** + * double latitude = 1; + * @param value The latitude to set. + */ + private void setLatitude(double value) { + + latitude_ = value; + } + /** + * double latitude = 1; + */ + private void clearLatitude() { + + latitude_ = 0D; + } + + public static final int LONGITUDE_FIELD_NUMBER = 2; + private double longitude_; + /** + * double longitude = 2; + * @return The longitude. + */ + @Override + public double getLongitude() { + return longitude_; + } + /** + * double longitude = 2; + * @param value The longitude to set. + */ + private void setLongitude(double value) { + + longitude_ = value; + } + /** + * double longitude = 2; + */ + private void clearLongitude() { + + longitude_ = 0D; + } + + public static Location parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Location parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Location parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Location parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Location parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Location parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Location parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Location parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Location parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Location parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Location parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Location parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Location prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Location} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Location, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta.Location) + LocationOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.Location.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * double latitude = 1; + * @return The latitude. + */ + @Override + public double getLatitude() { + return instance.getLatitude(); + } + /** + * double latitude = 1; + * @param value The latitude to set. + * @return This builder for chaining. + */ + public Builder setLatitude(double value) { + copyOnWrite(); + instance.setLatitude(value); + return this; + } + /** + * double latitude = 1; + * @return This builder for chaining. + */ + public Builder clearLatitude() { + copyOnWrite(); + instance.clearLatitude(); + return this; + } + + /** + * double longitude = 2; + * @return The longitude. + */ + @Override + public double getLongitude() { + return instance.getLongitude(); + } + /** + * double longitude = 2; + * @param value The longitude to set. + * @return This builder for chaining. + */ + public Builder setLongitude(double value) { + copyOnWrite(); + instance.setLongitude(value); + return this; + } + /** + * double longitude = 2; + * @return This builder for chaining. + */ + public Builder clearLongitude() { + copyOnWrite(); + instance.clearLongitude(); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta.Location) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Location(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "latitude_", + "longitude_", + }; + String info = + "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0000\u0002\u0000" + + ""; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Location.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta.Location) + private static final Location DEFAULT_INSTANCE; + static { + Location defaultInstance = new Location(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Location.class, defaultInstance); + } + + public static Location getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } + } + + public interface SessionOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta.Session) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * string session_id = 1; + * @return The sessionId. + */ + String getSessionId(); + /** + * string session_id = 1; + * @return The bytes for sessionId. + */ + com.google.protobuf.ByteString + getSessionIdBytes(); + } + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Session} + */ + public static final class Session extends + com.google.protobuf.GeneratedMessageLite< + Session, Session.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.health.proto.HealthMeta.Session) + SessionOrBuilder { + private Session() { + sessionId_ = ""; + } + public static final int SESSION_ID_FIELD_NUMBER = 1; + private String sessionId_; + /** + * string session_id = 1; + * @return The sessionId. + */ + @Override + public String getSessionId() { + return sessionId_; + } + /** + * string session_id = 1; + * @return The bytes for sessionId. + */ + @Override + public com.google.protobuf.ByteString + getSessionIdBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(sessionId_); + } + /** + * string session_id = 1; + * @param value The sessionId to set. + */ + private void setSessionId( + String value) { + Class valueClass = value.getClass(); + + sessionId_ = value; + } + /** + * string session_id = 1; + */ + private void clearSessionId() { + + sessionId_ = getDefaultInstance().getSessionId(); + } + /** + * string session_id = 1; + * @param value The bytes for sessionId to set. + */ + private void setSessionIdBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + sessionId_ = value.toStringUtf8(); + + } + + public static Session parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Session parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Session parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Session parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Session parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Session parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Session parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Session parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Session parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Session parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Session parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Session parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Session prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta.Session} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Session, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta.Session) + SessionOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.Session.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * string session_id = 1; + * @return The sessionId. + */ + @Override + public String getSessionId() { + return instance.getSessionId(); + } + /** + * string session_id = 1; + * @return The bytes for sessionId. + */ + @Override + public com.google.protobuf.ByteString + getSessionIdBytes() { + return instance.getSessionIdBytes(); + } + /** + * string session_id = 1; + * @param value The sessionId to set. + * @return This builder for chaining. + */ + public Builder setSessionId( + String value) { + copyOnWrite(); + instance.setSessionId(value); + return this; + } + /** + * string session_id = 1; + * @return This builder for chaining. + */ + public Builder clearSessionId() { + copyOnWrite(); + instance.clearSessionId(); + return this; + } + /** + * string session_id = 1; + * @param value The bytes for sessionId to set. + * @return This builder for chaining. + */ + public Builder setSessionIdBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setSessionIdBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta.Session) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Session(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "sessionId_", + }; + String info = + "\u0000\u0001\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0001\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Session.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta.Session) + private static final Session DEFAULT_INSTANCE; + static { + Session defaultInstance = new Session(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Session.class, defaultInstance); + } + + public static Session getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } + } + + public static final int EVENT_GUID_FIELD_NUMBER = 1; + private String eventGuid_; + /** + * string event_guid = 1; + * @return The eventGuid. + */ + @Override + public String getEventGuid() { + return eventGuid_; + } + /** + * string event_guid = 1; + * @return The bytes for eventGuid. + */ + @Override + public com.google.protobuf.ByteString + getEventGuidBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(eventGuid_); + } + /** + * string event_guid = 1; + * @param value The eventGuid to set. + */ + private void setEventGuid( + String value) { + Class valueClass = value.getClass(); + + eventGuid_ = value; + } + /** + * string event_guid = 1; + */ + private void clearEventGuid() { + + eventGuid_ = getDefaultInstance().getEventGuid(); + } + /** + * string event_guid = 1; + * @param value The bytes for eventGuid to set. + */ + private void setEventGuidBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + eventGuid_ = value.toStringUtf8(); + + } + + public static final int LOCATION_FIELD_NUMBER = 4; + private Location location_; + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + @Override + public boolean hasLocation() { + return location_ != null; + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + @Override + public Location getLocation() { + return location_ == null ? Location.getDefaultInstance() : location_; + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + private void setLocation(Location value) { + value.getClass(); + location_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeLocation(Location value) { + value.getClass(); + if (location_ != null && + location_ != Location.getDefaultInstance()) { + location_ = + Location.newBuilder(location_).mergeFrom(value).buildPartial(); + } else { + location_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + private void clearLocation() { location_ = null; + + } + + public static final int CUSTOMER_FIELD_NUMBER = 5; + private Customer customer_; + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + @Override + public boolean hasCustomer() { + return customer_ != null; + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + @Override + public Customer getCustomer() { + return customer_ == null ? Customer.getDefaultInstance() : customer_; + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + private void setCustomer(Customer value) { + value.getClass(); + customer_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeCustomer(Customer value) { + value.getClass(); + if (customer_ != null && + customer_ != Customer.getDefaultInstance()) { + customer_ = + Customer.newBuilder(customer_).mergeFrom(value).buildPartial(); + } else { + customer_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + private void clearCustomer() { customer_ = null; + + } + + public static final int DEVICE_FIELD_NUMBER = 6; + private Device device_; + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + @Override + public boolean hasDevice() { + return device_ != null; + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + @Override + public Device getDevice() { + return device_ == null ? Device.getDefaultInstance() : device_; + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + private void setDevice(Device value) { + value.getClass(); + device_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDevice(Device value) { + value.getClass(); + if (device_ != null && + device_ != Device.getDefaultInstance()) { + device_ = + Device.newBuilder(device_).mergeFrom(value).buildPartial(); + } else { + device_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + private void clearDevice() { device_ = null; + + } + + public static final int SESSION_FIELD_NUMBER = 7; + private Session session_; + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + @Override + public boolean hasSession() { + return session_ != null; + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + @Override + public Session getSession() { + return session_ == null ? Session.getDefaultInstance() : session_; + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + private void setSession(Session value) { + value.getClass(); + session_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeSession(Session value) { + value.getClass(); + if (session_ != null && + session_ != Session.getDefaultInstance()) { + session_ = + Session.newBuilder(session_).mergeFrom(value).buildPartial(); + } else { + session_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + private void clearSession() { session_ = null; + + } + + public static final int APP_FIELD_NUMBER = 8; + private App app_; + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + @Override + public boolean hasApp() { + return app_ != null; + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + @Override + public App getApp() { + return app_ == null ? App.getDefaultInstance() : app_; + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + private void setApp(App value) { + value.getClass(); + app_ = value; + + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeApp(App value) { + value.getClass(); + if (app_ != null && + app_ != App.getDefaultInstance()) { + app_ = + App.newBuilder(app_).mergeFrom(value).buildPartial(); + } else { + app_ = value; + } + + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + private void clearApp() { app_ = null; + + } + + public static HealthMeta parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthMeta parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthMeta parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthMeta parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthMeta parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static HealthMeta parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static HealthMeta parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static HealthMeta parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static HealthMeta parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static HealthMeta parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static HealthMeta parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static HealthMeta parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(HealthMeta prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code clickstream.health.proto.HealthMeta} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + HealthMeta, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.health.proto.HealthMeta) + HealthMetaOrBuilder { + // Construct using clickstream.health.proto.HealthMeta.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + * string event_guid = 1; + * @return The eventGuid. + */ + @Override + public String getEventGuid() { + return instance.getEventGuid(); + } + /** + * string event_guid = 1; + * @return The bytes for eventGuid. + */ + @Override + public com.google.protobuf.ByteString + getEventGuidBytes() { + return instance.getEventGuidBytes(); + } + /** + * string event_guid = 1; + * @param value The eventGuid to set. + * @return This builder for chaining. + */ + public Builder setEventGuid( + String value) { + copyOnWrite(); + instance.setEventGuid(value); + return this; + } + /** + * string event_guid = 1; + * @return This builder for chaining. + */ + public Builder clearEventGuid() { + copyOnWrite(); + instance.clearEventGuid(); + return this; + } + /** + * string event_guid = 1; + * @param value The bytes for eventGuid to set. + * @return This builder for chaining. + */ + public Builder setEventGuidBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEventGuidBytes(value); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + @Override + public boolean hasLocation() { + return instance.hasLocation(); + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + @Override + public Location getLocation() { + return instance.getLocation(); + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + public Builder setLocation(Location value) { + copyOnWrite(); + instance.setLocation(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + public Builder setLocation( + Location.Builder builderForValue) { + copyOnWrite(); + instance.setLocation(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + public Builder mergeLocation(Location value) { + copyOnWrite(); + instance.mergeLocation(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + */ + public Builder clearLocation() { copyOnWrite(); + instance.clearLocation(); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + @Override + public boolean hasCustomer() { + return instance.hasCustomer(); + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + @Override + public Customer getCustomer() { + return instance.getCustomer(); + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + public Builder setCustomer(Customer value) { + copyOnWrite(); + instance.setCustomer(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + public Builder setCustomer( + Customer.Builder builderForValue) { + copyOnWrite(); + instance.setCustomer(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + public Builder mergeCustomer(Customer value) { + copyOnWrite(); + instance.mergeCustomer(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + */ + public Builder clearCustomer() { copyOnWrite(); + instance.clearCustomer(); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + @Override + public boolean hasDevice() { + return instance.hasDevice(); + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + @Override + public Device getDevice() { + return instance.getDevice(); + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + public Builder setDevice(Device value) { + copyOnWrite(); + instance.setDevice(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + public Builder setDevice( + Device.Builder builderForValue) { + copyOnWrite(); + instance.setDevice(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + public Builder mergeDevice(Device value) { + copyOnWrite(); + instance.mergeDevice(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + */ + public Builder clearDevice() { copyOnWrite(); + instance.clearDevice(); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + @Override + public boolean hasSession() { + return instance.hasSession(); + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + @Override + public Session getSession() { + return instance.getSession(); + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + public Builder setSession(Session value) { + copyOnWrite(); + instance.setSession(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + public Builder setSession( + Session.Builder builderForValue) { + copyOnWrite(); + instance.setSession(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + public Builder mergeSession(Session value) { + copyOnWrite(); + instance.mergeSession(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + */ + public Builder clearSession() { copyOnWrite(); + instance.clearSession(); + return this; + } + + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + @Override + public boolean hasApp() { + return instance.hasApp(); + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + @Override + public App getApp() { + return instance.getApp(); + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + public Builder setApp(App value) { + copyOnWrite(); + instance.setApp(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + public Builder setApp( + App.Builder builderForValue) { + copyOnWrite(); + instance.setApp(builderForValue.build()); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + public Builder mergeApp(App value) { + copyOnWrite(); + instance.mergeApp(value); + return this; + } + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + */ + public Builder clearApp() { copyOnWrite(); + instance.clearApp(); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.health.proto.HealthMeta) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + com.google.protobuf.GeneratedMessageLite.MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new HealthMeta(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "eventGuid_", + "location_", + "customer_", + "device_", + "session_", + "app_", + }; + String info = + "\u0000\u0006\u0000\u0000\u0001\b\u0006\u0000\u0000\u0000\u0001\u0208\u0004\t\u0005" + + "\t\u0006\t\u0007\t\b\t"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (HealthMeta.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.health.proto.HealthMeta) + private static final HealthMeta DEFAULT_INSTANCE; + static { + HealthMeta defaultInstance = new HealthMeta(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + HealthMeta.class, defaultInstance); + } + + public static HealthMeta getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaOrBuilder.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaOrBuilder.java new file mode 100644 index 00000000..a05ebb05 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaOrBuilder.java @@ -0,0 +1,76 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HealthMeta.proto + +package clickstream.health.proto; + +public interface HealthMetaOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.HealthMeta) + com.google.protobuf.MessageLiteOrBuilder { + + /** + * string event_guid = 1; + * @return The eventGuid. + */ + String getEventGuid(); + /** + * string event_guid = 1; + * @return The bytes for eventGuid. + */ + com.google.protobuf.ByteString + getEventGuidBytes(); + + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + * @return Whether the location field is set. + */ + boolean hasLocation(); + /** + * .clickstream.health.proto.HealthMeta.Location location = 4; + * @return The location. + */ + HealthMeta.Location getLocation(); + + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + * @return Whether the customer field is set. + */ + boolean hasCustomer(); + /** + * .clickstream.health.proto.HealthMeta.Customer customer = 5; + * @return The customer. + */ + HealthMeta.Customer getCustomer(); + + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + * @return Whether the device field is set. + */ + boolean hasDevice(); + /** + * .clickstream.health.proto.HealthMeta.Device device = 6; + * @return The device. + */ + HealthMeta.Device getDevice(); + + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + * @return Whether the session field is set. + */ + boolean hasSession(); + /** + * .clickstream.health.proto.HealthMeta.Session session = 7; + * @return The session. + */ + HealthMeta.Session getSession(); + + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + * @return Whether the app field is set. + */ + boolean hasApp(); + /** + * .clickstream.health.proto.HealthMeta.App app = 8; + * @return The app. + */ + HealthMeta.App getApp(); +} diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaProto.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaProto.java new file mode 100644 index 00000000..9ace1a97 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthMetaProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HealthMeta.proto + +package clickstream.health.proto; + +public final class HealthMetaProto { + private HealthMetaProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthOrBuilder.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthOrBuilder.java new file mode 100644 index 00000000..dae39100 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthOrBuilder.java @@ -0,0 +1,117 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Health.proto + +package clickstream.health.proto; + +public interface HealthOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.health.proto.Health) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @return The eventName. + */ + String getEventName(); + /** + *
+   * Name of the health event.
+   * 
+ * + * string event_name = 1; + * @return The bytes for eventName. + */ + com.google.protobuf.ByteString + getEventNameBytes(); + + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + * @return Whether the healthDetails field is set. + */ + boolean hasHealthDetails(); + /** + *
+   * Health details, captured by the SDK when the mode is verbose.
+   * 
+ * + * .clickstream.health.proto.HealthDetails healthDetails = 2; + * @return The healthDetails. + */ + HealthDetails getHealthDetails(); + + /** + *
+   * Number of events tracked.
+   * 
+ * + * int64 number_of_events = 3; + * @return The numberOfEvents. + */ + long getNumberOfEvents(); + + /** + *
+   * Number of event batches tracked.
+   * 
+ * + * int64 number_of_batches = 4; + * @return The numberOfBatches. + */ + long getNumberOfBatches(); + + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + * @return Whether the eventTimestamp field is set. + */ + boolean hasEventTimestamp(); + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp event_timestamp = 101; + * @return The eventTimestamp. + */ + com.google.protobuf.Timestamp getEventTimestamp(); + + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + * @return Whether the healthMeta field is set. + */ + boolean hasHealthMeta(); + /** + * .clickstream.health.proto.HealthMeta healthMeta = 103; + * @return The healthMeta. + */ + HealthMeta getHealthMeta(); + + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + * @return Whether the deviceTimestamp field is set. + */ + boolean hasDeviceTimestamp(); + /** + *
+   * Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 104; + * @return The deviceTimestamp. + */ + com.google.protobuf.Timestamp getDeviceTimestamp(); +} diff --git a/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthProto.java b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthProto.java new file mode 100644 index 00000000..35ff62f4 --- /dev/null +++ b/clickstream-health-proto/src/main/java/clickstream/health/proto/HealthProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Health.proto + +package clickstream.health.proto; + +public final class HealthProto { + private HealthProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream/build.gradle.kts b/clickstream/build.gradle.kts index 1006cdda..40988de5 100644 --- a/clickstream/build.gradle.kts +++ b/clickstream/build.gradle.kts @@ -35,7 +35,7 @@ android { dependencies { // Clickstream - implementation(files("$rootDir/libs/proto-sdk-1.18.6.jar")) + implementation(projects.clickstreamHealthProto) api(projects.clickstreamLogger) api(projects.clickstreamHealthMetricsNoop) api(projects.clickstreamEventListener) diff --git a/clickstream/src/main/kotlin/clickstream/extension/CSMessageExt.kt b/clickstream/src/main/kotlin/clickstream/extension/CSMessageExt.kt index 9f82c14f..06b1c96d 100644 --- a/clickstream/src/main/kotlin/clickstream/extension/CSMessageExt.kt +++ b/clickstream/src/main/kotlin/clickstream/extension/CSMessageExt.kt @@ -1,7 +1,7 @@ package clickstream.extension -import com.gojek.clickstream.de.Event -import com.gojek.clickstream.internal.Health +import clickstream.health.proto.Health +import clickstream.internal.networklayer.proto.raccoon.Event import com.google.protobuf.Internal.isValidUtf8 import com.google.protobuf.MessageLite import java.lang.reflect.Field diff --git a/clickstream/src/main/kotlin/clickstream/internal/di/CSServiceLocator.kt b/clickstream/src/main/kotlin/clickstream/internal/di/CSServiceLocator.kt index aacccc06..b466ac26 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/di/CSServiceLocator.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/di/CSServiceLocator.kt @@ -19,7 +19,6 @@ import clickstream.lifecycle.CSBackgroundLifecycleManager import clickstream.listener.CSEventListener import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger -import com.gojek.clickstream.internal.Health import com.tinder.scarlet.lifecycle.LifecycleRegistry import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.ExperimentalCoroutinesApi diff --git a/clickstream/src/main/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSMetaProvider.kt b/clickstream/src/main/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSMetaProvider.kt index 566e9f21..458116aa 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSMetaProvider.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSMetaProvider.kt @@ -3,11 +3,7 @@ package clickstream.internal.eventprocessor.impl import clickstream.api.CSInfo import clickstream.api.CSLocationInfo import clickstream.api.CSMetaProvider -import com.gojek.clickstream.internal.HealthMeta.App -import com.gojek.clickstream.internal.HealthMeta.Customer -import com.gojek.clickstream.internal.HealthMeta.Device -import com.gojek.clickstream.internal.HealthMeta.Location -import com.gojek.clickstream.internal.HealthMeta.Session +import clickstream.health.proto.HealthMeta /** * This is the implementation of [CSMetaProvider]. @@ -18,24 +14,24 @@ public class DefaultCSMetaProvider( private val info: CSInfo ) : CSMetaProvider { - override suspend fun location(): Location = + override suspend fun location(): HealthMeta.Location = with(info.locationInfo) { val currentLocation = CSLocationInfo.Location(latitude, longitude) - return@with Location.newBuilder().apply { + return@with HealthMeta.Location.newBuilder().apply { latitude = currentLocation.latitude longitude = currentLocation.longitude }.build() } - override val app: App by lazy { - App.newBuilder().apply { + override val app: HealthMeta.App by lazy { + HealthMeta.App.newBuilder().apply { version = info.appInfo.appVersion }.build() } - override val customer: Customer by lazy { + override val customer: HealthMeta.Customer by lazy { with(info.userInfo) { - Customer.newBuilder() + HealthMeta.Customer.newBuilder() .setSignedUpCountry(signedUpCountry) .setCurrentCountry(currentCountry) .setIdentity(identity) @@ -44,9 +40,9 @@ public class DefaultCSMetaProvider( } } - override val device: Device by lazy { + override val device: HealthMeta.Device by lazy { with(info.deviceInfo) { - Device.newBuilder().apply { + HealthMeta.Device.newBuilder().apply { deviceModel = this@with.getDeviceModel() deviceMake = this@with.getDeviceManufacturer() operatingSystem = this@with.getOperatingSystem() @@ -55,8 +51,8 @@ public class DefaultCSMetaProvider( } } - override val session: Session by lazy { - Session.newBuilder().apply { + override val session: HealthMeta.Session by lazy { + HealthMeta.Session.newBuilder().apply { sessionId = info.sessionInfo.sessionID }.build() } diff --git a/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSBaseEventScheduler.kt b/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSBaseEventScheduler.kt index 3903ed33..09e7a5dc 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSBaseEventScheduler.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSBaseEventScheduler.kt @@ -8,9 +8,11 @@ import clickstream.health.constant.CSEventTypesConstant import clickstream.health.identity.CSGuIdGenerator import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO +import clickstream.health.proto.Health import clickstream.health.time.CSTimeStampGenerator import clickstream.internal.analytics.CSErrorReasons import clickstream.internal.networklayer.CSNetworkManager +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest import clickstream.internal.utils.CSBatteryLevel import clickstream.internal.utils.CSBatteryStatusObserver import clickstream.internal.utils.CSNetworkStatusObserver @@ -21,8 +23,6 @@ import clickstream.lifecycle.CSLifeCycleManager import clickstream.listener.CSEventListener import clickstream.listener.CSEventModel import clickstream.logger.CSLogger -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.internal.Health import com.google.protobuf.MessageLite import java.util.concurrent.CopyOnWriteArrayList import kotlinx.coroutines.CoroutineDispatcher @@ -214,10 +214,10 @@ internal open class CSBaseEventScheduler( healthEventRepository.insertHealthEvent(event) } - protected fun transformToEventRequest(eventData: List): EventRequest { + protected fun transformToEventRequest(eventData: List): SendEventRequest { logger.debug { "CSBaseEventScheduler#transformToEventRequest" } - return EventRequest.newBuilder().apply { + return SendEventRequest.newBuilder().apply { reqGuid = guIdGenerator.getId() sentTime = CSTimeStampMessageBuilder.build(timeStampGenerator.getTimeStamp()) addAllEvents(eventData.map { it.event() }) @@ -229,7 +229,7 @@ internal open class CSBaseEventScheduler( } private suspend fun updateEventsGuidAndInsertToDb( - eventRequest: EventRequest, + eventRequest: SendEventRequest, eventData: List ) { logger.debug { "CSBaseEventScheduler#updateEventsGuidAndInsertToDb" } @@ -277,7 +277,7 @@ internal open class CSBaseEventScheduler( private suspend fun recordEventBatchCreated( batch: List, - eventRequest: EventRequest + eventRequest: SendEventRequest ): String { var eventGuids = "" if (batch.isNotEmpty() && batch[0].messageName != Health::class.qualifiedName.orEmpty()) { diff --git a/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSEventData.kt b/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSEventData.kt index 2fe81be0..e42e4600 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSEventData.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/eventscheduler/CSEventData.kt @@ -5,8 +5,8 @@ import androidx.room.Entity import androidx.room.PrimaryKey import clickstream.extension.eventName import clickstream.health.model.CSEventHealth +import clickstream.internal.networklayer.proto.raccoon.Event import clickstream.model.CSEvent -import com.gojek.clickstream.de.Event import com.google.protobuf.ByteString import com.google.protobuf.MessageLite import java.util.Locale diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSEventService.kt b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSEventService.kt index 8b96523b..9a87445e 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSEventService.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSEventService.kt @@ -1,7 +1,7 @@ package clickstream.internal.networklayer -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import com.tinder.scarlet.WebSocket import com.tinder.scarlet.ws.Receive import com.tinder.scarlet.ws.Send @@ -17,7 +17,7 @@ internal interface CSEventService { * @return Flow<> - Stream of event data containing the ID of successful events */ @Receive - fun observeResponse(): Flow + fun observeResponse(): Flow /** * Observes the socket connection - Opened, closed, IsClosing, Failed, MessageReceived @@ -31,5 +31,5 @@ internal interface CSEventService { * @param streamBatchEvents - The analytic data which is to be sent */ @Send - fun sendEvent(streamBatchEvents: EventRequest): Boolean + fun sendEvent(streamBatchEvents: SendEventRequest): Boolean } diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkManager.kt b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkManager.kt index ab984d15..74baef69 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkManager.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkManager.kt @@ -15,11 +15,11 @@ import clickstream.health.constant.CSEventTypesConstant import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO import clickstream.internal.analytics.CSErrorReasons +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest import clickstream.internal.utils.CSResult import clickstream.lifecycle.CSAppLifeCycle import clickstream.lifecycle.CSLifeCycleManager import clickstream.logger.CSLogger -import com.gojek.clickstream.de.EventRequest import com.tinder.scarlet.WebSocket import java.io.EOFException import java.net.SocketTimeoutException @@ -133,7 +133,7 @@ internal open class CSNetworkManager( * @param eventRequest - The data which hold the analytic events * @param eventGuids - a guid list within string the comma separate "1, 2, 3" */ - fun processEvent(eventRequest: EventRequest, eventGuids: String) { + fun processEvent(eventRequest: SendEventRequest, eventGuids: String) { logger.debug { "CSNetworkManager#processEvent" } networkRepository.sendEvents(eventRequest, eventGuids, callback) @@ -145,7 +145,7 @@ internal open class CSNetworkManager( * @param eventRequest - The data which hold the analytic events */ fun processInstantEvent( - eventRequest: EventRequest + eventRequest: SendEventRequest ) { logger.debug { "CSNetworkManager#processInstantEvent" } networkRepository.sendInstantEvents(eventRequest = eventRequest) diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkRepository.kt b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkRepository.kt index 2ef6deeb..857c8a39 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkRepository.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSNetworkRepository.kt @@ -4,10 +4,10 @@ import clickstream.api.CSInfo import clickstream.config.CSNetworkConfig import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.time.CSTimeStampGenerator +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.internal.utils.CSCallback import clickstream.logger.CSLogger -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.tinder.scarlet.WebSocket import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow @@ -22,7 +22,7 @@ internal interface CSNetworkRepository { * Observes the acknowledgement from the BE * @return Flow<> - Stream of event data containing the ID of successful events */ - public fun observeResponse(): Flow + public fun observeResponse(): Flow /** * Observes the socket connection - Opened, closed, IsClosing, Failed, MessageReceived @@ -35,7 +35,7 @@ internal interface CSNetworkRepository { * @param eventRequest - The analytic data which is to be sent */ public fun sendEvents( - eventRequest: EventRequest, + eventRequest: SendEventRequest, eventGuids: String, callback: CSCallback ) @@ -45,7 +45,7 @@ internal interface CSNetworkRepository { * @param eventRequest - The analytic data which is to be sent */ public fun sendInstantEvents( - eventRequest: EventRequest + eventRequest: SendEventRequest ) } @@ -63,7 +63,7 @@ internal class CSNetworkRepositoryImpl( private val info: CSInfo ) : CSNetworkRepository { - override fun observeResponse(): Flow { + override fun observeResponse(): Flow { logger.debug { "CSNetworkRepositoryImpl#observeResponse" } return eventService.observeResponse() @@ -76,7 +76,7 @@ internal class CSNetworkRepositoryImpl( } override fun sendEvents( - eventRequest: EventRequest, + eventRequest: SendEventRequest, eventGuids: String, callback: CSCallback ) { @@ -107,7 +107,7 @@ internal class CSNetworkRepositoryImpl( } } - override fun sendInstantEvents(eventRequest: EventRequest) { + override fun sendInstantEvents(eventRequest: SendEventRequest) { logger.debug { "CSNetworkRepositoryImpl#sendInstantEvents - eventRequest $eventRequest" } logger.debug { "CSNetworkRepositoryImpl#sendInstantEvents - eventRequestType ${eventRequest.eventsList[0].type}" } diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSRetryableCallback.kt b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSRetryableCallback.kt index 6e2802e5..b7c38d09 100644 --- a/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSRetryableCallback.kt +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/CSRetryableCallback.kt @@ -9,12 +9,13 @@ import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO import clickstream.health.time.CSTimeStampGenerator import clickstream.internal.analytics.CSErrorReasons +import clickstream.internal.networklayer.proto.raccoon.Code +import clickstream.internal.networklayer.proto.raccoon.Code.* +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse +import clickstream.internal.networklayer.proto.raccoon.Status import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.logger.CSLogger -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.Code -import com.gojek.clickstream.de.common.EventResponse -import com.gojek.clickstream.de.common.Status import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineExceptionHandler @@ -40,7 +41,7 @@ private const val REQUEST_GUID_KEY = "req_guid" internal abstract class CSRetryableCallback( private val networkConfig: CSNetworkConfig, private val eventService: CSEventService, - private var eventRequest: EventRequest, + private var eventRequest: SendEventRequest, private val eventGuids: String, private val dispatcher: CoroutineDispatcher, private val timeStampGenerator: CSTimeStampGenerator, @@ -104,7 +105,7 @@ internal abstract class CSRetryableCallback( logger.debug { "CSRetryableCallback#observeCallback - Message received from the server: ${it.dataMap[REQUEST_GUID_KEY]}" } val guid = it.dataMap[REQUEST_GUID_KEY]!! when { - it.status == Status.SUCCESS -> { + it.status == Status.STATUS_SUCCESS -> { logger.debug { "CSRetryableCallback#observeCallback - Success" } onSuccess(guid) @@ -250,13 +251,13 @@ internal abstract class CSRetryableCallback( timeOutJob.cancel() } - private suspend fun trackEventResponse(eventResponse: EventResponse, eventRequestGuid: String) { + private suspend fun trackEventResponse(eventResponse: SendEventResponse, eventRequestGuid: String) { logger.debug { "CSRetryableCallback#trackEventResponse - eventResponse $eventResponse" } when (eventResponse.code.ordinal) { - Code.MAX_CONNECTION_LIMIT_REACHED.ordinal -> { + CODE_MAX_CONNECTION_LIMIT_REACHED.ordinal -> { logger.debug { "CSRetryableCallback#trackEventResponse - eventResponse MAX_CONNECTION_LIMIT_REACHED" } recordHealthEvent( @@ -266,7 +267,7 @@ internal abstract class CSRetryableCallback( eventBatchGuid = eventRequestGuid ) } - Code.MAX_USER_LIMIT_REACHED.ordinal -> { + CODE_MAX_USER_LIMIT_REACHED.ordinal -> { logger.debug { "CSRetryableCallback#trackEventResponse - eventResponse MAX_USER_LIMIT_REACHED" } recordHealthEvent( @@ -276,7 +277,7 @@ internal abstract class CSRetryableCallback( eventBatchGuid = eventRequestGuid ) } - Code.BAD_REQUEST.ordinal -> { + CODE_BAD_REQUEST.ordinal -> { logger.debug { "CSRetryableCallback#trackEventResponse : eventResponse BAD_REQUEST" } recordHealthEvent( diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Code.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Code.java new file mode 100644 index 00000000..8026de8b --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Code.java @@ -0,0 +1,186 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +/** + * Protobuf enum {@code raystack.raccoon.v1beta1.Code} + */ +public enum Code + implements com.google.protobuf.Internal.EnumLite { + /** + *
+   *`CODE_UNSPECIFIED` indicates no appropriate/existing code can describe it.
+   * 
+ * + * CODE_UNSPECIFIED = 0; + */ + CODE_UNSPECIFIED(0), + /** + *
+   *`OK` indicates the request is processed successfully.
+   * 
+ * + * CODE_OK = 1; + */ + CODE_OK(1), + /** + *
+   *`BAD_REQUEST` indicates there is something wrong with the request.
+   * 
+ * + * CODE_BAD_REQUEST = 2; + */ + CODE_BAD_REQUEST(2), + /** + *
+   *`INTERNAL_ERROR` indicates that Raccoon encountered an unexpected condition that prevented it from fulfilling the request.
+   * 
+ * + * CODE_INTERNAL_ERROR = 3; + */ + CODE_INTERNAL_ERROR(3), + /** + *
+   *`MAX_CONNECTION_LIMIT_REACHED` indicates that Raccoon is unable to accepts new connection due to max connection is reached.
+   *To prevent Raccoon from eating up resources, connection limit needs to be set. The limit is configurable on Raccoon by setting `SERVER_WEBSOCKET_MAX_CONN`
+   * 
+ * + * CODE_MAX_CONNECTION_LIMIT_REACHED = 4; + */ + CODE_MAX_CONNECTION_LIMIT_REACHED(4), + /** + *
+   *`MAX_USER_LIMIT_REACHED` indicates that existing connection with the same ID.
+   *Raccoon ensures unique connection using unique identifier passed from the header
+   *the first time Websocket connection is established. The header key that
+   *contains unique identifier is configurable on Raccoon by setting `SERVER_WEBSOCKET_CONN_UNIQ_ID_HEADER`
+   * 
+ * + * CODE_MAX_USER_LIMIT_REACHED = 5; + */ + CODE_MAX_USER_LIMIT_REACHED(5), + UNRECOGNIZED(-1), + ; + + /** + *
+   *`CODE_UNSPECIFIED` indicates no appropriate/existing code can describe it.
+   * 
+ * + * CODE_UNSPECIFIED = 0; + */ + public static final int CODE_UNSPECIFIED_VALUE = 0; + /** + *
+   *`OK` indicates the request is processed successfully.
+   * 
+ * + * CODE_OK = 1; + */ + public static final int CODE_OK_VALUE = 1; + /** + *
+   *`BAD_REQUEST` indicates there is something wrong with the request.
+   * 
+ * + * CODE_BAD_REQUEST = 2; + */ + public static final int CODE_BAD_REQUEST_VALUE = 2; + /** + *
+   *`INTERNAL_ERROR` indicates that Raccoon encountered an unexpected condition that prevented it from fulfilling the request.
+   * 
+ * + * CODE_INTERNAL_ERROR = 3; + */ + public static final int CODE_INTERNAL_ERROR_VALUE = 3; + /** + *
+   *`MAX_CONNECTION_LIMIT_REACHED` indicates that Raccoon is unable to accepts new connection due to max connection is reached.
+   *To prevent Raccoon from eating up resources, connection limit needs to be set. The limit is configurable on Raccoon by setting `SERVER_WEBSOCKET_MAX_CONN`
+   * 
+ * + * CODE_MAX_CONNECTION_LIMIT_REACHED = 4; + */ + public static final int CODE_MAX_CONNECTION_LIMIT_REACHED_VALUE = 4; + /** + *
+   *`MAX_USER_LIMIT_REACHED` indicates that existing connection with the same ID.
+   *Raccoon ensures unique connection using unique identifier passed from the header
+   *the first time Websocket connection is established. The header key that
+   *contains unique identifier is configurable on Raccoon by setting `SERVER_WEBSOCKET_CONN_UNIQ_ID_HEADER`
+   * 
+ * + * CODE_MAX_USER_LIMIT_REACHED = 5; + */ + public static final int CODE_MAX_USER_LIMIT_REACHED_VALUE = 5; + + + @Override + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @Deprecated + public static Code valueOf(int value) { + return forNumber(value); + } + + public static Code forNumber(int value) { + switch (value) { + case 0: return CODE_UNSPECIFIED; + case 1: return CODE_OK; + case 2: return CODE_BAD_REQUEST; + case 3: return CODE_INTERNAL_ERROR; + case 4: return CODE_MAX_CONNECTION_LIMIT_REACHED; + case 5: return CODE_MAX_USER_LIMIT_REACHED; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Code> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public Code findValueByNumber(int number) { + return Code.forNumber(number); + } + }; + + public static com.google.protobuf.Internal.EnumVerifier + internalGetVerifier() { + return CodeVerifier.INSTANCE; + } + + private static final class CodeVerifier implements + com.google.protobuf.Internal.EnumVerifier { + static final com.google.protobuf.Internal.EnumVerifier INSTANCE = new CodeVerifier(); + @Override + public boolean isInRange(int number) { + return Code.forNumber(number) != null; + } + }; + + private final int value; + + private Code(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:raystack.raccoon.v1beta1.Code) +} + diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Event.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Event.java new file mode 100644 index 00000000..66e33482 --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Event.java @@ -0,0 +1,433 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +/** + * Protobuf type {@code raystack.raccoon.v1beta1.Event} + */ +public final class Event extends + com.google.protobuf.GeneratedMessageLite< + Event, Event.Builder> implements + // @@protoc_insertion_point(message_implements:raystack.raccoon.v1beta1.Event) + EventOrBuilder { + private Event() { + eventBytes_ = com.google.protobuf.ByteString.EMPTY; + type_ = ""; + } + public static final int EVENT_BYTES_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString eventBytes_; + /** + *
+   *`event_bytes` is where you put bytes serialized event.
+   * 
+ * + * bytes event_bytes = 1; + * @return The eventBytes. + */ + @Override + public com.google.protobuf.ByteString getEventBytes() { + return eventBytes_; + } + /** + *
+   *`event_bytes` is where you put bytes serialized event.
+   * 
+ * + * bytes event_bytes = 1; + * @param value The eventBytes to set. + */ + private void setEventBytes(com.google.protobuf.ByteString value) { + Class valueClass = value.getClass(); + + eventBytes_ = value; + } + /** + *
+   *`event_bytes` is where you put bytes serialized event.
+   * 
+ * + * bytes event_bytes = 1; + */ + private void clearEventBytes() { + + eventBytes_ = getDefaultInstance().getEventBytes(); + } + + public static final int TYPE_FIELD_NUMBER = 2; + private String type_; + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @return The type. + */ + @Override + public String getType() { + return type_; + } + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @return The bytes for type. + */ + @Override + public com.google.protobuf.ByteString + getTypeBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(type_); + } + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @param value The type to set. + */ + private void setType( + String value) { + Class valueClass = value.getClass(); + + type_ = value; + } + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + */ + private void clearType() { + + type_ = getDefaultInstance().getType(); + } + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @param value The bytes for type to set. + */ + private void setTypeBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + type_ = value.toStringUtf8(); + + } + + public static Event parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Event parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Event parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Event parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Event parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Event parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Event parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Event parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Event parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Event parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Event parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Event parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Event prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code raystack.raccoon.v1beta1.Event} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Event, Builder> implements + // @@protoc_insertion_point(builder_implements:raystack.raccoon.v1beta1.Event) + EventOrBuilder { + // Construct using clickstream.internal.networklayer.proto.raccoon.Event.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     *`event_bytes` is where you put bytes serialized event.
+     * 
+ * + * bytes event_bytes = 1; + * @return The eventBytes. + */ + @Override + public com.google.protobuf.ByteString getEventBytes() { + return instance.getEventBytes(); + } + /** + *
+     *`event_bytes` is where you put bytes serialized event.
+     * 
+ * + * bytes event_bytes = 1; + * @param value The eventBytes to set. + * @return This builder for chaining. + */ + public Builder setEventBytes(com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEventBytes(value); + return this; + } + /** + *
+     *`event_bytes` is where you put bytes serialized event.
+     * 
+ * + * bytes event_bytes = 1; + * @return This builder for chaining. + */ + public Builder clearEventBytes() { + copyOnWrite(); + instance.clearEventBytes(); + return this; + } + + /** + *
+     *`type` denotes an event type that the producer of this proto message may set.
+     *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+     *users of this proto can use this type to set strings which can be processed in their
+     *ingestion systems to distribute or perform other functions.
+     * 
+ * + * string type = 2; + * @return The type. + */ + @Override + public String getType() { + return instance.getType(); + } + /** + *
+     *`type` denotes an event type that the producer of this proto message may set.
+     *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+     *users of this proto can use this type to set strings which can be processed in their
+     *ingestion systems to distribute or perform other functions.
+     * 
+ * + * string type = 2; + * @return The bytes for type. + */ + @Override + public com.google.protobuf.ByteString + getTypeBytes() { + return instance.getTypeBytes(); + } + /** + *
+     *`type` denotes an event type that the producer of this proto message may set.
+     *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+     *users of this proto can use this type to set strings which can be processed in their
+     *ingestion systems to distribute or perform other functions.
+     * 
+ * + * string type = 2; + * @param value The type to set. + * @return This builder for chaining. + */ + public Builder setType( + String value) { + copyOnWrite(); + instance.setType(value); + return this; + } + /** + *
+     *`type` denotes an event type that the producer of this proto message may set.
+     *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+     *users of this proto can use this type to set strings which can be processed in their
+     *ingestion systems to distribute or perform other functions.
+     * 
+ * + * string type = 2; + * @return This builder for chaining. + */ + public Builder clearType() { + copyOnWrite(); + instance.clearType(); + return this; + } + /** + *
+     *`type` denotes an event type that the producer of this proto message may set.
+     *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+     *users of this proto can use this type to set strings which can be processed in their
+     *ingestion systems to distribute or perform other functions.
+     * 
+ * + * string type = 2; + * @param value The bytes for type to set. + * @return This builder for chaining. + */ + public Builder setTypeBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setTypeBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:raystack.raccoon.v1beta1.Event) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Event(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "eventBytes_", + "type_", + }; + String info = + "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\n\u0002\u0208" + + ""; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Event.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:raystack.raccoon.v1beta1.Event) + private static final Event DEFAULT_INSTANCE; + static { + Event defaultInstance = new Event(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Event.class, defaultInstance); + } + + public static Event getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventOrBuilder.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventOrBuilder.java new file mode 100644 index 00000000..0e97ceb8 --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventOrBuilder.java @@ -0,0 +1,45 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +public interface EventOrBuilder extends + // @@protoc_insertion_point(interface_extends:raystack.raccoon.v1beta1.Event) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   *`event_bytes` is where you put bytes serialized event.
+   * 
+ * + * bytes event_bytes = 1; + * @return The eventBytes. + */ + com.google.protobuf.ByteString getEventBytes(); + + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @return The type. + */ + String getType(); + /** + *
+   *`type` denotes an event type that the producer of this proto message may set.
+   *It is currently used by raccoon to distribute events to respective Kafka topics. However the
+   *users of this proto can use this type to set strings which can be processed in their
+   *ingestion systems to distribute or perform other functions.
+   * 
+ * + * string type = 2; + * @return The bytes for type. + */ + com.google.protobuf.ByteString + getTypeBytes(); +} diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventProto.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventProto.java new file mode 100644 index 00000000..b5e879b9 --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/EventProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +public final class EventProto { + private EventProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequest.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequest.java new file mode 100644 index 00000000..f1799bac --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequest.java @@ -0,0 +1,913 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +/** + *
+ *`EventRequest` defines the contract to push events to Raccoon
+ *An `EventRequest` allows you to push more than one events(batch). The events
+ *are wrapped inside `events` repeated field. All of the fields on `EventRequest`
+ *are required.
+ * 
+ * + * Protobuf type {@code raystack.raccoon.v1beta1.SendEventRequest} + */ +public final class SendEventRequest extends + com.google.protobuf.GeneratedMessageLite< + SendEventRequest, SendEventRequest.Builder> implements + // @@protoc_insertion_point(message_implements:raystack.raccoon.v1beta1.SendEventRequest) + SendEventRequestOrBuilder { + private SendEventRequest() { + reqGuid_ = ""; + events_ = emptyProtobufList(); + } + public static final int REQ_GUID_FIELD_NUMBER = 1; + private String reqGuid_; + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @return The reqGuid. + */ + @Override + public String getReqGuid() { + return reqGuid_; + } + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @return The bytes for reqGuid. + */ + @Override + public com.google.protobuf.ByteString + getReqGuidBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(reqGuid_); + } + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @param value The reqGuid to set. + */ + private void setReqGuid( + String value) { + Class valueClass = value.getClass(); + + reqGuid_ = value; + } + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + */ + private void clearReqGuid() { + + reqGuid_ = getDefaultInstance().getReqGuid(); + } + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @param value The bytes for reqGuid to set. + */ + private void setReqGuidBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + reqGuid_ = value.toStringUtf8(); + + } + + public static final int SENT_TIME_FIELD_NUMBER = 2; + private com.google.protobuf.Timestamp sentTime_; + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + @Override + public boolean hasSentTime() { + return sentTime_ != null; + } + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + @Override + public com.google.protobuf.Timestamp getSentTime() { + return sentTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : sentTime_; + } + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + private void setSentTime(com.google.protobuf.Timestamp value) { + value.getClass(); + sentTime_ = value; + + } + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeSentTime(com.google.protobuf.Timestamp value) { + value.getClass(); + if (sentTime_ != null && + sentTime_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + sentTime_ = + com.google.protobuf.Timestamp.newBuilder(sentTime_).mergeFrom(value).buildPartial(); + } else { + sentTime_ = value; + } + + } + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + private void clearSentTime() { sentTime_ = null; + + } + + public static final int EVENTS_FIELD_NUMBER = 3; + private com.google.protobuf.Internal.ProtobufList events_; + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public java.util.List getEventsList() { + return events_; + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public java.util.List + getEventsOrBuilderList() { + return events_; + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public int getEventsCount() { + return events_.size(); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public Event getEvents(int index) { + return events_.get(index); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public EventOrBuilder getEventsOrBuilder( + int index) { + return events_.get(index); + } + private void ensureEventsIsMutable() { + com.google.protobuf.Internal.ProtobufList tmp = events_; + if (!tmp.isModifiable()) { + events_ = + com.google.protobuf.GeneratedMessageLite.mutableCopy(tmp); + } + } + + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void setEvents( + int index, Event value) { + value.getClass(); + ensureEventsIsMutable(); + events_.set(index, value); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void addEvents(Event value) { + value.getClass(); + ensureEventsIsMutable(); + events_.add(value); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void addEvents( + int index, Event value) { + value.getClass(); + ensureEventsIsMutable(); + events_.add(index, value); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void addAllEvents( + Iterable values) { + ensureEventsIsMutable(); + com.google.protobuf.AbstractMessageLite.addAll( + values, events_); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void clearEvents() { + events_ = emptyProtobufList(); + } + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + private void removeEvents(int index) { + ensureEventsIsMutable(); + events_.remove(index); + } + + public static SendEventRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static SendEventRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static SendEventRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static SendEventRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static SendEventRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static SendEventRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(SendEventRequest prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   *`EventRequest` defines the contract to push events to Raccoon
+   *An `EventRequest` allows you to push more than one events(batch). The events
+   *are wrapped inside `events` repeated field. All of the fields on `EventRequest`
+   *are required.
+   * 
+ * + * Protobuf type {@code raystack.raccoon.v1beta1.SendEventRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + SendEventRequest, Builder> implements + // @@protoc_insertion_point(builder_implements:raystack.raccoon.v1beta1.SendEventRequest) + SendEventRequestOrBuilder { + // Construct using clickstream.internal.networklayer.proto.raccoon.SendEventRequest.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     *`req_guid` is unique identifier of the request the client is making.
+     *Raccoon uses the identifier to send response of the request. The client can handle the
+     *response accordingly. For example, the client can retry the request in case the response is
+     *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+     *This identifier is necessary because on event-based protocols like WebSocket the response is
+     *returned asynchronously. If there is no identifier, no way the client can tell which response
+     *belongs to which request.
+     *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+     *debug logs with `ReqGUID` keyword.
+     * 
+ * + * string req_guid = 1; + * @return The reqGuid. + */ + @Override + public String getReqGuid() { + return instance.getReqGuid(); + } + /** + *
+     *`req_guid` is unique identifier of the request the client is making.
+     *Raccoon uses the identifier to send response of the request. The client can handle the
+     *response accordingly. For example, the client can retry the request in case the response is
+     *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+     *This identifier is necessary because on event-based protocols like WebSocket the response is
+     *returned asynchronously. If there is no identifier, no way the client can tell which response
+     *belongs to which request.
+     *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+     *debug logs with `ReqGUID` keyword.
+     * 
+ * + * string req_guid = 1; + * @return The bytes for reqGuid. + */ + @Override + public com.google.protobuf.ByteString + getReqGuidBytes() { + return instance.getReqGuidBytes(); + } + /** + *
+     *`req_guid` is unique identifier of the request the client is making.
+     *Raccoon uses the identifier to send response of the request. The client can handle the
+     *response accordingly. For example, the client can retry the request in case the response is
+     *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+     *This identifier is necessary because on event-based protocols like WebSocket the response is
+     *returned asynchronously. If there is no identifier, no way the client can tell which response
+     *belongs to which request.
+     *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+     *debug logs with `ReqGUID` keyword.
+     * 
+ * + * string req_guid = 1; + * @param value The reqGuid to set. + * @return This builder for chaining. + */ + public Builder setReqGuid( + String value) { + copyOnWrite(); + instance.setReqGuid(value); + return this; + } + /** + *
+     *`req_guid` is unique identifier of the request the client is making.
+     *Raccoon uses the identifier to send response of the request. The client can handle the
+     *response accordingly. For example, the client can retry the request in case the response is
+     *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+     *This identifier is necessary because on event-based protocols like WebSocket the response is
+     *returned asynchronously. If there is no identifier, no way the client can tell which response
+     *belongs to which request.
+     *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+     *debug logs with `ReqGUID` keyword.
+     * 
+ * + * string req_guid = 1; + * @return This builder for chaining. + */ + public Builder clearReqGuid() { + copyOnWrite(); + instance.clearReqGuid(); + return this; + } + /** + *
+     *`req_guid` is unique identifier of the request the client is making.
+     *Raccoon uses the identifier to send response of the request. The client can handle the
+     *response accordingly. For example, the client can retry the request in case the response is
+     *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+     *This identifier is necessary because on event-based protocols like WebSocket the response is
+     *returned asynchronously. If there is no identifier, no way the client can tell which response
+     *belongs to which request.
+     *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+     *debug logs with `ReqGUID` keyword.
+     * 
+ * + * string req_guid = 1; + * @param value The bytes for reqGuid to set. + * @return This builder for chaining. + */ + public Builder setReqGuidBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setReqGuidBytes(value); + return this; + } + + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + @Override + public boolean hasSentTime() { + return instance.hasSentTime(); + } + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + @Override + public com.google.protobuf.Timestamp getSentTime() { + return instance.getSentTime(); + } + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + public Builder setSentTime(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.setSentTime(value); + return this; + } + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + public Builder setSentTime( + com.google.protobuf.Timestamp.Builder builderForValue) { + copyOnWrite(); + instance.setSentTime(builderForValue.build()); + return this; + } + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + public Builder mergeSentTime(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.mergeSentTime(value); + return this; + } + /** + *
+     *`sent_time` defines the time the request is sent.
+     *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+     *request is sent until the events are published.
+     * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + */ + public Builder clearSentTime() { copyOnWrite(); + instance.clearSentTime(); + return this; + } + + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public java.util.List getEventsList() { + return java.util.Collections.unmodifiableList( + instance.getEventsList()); + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public int getEventsCount() { + return instance.getEventsCount(); + }/** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + @Override + public Event getEvents(int index) { + return instance.getEvents(index); + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder setEvents( + int index, Event value) { + copyOnWrite(); + instance.setEvents(index, value); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder setEvents( + int index, Event.Builder builderForValue) { + copyOnWrite(); + instance.setEvents(index, + builderForValue.build()); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder addEvents(Event value) { + copyOnWrite(); + instance.addEvents(value); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder addEvents( + int index, Event value) { + copyOnWrite(); + instance.addEvents(index, value); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder addEvents( + Event.Builder builderForValue) { + copyOnWrite(); + instance.addEvents(builderForValue.build()); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder addEvents( + int index, Event.Builder builderForValue) { + copyOnWrite(); + instance.addEvents(index, + builderForValue.build()); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder addAllEvents( + Iterable values) { + copyOnWrite(); + instance.addAllEvents(values); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder clearEvents() { + copyOnWrite(); + instance.clearEvents(); + return this; + } + /** + *
+     *`events` is where the client put all the events wrapped in `Event`.
+     *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+     *the events to optimize the network call.
+     * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + public Builder removeEvents(int index) { + copyOnWrite(); + instance.removeEvents(index); + return this; + } + + // @@protoc_insertion_point(builder_scope:raystack.raccoon.v1beta1.SendEventRequest) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new SendEventRequest(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "reqGuid_", + "sentTime_", + "events_", + Event.class, + }; + String info = + "\u0000\u0003\u0000\u0000\u0001\u0003\u0003\u0000\u0001\u0000\u0001\u0208\u0002\t" + + "\u0003\u001b"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (SendEventRequest.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:raystack.raccoon.v1beta1.SendEventRequest) + private static final SendEventRequest DEFAULT_INSTANCE; + static { + SendEventRequest defaultInstance = new SendEventRequest(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + SendEventRequest.class, defaultInstance); + } + + public static SendEventRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequestOrBuilder.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequestOrBuilder.java new file mode 100644 index 00000000..c5025eb6 --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventRequestOrBuilder.java @@ -0,0 +1,100 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +public interface SendEventRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:raystack.raccoon.v1beta1.SendEventRequest) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @return The reqGuid. + */ + String getReqGuid(); + /** + *
+   *`req_guid` is unique identifier of the request the client is making.
+   *Raccoon uses the identifier to send response of the request. The client can handle the
+   *response accordingly. For example, the client can retry the request in case the response is
+   *giving `INTERNAL_ERROR` code with "publisher failed" reason.
+   *This identifier is necessary because on event-based protocols like WebSocket the response is
+   *returned asynchronously. If there is no identifier, no way the client can tell which response
+   *belongs to which request.
+   *Apart from sending response, `req_guid` is used to log some informations on 'debug' level. You can search the
+   *debug logs with `ReqGUID` keyword.
+   * 
+ * + * string req_guid = 1; + * @return The bytes for reqGuid. + */ + com.google.protobuf.ByteString + getReqGuidBytes(); + + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + * @return Whether the sentTime field is set. + */ + boolean hasSentTime(); + /** + *
+   *`sent_time` defines the time the request is sent.
+   *`sent_time` is used to calculate various metrics. The main metric uses `sent_time` is duration from the
+   *request is sent until the events are published.
+   * 
+ * + * .google.protobuf.Timestamp sent_time = 2; + * @return The sentTime. + */ + com.google.protobuf.Timestamp getSentTime(); + + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + java.util.List + getEventsList(); + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + Event getEvents(int index); + /** + *
+   *`events` is where the client put all the events wrapped in `Event`.
+   *As mentioned above, the request allows the client to push more than one event. Normally you want to batch
+   *the events to optimize the network call.
+   * 
+ * + * repeated .raystack.raccoon.v1beta1.Event events = 3; + */ + int getEventsCount(); +} diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponse.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponse.java new file mode 100644 index 00000000..a3ac573c --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponse.java @@ -0,0 +1,974 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +/** + * Protobuf type {@code raystack.raccoon.v1beta1.SendEventResponse} + */ +public final class SendEventResponse extends + com.google.protobuf.GeneratedMessageLite< + SendEventResponse, SendEventResponse.Builder> implements + // @@protoc_insertion_point(message_implements:raystack.raccoon.v1beta1.SendEventResponse) + SendEventResponseOrBuilder { + private SendEventResponse() { + reason_ = ""; + } + public static final int STATUS_FIELD_NUMBER = 1; + private int status_; + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The enum numeric value on the wire for status. + */ + @Override + public int getStatusValue() { + return status_; + } + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The status. + */ + @Override + public Status getStatus() { + Status result = Status.forNumber(status_); + return result == null ? Status.UNRECOGNIZED : result; + } + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @param value The enum numeric value on the wire for status to set. + */ + private void setStatusValue(int value) { + status_ = value; + } + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @param value The status to set. + */ + private void setStatus(Status value) { + status_ = value.getNumber(); + + } + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + */ + private void clearStatus() { + + status_ = 0; + } + + public static final int CODE_FIELD_NUMBER = 2; + private int code_; + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The enum numeric value on the wire for code. + */ + @Override + public int getCodeValue() { + return code_; + } + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The code. + */ + @Override + public Code getCode() { + Code result = Code.forNumber(code_); + return result == null ? Code.UNRECOGNIZED : result; + } + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @param value The enum numeric value on the wire for code to set. + */ + private void setCodeValue(int value) { + code_ = value; + } + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @param value The code to set. + */ + private void setCode(Code value) { + code_ = value.getNumber(); + + } + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + */ + private void clearCode() { + + code_ = 0; + } + + public static final int SENT_TIME_FIELD_NUMBER = 3; + private long sentTime_; + /** + *
+   *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+   * 
+ * + * int64 sent_time = 3; + * @return The sentTime. + */ + @Override + public long getSentTime() { + return sentTime_; + } + /** + *
+   *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+   * 
+ * + * int64 sent_time = 3; + * @param value The sentTime to set. + */ + private void setSentTime(long value) { + + sentTime_ = value; + } + /** + *
+   *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+   * 
+ * + * int64 sent_time = 3; + */ + private void clearSentTime() { + + sentTime_ = 0L; + } + + public static final int REASON_FIELD_NUMBER = 4; + private String reason_; + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @return The reason. + */ + @Override + public String getReason() { + return reason_; + } + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @return The bytes for reason. + */ + @Override + public com.google.protobuf.ByteString + getReasonBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(reason_); + } + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @param value The reason to set. + */ + private void setReason( + String value) { + Class valueClass = value.getClass(); + + reason_ = value; + } + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + */ + private void clearReason() { + + reason_ = getDefaultInstance().getReason(); + } + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @param value The bytes for reason to set. + */ + private void setReasonBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + reason_ = value.toStringUtf8(); + + } + + public static final int DATA_FIELD_NUMBER = 5; + private static final class DataDefaultEntryHolder { + static final com.google.protobuf.MapEntryLite< + String, String> defaultEntry = + com.google.protobuf.MapEntryLite + .newDefaultInstance( + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + private com.google.protobuf.MapFieldLite< + String, String> data_ = + com.google.protobuf.MapFieldLite.emptyMapField(); + private com.google.protobuf.MapFieldLite + internalGetData() { + return data_; + } + private com.google.protobuf.MapFieldLite + internalGetMutableData() { + if (!data_.isMutable()) { + data_ = data_.mutableCopy(); + } + return data_; + } + @Override + + public int getDataCount() { + return internalGetData().size(); + } + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + @Override + + public boolean containsData( + String key) { + Class keyClass = key.getClass(); + return internalGetData().containsKey(key); + } + /** + * Use {@link #getDataMap()} instead. + */ + @Override + @Deprecated + public java.util.Map getData() { + return getDataMap(); + } + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + @Override + + public java.util.Map getDataMap() { + return java.util.Collections.unmodifiableMap( + internalGetData()); + } + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + @Override + + public String getDataOrDefault( + String key, + String defaultValue) { + Class keyClass = key.getClass(); + java.util.Map map = + internalGetData(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + @Override + + public String getDataOrThrow( + String key) { + Class keyClass = key.getClass(); + java.util.Map map = + internalGetData(); + if (!map.containsKey(key)) { + throw new IllegalArgumentException(); + } + return map.get(key); + } + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + private java.util.Map + getMutableDataMap() { + return internalGetMutableData(); + } + + public static SendEventResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static SendEventResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static SendEventResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static SendEventResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static SendEventResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static SendEventResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static SendEventResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static SendEventResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(SendEventResponse prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + * Protobuf type {@code raystack.raccoon.v1beta1.SendEventResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + SendEventResponse, Builder> implements + // @@protoc_insertion_point(builder_implements:raystack.raccoon.v1beta1.SendEventResponse) + SendEventResponseOrBuilder { + // Construct using clickstream.internal.networklayer.proto.raccoon.SendEventResponse.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     *`status` denotes status of the request.
+     *Only 3 values are valid. `SUCCESS` means the the request is processed
+     *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+     *means Raccoon unable to determine whether the request is success or not.
+     * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The enum numeric value on the wire for status. + */ + @Override + public int getStatusValue() { + return instance.getStatusValue(); + } + /** + *
+     *`status` denotes status of the request.
+     *Only 3 values are valid. `SUCCESS` means the the request is processed
+     *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+     *means Raccoon unable to determine whether the request is success or not.
+     * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @param value The status to set. + * @return This builder for chaining. + */ + public Builder setStatusValue(int value) { + copyOnWrite(); + instance.setStatusValue(value); + return this; + } + /** + *
+     *`status` denotes status of the request.
+     *Only 3 values are valid. `SUCCESS` means the the request is processed
+     *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+     *means Raccoon unable to determine whether the request is success or not.
+     * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The status. + */ + @Override + public Status getStatus() { + return instance.getStatus(); + } + /** + *
+     *`status` denotes status of the request.
+     *Only 3 values are valid. `SUCCESS` means the the request is processed
+     *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+     *means Raccoon unable to determine whether the request is success or not.
+     * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @param value The enum numeric value on the wire for status to set. + * @return This builder for chaining. + */ + public Builder setStatus(Status value) { + copyOnWrite(); + instance.setStatus(value); + return this; + } + /** + *
+     *`status` denotes status of the request.
+     *Only 3 values are valid. `SUCCESS` means the the request is processed
+     *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+     *means Raccoon unable to determine whether the request is success or not.
+     * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return This builder for chaining. + */ + public Builder clearStatus() { + copyOnWrite(); + instance.clearStatus(); + return this; + } + + /** + *
+     *`code` gives more detail of what happened to the request.
+     *Details of available `code` can be seen below.
+     * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The enum numeric value on the wire for code. + */ + @Override + public int getCodeValue() { + return instance.getCodeValue(); + } + /** + *
+     *`code` gives more detail of what happened to the request.
+     *Details of available `code` can be seen below.
+     * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @param value The code to set. + * @return This builder for chaining. + */ + public Builder setCodeValue(int value) { + copyOnWrite(); + instance.setCodeValue(value); + return this; + } + /** + *
+     *`code` gives more detail of what happened to the request.
+     *Details of available `code` can be seen below.
+     * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The code. + */ + @Override + public Code getCode() { + return instance.getCode(); + } + /** + *
+     *`code` gives more detail of what happened to the request.
+     *Details of available `code` can be seen below.
+     * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @param value The enum numeric value on the wire for code to set. + * @return This builder for chaining. + */ + public Builder setCode(Code value) { + copyOnWrite(); + instance.setCode(value); + return this; + } + /** + *
+     *`code` gives more detail of what happened to the request.
+     *Details of available `code` can be seen below.
+     * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return This builder for chaining. + */ + public Builder clearCode() { + copyOnWrite(); + instance.clearCode(); + return this; + } + + /** + *
+     *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+     * 
+ * + * int64 sent_time = 3; + * @return The sentTime. + */ + @Override + public long getSentTime() { + return instance.getSentTime(); + } + /** + *
+     *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+     * 
+ * + * int64 sent_time = 3; + * @param value The sentTime to set. + * @return This builder for chaining. + */ + public Builder setSentTime(long value) { + copyOnWrite(); + instance.setSentTime(value); + return this; + } + /** + *
+     *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+     * 
+ * + * int64 sent_time = 3; + * @return This builder for chaining. + */ + public Builder clearSentTime() { + copyOnWrite(); + instance.clearSentTime(); + return this; + } + + /** + *
+     *`reason` is additional-human readable information to provide more context to `status` and `code`.
+     *There is no predefined structure for this. The value is arbitrary.
+     * 
+ * + * string reason = 4; + * @return The reason. + */ + @Override + public String getReason() { + return instance.getReason(); + } + /** + *
+     *`reason` is additional-human readable information to provide more context to `status` and `code`.
+     *There is no predefined structure for this. The value is arbitrary.
+     * 
+ * + * string reason = 4; + * @return The bytes for reason. + */ + @Override + public com.google.protobuf.ByteString + getReasonBytes() { + return instance.getReasonBytes(); + } + /** + *
+     *`reason` is additional-human readable information to provide more context to `status` and `code`.
+     *There is no predefined structure for this. The value is arbitrary.
+     * 
+ * + * string reason = 4; + * @param value The reason to set. + * @return This builder for chaining. + */ + public Builder setReason( + String value) { + copyOnWrite(); + instance.setReason(value); + return this; + } + /** + *
+     *`reason` is additional-human readable information to provide more context to `status` and `code`.
+     *There is no predefined structure for this. The value is arbitrary.
+     * 
+ * + * string reason = 4; + * @return This builder for chaining. + */ + public Builder clearReason() { + copyOnWrite(); + instance.clearReason(); + return this; + } + /** + *
+     *`reason` is additional-human readable information to provide more context to `status` and `code`.
+     *There is no predefined structure for this. The value is arbitrary.
+     * 
+ * + * string reason = 4; + * @param value The bytes for reason to set. + * @return This builder for chaining. + */ + public Builder setReasonBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setReasonBytes(value); + return this; + } + + @Override + + public int getDataCount() { + return instance.getDataMap().size(); + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + @Override + + public boolean containsData( + String key) { + Class keyClass = key.getClass(); + return instance.getDataMap().containsKey(key); + } + + public Builder clearData() { + copyOnWrite(); + instance.getMutableDataMap().clear(); + return this; + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + + public Builder removeData( + String key) { + Class keyClass = key.getClass(); + copyOnWrite(); + instance.getMutableDataMap().remove(key); + return this; + } + /** + * Use {@link #getDataMap()} instead. + */ + @Override + @Deprecated + public java.util.Map getData() { + return getDataMap(); + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + @Override + public java.util.Map getDataMap() { + return java.util.Collections.unmodifiableMap( + instance.getDataMap()); + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + @Override + + public String getDataOrDefault( + String key, + String defaultValue) { + Class keyClass = key.getClass(); + java.util.Map map = + instance.getDataMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + @Override + + public String getDataOrThrow( + String key) { + Class keyClass = key.getClass(); + java.util.Map map = + instance.getDataMap(); + if (!map.containsKey(key)) { + throw new IllegalArgumentException(); + } + return map.get(key); + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + public Builder putData( + String key, + String value) { + Class keyClass = key.getClass(); + Class valueClass = value.getClass(); + copyOnWrite(); + instance.getMutableDataMap().put(key, value); + return this; + } + /** + *
+     *`data` is arbitrary extra metadata.
+     *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+     *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+     * 
+ * + * map<string, string> data = 5; + */ + public Builder putAllData( + java.util.Map values) { + copyOnWrite(); + instance.getMutableDataMap().putAll(values); + return this; + } + + // @@protoc_insertion_point(builder_scope:raystack.raccoon.v1beta1.SendEventResponse) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new SendEventResponse(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "status_", + "code_", + "sentTime_", + "reason_", + "data_", + DataDefaultEntryHolder.defaultEntry, + }; + String info = + "\u0000\u0005\u0000\u0000\u0001\u0005\u0005\u0001\u0000\u0000\u0001\f\u0002\f\u0003" + + "\u0002\u0004\u0208\u00052"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (SendEventResponse.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:raystack.raccoon.v1beta1.SendEventResponse) + private static final SendEventResponse DEFAULT_INSTANCE; + static { + SendEventResponse defaultInstance = new SendEventResponse(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + SendEventResponse.class, defaultInstance); + } + + public static SendEventResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponseOrBuilder.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponseOrBuilder.java new file mode 100644 index 00000000..d250960c --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/SendEventResponseOrBuilder.java @@ -0,0 +1,151 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +public interface SendEventResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:raystack.raccoon.v1beta1.SendEventResponse) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The enum numeric value on the wire for status. + */ + int getStatusValue(); + /** + *
+   *`status` denotes status of the request.
+   *Only 3 values are valid. `SUCCESS` means the the request is processed
+   *successfully. `ERROR` means the request failed to be processed. `UNKNOWN_STATUS`
+   *means Raccoon unable to determine whether the request is success or not.
+   * 
+ * + * .raystack.raccoon.v1beta1.Status status = 1; + * @return The status. + */ + Status getStatus(); + + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The enum numeric value on the wire for code. + */ + int getCodeValue(); + /** + *
+   *`code` gives more detail of what happened to the request.
+   *Details of available `code` can be seen below.
+   * 
+ * + * .raystack.raccoon.v1beta1.Code code = 2; + * @return The code. + */ + Code getCode(); + + /** + *
+   *`sent_time` is UNIX timestamp populated by Raccoon by the time the response is sent.
+   * 
+ * + * int64 sent_time = 3; + * @return The sentTime. + */ + long getSentTime(); + + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @return The reason. + */ + String getReason(); + /** + *
+   *`reason` is additional-human readable information to provide more context to `status` and `code`.
+   *There is no predefined structure for this. The value is arbitrary.
+   * 
+ * + * string reason = 4; + * @return The bytes for reason. + */ + com.google.protobuf.ByteString + getReasonBytes(); + + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + int getDataCount(); + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + boolean containsData( + String key); + /** + * Use {@link #getDataMap()} instead. + */ + @Deprecated + java.util.Map + getData(); + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + java.util.Map + getDataMap(); + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + + String getDataOrDefault( + String key, + String defaultValue); + /** + *
+   *`data` is arbitrary extra metadata.
+   *Arbitrary key-value makes the field flexible for future changes. `req_guid` is also sent as part
+   *of `data`. The client may fetch req_guid as key to get the `req_guid` value.
+   * 
+ * + * map<string, string> data = 5; + */ + + String getDataOrThrow( + String key); +} diff --git a/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Status.java b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Status.java new file mode 100644 index 00000000..510524e8 --- /dev/null +++ b/clickstream/src/main/kotlin/clickstream/internal/networklayer/proto/raccoon/Status.java @@ -0,0 +1,103 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: raccoon.proto + +package clickstream.internal.networklayer.proto.raccoon; + +/** + * Protobuf enum {@code raystack.raccoon.v1beta1.Status} + */ +public enum Status + implements com.google.protobuf.Internal.EnumLite { + /** + * STATUS_UNSPECIFIED = 0; + */ + STATUS_UNSPECIFIED(0), + /** + * STATUS_SUCCESS = 1; + */ + STATUS_SUCCESS(1), + /** + * STATUS_ERROR = 2; + */ + STATUS_ERROR(2), + UNRECOGNIZED(-1), + ; + + /** + * STATUS_UNSPECIFIED = 0; + */ + public static final int STATUS_UNSPECIFIED_VALUE = 0; + /** + * STATUS_SUCCESS = 1; + */ + public static final int STATUS_SUCCESS_VALUE = 1; + /** + * STATUS_ERROR = 2; + */ + public static final int STATUS_ERROR_VALUE = 2; + + + @Override + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @Deprecated + public static Status valueOf(int value) { + return forNumber(value); + } + + public static Status forNumber(int value) { + switch (value) { + case 0: return STATUS_UNSPECIFIED; + case 1: return STATUS_SUCCESS; + case 2: return STATUS_ERROR; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Status> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public Status findValueByNumber(int number) { + return Status.forNumber(number); + } + }; + + public static com.google.protobuf.Internal.EnumVerifier + internalGetVerifier() { + return StatusVerifier.INSTANCE; + } + + private static final class StatusVerifier implements + com.google.protobuf.Internal.EnumVerifier { + static final com.google.protobuf.Internal.EnumVerifier INSTANCE = new StatusVerifier(); + @Override + public boolean isInRange(int number) { + return Status.forNumber(number) != null; + } + }; + + private final int value; + + private Status(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:raystack.raccoon.v1beta1.Status) +} + diff --git a/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt b/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt index fed603db..c5345928 100644 --- a/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt +++ b/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt @@ -2,6 +2,8 @@ package clickstream import clickstream.internal.eventscheduler.CSEventData import clickstream.internal.networklayer.CSEventService +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.model.CSEvent @@ -12,8 +14,6 @@ import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory import com.gojek.clickstream.common.App import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.tinder.scarlet.Lifecycle @@ -55,10 +55,10 @@ public class ClickStreamConnectionTest { public fun send_givenConnectionIsEstablished_shouldBeReceivedByTheServer() { // Given givenConnectionIsEstablished() - val testResponse: TestFlowObserver = server.observeResponse().flowTest() + val testResponse: TestFlowObserver = server.observeResponse().flowTest() - val eventRequest1: EventRequest = generatedEvent("1") - val eventRequest2: EventRequest = generatedEvent("2") + val eventRequest1: SendEventRequest = generatedEvent("1") + val eventRequest2: SendEventRequest = generatedEvent("2") // When val event1 = client.sendEvent(eventRequest1) @@ -81,11 +81,11 @@ public class ClickStreamConnectionTest { ) assertThat(testResponse.values).allSatisfy { e -> - e is EventResponse + e is SendEventResponse } } - private fun generatedEvent(guid: String): EventRequest { + private fun generatedEvent(guid: String): SendEventRequest { val event = CSEvent( guid = guid, timestamp = Timestamp.getDefaultInstance(), @@ -150,8 +150,8 @@ public class ClickStreamConnectionTest { ) } - private fun transformToEventRequest(eventData: List): EventRequest { - return EventRequest.newBuilder().apply { + private fun transformToEventRequest(eventData: List): SendEventRequest { + return SendEventRequest.newBuilder().apply { reqGuid = "1011" sentTime = CSTimeStampMessageBuilder.build(System.currentTimeMillis()) addAllEvents(eventData.map { it.event() }) diff --git a/clickstream/src/test/kotlin/clickstream/fake/FakeCSHealthEventFactory.kt b/clickstream/src/test/kotlin/clickstream/fake/FakeCSHealthEventFactory.kt deleted file mode 100644 index 6ebc051a..00000000 --- a/clickstream/src/test/kotlin/clickstream/fake/FakeCSHealthEventFactory.kt +++ /dev/null @@ -1,10 +0,0 @@ -package clickstream.fake - -import clickstream.health.intermediate.CSHealthEventFactory -import com.gojek.clickstream.internal.Health - -internal class FakeCSHealthEventFactory : CSHealthEventFactory { - override suspend fun create(message: Health): Health { - return message - } -} \ No newline at end of file diff --git a/clickstream/src/test/kotlin/clickstream/fake/FakeCSMetaProvider.kt b/clickstream/src/test/kotlin/clickstream/fake/FakeCSMetaProvider.kt index d6421e89..f8a2b2d4 100644 --- a/clickstream/src/test/kotlin/clickstream/fake/FakeCSMetaProvider.kt +++ b/clickstream/src/test/kotlin/clickstream/fake/FakeCSMetaProvider.kt @@ -1,7 +1,7 @@ package clickstream.fake import clickstream.api.CSMetaProvider -import com.gojek.clickstream.internal.HealthMeta +import clickstream.health.proto.HealthMeta internal class FakeCSMetaProvider : CSMetaProvider { override suspend fun location(): HealthMeta.Location { diff --git a/clickstream/src/test/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessorTest.kt b/clickstream/src/test/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessorTest.kt index 7edadf23..cb552f00 100644 --- a/clickstream/src/test/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessorTest.kt +++ b/clickstream/src/test/kotlin/clickstream/health/internal/DefaultCSHealthEventProcessorTest.kt @@ -93,7 +93,6 @@ public class DefaultCSHealthEventProcessorTest { assertTrue(event.healthMeta.session.sessionId == fakeCSInfo.sessionInfo.sessionID) assertTrue(event.numberOfBatches == fakeCSHealthEventDTOs.map { it.eventBatchGuid }.size.toLong()) assertTrue(event.numberOfEvents == fakeCSHealthEventDTOs.map { it.eventGuid }.size.toLong()) - assertFalse(event.traceDetails.hasErrorDetails()) } } } @@ -122,8 +121,6 @@ public class DefaultCSHealthEventProcessorTest { assertTrue(event.healthMeta.session.sessionId == fakeCSInfo.sessionInfo.sessionID) assertTrue(event.numberOfBatches == 0L) assertTrue(event.numberOfEvents == 1L) - assertTrue(event.traceDetails.errorDetails.reason == fakeCSHealthEventDTOs[index].error) - assertTrue(event.traceDetails.timeToConnection == fakeCSHealthEventDTOs[index].timeToConnection.toString()) } } } diff --git a/clickstream/src/test/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSHealthEventFactoryTest.kt b/clickstream/src/test/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSHealthEventFactoryTest.kt index a4ec596a..af0b4af9 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSHealthEventFactoryTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/eventprocessor/impl/DefaultCSHealthEventFactoryTest.kt @@ -5,14 +5,14 @@ import clickstream.extension.protoName import clickstream.health.time.CSTimeStampGenerator import clickstream.health.identity.CSGuIdGenerator import clickstream.health.internal.DefaultCSHealthEventFactory -import com.gojek.clickstream.internal.Health -import com.gojek.clickstream.internal.HealthDetails -import com.gojek.clickstream.internal.HealthMeta -import com.gojek.clickstream.internal.HealthMeta.App -import com.gojek.clickstream.internal.HealthMeta.Customer -import com.gojek.clickstream.internal.HealthMeta.Device -import com.gojek.clickstream.internal.HealthMeta.Location -import com.gojek.clickstream.internal.HealthMeta.Session +import clickstream.health.proto.Health +import clickstream.health.proto.HealthDetails +import clickstream.health.proto.HealthMeta.Location +import clickstream.health.proto.HealthMeta.Device +import clickstream.health.proto.HealthMeta.App +import clickstream.health.proto.HealthMeta.Customer +import clickstream.health.proto.HealthMeta.Session +import clickstream.health.proto.HealthMeta.newBuilder import kotlinx.coroutines.runBlocking import org.junit.Assert.assertTrue import org.junit.Before @@ -82,7 +82,7 @@ public class DefaultCSHealthEventFactoryTest { .build() ) .setHealthMeta( - HealthMeta.newBuilder() + newBuilder() .setEventGuid("123456") .build() ) diff --git a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt index 2cd651e6..6c452e7a 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt @@ -18,6 +18,7 @@ import clickstream.health.intermediate.CSEventHealthListener import clickstream.health.intermediate.CSHealthEventProcessor import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSEventHealth +import clickstream.health.proto.Health import clickstream.health.time.CSEventGeneratedTimestampListener import clickstream.health.time.CSTimeStampGenerator import clickstream.internal.di.CSServiceLocator @@ -29,7 +30,6 @@ import clickstream.lifecycle.CSBackgroundLifecycleManager import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.internal.Health import com.gojek.clickstream.products.events.AdCardEvent import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.never diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt index 2342d9ea..784ad79a 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt @@ -1,6 +1,8 @@ package clickstream.internal.networklayer import clickstream.internal.eventscheduler.CSEventData +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.model.CSEvent @@ -11,8 +13,6 @@ import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory import com.gojek.clickstream.common.App import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.tinder.scarlet.Lifecycle @@ -53,10 +53,10 @@ internal class CSConnectionDroppedTest { public fun send_givenConnectionIsEstablished_shouldBeReceivedByTheServer() { // Given givenConnectionIsEstablished() - val testResponse: TestFlowObserver = server.observeResponse().flowTest() + val testResponse: TestFlowObserver = server.observeResponse().flowTest() - val eventRequest1: EventRequest = generatedEvent("1") - val eventRequest2: EventRequest = generatedEvent("2") + val eventRequest1: SendEventRequest = generatedEvent("1") + val eventRequest2: SendEventRequest = generatedEvent("2") // When val event1 = client.sendEvent(eventRequest1) @@ -71,7 +71,7 @@ internal class CSConnectionDroppedTest { Assertions.assertThat(event4).isTrue Assertions.assertThat(testResponse.values).allSatisfy { e -> - e is EventResponse + e is SendEventResponse } serverLifecycleRegistry.onNext(Lifecycle.State.Stopped.WithReason(ShutdownReason.GRACEFUL)) @@ -86,7 +86,7 @@ internal class CSConnectionDroppedTest { ) } - private fun generatedEvent(guid: String): EventRequest { + private fun generatedEvent(guid: String): SendEventRequest { val event = CSEvent( guid = guid, timestamp = Timestamp.getDefaultInstance(), @@ -151,8 +151,8 @@ internal class CSConnectionDroppedTest { ) } - private fun transformToEventRequest(eventData: List): EventRequest { - return EventRequest.newBuilder().apply { + private fun transformToEventRequest(eventData: List): SendEventRequest { + return SendEventRequest.newBuilder().apply { reqGuid = "1011" sentTime = CSTimeStampMessageBuilder.build(System.currentTimeMillis()) addAllEvents(eventData.map { it.event() }) diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt index dc55dac4..a4bbb680 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt @@ -7,6 +7,8 @@ import clickstream.health.constant.CSEventTypesConstant import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO import clickstream.health.time.CSTimeStampGenerator +import clickstream.internal.networklayer.proto.raccoon.Event +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger @@ -14,8 +16,6 @@ import clickstream.utils.CoroutineTestRule import clickstream.utils.TestFlowObserver import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory -import com.gojek.clickstream.de.Event -import com.gojek.clickstream.de.EventRequest import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.nhaarman.mockitokotlin2.mock @@ -68,7 +68,7 @@ internal class CSHealthMetricsBatchTimeoutTest { givenConnectionIsEstablished() // When - val eventRequest = EventRequest.newBuilder() + val eventRequest = SendEventRequest.newBuilder() .setReqGuid("1234") .setSentTime(Timestamp.getDefaultInstance()) .addEvents( diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionClosedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionClosedTest.kt index 076a0abc..2b53a23f 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionClosedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionClosedTest.kt @@ -6,9 +6,9 @@ import clickstream.health.constant.CSEventNamesConstant import clickstream.health.constant.CSEventTypesConstant import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times @@ -86,7 +86,7 @@ internal class CSHealthMetricsConnectionClosedTest { } private class FakeCSEventService : CSEventService { - override fun observeResponse(): Flow { + override fun observeResponse(): Flow { throw IllegalAccessException("broken") } @@ -96,7 +96,7 @@ internal class CSHealthMetricsConnectionClosedTest { } } - override fun sendEvent(streamBatchEvents: EventRequest): Boolean { + override fun sendEvent(streamBatchEvents: SendEventRequest): Boolean { throw IllegalAccessException("broken") } } diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionFailedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionFailedTest.kt index 1449f26a..a86e6dc7 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionFailedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionFailedTest.kt @@ -6,9 +6,9 @@ import clickstream.health.constant.CSEventNamesConstant import clickstream.health.constant.CSEventTypesConstant import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times @@ -88,7 +88,7 @@ internal class CSHealthMetricsConnectionFailedTest { } private class FakeCSEventService : CSEventService { - override fun observeResponse(): Flow { + override fun observeResponse(): Flow { throw IllegalAccessException("broken") } @@ -98,7 +98,7 @@ internal class CSHealthMetricsConnectionFailedTest { } } - override fun sendEvent(streamBatchEvents: EventRequest): Boolean { + override fun sendEvent(streamBatchEvents: SendEventRequest): Boolean { throw IllegalAccessException("broken") } } diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionOpenedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionOpenedTest.kt index a2b2e22e..b0d21956 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionOpenedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsConnectionOpenedTest.kt @@ -6,14 +6,15 @@ import clickstream.health.constant.CSEventNamesConstant import clickstream.health.constant.CSEventTypesConstant import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.model.CSHealthEventDTO +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest +import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.de.EventRequest -import com.gojek.clickstream.de.common.EventResponse import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify import com.tinder.scarlet.WebSocket +import com.tinder.scarlet.ws.Send import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.flow.Flow @@ -86,7 +87,7 @@ internal class CSHealthMetricsConnectionOpenedTest { } private class FakeCSEventService : CSEventService { - override fun observeResponse(): Flow { + override fun observeResponse(): Flow { throw IllegalAccessException("broken") } @@ -96,7 +97,7 @@ internal class CSHealthMetricsConnectionOpenedTest { } } - override fun sendEvent(streamBatchEvents: EventRequest): Boolean { + override fun sendEvent(streamBatchEvents: SendEventRequest): Boolean { throw IllegalAccessException("broken") } } diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSRetryableCallbackTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSRetryableCallbackTest.kt index d45ed2e9..b87c7f89 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSRetryableCallbackTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSRetryableCallbackTest.kt @@ -4,6 +4,7 @@ import clickstream.config.CSNetworkConfig import clickstream.fake.fakeCSInfo import clickstream.health.intermediate.CSHealthEventRepository import clickstream.health.time.CSTimeStampGenerator +import clickstream.internal.networklayer.proto.raccoon.SendEventRequest import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.logger.CSLogLevel.OFF import clickstream.logger.CSLogger @@ -12,7 +13,6 @@ import clickstream.utils.TestFlowObserver import clickstream.utils.any import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory -import com.gojek.clickstream.de.EventRequest import com.nhaarman.mockitokotlin2.mock import com.tinder.scarlet.Lifecycle import com.tinder.scarlet.Scarlet @@ -57,7 +57,7 @@ public class CSRetryableCallbackTest { givenConnectionIsEstablished() // When - val eventRequest = EventRequest.newBuilder() + val eventRequest = SendEventRequest.newBuilder() .build() // Then diff --git a/libs/proto-sdk-1.18.6.jar b/libs/proto-sdk-1.18.6.jar deleted file mode 100644 index 501f270f4ab16941c84ce06238039ece31122960..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97493 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 z 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 diff --git a/protos/health/Health.proto b/protos/health/Health.proto new file mode 100644 index 00000000..df75fa3c --- /dev/null +++ b/protos/health/Health.proto @@ -0,0 +1,40 @@ +//platform="ios,android" +syntax = "proto3"; + +package clickstream.health.proto; + +option java_multiple_files = true; +option java_package = "clickstream.health.proto"; +option java_outer_classname = "HealthProto"; + +option go_package = "source.golabs.io/mobile/clickstream-go-proto/sdk-internal/clickstream"; + +import "HealthMeta.proto"; +import "google/protobuf/timestamp.proto"; + +message HealthDetails { + // Array of event guids. + repeated string event_guids = 1; + // Array of event batch guids. + repeated string event_batch_guids = 2; +} + +message Health { + + // Name of the health event. + string event_name = 1; + // Health details, captured by the SDK when the mode is verbose. + HealthDetails healthDetails = 2; + // Number of events tracked. + int64 number_of_events = 3; + // Number of event batches tracked. + int64 number_of_batches = 4; + + // Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden. + google.protobuf.Timestamp event_timestamp = 101; + // Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden. + + clickstream.health.proto.HealthMeta healthMeta = 103; + // Note: Auto-filled by the ClickStream SDK, need not be set by the products for every event! If set, will be overridden. + google.protobuf.Timestamp device_timestamp = 104; +} \ No newline at end of file diff --git a/protos/health/HealthMeta.proto b/protos/health/HealthMeta.proto new file mode 100644 index 00000000..f62ad7a4 --- /dev/null +++ b/protos/health/HealthMeta.proto @@ -0,0 +1,49 @@ +//platform="ios,android" +syntax = "proto3"; + +package clickstream.health.proto; + +option java_multiple_files = true; +option java_package = "clickstream.health.proto"; +option java_outer_classname = "HealthMetaProto"; + +option go_package = "source.golabs.io/mobile/clickstream-go-proto/sdk-internal/clickstream"; + +message HealthMeta { + + message App { + string version = 1; + } + + message Customer { + string signed_up_country = 1; + string current_country = 2; + int32 identity = 3; + string email = 4; + } + + message Device { + string operating_system = 1; + string operating_system_version = 2; + string device_make = 3; + string device_model = 4; + } + + message Location { + double latitude = 1; + double longitude = 2; + } + + message Session { + string session_id = 1; + } + + string event_guid = 1; + + Location location = 4; + Customer customer = 5; + Device device = 6; + Session session = 7; + App app = 8; +} + diff --git a/settings.gradle b/settings.gradle index 84fe6b9e..6c005b65 100644 --- a/settings.gradle +++ b/settings.gradle @@ -13,5 +13,6 @@ include ':clickstream-event-listener' include ':clickstream-event-visualiser-ui' include ':clickstream-event-visualiser-noop' include ':clickstream-event-visualiser-ui-noop' +include ':clickstream-health-proto' enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") From 5e227b480d147fdcb4ec9a169214c933eec8ca04 Mon Sep 17 00:00:00 2001 From: Akash Raje Date: Fri, 24 Nov 2023 12:10:24 +0530 Subject: [PATCH 2/3] WIP Remove proto deps --- app/build.gradle.kts | 1 - .../java/com/clickstream/app/proto/App.java | 498 +++++++ .../clickstream/app/proto/AppOrBuilder.java | 55 + .../com/clickstream/app/proto/AppProto.java | 16 + .../com/clickstream/app/proto/Device.java | 784 ++++++++++ .../app/proto/DeviceOrBuilder.java | 97 ++ .../clickstream/app/proto/DeviceProto.java | 16 + .../java/com/clickstream/app/proto/User.java | 1316 +++++++++++++++++ .../clickstream/app/proto/UserOrBuilder.java | 166 +++ .../com/clickstream/app/proto/UserProto.java | 16 + clickstream/build.gradle.kts | 1 - .../networklayer/CSConnectionDroppedTest.kt | 2 +- protos/client/App.proto | 28 + protos/client/Device.proto | 38 + protos/client/User.proto | 64 + 15 files changed, 3095 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/clickstream/app/proto/App.java create mode 100644 app/src/main/java/com/clickstream/app/proto/AppOrBuilder.java create mode 100644 app/src/main/java/com/clickstream/app/proto/AppProto.java create mode 100644 app/src/main/java/com/clickstream/app/proto/Device.java create mode 100644 app/src/main/java/com/clickstream/app/proto/DeviceOrBuilder.java create mode 100644 app/src/main/java/com/clickstream/app/proto/DeviceProto.java create mode 100644 app/src/main/java/com/clickstream/app/proto/User.java create mode 100644 app/src/main/java/com/clickstream/app/proto/UserOrBuilder.java create mode 100644 app/src/main/java/com/clickstream/app/proto/UserProto.java create mode 100644 protos/client/App.proto create mode 100644 protos/client/Device.proto create mode 100644 protos/client/User.proto diff --git a/app/build.gradle.kts b/app/build.gradle.kts index e8b2ddc3..3fd7b344 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -123,7 +123,6 @@ dependencies { implementation(projects.clickstreamHealthMetrics) implementation(projects.clickstreamEventVisualiser) implementation(projects.clickstreamEventVisualiserUi) - implementation(files("$rootDir/libs/proto-consumer-1.18.6.jar")) // Common implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1") diff --git a/app/src/main/java/com/clickstream/app/proto/App.java b/app/src/main/java/com/clickstream/app/proto/App.java new file mode 100644 index 00000000..8ec100da --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/App.java @@ -0,0 +1,498 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package com.clickstream.app.proto; + +/** + *
+ * Corresponds to the details for the app used by the user.
+ * 
+ * + * Protobuf type {@code clickstream.proto.App} + */ +public final class App extends + com.google.protobuf.GeneratedMessageLite< + App, App.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.App) + AppOrBuilder { + private App() { + version_ = ""; + packageName_ = ""; + } + public static final int VERSION_FIELD_NUMBER = 1; + private String version_; + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return version_; + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(version_); + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @param value The version to set. + */ + private void setVersion( + String value) { + Class valueClass = value.getClass(); + + version_ = value; + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + */ + private void clearVersion() { + + version_ = getDefaultInstance().getVersion(); + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @param value The bytes for version to set. + */ + private void setVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + version_ = value.toStringUtf8(); + + } + + public static final int PACKAGE_NAME_FIELD_NUMBER = 2; + private String packageName_; + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The packageName. + */ + @Override + public String getPackageName() { + return packageName_; + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + @Override + public com.google.protobuf.ByteString + getPackageNameBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(packageName_); + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @param value The packageName to set. + */ + private void setPackageName( + String value) { + Class valueClass = value.getClass(); + + packageName_ = value; + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + */ + private void clearPackageName() { + + packageName_ = getDefaultInstance().getPackageName(); + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @param value The bytes for packageName to set. + */ + private void setPackageNameBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + packageName_ = value.toStringUtf8(); + + } + + public static App parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static App parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(App prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the details for the app used by the user.
+   * 
+ * + * Protobuf type {@code clickstream.proto.App} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + App, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.App) + AppOrBuilder { + // Construct using com.clickstream.app.proto.App.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return instance.getVersion(); + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return instance.getVersionBytes(); + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @param value The version to set. + * @return This builder for chaining. + */ + public Builder setVersion( + String value) { + copyOnWrite(); + instance.setVersion(value); + return this; + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return This builder for chaining. + */ + public Builder clearVersion() { + copyOnWrite(); + instance.clearVersion(); + return this; + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @param value The bytes for version to set. + * @return This builder for chaining. + */ + public Builder setVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setVersionBytes(value); + return this; + } + + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return The packageName. + */ + @Override + public String getPackageName() { + return instance.getPackageName(); + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + @Override + public com.google.protobuf.ByteString + getPackageNameBytes() { + return instance.getPackageNameBytes(); + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @param value The packageName to set. + * @return This builder for chaining. + */ + public Builder setPackageName( + String value) { + copyOnWrite(); + instance.setPackageName(value); + return this; + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return This builder for chaining. + */ + public Builder clearPackageName() { + copyOnWrite(); + instance.clearPackageName(); + return this; + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @param value The bytes for packageName to set. + * @return This builder for chaining. + */ + public Builder setPackageNameBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setPackageNameBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.App) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new App(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "version_", + "packageName_", + }; + String info = + "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + ""; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (App.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.App) + private static final App DEFAULT_INSTANCE; + static { + App defaultInstance = new App(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + App.class, defaultInstance); + } + + public static App getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/app/src/main/java/com/clickstream/app/proto/AppOrBuilder.java b/app/src/main/java/com/clickstream/app/proto/AppOrBuilder.java new file mode 100644 index 00000000..daac8d8d --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/AppOrBuilder.java @@ -0,0 +1,55 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package com.clickstream.app.proto; + +public interface AppOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.App) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The version. + */ + String getVersion(); + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The bytes for version. + */ + com.google.protobuf.ByteString + getVersionBytes(); + + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The packageName. + */ + String getPackageName(); + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + com.google.protobuf.ByteString + getPackageNameBytes(); +} diff --git a/app/src/main/java/com/clickstream/app/proto/AppProto.java b/app/src/main/java/com/clickstream/app/proto/AppProto.java new file mode 100644 index 00000000..4d2eedd0 --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/AppProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package com.clickstream.app.proto; + +public final class AppProto { + private AppProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/app/src/main/java/com/clickstream/app/proto/Device.java b/app/src/main/java/com/clickstream/app/proto/Device.java new file mode 100644 index 00000000..5db076a4 --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/Device.java @@ -0,0 +1,784 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package com.clickstream.app.proto; + +/** + *
+ * Corresponds to the device being used by the customer. Holds the respective details for the device under use.
+ * 
+ * + * Protobuf type {@code clickstream.proto.Device} + */ +public final class Device extends + com.google.protobuf.GeneratedMessageLite< + Device, Device.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.Device) + DeviceOrBuilder { + private Device() { + operatingSystem_ = ""; + operatingSystemVersion_ = ""; + deviceMake_ = ""; + deviceModel_ = ""; + } + public static final int OPERATING_SYSTEM_FIELD_NUMBER = 1; + private String operatingSystem_; + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return operatingSystem_; + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystem_); + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @param value The operatingSystem to set. + */ + private void setOperatingSystem( + String value) { + Class valueClass = value.getClass(); + + operatingSystem_ = value; + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + */ + private void clearOperatingSystem() { + + operatingSystem_ = getDefaultInstance().getOperatingSystem(); + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + */ + private void setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystem_ = value.toStringUtf8(); + + } + + public static final int OPERATING_SYSTEM_VERSION_FIELD_NUMBER = 2; + private String operatingSystemVersion_; + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return operatingSystemVersion_; + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystemVersion_); + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + */ + private void setOperatingSystemVersion( + String value) { + Class valueClass = value.getClass(); + + operatingSystemVersion_ = value; + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + */ + private void clearOperatingSystemVersion() { + + operatingSystemVersion_ = getDefaultInstance().getOperatingSystemVersion(); + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + */ + private void setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystemVersion_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MAKE_FIELD_NUMBER = 3; + private String deviceMake_; + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return deviceMake_; + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceMake_); + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @param value The deviceMake to set. + */ + private void setDeviceMake( + String value) { + Class valueClass = value.getClass(); + + deviceMake_ = value; + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + */ + private void clearDeviceMake() { + + deviceMake_ = getDefaultInstance().getDeviceMake(); + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @param value The bytes for deviceMake to set. + */ + private void setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceMake_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MODEL_FIELD_NUMBER = 4; + private String deviceModel_; + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return deviceModel_; + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceModel_); + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @param value The deviceModel to set. + */ + private void setDeviceModel( + String value) { + Class valueClass = value.getClass(); + + deviceModel_ = value; + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + */ + private void clearDeviceModel() { + + deviceModel_ = getDefaultInstance().getDeviceModel(); + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @param value The bytes for deviceModel to set. + */ + private void setDeviceModelBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceModel_ = value.toStringUtf8(); + + } + + public static Device parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Device parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Device prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the device being used by the customer. Holds the respective details for the device under use.
+   * 
+ * + * Protobuf type {@code clickstream.proto.Device} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Device, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.Device) + DeviceOrBuilder { + // Construct using com.clickstream.app.proto.Device.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return instance.getOperatingSystem(); + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return instance.getOperatingSystemBytes(); + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @param value The operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystem( + String value) { + copyOnWrite(); + instance.setOperatingSystem(value); + return this; + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return This builder for chaining. + */ + public Builder clearOperatingSystem() { + copyOnWrite(); + instance.clearOperatingSystem(); + return this; + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemBytes(value); + return this; + } + + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return instance.getOperatingSystemVersion(); + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return instance.getOperatingSystemVersionBytes(); + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersion( + String value) { + copyOnWrite(); + instance.setOperatingSystemVersion(value); + return this; + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return This builder for chaining. + */ + public Builder clearOperatingSystemVersion() { + copyOnWrite(); + instance.clearOperatingSystemVersion(); + return this; + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemVersionBytes(value); + return this; + } + + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return instance.getDeviceMake(); + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return instance.getDeviceMakeBytes(); + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @param value The deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMake( + String value) { + copyOnWrite(); + instance.setDeviceMake(value); + return this; + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return This builder for chaining. + */ + public Builder clearDeviceMake() { + copyOnWrite(); + instance.clearDeviceMake(); + return this; + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @param value The bytes for deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceMakeBytes(value); + return this; + } + + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return instance.getDeviceModel(); + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return instance.getDeviceModelBytes(); + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @param value The deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModel( + String value) { + copyOnWrite(); + instance.setDeviceModel(value); + return this; + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return This builder for chaining. + */ + public Builder clearDeviceModel() { + copyOnWrite(); + instance.clearDeviceModel(); + return this; + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @param value The bytes for deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModelBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceModelBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.Device) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Device(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "operatingSystem_", + "operatingSystemVersion_", + "deviceMake_", + "deviceModel_", + }; + String info = + "\u0000\u0004\u0000\u0000\u0001\u0004\u0004\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + "\u0003\u0208\u0004\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Device.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.Device) + private static final Device DEFAULT_INSTANCE; + static { + Device defaultInstance = new Device(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Device.class, defaultInstance); + } + + public static Device getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/app/src/main/java/com/clickstream/app/proto/DeviceOrBuilder.java b/app/src/main/java/com/clickstream/app/proto/DeviceOrBuilder.java new file mode 100644 index 00000000..4d5eb8fe --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/DeviceOrBuilder.java @@ -0,0 +1,97 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package com.clickstream.app.proto; + +public interface DeviceOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.Device) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + String getOperatingSystem(); + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + com.google.protobuf.ByteString + getOperatingSystemBytes(); + + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + String getOperatingSystemVersion(); + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + com.google.protobuf.ByteString + getOperatingSystemVersionBytes(); + + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + String getDeviceMake(); + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + com.google.protobuf.ByteString + getDeviceMakeBytes(); + + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + String getDeviceModel(); + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + com.google.protobuf.ByteString + getDeviceModelBytes(); +} diff --git a/app/src/main/java/com/clickstream/app/proto/DeviceProto.java b/app/src/main/java/com/clickstream/app/proto/DeviceProto.java new file mode 100644 index 00000000..b127f74c --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/DeviceProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package com.clickstream.app.proto; + +public final class DeviceProto { + private DeviceProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/app/src/main/java/com/clickstream/app/proto/User.java b/app/src/main/java/com/clickstream/app/proto/User.java new file mode 100644 index 00000000..5512871b --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/User.java @@ -0,0 +1,1316 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package com.clickstream.app.proto; + +/** + *
+ * Corresponds to the details for the user.
+ * 
+ * + * Protobuf type {@code clickstream.proto.User} + */ +public final class User extends + com.google.protobuf.GeneratedMessageLite< + User, User.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.User) + UserOrBuilder { + private User() { + guid_ = ""; + name_ = ""; + gender_ = ""; + email_ = ""; + } + public static final int GUID_FIELD_NUMBER = 1; + private String guid_; + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The guid. + */ + @Override + public String getGuid() { + return guid_; + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + @Override + public com.google.protobuf.ByteString + getGuidBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(guid_); + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @param value The guid to set. + */ + private void setGuid( + String value) { + Class valueClass = value.getClass(); + + guid_ = value; + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + */ + private void clearGuid() { + + guid_ = getDefaultInstance().getGuid(); + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @param value The bytes for guid to set. + */ + private void setGuidBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + guid_ = value.toStringUtf8(); + + } + + public static final int NAME_FIELD_NUMBER = 2; + private String name_; + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The name. + */ + @Override + public String getName() { + return name_; + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The bytes for name. + */ + @Override + public com.google.protobuf.ByteString + getNameBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(name_); + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @param value The name to set. + */ + private void setName( + String value) { + Class valueClass = value.getClass(); + + name_ = value; + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + */ + private void clearName() { + + name_ = getDefaultInstance().getName(); + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @param value The bytes for name to set. + */ + private void setNameBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + name_ = value.toStringUtf8(); + + } + + public static final int AGE_FIELD_NUMBER = 3; + private int age_; + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @return The age. + */ + @Override + public int getAge() { + return age_; + } + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @param value The age to set. + */ + private void setAge(int value) { + + age_ = value; + } + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + */ + private void clearAge() { + + age_ = 0; + } + + public static final int GENDER_FIELD_NUMBER = 4; + private String gender_; + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The gender. + */ + @Override + public String getGender() { + return gender_; + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + @Override + public com.google.protobuf.ByteString + getGenderBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(gender_); + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @param value The gender to set. + */ + private void setGender( + String value) { + Class valueClass = value.getClass(); + + gender_ = value; + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + */ + private void clearGender() { + + gender_ = getDefaultInstance().getGender(); + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @param value The bytes for gender to set. + */ + private void setGenderBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + gender_ = value.toStringUtf8(); + + } + + public static final int PHONE_NUMBER_FIELD_NUMBER = 5; + private long phoneNumber_; + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + @Override + public long getPhoneNumber() { + return phoneNumber_; + } + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @param value The phoneNumber to set. + */ + private void setPhoneNumber(long value) { + + phoneNumber_ = value; + } + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + */ + private void clearPhoneNumber() { + + phoneNumber_ = 0L; + } + + public static final int EMAIL_FIELD_NUMBER = 6; + private String email_; + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The email. + */ + @Override + public String getEmail() { + return email_; + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(email_); + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @param value The email to set. + */ + private void setEmail( + String value) { + Class valueClass = value.getClass(); + + email_ = value; + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + */ + private void clearEmail() { + + email_ = getDefaultInstance().getEmail(); + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @param value The bytes for email to set. + */ + private void setEmailBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + email_ = value.toStringUtf8(); + + } + + public static final int APP_FIELD_NUMBER = 7; + private App app_; + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public boolean hasApp() { + return app_ != null; + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public App getApp() { + return app_ == null ? App.getDefaultInstance() : app_; + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + private void setApp(App value) { + value.getClass(); + app_ = value; + + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeApp(App value) { + value.getClass(); + if (app_ != null && + app_ != App.getDefaultInstance()) { + app_ = + App.newBuilder(app_).mergeFrom(value).buildPartial(); + } else { + app_ = value; + } + + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + private void clearApp() { app_ = null; + + } + + public static final int DEVICE_FIELD_NUMBER = 8; + private Device device_; + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public boolean hasDevice() { + return device_ != null; + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public Device getDevice() { + return device_ == null ? Device.getDefaultInstance() : device_; + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + private void setDevice(Device value) { + value.getClass(); + device_ = value; + + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDevice(Device value) { + value.getClass(); + if (device_ != null && + device_ != Device.getDefaultInstance()) { + device_ = + Device.newBuilder(device_).mergeFrom(value).buildPartial(); + } else { + device_ = value; + } + + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + private void clearDevice() { device_ = null; + + } + + public static final int DEVICE_TIMESTAMP_FIELD_NUMBER = 9; + private com.google.protobuf.Timestamp deviceTimestamp_; + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public boolean hasDeviceTimestamp() { + return deviceTimestamp_ != null; + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return deviceTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : deviceTimestamp_; + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + private void setDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + deviceTimestamp_ = value; + + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + if (deviceTimestamp_ != null && + deviceTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + deviceTimestamp_ = + com.google.protobuf.Timestamp.newBuilder(deviceTimestamp_).mergeFrom(value).buildPartial(); + } else { + deviceTimestamp_ = value; + } + + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + private void clearDeviceTimestamp() { deviceTimestamp_ = null; + + } + + public static User parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static User parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static User parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static User parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static User parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static User parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(User prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the details for the user.
+   * 
+ * + * Protobuf type {@code clickstream.proto.User} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + User, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.User) + UserOrBuilder { + // Construct using com.clickstream.app.proto.User.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return The guid. + */ + @Override + public String getGuid() { + return instance.getGuid(); + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + @Override + public com.google.protobuf.ByteString + getGuidBytes() { + return instance.getGuidBytes(); + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @param value The guid to set. + * @return This builder for chaining. + */ + public Builder setGuid( + String value) { + copyOnWrite(); + instance.setGuid(value); + return this; + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return This builder for chaining. + */ + public Builder clearGuid() { + copyOnWrite(); + instance.clearGuid(); + return this; + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @param value The bytes for guid to set. + * @return This builder for chaining. + */ + public Builder setGuidBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setGuidBytes(value); + return this; + } + + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return The name. + */ + @Override + public String getName() { + return instance.getName(); + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return The bytes for name. + */ + @Override + public com.google.protobuf.ByteString + getNameBytes() { + return instance.getNameBytes(); + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + String value) { + copyOnWrite(); + instance.setName(value); + return this; + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return This builder for chaining. + */ + public Builder clearName() { + copyOnWrite(); + instance.clearName(); + return this; + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setNameBytes(value); + return this; + } + + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @return The age. + */ + @Override + public int getAge() { + return instance.getAge(); + } + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @param value The age to set. + * @return This builder for chaining. + */ + public Builder setAge(int value) { + copyOnWrite(); + instance.setAge(value); + return this; + } + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @return This builder for chaining. + */ + public Builder clearAge() { + copyOnWrite(); + instance.clearAge(); + return this; + } + + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return The gender. + */ + @Override + public String getGender() { + return instance.getGender(); + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + @Override + public com.google.protobuf.ByteString + getGenderBytes() { + return instance.getGenderBytes(); + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @param value The gender to set. + * @return This builder for chaining. + */ + public Builder setGender( + String value) { + copyOnWrite(); + instance.setGender(value); + return this; + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return This builder for chaining. + */ + public Builder clearGender() { + copyOnWrite(); + instance.clearGender(); + return this; + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @param value The bytes for gender to set. + * @return This builder for chaining. + */ + public Builder setGenderBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setGenderBytes(value); + return this; + } + + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + @Override + public long getPhoneNumber() { + return instance.getPhoneNumber(); + } + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @param value The phoneNumber to set. + * @return This builder for chaining. + */ + public Builder setPhoneNumber(long value) { + copyOnWrite(); + instance.setPhoneNumber(value); + return this; + } + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @return This builder for chaining. + */ + public Builder clearPhoneNumber() { + copyOnWrite(); + instance.clearPhoneNumber(); + return this; + } + + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return The email. + */ + @Override + public String getEmail() { + return instance.getEmail(); + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return instance.getEmailBytes(); + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @param value The email to set. + * @return This builder for chaining. + */ + public Builder setEmail( + String value) { + copyOnWrite(); + instance.setEmail(value); + return this; + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return This builder for chaining. + */ + public Builder clearEmail() { + copyOnWrite(); + instance.clearEmail(); + return this; + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @param value The bytes for email to set. + * @return This builder for chaining. + */ + public Builder setEmailBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEmailBytes(value); + return this; + } + + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public boolean hasApp() { + return instance.hasApp(); + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public App getApp() { + return instance.getApp(); + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder setApp(App value) { + copyOnWrite(); + instance.setApp(value); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder setApp( + App.Builder builderForValue) { + copyOnWrite(); + instance.setApp(builderForValue.build()); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder mergeApp(App value) { + copyOnWrite(); + instance.mergeApp(value); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder clearApp() { copyOnWrite(); + instance.clearApp(); + return this; + } + + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public boolean hasDevice() { + return instance.hasDevice(); + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public Device getDevice() { + return instance.getDevice(); + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder setDevice(Device value) { + copyOnWrite(); + instance.setDevice(value); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder setDevice( + Device.Builder builderForValue) { + copyOnWrite(); + instance.setDevice(builderForValue.build()); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder mergeDevice(Device value) { + copyOnWrite(); + instance.mergeDevice(value); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder clearDevice() { copyOnWrite(); + instance.clearDevice(); + return this; + } + + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public boolean hasDeviceTimestamp() { + return instance.hasDeviceTimestamp(); + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return instance.getDeviceTimestamp(); + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder setDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.setDeviceTimestamp(value); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder setDeviceTimestamp( + com.google.protobuf.Timestamp.Builder builderForValue) { + copyOnWrite(); + instance.setDeviceTimestamp(builderForValue.build()); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.mergeDeviceTimestamp(value); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder clearDeviceTimestamp() { copyOnWrite(); + instance.clearDeviceTimestamp(); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.User) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new User(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "guid_", + "name_", + "age_", + "gender_", + "phoneNumber_", + "email_", + "app_", + "device_", + "deviceTimestamp_", + }; + String info = + "\u0000\t\u0000\u0000\u0001\t\t\u0000\u0000\u0000\u0001\u0208\u0002\u0208\u0003\u0004" + + "\u0004\u0208\u0005\u0002\u0006\u0208\u0007\t\b\t\t\t"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (User.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.User) + private static final User DEFAULT_INSTANCE; + static { + User defaultInstance = new User(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + User.class, defaultInstance); + } + + public static User getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/app/src/main/java/com/clickstream/app/proto/UserOrBuilder.java b/app/src/main/java/com/clickstream/app/proto/UserOrBuilder.java new file mode 100644 index 00000000..0eefa6a7 --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/UserOrBuilder.java @@ -0,0 +1,166 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package com.clickstream.app.proto; + +public interface UserOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.User) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The guid. + */ + String getGuid(); + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + com.google.protobuf.ByteString + getGuidBytes(); + + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The name. + */ + String getName(); + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @return The age. + */ + int getAge(); + + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The gender. + */ + String getGender(); + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + com.google.protobuf.ByteString + getGenderBytes(); + + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + long getPhoneNumber(); + + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The email. + */ + String getEmail(); + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The bytes for email. + */ + com.google.protobuf.ByteString + getEmailBytes(); + + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + * @return Whether the app field is set. + */ + boolean hasApp(); + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + * @return The app. + */ + App getApp(); + + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + * @return Whether the device field is set. + */ + boolean hasDevice(); + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + * @return The device. + */ + Device getDevice(); + + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + * @return Whether the deviceTimestamp field is set. + */ + boolean hasDeviceTimestamp(); + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + * @return The deviceTimestamp. + */ + com.google.protobuf.Timestamp getDeviceTimestamp(); +} diff --git a/app/src/main/java/com/clickstream/app/proto/UserProto.java b/app/src/main/java/com/clickstream/app/proto/UserProto.java new file mode 100644 index 00000000..6823c621 --- /dev/null +++ b/app/src/main/java/com/clickstream/app/proto/UserProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package com.clickstream.app.proto; + +public final class UserProto { + private UserProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream/build.gradle.kts b/clickstream/build.gradle.kts index 40988de5..a24d2c44 100644 --- a/clickstream/build.gradle.kts +++ b/clickstream/build.gradle.kts @@ -64,7 +64,6 @@ dependencies { // Unit Test deps.android.test.unitTest.list.forEach(::testImplementation) - testImplementation(files("$rootDir/libs/proto-consumer-1.18.6.jar")) testImplementation(projects.clickstreamHealthMetrics) testImplementation(projects.clickstreamApi) testImplementation(projects.clickstreamHealthMetricsApi) diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt index 784ad79a..0c0c3f4b 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt @@ -90,7 +90,7 @@ internal class CSConnectionDroppedTest { val event = CSEvent( guid = guid, timestamp = Timestamp.getDefaultInstance(), - message = AdCardEvent.newBuilder() + message = App.newBuilder() .setMeta( EventMeta.newBuilder() .setApp(App.newBuilder().setVersion("4.35.0")) diff --git a/protos/client/App.proto b/protos/client/App.proto new file mode 100644 index 00000000..c911352c --- /dev/null +++ b/protos/client/App.proto @@ -0,0 +1,28 @@ + +syntax = "proto3"; + +package clickstream.proto; + +option java_multiple_files = true; +option java_package = "com.clickstream.app.proto"; +option java_outer_classname = "AppProto"; + + +// +// Corresponds to the details for the app used by the user. +// +message App { + + // + // Version of the client app. Use this property to send version with every event. + // This allows for segmentation based on the app version. + // Sample values: "1.0.0", "1.0.1". + // + string version = 1; + + // + // Package name of the client app. Use this property to send package name with every event. + // Sample values: "com.clickstream.app". + // + string package_name = 2; +} \ No newline at end of file diff --git a/protos/client/Device.proto b/protos/client/Device.proto new file mode 100644 index 00000000..68e7b6f5 --- /dev/null +++ b/protos/client/Device.proto @@ -0,0 +1,38 @@ + +syntax = "proto3"; + +package clickstream.proto; + +option java_multiple_files = true; +option java_package = "com.clickstream.app.proto"; +option java_outer_classname = "DeviceProto"; + +// +// Corresponds to the device being used by the customer. Holds the respective details for the device under use. +// +message Device { + + // + // Operating system of the device. + // Sample values: "iOS", "Android". + // + string operating_system = 1; + + // + // Version of the Operating system. + // Sample values: "29", "15.1". + // + string operating_system_version = 2; + + // + // Device manufacturer name. + // Sample values: "Samsung", "HMD Global", "Apple" + // + string device_make = 3; + + // + // Device model information. + // Sample values: "iPhone 11", "Samsung M90". + // + string device_model = 4; +} \ No newline at end of file diff --git a/protos/client/User.proto b/protos/client/User.proto new file mode 100644 index 00000000..ccaa42d3 --- /dev/null +++ b/protos/client/User.proto @@ -0,0 +1,64 @@ + +syntax = "proto3"; + +package clickstream.proto; + +option java_multiple_files = true; +option java_package = "com.clickstream.app.proto"; +option java_outer_classname = "UserProto"; + + +import "App.proto"; +import "Device.proto"; +import "google/protobuf/timestamp.proto"; + +// +// Corresponds to the details for the user. +// +message User { + + // + // Unique identy of the user. + // + string guid = 1; + + // + // User's full name. + // + string name = 2; + + // + // User's age. + // + int32 age = 3; + + // + // User's gender. + // + string gender = 4; + + // + // User's phone number. + // + int64 phone_number = 5; + + // + // User's email address. + // + string email = 6; + + // + // User's app details. + // + App app = 7; + + // + // User's device details. + // + Device device = 8; + + // + // Timestamp for the event. + // + google.protobuf.Timestamp device_timestamp = 9; +} From 6cb7ed58f945edddb05bb72336133c51d8795c08 Mon Sep 17 00:00:00 2001 From: akashraje Date: Thu, 1 Feb 2024 13:06:49 +0530 Subject: [PATCH 3/3] Remove proto dependancies --- .../com/clickstream/app/main/MainViewModel.kt | 30 +- .../clickstream/ClickStreamConnectionTest.kt | 17 +- .../clickstream/ClickStreamFunctionalTest.kt | 111 -- .../ClickStreamMerchantFunctionalTest.kt | 121 -- .../clickstream/extension/CSMessageExtTest.kt | 74 +- .../clickstream/fake/FakeEventWrapperData.kt | 43 +- .../CSBackgroundEventSchedulerTest.kt | 8 +- .../CSBackgroundSchedulerTest.kt | 26 +- .../CSForegroundEventSchedulerTest.kt | 16 +- .../networklayer/CSConnectionDroppedTest.kt | 17 +- .../CSHealthMetricsBatchTimeoutTest.kt | 4 +- .../test/kotlin/clickstream/proto/App.java | 498 +++++++ .../clickstream/proto/AppOrBuilder.java | 55 + .../kotlin/clickstream/proto/AppProto.java | 16 + .../test/kotlin/clickstream/proto/Device.java | 784 ++++++++++ .../clickstream/proto/DeviceOrBuilder.java | 97 ++ .../kotlin/clickstream/proto/DeviceProto.java | 16 + .../test/kotlin/clickstream/proto/User.java | 1316 +++++++++++++++++ .../clickstream/proto/UserOrBuilder.java | 166 +++ .../kotlin/clickstream/proto/UserProto.java | 16 + 20 files changed, 3073 insertions(+), 358 deletions(-) delete mode 100644 clickstream/src/test/kotlin/clickstream/ClickStreamFunctionalTest.kt delete mode 100644 clickstream/src/test/kotlin/clickstream/ClickStreamMerchantFunctionalTest.kt create mode 100644 clickstream/src/test/kotlin/clickstream/proto/App.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/AppOrBuilder.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/AppProto.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/Device.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/DeviceOrBuilder.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/DeviceProto.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/User.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/UserOrBuilder.java create mode 100644 clickstream/src/test/kotlin/clickstream/proto/UserProto.java diff --git a/app/src/main/java/com/clickstream/app/main/MainViewModel.kt b/app/src/main/java/com/clickstream/app/main/MainViewModel.kt index 407943da..3cecd680 100644 --- a/app/src/main/java/com/clickstream/app/main/MainViewModel.kt +++ b/app/src/main/java/com/clickstream/app/main/MainViewModel.kt @@ -11,11 +11,9 @@ import com.clickstream.app.main.MainIntent.DisconnectIntent import com.clickstream.app.main.MainIntent.InputIntent import com.clickstream.app.main.MainIntent.SendIntent import com.clickstream.app.main.MainState.InFlight -import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.products.common.AppType -import com.gojek.clickstream.products.common.DroppedProperties -import com.gojek.clickstream.products.common.DroppedPropertiesBatch -import com.gojek.clickstream.products.common.Product +import com.clickstream.app.proto.App +import com.clickstream.app.proto.Device +import com.clickstream.app.proto.User import com.google.protobuf.Timestamp import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow @@ -49,14 +47,22 @@ class MainViewModel @Inject constructor(val dispatcher: Dispatcher) : ViewModel( } private fun sendMockCSEvent() { - val customerProto = DroppedPropertiesBatch.newBuilder().apply { - appType = AppType.Consumer - product = Product.GoSend - meta = EventMeta.newBuilder().apply { - eventGuid = "123" + val customerProto = User.newBuilder().apply { + guid = "Some Guid" + name = "John Doe" + age = 35 + gender = "male" + phoneNumber = 1234567890 + email = "john.doe@example.com" + app = App.newBuilder().apply { + version = "0.0.1" + packageName = "com.clickstream" }.build() - eventTimestamp = Timestamp.newBuilder().apply { - seconds = System.currentTimeMillis() / 1000L + device = Device.newBuilder().apply { + operatingSystem = "android" + operatingSystemVersion = "29" + deviceMake = "Samsung" + deviceModel = "SM2028" }.build() }.build() diff --git a/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt b/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt index c5345928..db4ebc05 100644 --- a/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt +++ b/clickstream/src/test/kotlin/clickstream/ClickStreamConnectionTest.kt @@ -7,14 +7,13 @@ import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.model.CSEvent +import clickstream.proto.App +import clickstream.proto.User import clickstream.utils.TestFlowObserver import clickstream.utils.any import clickstream.utils.containingBytes import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory -import com.gojek.clickstream.common.App -import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.tinder.scarlet.Lifecycle import com.tinder.scarlet.Scarlet @@ -89,13 +88,11 @@ public class ClickStreamConnectionTest { val event = CSEvent( guid = guid, timestamp = Timestamp.getDefaultInstance(), - message = AdCardEvent.newBuilder() - .setMeta( - EventMeta.newBuilder() - .setApp(App.newBuilder().setVersion("4.35.0")) - .build() - ) - .build() + message = User.newBuilder() + .setApp( + App.newBuilder() + .setVersion("4.35.0") + ).build() ) val (eventData, eventHealthData) = CSEventData.create(event) return transformToEventRequest(eventData = listOf(eventData)) diff --git a/clickstream/src/test/kotlin/clickstream/ClickStreamFunctionalTest.kt b/clickstream/src/test/kotlin/clickstream/ClickStreamFunctionalTest.kt deleted file mode 100644 index 34392e97..00000000 --- a/clickstream/src/test/kotlin/clickstream/ClickStreamFunctionalTest.kt +++ /dev/null @@ -1,111 +0,0 @@ -package clickstream - -import android.app.Application -import android.os.Build.VERSION_CODES -import androidx.test.core.app.ApplicationProvider -import clickstream.api.CSAppInfo -import clickstream.api.CSInfo -import clickstream.api.CSLocationInfo -import clickstream.api.CSSessionInfo -import clickstream.config.CSConfiguration -import clickstream.extension.protoName -import clickstream.fake.FakeCSAppLifeCycle -import clickstream.fake.FakeHealthGateway -import clickstream.fake.createCSConfig -import clickstream.fake.fakeUserInfo -import clickstream.internal.DefaultCSDeviceInfo -import clickstream.model.CSEvent -import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.common.App -import com.gojek.clickstream.common.Customer -import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.products.events.AdCardEvent -import com.google.protobuf.Timestamp -import kotlinx.coroutines.ExperimentalCoroutinesApi -import okhttp3.OkHttpClient.Builder -import org.junit.Assert.assertTrue -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.kotlin.mock -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config - -@ExperimentalCoroutinesApi -@RunWith(RobolectricTestRunner::class) -@Config(manifest = Config.NONE, sdk = [VERSION_CODES.P]) -public class ClickStreamFunctionalTest { - @get:Rule - public val coroutineRule: CoroutineTestRule = CoroutineTestRule() - - private val fakeHealthGateway = FakeHealthGateway(mock(), mock(), mock(), mock()) - private val app = ApplicationProvider.getApplicationContext() - - @Test - public fun `Given EventMeta When Customer property is filled Then final generated EventMeta should have Customer metadata`() { - // Given - val userInfo = fakeUserInfo() - val csInfo = createCSInfo().copy(userInfo = userInfo) - val appLifecycle = FakeCSAppLifeCycle() - ClickStream.initialize( - CSConfiguration.Builder( - context = app, - info = csInfo, - config = createCSConfig(), - appLifeCycle = appLifecycle, - ) - .setDispatcher(coroutineRule.testDispatcher) - .setHealthGateway(fakeHealthGateway) - .build() - ) - - val sut = ClickStream.getInstance() - - // When - val event = generateCSCustomerEvent("12") - sut.trackEvent(event, true) - - // Then - assertTrue(event.message.protoName() == "AdCardEvent") - assertTrue((event.message as AdCardEvent).meta.customer.email == userInfo.email) - assertTrue((event.message as AdCardEvent).meta.customer.currentCountry == userInfo.currentCountry) - assertTrue((event.message as AdCardEvent).meta.customer.signedUpCountry == userInfo.signedUpCountry) - assertTrue((event.message as AdCardEvent).meta.customer.identity == userInfo.identity) - assertTrue((event.message as AdCardEvent).meta.hasMerchant().not()) - } - - private fun generateCSCustomerEvent(guid: String): CSEvent { - val userInfo = fakeUserInfo() - return CSEvent( - guid = guid, - timestamp = Timestamp.getDefaultInstance(), - message = AdCardEvent.newBuilder() - .setMeta( - EventMeta.newBuilder() - .setApp(App.newBuilder().setVersion("4.35.0")) - .setCustomer( - Customer.newBuilder() - .setCurrentCountry(userInfo.currentCountry) - .setEmail(userInfo.email) - .setIdentity(userInfo.identity) - .setSignedUpCountry(userInfo.signedUpCountry) - .build() - ) - .build() - ) - .build() - ) - } - - private fun createCSInfo(): CSInfo { - return CSInfo( - appInfo = CSAppInfo(appVersion = "4.37.0"), - locationInfo = CSLocationInfo( - latitude = -6.1753924, - longitude = 106.8249641, - s2Ids = emptyMap() - ), sessionInfo = CSSessionInfo(sessionID = "1234"), - deviceInfo = DefaultCSDeviceInfo(), fakeUserInfo() - ) - } -} diff --git a/clickstream/src/test/kotlin/clickstream/ClickStreamMerchantFunctionalTest.kt b/clickstream/src/test/kotlin/clickstream/ClickStreamMerchantFunctionalTest.kt deleted file mode 100644 index df16fa0c..00000000 --- a/clickstream/src/test/kotlin/clickstream/ClickStreamMerchantFunctionalTest.kt +++ /dev/null @@ -1,121 +0,0 @@ -package clickstream - -import android.app.Application -import android.os.Build.VERSION_CODES -import androidx.test.core.app.ApplicationProvider -import clickstream.api.CSAppInfo -import clickstream.api.CSInfo -import clickstream.api.CSLocationInfo -import clickstream.api.CSSessionInfo -import clickstream.config.CSConfiguration -import clickstream.extension.protoName -import clickstream.fake.FakeCSAppLifeCycle -import clickstream.fake.FakeHealthGateway -import clickstream.fake.createCSConfig -import clickstream.fake.fakeUserInfo -import clickstream.internal.DefaultCSDeviceInfo -import clickstream.model.CSEvent -import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.common.App -import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.common.Merchant -import com.gojek.clickstream.common.MerchantUser -import com.gojek.clickstream.common.MerchantUserRole -import com.gojek.clickstream.products.events.AdCardEvent -import com.google.protobuf.Timestamp -import kotlinx.coroutines.ExperimentalCoroutinesApi -import okhttp3.OkHttpClient.Builder -import org.junit.Assert.assertTrue -import org.junit.Ignore -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.kotlin.mock -import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config - -@ExperimentalCoroutinesApi -@RunWith(RobolectricTestRunner::class) -@Config(manifest = Config.NONE, sdk = [VERSION_CODES.P]) -@Ignore -public class ClickStreamMerchantFunctionalTest { - @get:Rule - public val coroutineRule: CoroutineTestRule = CoroutineTestRule() - - private val fakeHealthGateway = FakeHealthGateway(mock(), mock(), mock(), mock()) - private val app = ApplicationProvider.getApplicationContext() - - @Test - public fun `Given EventMeta When Merchant property is filled Then final generated EventMeta should have Merchant metadata`() { - // Given - val csInfo = createCSInfo() - val appLifecycle = FakeCSAppLifeCycle() - ClickStream.initialize( - CSConfiguration.Builder( - context = app, - info = csInfo, - config = createCSConfig(), - appLifeCycle = appLifecycle - ) - .setDispatcher(coroutineRule.testDispatcher) - .setHealthGateway(fakeHealthGateway) - .build() - ) - val sut = ClickStream.getInstance() - - // When - val event = generateCSMerchantEvent("12") - sut.trackEvent(event, true) - - // Then - assertTrue(event.message.protoName() == "AdCardEvent") - assertTrue((event.message as AdCardEvent).meta.hasMerchant()) - assertTrue((event.message as AdCardEvent).meta.merchant.saudagarId == "1") - assertTrue((event.message as AdCardEvent).meta.merchant.user.role == MerchantUserRole.MERCHANT_USER_ROLE_ADMIN) - assertTrue((event.message as AdCardEvent).meta.merchant.user.signedUpCountry == "ID") - assertTrue((event.message as AdCardEvent).meta.merchant.user.phone == "085") - assertTrue((event.message as AdCardEvent).meta.merchant.user.identity == 12) - assertTrue((event.message as AdCardEvent).meta.merchant.user.email == "test@gmail.com") - assertTrue((event.message as AdCardEvent).meta.hasCustomer().not()) - } - - private fun generateCSMerchantEvent(guid: String): CSEvent { - return CSEvent( - guid = guid, - timestamp = Timestamp.getDefaultInstance(), - message = AdCardEvent.newBuilder() - .setMeta( - EventMeta.newBuilder() - .setApp(App.newBuilder().setVersion("4.35.0")) - .setMerchant( - Merchant.newBuilder() - .setSaudagarId("1") - .setUser( - MerchantUser.newBuilder() - .setRole(MerchantUserRole.MERCHANT_USER_ROLE_ADMIN) - .setSignedUpCountry("ID") - .setPhone("085") - .setIdentity(12) - .setEmail("test@gmail.com") - .build() - ) - .build() - ) - .build() - ) - .build() - ) - } - - private fun createCSInfo(): CSInfo { - return CSInfo( - appInfo = CSAppInfo(appVersion = "4.37.0"), - locationInfo = CSLocationInfo( - latitude = -6.1753924, - longitude = 106.8249641, - s2Ids = emptyMap() - ), sessionInfo = CSSessionInfo(sessionID = "1234"), - deviceInfo = DefaultCSDeviceInfo(), fakeUserInfo() - ) - } -} diff --git a/clickstream/src/test/kotlin/clickstream/extension/CSMessageExtTest.kt b/clickstream/src/test/kotlin/clickstream/extension/CSMessageExtTest.kt index 7071412f..bc1cfe57 100644 --- a/clickstream/src/test/kotlin/clickstream/extension/CSMessageExtTest.kt +++ b/clickstream/src/test/kotlin/clickstream/extension/CSMessageExtTest.kt @@ -1,10 +1,7 @@ package clickstream.extension -import com.gojek.clickstream.products.common.* -import com.gojek.clickstream.products.telemetry.Protocol -import com.gojek.clickstream.products.telemetry.PubSubHealth -import com.gojek.clickstream.products.telemetry.QOS -import com.gojek.clickstream.products.telemetry.Topic +import clickstream.proto.App +import clickstream.proto.User import org.junit.Test internal class CSMessageExtTest { @@ -12,60 +9,47 @@ internal class CSMessageExtTest { @Test fun `Given proto with basic data types as field check if toFlatMap returns valid map`() { - val address = Address.newBuilder().apply { - id = "1" - label = "home address" - pillPosition = 5 - changedAddressSourceOnUi = true - locationDetails = "location details" + val user = User.newBuilder().apply { + guid = "Some Guid" + name = "John Doe" + age = 35 + gender = "male" + phoneNumber = 1234567890 + email = "john.doe@example.com" }.build() - val addressMap = address.toFlatMap() + val userMap = user.toFlatMap() - assert(addressMap["id"] == "1") - assert(addressMap["label"] == "home address") - assert(addressMap["pillPosition"] == 5) - assert(addressMap["changedAddressSourceOnUi"] == true) - assert(addressMap["locationDetails"] == "location details") + assert(userMap["guid"] == "Some Guid") + assert(userMap["name"] == "John Doe") + assert(userMap["age"] == 35) + assert(userMap["gender"] == "male") + assert(userMap["phoneNumber"] == 1234567890.toLong()) + assert(userMap["email"] == "john.doe@example.com") } @Test fun `Given proto with a nested proto as field check if toFlatMap returns valid map`() { - val pubSubHealth = PubSubHealth.newBuilder().apply { - val topic = Topic.newBuilder() - .setTopic("test topic") - .setQosValue(QOS.QOS_ZERO_VALUE) - .build() + val pubSubHealth = User.newBuilder().apply { + guid = "Some Guid" + name = "John Doe" + val appProto = App.newBuilder().apply { + version = "0.0.1" + packageName = "com.clickstream" + }.build() - setTopic(topic) - protocol = Protocol.PROTOCOL_MQTT - appType = AppType.Consumer + app = appProto - }.build() - pubSubHealth.toFlatMap().run { - assert(get("topic.topic") == "test topic") - assert(get("topic.qos") == QOS.QOS_ZERO_VALUE) - assert(get("protocol") == Protocol.PROTOCOL_MQTT.ordinal) - assert(get("appType") == AppType.Consumer.ordinal) - } - } - - @Test - fun `Given proto with nested proto and list type as field check if toFlatMap returns valid map`() { - val originalBadgeList = listOf("badge1", "badge2") - val apiParameter = Outlet.newBuilder().apply { - addAllBadges(originalBadgeList) }.build() - apiParameter.toFlatMap().run { - val badgesList = get("badges") - assert(badgesList is List<*>) - (badgesList as List<*>).forEachIndexed { index, badge -> - assert(badge is String && badge == originalBadgeList[index]) - } + pubSubHealth.toFlatMap().run { + assert(get("app.version") == "0.0.1") + assert(get("app.packageName") == "com.clickstream") + assert(get("guid") == "Some Guid") + assert(get("name") == "John Doe") } } } \ No newline at end of file diff --git a/clickstream/src/test/kotlin/clickstream/fake/FakeEventWrapperData.kt b/clickstream/src/test/kotlin/clickstream/fake/FakeEventWrapperData.kt index 2cb66763..687b8c17 100644 --- a/clickstream/src/test/kotlin/clickstream/fake/FakeEventWrapperData.kt +++ b/clickstream/src/test/kotlin/clickstream/fake/FakeEventWrapperData.kt @@ -2,14 +2,9 @@ package clickstream.fake import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.model.CSEvent -import com.gojek.clickstream.common.Customer -import com.gojek.clickstream.common.Device -import com.gojek.clickstream.common.Location -import com.gojek.clickstream.common.Session -import com.gojek.clickstream.products.common.ServiceInfo -import com.gojek.clickstream.products.events.AdCardEvent -import com.gojek.clickstream.products.events.AdCardType -import com.gojek.clickstream.products.shuffle.ShuffleCard +import clickstream.proto.App +import clickstream.proto.Device +import clickstream.proto.User import java.util.UUID /** @@ -17,24 +12,28 @@ import java.util.UUID * with default data every time invoked. */ public fun defaultEventWrapperData(): CSEvent { - val event = AdCardEvent.newBuilder().apply { - meta = meta.toBuilder().apply { - val objectID = UUID.randomUUID().toString() - eventGuid = objectID - eventTimestamp = CSTimeStampMessageBuilder.build(System.currentTimeMillis()) - location = Location.getDefaultInstance() - device = Device.getDefaultInstance() - customer = Customer.getDefaultInstance() - session = Session.getDefaultInstance() + val event = User.newBuilder().apply { + guid = "Some Guid" + name = "John Doe" + age = 35 + gender = "male" + phoneNumber = 1234567890 + email = "john.doe@example.com" + app = App.newBuilder().apply { + version = "0.0.1" + packageName = "com.clickstream" + }.build() + device = Device.newBuilder().apply { + operatingSystem = "android" + operatingSystemVersion = "29" + deviceMake = "Samsung" + deviceModel = "SM2028" }.build() - type = AdCardType.Clicked - shuffleCard = ShuffleCard.getDefaultInstance() - serviceInfo = ServiceInfo.getDefaultInstance() }.build() return CSEvent( - guid = event.meta.eventGuid, - timestamp = event.eventTimestamp, + guid = UUID.randomUUID().toString(), + timestamp = CSTimeStampMessageBuilder.build(System.currentTimeMillis()), message = event ) } diff --git a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundEventSchedulerTest.kt b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundEventSchedulerTest.kt index dc8646a5..c4cd632f 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundEventSchedulerTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundEventSchedulerTest.kt @@ -16,8 +16,8 @@ import clickstream.internal.utils.CSBatteryStatusObserver import clickstream.internal.utils.CSNetworkStatusObserver import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger +import clickstream.proto.User import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.products.events.AdCardEvent import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.times import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -75,14 +75,14 @@ public class CSBackgroundEventSchedulerTest { @Test public fun `verify flushEvents`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) val events = listOf(event) diff --git a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt index 6c452e7a..dea3d3c3 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSBackgroundSchedulerTest.kt @@ -29,8 +29,8 @@ import clickstream.internal.utils.CSNetworkStatusObserver import clickstream.lifecycle.CSBackgroundLifecycleManager import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger +import clickstream.proto.User import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.products.events.AdCardEvent import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.never import com.nhaarman.mockitokotlin2.times @@ -145,14 +145,14 @@ public class CSBackgroundSchedulerTest { @Test public fun `Given one event exists When scheduler is called Then One event will be forwarded to network layer`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) whenever(networkStatusObserver.isNetworkAvailable()).thenReturn(true) @@ -171,14 +171,14 @@ public class CSBackgroundSchedulerTest { @Test public fun `Given multiple events exists When scheduler is called Then Multiple event will be sent to network layer`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) whenever(networkStatusObserver.isNetworkAvailable()).thenReturn(true) @@ -215,14 +215,14 @@ public class CSBackgroundSchedulerTest { @Test public fun `Given one health event and one event exists When scheduler is called Then both will be forwarded to network layer`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) val health = Health.newBuilder().build() @@ -242,14 +242,14 @@ public class CSBackgroundSchedulerTest { @Test public fun `Given multiple health and app event exists When scheduler is called Then All will be forwarded to network layer`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) val health = Health.newBuilder().build() diff --git a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSForegroundEventSchedulerTest.kt b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSForegroundEventSchedulerTest.kt index 690443b2..33130e09 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSForegroundEventSchedulerTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/eventscheduler/CSForegroundEventSchedulerTest.kt @@ -20,8 +20,8 @@ import clickstream.internal.utils.CSResult import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger import clickstream.model.CSEvent +import clickstream.proto.User import clickstream.utils.CoroutineTestRule -import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.never @@ -95,14 +95,14 @@ public class CSForegroundEventSchedulerTest { @Test public fun `Given an AdCard Event When app state is active Then verify event should went to network manager`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEventData( eventGuid = "1", eventRequestGuid = "2", eventTimeStamp = 3L, isOnGoing = true, - messageAsBytes = adCardEvent.toByteArray(), - messageName = adCardEvent.messageName() + messageAsBytes = userEvent.toByteArray(), + messageName = userEvent.messageName() ) whenever(eventRepository.getEventDataList()) @@ -175,11 +175,11 @@ public class CSForegroundEventSchedulerTest { @Test public fun `verify scheduleEvent`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEvent( guid = "1", timestamp = Timestamp.getDefaultInstance(), - message = adCardEvent + message = userEvent ) sut.scheduleEvent(event) @@ -203,11 +203,11 @@ public class CSForegroundEventSchedulerTest { @Test public fun `verify sendInstantEvent`() { coroutineRule.testDispatcher.runBlockingTest { - val adCardEvent = AdCardEvent.newBuilder().build() + val userEvent = User.newBuilder().build() val event = CSEvent( guid = "1", timestamp = Timestamp.getDefaultInstance(), - message = adCardEvent + message = userEvent ) whenever(timeStampGenerator.getTimeStamp()) diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt index 0c0c3f4b..6d76a4cc 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSConnectionDroppedTest.kt @@ -6,14 +6,13 @@ import clickstream.internal.networklayer.proto.raccoon.SendEventResponse import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.internal.utils.CSTimeStampMessageBuilder import clickstream.model.CSEvent +import clickstream.proto.App +import clickstream.proto.User import clickstream.utils.TestFlowObserver import clickstream.utils.any import clickstream.utils.containingBytes import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory -import com.gojek.clickstream.common.App -import com.gojek.clickstream.common.EventMeta -import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.tinder.scarlet.Lifecycle import com.tinder.scarlet.Scarlet @@ -90,13 +89,11 @@ internal class CSConnectionDroppedTest { val event = CSEvent( guid = guid, timestamp = Timestamp.getDefaultInstance(), - message = App.newBuilder() - .setMeta( - EventMeta.newBuilder() - .setApp(App.newBuilder().setVersion("4.35.0")) - .build() - ) - .build() + message = User.newBuilder() + .setApp( + App.newBuilder() + .setVersion("4.35.0") + ).build() ) val (eventData, eventHealthData) = CSEventData.create(event) return transformToEventRequest(eventData = listOf(eventData)) diff --git a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt index a4bbb680..641a5124 100644 --- a/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt +++ b/clickstream/src/test/kotlin/clickstream/internal/networklayer/CSHealthMetricsBatchTimeoutTest.kt @@ -12,11 +12,11 @@ import clickstream.internal.networklayer.proto.raccoon.SendEventRequest import clickstream.internal.utils.CSFlowStreamAdapterFactory import clickstream.logger.CSLogLevel import clickstream.logger.CSLogger +import clickstream.proto.User import clickstream.utils.CoroutineTestRule import clickstream.utils.TestFlowObserver import clickstream.utils.flowTest import clickstream.utils.newWebSocketFactory -import com.gojek.clickstream.products.events.AdCardEvent import com.google.protobuf.Timestamp import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times @@ -73,7 +73,7 @@ internal class CSHealthMetricsBatchTimeoutTest { .setSentTime(Timestamp.getDefaultInstance()) .addEvents( Event.newBuilder() - .setEventBytes(AdCardEvent.newBuilder().build().toByteString()) + .setEventBytes(User.newBuilder().build().toByteString()) .setType("AdcardEvent") .build() ) diff --git a/clickstream/src/test/kotlin/clickstream/proto/App.java b/clickstream/src/test/kotlin/clickstream/proto/App.java new file mode 100644 index 00000000..97ee92a3 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/App.java @@ -0,0 +1,498 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package clickstream.proto; + +/** + *
+ * Corresponds to the details for the app used by the user.
+ * 
+ * + * Protobuf type {@code clickstream.proto.App} + */ +public final class App extends + com.google.protobuf.GeneratedMessageLite< + App, App.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.App) + AppOrBuilder { + private App() { + version_ = ""; + packageName_ = ""; + } + public static final int VERSION_FIELD_NUMBER = 1; + private String version_; + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return version_; + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(version_); + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @param value The version to set. + */ + private void setVersion( + String value) { + Class valueClass = value.getClass(); + + version_ = value; + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + */ + private void clearVersion() { + + version_ = getDefaultInstance().getVersion(); + } + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @param value The bytes for version to set. + */ + private void setVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + version_ = value.toStringUtf8(); + + } + + public static final int PACKAGE_NAME_FIELD_NUMBER = 2; + private String packageName_; + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The packageName. + */ + @Override + public String getPackageName() { + return packageName_; + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + @Override + public com.google.protobuf.ByteString + getPackageNameBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(packageName_); + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @param value The packageName to set. + */ + private void setPackageName( + String value) { + Class valueClass = value.getClass(); + + packageName_ = value; + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + */ + private void clearPackageName() { + + packageName_ = getDefaultInstance().getPackageName(); + } + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @param value The bytes for packageName to set. + */ + private void setPackageNameBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + packageName_ = value.toStringUtf8(); + + } + + public static App parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static App parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static App parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static App parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static App parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(App prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the details for the app used by the user.
+   * 
+ * + * Protobuf type {@code clickstream.proto.App} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + App, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.App) + AppOrBuilder { + // Construct using com.clickstream.app.proto.App.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return The version. + */ + @Override + public String getVersion() { + return instance.getVersion(); + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return The bytes for version. + */ + @Override + public com.google.protobuf.ByteString + getVersionBytes() { + return instance.getVersionBytes(); + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @param value The version to set. + * @return This builder for chaining. + */ + public Builder setVersion( + String value) { + copyOnWrite(); + instance.setVersion(value); + return this; + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @return This builder for chaining. + */ + public Builder clearVersion() { + copyOnWrite(); + instance.clearVersion(); + return this; + } + /** + *
+     * Version of the client app. Use this property to send version with every event.
+     * This allows for segmentation based on the app version.
+     * Sample values: "1.0.0", "1.0.1".
+     * 
+ * + * string version = 1; + * @param value The bytes for version to set. + * @return This builder for chaining. + */ + public Builder setVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setVersionBytes(value); + return this; + } + + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return The packageName. + */ + @Override + public String getPackageName() { + return instance.getPackageName(); + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + @Override + public com.google.protobuf.ByteString + getPackageNameBytes() { + return instance.getPackageNameBytes(); + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @param value The packageName to set. + * @return This builder for chaining. + */ + public Builder setPackageName( + String value) { + copyOnWrite(); + instance.setPackageName(value); + return this; + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @return This builder for chaining. + */ + public Builder clearPackageName() { + copyOnWrite(); + instance.clearPackageName(); + return this; + } + /** + *
+     * Package name of the client app. Use this property to send package name with every event.
+     * Sample values: "com.clickstream.app".
+     * 
+ * + * string package_name = 2; + * @param value The bytes for packageName to set. + * @return This builder for chaining. + */ + public Builder setPackageNameBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setPackageNameBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.App) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new App(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "version_", + "packageName_", + }; + String info = + "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + ""; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (App.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.App) + private static final App DEFAULT_INSTANCE; + static { + App defaultInstance = new App(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + App.class, defaultInstance); + } + + public static App getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/test/kotlin/clickstream/proto/AppOrBuilder.java b/clickstream/src/test/kotlin/clickstream/proto/AppOrBuilder.java new file mode 100644 index 00000000..0626c1ff --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/AppOrBuilder.java @@ -0,0 +1,55 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package clickstream.proto; + +public interface AppOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.App) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The version. + */ + String getVersion(); + /** + *
+   * Version of the client app. Use this property to send version with every event.
+   * This allows for segmentation based on the app version.
+   * Sample values: "1.0.0", "1.0.1".
+   * 
+ * + * string version = 1; + * @return The bytes for version. + */ + com.google.protobuf.ByteString + getVersionBytes(); + + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The packageName. + */ + String getPackageName(); + /** + *
+   * Package name of the client app. Use this property to send package name with every event.
+   * Sample values: "com.clickstream.app".
+   * 
+ * + * string package_name = 2; + * @return The bytes for packageName. + */ + com.google.protobuf.ByteString + getPackageNameBytes(); +} diff --git a/clickstream/src/test/kotlin/clickstream/proto/AppProto.java b/clickstream/src/test/kotlin/clickstream/proto/AppProto.java new file mode 100644 index 00000000..127dc4e5 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/AppProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: App.proto + +package clickstream.proto; + +public final class AppProto { + private AppProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream/src/test/kotlin/clickstream/proto/Device.java b/clickstream/src/test/kotlin/clickstream/proto/Device.java new file mode 100644 index 00000000..e1e87e53 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/Device.java @@ -0,0 +1,784 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package clickstream.proto; + +/** + *
+ * Corresponds to the device being used by the customer. Holds the respective details for the device under use.
+ * 
+ * + * Protobuf type {@code clickstream.proto.Device} + */ +public final class Device extends + com.google.protobuf.GeneratedMessageLite< + Device, Device.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.Device) + DeviceOrBuilder { + private Device() { + operatingSystem_ = ""; + operatingSystemVersion_ = ""; + deviceMake_ = ""; + deviceModel_ = ""; + } + public static final int OPERATING_SYSTEM_FIELD_NUMBER = 1; + private String operatingSystem_; + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return operatingSystem_; + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystem_); + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @param value The operatingSystem to set. + */ + private void setOperatingSystem( + String value) { + Class valueClass = value.getClass(); + + operatingSystem_ = value; + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + */ + private void clearOperatingSystem() { + + operatingSystem_ = getDefaultInstance().getOperatingSystem(); + } + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + */ + private void setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystem_ = value.toStringUtf8(); + + } + + public static final int OPERATING_SYSTEM_VERSION_FIELD_NUMBER = 2; + private String operatingSystemVersion_; + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return operatingSystemVersion_; + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(operatingSystemVersion_); + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + */ + private void setOperatingSystemVersion( + String value) { + Class valueClass = value.getClass(); + + operatingSystemVersion_ = value; + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + */ + private void clearOperatingSystemVersion() { + + operatingSystemVersion_ = getDefaultInstance().getOperatingSystemVersion(); + } + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + */ + private void setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + operatingSystemVersion_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MAKE_FIELD_NUMBER = 3; + private String deviceMake_; + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return deviceMake_; + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceMake_); + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @param value The deviceMake to set. + */ + private void setDeviceMake( + String value) { + Class valueClass = value.getClass(); + + deviceMake_ = value; + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + */ + private void clearDeviceMake() { + + deviceMake_ = getDefaultInstance().getDeviceMake(); + } + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @param value The bytes for deviceMake to set. + */ + private void setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceMake_ = value.toStringUtf8(); + + } + + public static final int DEVICE_MODEL_FIELD_NUMBER = 4; + private String deviceModel_; + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return deviceModel_; + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(deviceModel_); + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @param value The deviceModel to set. + */ + private void setDeviceModel( + String value) { + Class valueClass = value.getClass(); + + deviceModel_ = value; + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + */ + private void clearDeviceModel() { + + deviceModel_ = getDefaultInstance().getDeviceModel(); + } + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @param value The bytes for deviceModel to set. + */ + private void setDeviceModelBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + deviceModel_ = value.toStringUtf8(); + + } + + public static Device parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static Device parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static Device parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static Device parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static Device parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(Device prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the device being used by the customer. Holds the respective details for the device under use.
+   * 
+ * + * Protobuf type {@code clickstream.proto.Device} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + Device, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.Device) + DeviceOrBuilder { + // Construct using com.clickstream.app.proto.Device.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + @Override + public String getOperatingSystem() { + return instance.getOperatingSystem(); + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemBytes() { + return instance.getOperatingSystemBytes(); + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @param value The operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystem( + String value) { + copyOnWrite(); + instance.setOperatingSystem(value); + return this; + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @return This builder for chaining. + */ + public Builder clearOperatingSystem() { + copyOnWrite(); + instance.clearOperatingSystem(); + return this; + } + /** + *
+     * Operating system of the device.
+     * Sample values: "iOS", "Android".
+     * 
+ * + * string operating_system = 1; + * @param value The bytes for operatingSystem to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemBytes(value); + return this; + } + + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + @Override + public String getOperatingSystemVersion() { + return instance.getOperatingSystemVersion(); + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + @Override + public com.google.protobuf.ByteString + getOperatingSystemVersionBytes() { + return instance.getOperatingSystemVersionBytes(); + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @param value The operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersion( + String value) { + copyOnWrite(); + instance.setOperatingSystemVersion(value); + return this; + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @return This builder for chaining. + */ + public Builder clearOperatingSystemVersion() { + copyOnWrite(); + instance.clearOperatingSystemVersion(); + return this; + } + /** + *
+     * Version of the Operating system.
+     * Sample values: "29", "15.1".
+     * 
+ * + * string operating_system_version = 2; + * @param value The bytes for operatingSystemVersion to set. + * @return This builder for chaining. + */ + public Builder setOperatingSystemVersionBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setOperatingSystemVersionBytes(value); + return this; + } + + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + @Override + public String getDeviceMake() { + return instance.getDeviceMake(); + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + @Override + public com.google.protobuf.ByteString + getDeviceMakeBytes() { + return instance.getDeviceMakeBytes(); + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @param value The deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMake( + String value) { + copyOnWrite(); + instance.setDeviceMake(value); + return this; + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @return This builder for chaining. + */ + public Builder clearDeviceMake() { + copyOnWrite(); + instance.clearDeviceMake(); + return this; + } + /** + *
+     * Device manufacturer name.
+     * Sample values: "Samsung", "HMD Global", "Apple"
+     * 
+ * + * string device_make = 3; + * @param value The bytes for deviceMake to set. + * @return This builder for chaining. + */ + public Builder setDeviceMakeBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceMakeBytes(value); + return this; + } + + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + @Override + public String getDeviceModel() { + return instance.getDeviceModel(); + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + @Override + public com.google.protobuf.ByteString + getDeviceModelBytes() { + return instance.getDeviceModelBytes(); + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @param value The deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModel( + String value) { + copyOnWrite(); + instance.setDeviceModel(value); + return this; + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @return This builder for chaining. + */ + public Builder clearDeviceModel() { + copyOnWrite(); + instance.clearDeviceModel(); + return this; + } + /** + *
+     * Device model information.
+     * Sample values: "iPhone 11", "Samsung M90".
+     * 
+ * + * string device_model = 4; + * @param value The bytes for deviceModel to set. + * @return This builder for chaining. + */ + public Builder setDeviceModelBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setDeviceModelBytes(value); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.Device) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new Device(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "operatingSystem_", + "operatingSystemVersion_", + "deviceMake_", + "deviceModel_", + }; + String info = + "\u0000\u0004\u0000\u0000\u0001\u0004\u0004\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + "\u0003\u0208\u0004\u0208"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (Device.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.Device) + private static final Device DEFAULT_INSTANCE; + static { + Device defaultInstance = new Device(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + Device.class, defaultInstance); + } + + public static Device getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/test/kotlin/clickstream/proto/DeviceOrBuilder.java b/clickstream/src/test/kotlin/clickstream/proto/DeviceOrBuilder.java new file mode 100644 index 00000000..d8060a6e --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/DeviceOrBuilder.java @@ -0,0 +1,97 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package clickstream.proto; + +public interface DeviceOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.Device) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The operatingSystem. + */ + String getOperatingSystem(); + /** + *
+   * Operating system of the device.
+   * Sample values: "iOS", "Android".
+   * 
+ * + * string operating_system = 1; + * @return The bytes for operatingSystem. + */ + com.google.protobuf.ByteString + getOperatingSystemBytes(); + + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The operatingSystemVersion. + */ + String getOperatingSystemVersion(); + /** + *
+   * Version of the Operating system.
+   * Sample values: "29", "15.1".
+   * 
+ * + * string operating_system_version = 2; + * @return The bytes for operatingSystemVersion. + */ + com.google.protobuf.ByteString + getOperatingSystemVersionBytes(); + + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The deviceMake. + */ + String getDeviceMake(); + /** + *
+   * Device manufacturer name.
+   * Sample values: "Samsung", "HMD Global", "Apple"
+   * 
+ * + * string device_make = 3; + * @return The bytes for deviceMake. + */ + com.google.protobuf.ByteString + getDeviceMakeBytes(); + + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The deviceModel. + */ + String getDeviceModel(); + /** + *
+   * Device model information.
+   * Sample values: "iPhone 11", "Samsung M90".
+   * 
+ * + * string device_model = 4; + * @return The bytes for deviceModel. + */ + com.google.protobuf.ByteString + getDeviceModelBytes(); +} diff --git a/clickstream/src/test/kotlin/clickstream/proto/DeviceProto.java b/clickstream/src/test/kotlin/clickstream/proto/DeviceProto.java new file mode 100644 index 00000000..504da281 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/DeviceProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: Device.proto + +package clickstream.proto; + +public final class DeviceProto { + private DeviceProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/clickstream/src/test/kotlin/clickstream/proto/User.java b/clickstream/src/test/kotlin/clickstream/proto/User.java new file mode 100644 index 00000000..bc892c82 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/User.java @@ -0,0 +1,1316 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package clickstream.proto; + +/** + *
+ * Corresponds to the details for the user.
+ * 
+ * + * Protobuf type {@code clickstream.proto.User} + */ +public final class User extends + com.google.protobuf.GeneratedMessageLite< + User, User.Builder> implements + // @@protoc_insertion_point(message_implements:clickstream.proto.User) + UserOrBuilder { + private User() { + guid_ = ""; + name_ = ""; + gender_ = ""; + email_ = ""; + } + public static final int GUID_FIELD_NUMBER = 1; + private String guid_; + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The guid. + */ + @Override + public String getGuid() { + return guid_; + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + @Override + public com.google.protobuf.ByteString + getGuidBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(guid_); + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @param value The guid to set. + */ + private void setGuid( + String value) { + Class valueClass = value.getClass(); + + guid_ = value; + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + */ + private void clearGuid() { + + guid_ = getDefaultInstance().getGuid(); + } + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @param value The bytes for guid to set. + */ + private void setGuidBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + guid_ = value.toStringUtf8(); + + } + + public static final int NAME_FIELD_NUMBER = 2; + private String name_; + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The name. + */ + @Override + public String getName() { + return name_; + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The bytes for name. + */ + @Override + public com.google.protobuf.ByteString + getNameBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(name_); + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @param value The name to set. + */ + private void setName( + String value) { + Class valueClass = value.getClass(); + + name_ = value; + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + */ + private void clearName() { + + name_ = getDefaultInstance().getName(); + } + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @param value The bytes for name to set. + */ + private void setNameBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + name_ = value.toStringUtf8(); + + } + + public static final int AGE_FIELD_NUMBER = 3; + private int age_; + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @return The age. + */ + @Override + public int getAge() { + return age_; + } + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @param value The age to set. + */ + private void setAge(int value) { + + age_ = value; + } + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + */ + private void clearAge() { + + age_ = 0; + } + + public static final int GENDER_FIELD_NUMBER = 4; + private String gender_; + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The gender. + */ + @Override + public String getGender() { + return gender_; + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + @Override + public com.google.protobuf.ByteString + getGenderBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(gender_); + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @param value The gender to set. + */ + private void setGender( + String value) { + Class valueClass = value.getClass(); + + gender_ = value; + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + */ + private void clearGender() { + + gender_ = getDefaultInstance().getGender(); + } + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @param value The bytes for gender to set. + */ + private void setGenderBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + gender_ = value.toStringUtf8(); + + } + + public static final int PHONE_NUMBER_FIELD_NUMBER = 5; + private long phoneNumber_; + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + @Override + public long getPhoneNumber() { + return phoneNumber_; + } + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @param value The phoneNumber to set. + */ + private void setPhoneNumber(long value) { + + phoneNumber_ = value; + } + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + */ + private void clearPhoneNumber() { + + phoneNumber_ = 0L; + } + + public static final int EMAIL_FIELD_NUMBER = 6; + private String email_; + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The email. + */ + @Override + public String getEmail() { + return email_; + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(email_); + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @param value The email to set. + */ + private void setEmail( + String value) { + Class valueClass = value.getClass(); + + email_ = value; + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + */ + private void clearEmail() { + + email_ = getDefaultInstance().getEmail(); + } + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @param value The bytes for email to set. + */ + private void setEmailBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + email_ = value.toStringUtf8(); + + } + + public static final int APP_FIELD_NUMBER = 7; + private App app_; + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public boolean hasApp() { + return app_ != null; + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public App getApp() { + return app_ == null ? App.getDefaultInstance() : app_; + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + private void setApp(App value) { + value.getClass(); + app_ = value; + + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeApp(App value) { + value.getClass(); + if (app_ != null && + app_ != App.getDefaultInstance()) { + app_ = + App.newBuilder(app_).mergeFrom(value).buildPartial(); + } else { + app_ = value; + } + + } + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + */ + private void clearApp() { app_ = null; + + } + + public static final int DEVICE_FIELD_NUMBER = 8; + private Device device_; + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public boolean hasDevice() { + return device_ != null; + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public Device getDevice() { + return device_ == null ? Device.getDefaultInstance() : device_; + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + private void setDevice(Device value) { + value.getClass(); + device_ = value; + + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDevice(Device value) { + value.getClass(); + if (device_ != null && + device_ != Device.getDefaultInstance()) { + device_ = + Device.newBuilder(device_).mergeFrom(value).buildPartial(); + } else { + device_ = value; + } + + } + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + */ + private void clearDevice() { device_ = null; + + } + + public static final int DEVICE_TIMESTAMP_FIELD_NUMBER = 9; + private com.google.protobuf.Timestamp deviceTimestamp_; + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public boolean hasDeviceTimestamp() { + return deviceTimestamp_ != null; + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return deviceTimestamp_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : deviceTimestamp_; + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + private void setDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + deviceTimestamp_ = value; + + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @SuppressWarnings({"ReferenceEquality"}) + private void mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + value.getClass(); + if (deviceTimestamp_ != null && + deviceTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + deviceTimestamp_ = + com.google.protobuf.Timestamp.newBuilder(deviceTimestamp_).mergeFrom(value).buildPartial(); + } else { + deviceTimestamp_ = value; + } + + } + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + private void clearDeviceTimestamp() { deviceTimestamp_ = null; + + } + + public static User parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data); + } + public static User parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, data, extensionRegistry); + } + public static User parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static User parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + public static User parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input); + } + public static User parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return parseDelimitedFrom(DEFAULT_INSTANCE, input, extensionRegistry); + } + public static User parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input); + } + public static User parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageLite.parseFrom( + DEFAULT_INSTANCE, input, extensionRegistry); + } + + public static Builder newBuilder() { + return (Builder) DEFAULT_INSTANCE.createBuilder(); + } + public static Builder newBuilder(User prototype) { + return (Builder) DEFAULT_INSTANCE.createBuilder(prototype); + } + + /** + *
+   * Corresponds to the details for the user.
+   * 
+ * + * Protobuf type {@code clickstream.proto.User} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + User, Builder> implements + // @@protoc_insertion_point(builder_implements:clickstream.proto.User) + UserOrBuilder { + // Construct using com.clickstream.app.proto.User.newBuilder() + private Builder() { + super(DEFAULT_INSTANCE); + } + + + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return The guid. + */ + @Override + public String getGuid() { + return instance.getGuid(); + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + @Override + public com.google.protobuf.ByteString + getGuidBytes() { + return instance.getGuidBytes(); + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @param value The guid to set. + * @return This builder for chaining. + */ + public Builder setGuid( + String value) { + copyOnWrite(); + instance.setGuid(value); + return this; + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @return This builder for chaining. + */ + public Builder clearGuid() { + copyOnWrite(); + instance.clearGuid(); + return this; + } + /** + *
+     * Unique identy of the user.
+     * 
+ * + * string guid = 1; + * @param value The bytes for guid to set. + * @return This builder for chaining. + */ + public Builder setGuidBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setGuidBytes(value); + return this; + } + + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return The name. + */ + @Override + public String getName() { + return instance.getName(); + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return The bytes for name. + */ + @Override + public com.google.protobuf.ByteString + getNameBytes() { + return instance.getNameBytes(); + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + String value) { + copyOnWrite(); + instance.setName(value); + return this; + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @return This builder for chaining. + */ + public Builder clearName() { + copyOnWrite(); + instance.clearName(); + return this; + } + /** + *
+     * User's full name.
+     * 
+ * + * string name = 2; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setNameBytes(value); + return this; + } + + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @return The age. + */ + @Override + public int getAge() { + return instance.getAge(); + } + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @param value The age to set. + * @return This builder for chaining. + */ + public Builder setAge(int value) { + copyOnWrite(); + instance.setAge(value); + return this; + } + /** + *
+     * User's age.
+     * 
+ * + * int32 age = 3; + * @return This builder for chaining. + */ + public Builder clearAge() { + copyOnWrite(); + instance.clearAge(); + return this; + } + + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return The gender. + */ + @Override + public String getGender() { + return instance.getGender(); + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + @Override + public com.google.protobuf.ByteString + getGenderBytes() { + return instance.getGenderBytes(); + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @param value The gender to set. + * @return This builder for chaining. + */ + public Builder setGender( + String value) { + copyOnWrite(); + instance.setGender(value); + return this; + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @return This builder for chaining. + */ + public Builder clearGender() { + copyOnWrite(); + instance.clearGender(); + return this; + } + /** + *
+     * User's gender.
+     * 
+ * + * string gender = 4; + * @param value The bytes for gender to set. + * @return This builder for chaining. + */ + public Builder setGenderBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setGenderBytes(value); + return this; + } + + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + @Override + public long getPhoneNumber() { + return instance.getPhoneNumber(); + } + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @param value The phoneNumber to set. + * @return This builder for chaining. + */ + public Builder setPhoneNumber(long value) { + copyOnWrite(); + instance.setPhoneNumber(value); + return this; + } + /** + *
+     * User's phone number.
+     * 
+ * + * int64 phone_number = 5; + * @return This builder for chaining. + */ + public Builder clearPhoneNumber() { + copyOnWrite(); + instance.clearPhoneNumber(); + return this; + } + + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return The email. + */ + @Override + public String getEmail() { + return instance.getEmail(); + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return The bytes for email. + */ + @Override + public com.google.protobuf.ByteString + getEmailBytes() { + return instance.getEmailBytes(); + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @param value The email to set. + * @return This builder for chaining. + */ + public Builder setEmail( + String value) { + copyOnWrite(); + instance.setEmail(value); + return this; + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @return This builder for chaining. + */ + public Builder clearEmail() { + copyOnWrite(); + instance.clearEmail(); + return this; + } + /** + *
+     * User's email address.
+     * 
+ * + * string email = 6; + * @param value The bytes for email to set. + * @return This builder for chaining. + */ + public Builder setEmailBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setEmailBytes(value); + return this; + } + + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public boolean hasApp() { + return instance.hasApp(); + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + @Override + public App getApp() { + return instance.getApp(); + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder setApp(App value) { + copyOnWrite(); + instance.setApp(value); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder setApp( + App.Builder builderForValue) { + copyOnWrite(); + instance.setApp(builderForValue.build()); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder mergeApp(App value) { + copyOnWrite(); + instance.mergeApp(value); + return this; + } + /** + *
+     * User's app details.
+     * 
+ * + * .clickstream.proto.App app = 7; + */ + public Builder clearApp() { copyOnWrite(); + instance.clearApp(); + return this; + } + + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public boolean hasDevice() { + return instance.hasDevice(); + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + @Override + public Device getDevice() { + return instance.getDevice(); + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder setDevice(Device value) { + copyOnWrite(); + instance.setDevice(value); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder setDevice( + Device.Builder builderForValue) { + copyOnWrite(); + instance.setDevice(builderForValue.build()); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder mergeDevice(Device value) { + copyOnWrite(); + instance.mergeDevice(value); + return this; + } + /** + *
+     * User's device details.
+     * 
+ * + * .clickstream.proto.Device device = 8; + */ + public Builder clearDevice() { copyOnWrite(); + instance.clearDevice(); + return this; + } + + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public boolean hasDeviceTimestamp() { + return instance.hasDeviceTimestamp(); + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + @Override + public com.google.protobuf.Timestamp getDeviceTimestamp() { + return instance.getDeviceTimestamp(); + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder setDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.setDeviceTimestamp(value); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder setDeviceTimestamp( + com.google.protobuf.Timestamp.Builder builderForValue) { + copyOnWrite(); + instance.setDeviceTimestamp(builderForValue.build()); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder mergeDeviceTimestamp(com.google.protobuf.Timestamp value) { + copyOnWrite(); + instance.mergeDeviceTimestamp(value); + return this; + } + /** + *
+     * Timestamp for the event.
+     * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + */ + public Builder clearDeviceTimestamp() { copyOnWrite(); + instance.clearDeviceTimestamp(); + return this; + } + + // @@protoc_insertion_point(builder_scope:clickstream.proto.User) + } + @Override + @SuppressWarnings({"unchecked", "fallthrough"}) + protected final Object dynamicMethod( + MethodToInvoke method, + Object arg0, Object arg1) { + switch (method) { + case NEW_MUTABLE_INSTANCE: { + return new User(); + } + case NEW_BUILDER: { + return new Builder(); + } + case BUILD_MESSAGE_INFO: { + Object[] objects = new Object[] { + "guid_", + "name_", + "age_", + "gender_", + "phoneNumber_", + "email_", + "app_", + "device_", + "deviceTimestamp_", + }; + String info = + "\u0000\t\u0000\u0000\u0001\t\t\u0000\u0000\u0000\u0001\u0208\u0002\u0208\u0003\u0004" + + "\u0004\u0208\u0005\u0002\u0006\u0208\u0007\t\b\t\t\t"; + return newMessageInfo(DEFAULT_INSTANCE, info, objects); + } + // fall through + case GET_DEFAULT_INSTANCE: { + return DEFAULT_INSTANCE; + } + case GET_PARSER: { + com.google.protobuf.Parser parser = PARSER; + if (parser == null) { + synchronized (User.class) { + parser = PARSER; + if (parser == null) { + parser = + new DefaultInstanceBasedParser( + DEFAULT_INSTANCE); + PARSER = parser; + } + } + } + return parser; + } + case GET_MEMOIZED_IS_INITIALIZED: { + return (byte) 1; + } + case SET_MEMOIZED_IS_INITIALIZED: { + return null; + } + } + throw new UnsupportedOperationException(); + } + + + // @@protoc_insertion_point(class_scope:clickstream.proto.User) + private static final User DEFAULT_INSTANCE; + static { + User defaultInstance = new User(); + // New instances are implicitly immutable so no need to make + // immutable. + DEFAULT_INSTANCE = defaultInstance; + com.google.protobuf.GeneratedMessageLite.registerDefaultInstance( + User.class, defaultInstance); + } + + public static User getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static volatile com.google.protobuf.Parser PARSER; + + public static com.google.protobuf.Parser parser() { + return DEFAULT_INSTANCE.getParserForType(); + } +} + diff --git a/clickstream/src/test/kotlin/clickstream/proto/UserOrBuilder.java b/clickstream/src/test/kotlin/clickstream/proto/UserOrBuilder.java new file mode 100644 index 00000000..3c604a4c --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/UserOrBuilder.java @@ -0,0 +1,166 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package clickstream.proto; + +public interface UserOrBuilder extends + // @@protoc_insertion_point(interface_extends:clickstream.proto.User) + com.google.protobuf.MessageLiteOrBuilder { + + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The guid. + */ + String getGuid(); + /** + *
+   * Unique identy of the user.
+   * 
+ * + * string guid = 1; + * @return The bytes for guid. + */ + com.google.protobuf.ByteString + getGuidBytes(); + + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The name. + */ + String getName(); + /** + *
+   * User's full name.
+   * 
+ * + * string name = 2; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+   * User's age.
+   * 
+ * + * int32 age = 3; + * @return The age. + */ + int getAge(); + + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The gender. + */ + String getGender(); + /** + *
+   * User's gender.
+   * 
+ * + * string gender = 4; + * @return The bytes for gender. + */ + com.google.protobuf.ByteString + getGenderBytes(); + + /** + *
+   * User's phone number.
+   * 
+ * + * int64 phone_number = 5; + * @return The phoneNumber. + */ + long getPhoneNumber(); + + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The email. + */ + String getEmail(); + /** + *
+   * User's email address.
+   * 
+ * + * string email = 6; + * @return The bytes for email. + */ + com.google.protobuf.ByteString + getEmailBytes(); + + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + * @return Whether the app field is set. + */ + boolean hasApp(); + /** + *
+   * User's app details.
+   * 
+ * + * .clickstream.proto.App app = 7; + * @return The app. + */ + App getApp(); + + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + * @return Whether the device field is set. + */ + boolean hasDevice(); + /** + *
+   * User's device details.
+   * 
+ * + * .clickstream.proto.Device device = 8; + * @return The device. + */ + Device getDevice(); + + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + * @return Whether the deviceTimestamp field is set. + */ + boolean hasDeviceTimestamp(); + /** + *
+   * Timestamp for the event.
+   * 
+ * + * .google.protobuf.Timestamp device_timestamp = 9; + * @return The deviceTimestamp. + */ + com.google.protobuf.Timestamp getDeviceTimestamp(); +} diff --git a/clickstream/src/test/kotlin/clickstream/proto/UserProto.java b/clickstream/src/test/kotlin/clickstream/proto/UserProto.java new file mode 100644 index 00000000..f41bdc21 --- /dev/null +++ b/clickstream/src/test/kotlin/clickstream/proto/UserProto.java @@ -0,0 +1,16 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: User.proto + +package clickstream.proto; + +public final class UserProto { + private UserProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + static { + } + + // @@protoc_insertion_point(outer_class_scope) +}