From fd1df323fbc7f2556929ab98516679809cfa6228 Mon Sep 17 00:00:00 2001 From: Suryansh Bisen Date: Thu, 10 Jul 2025 15:23:57 +0530 Subject: [PATCH 01/20] added developer docs for iOS SDK public functions Signed-off-by: Suryansh Bisen --- .../Classes/sources/NimbleNetApi.swift | 66 ++++++- .../sources/dataModel/NimbleNetConfig.swift | 57 ++++++ .../sources/dataModel/NimbleNetResult.swift | 166 +++++++++++++----- .../sources/dataModel/UserEventData.swift | 14 +- 4 files changed, 256 insertions(+), 47 deletions(-) diff --git a/sdks/ios/deliteAI/Classes/sources/NimbleNetApi.swift b/sdks/ios/deliteAI/Classes/sources/NimbleNetApi.swift index bf93a6ef..7504996d 100644 --- a/sdks/ios/deliteAI/Classes/sources/NimbleNetApi.swift +++ b/sdks/ios/deliteAI/Classes/sources/NimbleNetApi.swift @@ -7,16 +7,42 @@ import Foundation import SwiftProtobuf +/// The main entry point for the NimbleNet iOS SDK. +/// +/// `NimbleNetApi` provides a high-level interface for integrating machine learning capabilities +/// and event tracking into your iOS applications. This class manages the SDK's lifecycle, +/// including initialization, session management, running inference on machine learning models, +/// and recording user events. +/// +/// Developers use `NimbleNetApi` to: +/// - **Initialize the SDK**: Configure the SDK with necessary credentials and settings. +/// - **Manage Sessions**: Control the active session for event tracking and model interactions. +/// - **Run Machine Learning Models**: Execute pre-trained models with custom inputs to get predictions or insights. +/// - **Add Events**: Track user interactions and other relevant data for analytics or model improvement. +/// - **Check Readiness**: Determine if the SDK and its underlying models are ready for operations. +/// +/// This class abstracts away the complexities of model loading, data handling, and native +/// interoperability, providing a clean and consistent API for mobile developers. public class NimbleNetApi{ private static let nimbleNetController: NimbleNetController = NimbleNetController(); + /// Restarts the current session. public static func restartSession(){ nimbleNetController.restartSession() } + + /// Restarts the session with a specific session identifier. + /// - Parameter sessionId: The ID for the new session. public static func restartSessionWithId(sessionId: String){ nimbleNetController.restartSession(withId: sessionId) } + + /// Initializes the NimbleNet SDK with the provided configuration. + /// - Parameters: + /// - config: The configuration object. + /// - assetsJson: Optional JSON array for asset configuration. + /// - Returns: A `NimbleNetResult` indicating success or failure. public static func initialize(config:NimbleNetConfig, assetsJson: [[String: Any]]? = nil)->NimbleNetResult{ var config = config @@ -64,6 +90,11 @@ public class NimbleNetApi{ } + /// Initializes the NimbleNet SDK with a JSON string configuration. + /// - Parameters: + /// - config: The configuration as a JSON string. + /// - assetsJson: Optional JSON array for asset configuration. + /// - Returns: A `NimbleNetResult` indicating success or failure. public static func initialize(config:String, assetsJson: [[String: Any]]?) -> NimbleNetResult{ if let jsonData = config.data(using: .utf8) { @@ -83,6 +114,11 @@ public class NimbleNetApi{ } } + /// Adds an event with dictionary-based data. + /// - Parameters: + /// - events: A dictionary containing event data. + /// - eventType: The type of event. + /// - Returns: A `NimbleNetResult` with the result of adding the event. public static func addEvent(events: [String: Any], eventType: String) -> NimbleNetResult { do { @@ -100,12 +136,19 @@ public class NimbleNetApi{ } } + /// Adds an event with a JSON string payload. + /// - Parameters: + /// - eventString: The event data as a JSON string. + /// - eventType: The type of event. + /// - Returns: A `NimbleNetResult` with the result of adding the event. public static func addEvent(eventString: String, eventType: String) -> NimbleNetResult { let res = nimbleNetController.add_event_controller(eventString, eventType:eventType)! return NimbleNetResult(data: NSDictionary(dictionary:res)) } - + + /// Checks if the NimbleNet SDK is ready. + /// - Returns: A `NimbleNetResult` indicating the readiness status. public static func isReady() -> NimbleNetResult { do{ @@ -118,6 +161,11 @@ public class NimbleNetApi{ } } + /// Runs a specified method with provided inputs. + /// - Parameters: + /// - methodName: The name of the method to run. + /// - inputs: A dictionary of input tensors. + /// - Returns: A `NimbleNetResult` containing the method's output. public static func runMethod(methodName: String, inputs: [String: NimbleNetTensor]) -> NimbleNetResult { do { @@ -180,7 +228,7 @@ public class NimbleNetApi{ func convertToDictionary(_ input: NimbleNetTensor) -> [String: Any] { if(input.datatype.rawValue == DataType.FE_OBJ.rawValue){ var message = input.data as! (Message & _ProtoNameProviding) - var wrapper = ProtoObjectWrapper(message: message) + var wrapper = ProtoObjectWrapper(message: message) return [ "data": wrapper, "type": input.datatype.value, @@ -197,6 +245,8 @@ public class NimbleNetApi{ } //utils + /// Creates the NimbleNet SDK directory. + /// - Returns: The path to the created directory. private static func createNimbleNetDirectory() -> String { guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { fatalError("Failed to get documents directory.") @@ -215,6 +265,9 @@ public class NimbleNetApi{ return folderURL.path } + /// Converts a value to an `UnsafeMutableRawPointer`. + /// - Parameter value: The value to convert. + /// - Returns: An `UnsafeMutableRawPointer` to the value. private static func convertToVoidPointer(_ value: T) -> UnsafeMutableRawPointer { let pointer = UnsafeMutablePointer.allocate(capacity: 1) pointer.initialize(to: value) @@ -222,6 +275,11 @@ public class NimbleNetApi{ } + /// Populates a `NimbleNetResult` with error information. + /// - Parameters: + /// - errorCode: The error code. + /// - errorMessage: The error message. + /// - Returns: A `NimbleNetResult` with error details. private static func populateNimbleNetResultWithError(errorCode:Int,errorMessage:String) -> NimbleNetResult{ let dict: NSDictionary = [ "status": false, @@ -236,7 +294,9 @@ public class NimbleNetApi{ } - +/// Verifies the types and shapes of user-provided inputs for model execution. +/// - Parameter inputs: A dictionary of input tensors to verify. +/// - Throws: `DataTypeMismatchError` if any input data type or shape is invalid. func verifyUserInputs(inputs: [String: NimbleNetTensor]) throws { for (_, modelInput) in inputs { let data = modelInput.data diff --git a/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetConfig.swift b/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetConfig.swift index 1d6f02ae..dacb573e 100644 --- a/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetConfig.swift +++ b/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetConfig.swift @@ -4,18 +4,75 @@ * SPDX-License-Identifier: Apache-2.0 */ +import Foundation +import SwiftProtobuf + +/// Configuration class for initializing the NimbleNet SDK. +/// +/// This class contains all the necessary parameters and settings required to initialize and +/// configure the NimbleNet SDK. It includes authentication credentials, server endpoints, resource +/// limits, and deployment options. public struct NimbleNetConfig: Codable { + + /// Your unique client identifier from NimbleNet platform. Must be a non-empty + /// string obtained from your NimbleNet account. public let clientId: String + + /// Authentication secret key for API access. Keep this value secure and never + /// expose it in logs or client-side code. public let clientSecret: String + + /// The base URL of the NimbleNet platform API endpoint. Must be a valid HTTPS URL (e.g., + /// "https://api.nimblenet.ai"). public let host: String + + /// Unique identifier for this device or application installation. Can be a UUID, + /// device fingerprint, or custom identifier. Should remain consistent across app sessions for the + /// same device. public let deviceId: String + + /// Enable debug mode for detailed logging and diagnostics. Set to `false` in production + /// builds for optimal performance. public let debug: Bool + + /// Version identifier for API compatibility checking. Should match your + /// application version or SDK compatibility version. Used to ensure client-server API + /// compatibility. public var compatibilityTag: String + + /// Optional custom session identifier for session management. If empty, the SDK + /// will generate a default session ID. Useful for multi-user applications or session persistence. public var sessionId: String + + /// Optional maximum database size limit in kilobytes. When reached, older data + /// may be purged to stay within limits. Set based on your device storage constraints. public var maxDBSizeKBs: Float? + + /// Optional maximum event data storage limit in kilobytes. Controls how much + /// event data can be cached before upload. public var maxEventsSizeKBs: Float? + + /// Array of cohort identifiers for A/B testing and experimentation. Used to assign + /// users to specific test groups or feature variants. public var cohortIds: [String] + + /// Whether the assets will be downloaded from cloud or they are + /// already bundled with the app. public var online: Bool + + /// Initializes a `NimbleNetConfig` instance. + /// - Parameters: + /// - clientId: Your unique client identifier from NimbleNet platform. Defaults to an empty string. + /// - clientSecret: Authentication secret key for API access. Defaults to an empty string. + /// - host: The base URL of the NimbleNet platform API endpoint. Defaults to an empty string. + /// - deviceId: Unique identifier for this device or application installation. Defaults to an empty string. + /// - debug: Enable debug mode for detailed logging and diagnostics. Defaults to `false`. + /// - compatibilityTag: Version identifier for API compatibility checking. Defaults to an empty string. + /// - sessionId: Optional custom session identifier for session management. Defaults to an empty string. + /// - maxDBSizeKBs: Optional maximum database size limit in kilobytes. Defaults to `nil`. + /// - maxEventsSizeKBs: Optional maximum event data storage limit in kilobytes. Defaults to `nil`. + /// - cohortIds: Array of cohort identifiers for A/B testing and experimentation. Defaults to an empty array. + /// - online: Whether the assets will be downloaded from cloud or they are already bundled with the app. Defaults to `false`. public init(clientId: String = "", clientSecret: String = "", host: String = "", diff --git a/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetResult.swift b/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetResult.swift index 2cd9d61f..14a7d7d5 100644 --- a/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetResult.swift +++ b/sdks/ios/deliteAI/Classes/sources/dataModel/NimbleNetResult.swift @@ -6,13 +6,93 @@ import Foundation +public class NimbleNetResult { + /// Indicates whether the operation succeeded (`true`) or failed (`false`). + public var status: Bool + /// The actual result data when the operation succeeds. + /// Will be `nil` for failed operations. + public var payload: T? + /// Detailed error information when the operation fails. + /// Will be `nil` for successful operations. + public var error: NimbleNetError? + + /// Initializes a `NimbleNetResult` instance from a dictionary. + /// + /// This initializer parses a dictionary, typically received from the native controller, + /// to populate the `status`, `error`, and `payload` properties. + /// + /// ## Result States + /// + /// ### Success State + /// - `status = true` + /// - `payload` contains the actual result data + /// - `error = nil` + /// + /// ### Failure State + /// - `status = false` + /// - `payload = nil` + /// - `error` contains detailed failure information + /// + /// - Parameter data: A dictionary containing the result information, including "status", + /// "data" (for payload), and "error". + public init(data: NSDictionary) { + self.status = data["status"] as! Bool + self.error = NimbleNetError(errorDict: data["error"] as? NSDictionary) + + if let dataDict = data["data"] as? NSDictionary { + self.payload = parseData(dataDict) + } else { + self.payload = nil + } + } + + /// Parses the raw data dictionary into the appropriate payload type. + /// - Parameter data: The raw data dictionary from the native controller. + /// - Returns: An optional payload of type `T` if parsing is successful, otherwise `nil`. + private func parseData(_ data: Any) -> T? { + if T.self == NimbleNetOutput.self { + return NimbleNetOutput(data: data as! NSDictionary) as? T + } else if T.self == ModelStatusData.self { + return ModelStatusData(data: data as! NSDictionary) as? T + } else if T.self == Int.self { + return data as? T + } + else if T.self == UserEventdata.self{ + let dataDict = data as? [String: Any] + let userEventdata = UserEventdata(eventDataJSONString: dataDict?["eventJsonString"] as? String, eventType: dataDict?["eventType"] as? String) + return userEventdata as? T + } + + return nil + } +} + public class TensorInternal{ + + /// The name of the tensor. This typically corresponds to the output name + /// defined in the machine learning model. public var name:String + + /// An array of integers representing the dimensions of the tensor (its shape). + /// For example, `[1, 224, 224, 3]` might represent a batch of 1 image + /// with 224x224 pixels and 3 color channels. public var shape:[Int] + + /// The data type of the elements within the tensor. public var type:DataType + + /// The actual data contained within the tensor. Its type will vary based on `self.type`. public var data:Any - init(data: NSDictionary, name:String) { + /// Initializes a `TensorInternal` instance from a dictionary and a name. + /// + /// This initializer is used to reconstruct a tensor from a dictionary + /// representation, typically received from the native controller or a serialized source. + /// + /// - Parameters: + /// - data: A dictionary containing the tensor's "data", "shape", and "type". + /// - name: The name to assign to this tensor. + public init(data: NSDictionary, name:String) { self.data = data["data"]! self.shape = data["shape"] as! [Int] self.type = DataType(value: data["type"] as! Int) @@ -21,11 +101,26 @@ public class TensorInternal{ } public class NimbleNetOutput { + + /// An array of `TensorInternal` objects representing the output tensors, + /// ordered as they were received. public var array: [TensorInternal] = [] + + /// The total number of output tensors. public var numOutputs: Int = 0 + + /// A dictionary (map) of `TensorInternal` objects, where keys are the + /// names of the output tensors and values are the `TensorInternal` instances. public var map: [String: TensorInternal] = [:] - init(data: NSDictionary) { + /// Initializes a `NimbleNetOutput` instance from a dictionary. + /// + /// This initializer parses a dictionary, typically received from the native controller, + /// to populate the `map`, `array`, and `numOutputs` properties. + /// + /// - Parameter data: A dictionary containing the output information, expected to have + /// an "outputs" dictionary and a "size" integer. + public init(data: NSDictionary) { if let outputsDict = data["outputs"] as? [String: NSDictionary] { for (key, value) in outputsDict { let singleOutputData = TensorInternal(data: value, name: key) @@ -39,72 +134,61 @@ public class NimbleNetOutput { } } + /// Provides subscript access to output tensors by their name. + /// - Parameter key: The string name of the desired output tensor. + /// - Returns: The `TensorInternal` object associated with the given key, or `nil` if not found. public subscript(key: String) -> TensorInternal? { return map[key] } } public class ModelStatusData{ + /// A boolean indicating whether the model is ready for inference (`true`) or not (`false`). public var isModelReady: Bool = false + /// The version string of the model. public var version:String = "" - init(data:NSDictionary){ + /// Initializes a `ModelStatusData` instance from a dictionary. + /// + /// This initializer parses a dictionary, typically received from the native controller, + /// to populate the `isModelReady` and `version` properties. + /// + /// - Parameter data: A dictionary containing the model status information, + /// expected to have "isModelReady" (Bool) and "version" (String) keys. + public init(data:NSDictionary){ self.isModelReady = data["isModelReady"] as! Bool self.version = data["version"] as! String } } public class NimbleNetError { + + /// Numeric error code identifying the specific type of error. public var code: Int = 0 + + /// Human-readable description of the error. + /// May be empty if not specified. public var message: String = "" - init?(errorDict: NSDictionary?) { + /// Initializes a `NimbleNetError` instance from an optional dictionary. + /// + /// This failable initializer attempts to create an error object from a dictionary, + /// typically received from the native controller. If the `errorDict` is `nil`, + /// the initialization fails, returning `nil`. + /// + /// - Parameter errorDict: An optional dictionary containing error information, + /// expected to have "code" (Int) and "message" (String) keys. + public init?(errorDict: NSDictionary?) { guard let errorDict = errorDict else { return nil } self.code = errorDict["code"] as! Int self.message = errorDict["message"] as! String - - } -} - -public class NimbleNetResult { - public var status: Bool - public var payload: T? - public var error: NimbleNetError? - - init(data: NSDictionary) { - self.status = data["status"] as! Bool - self.error = NimbleNetError(errorDict: data["error"] as? NSDictionary) - - if let dataDict = data["data"] as? NSDictionary { - self.payload = parseData(dataDict) - } else { - self.payload = nil - } - } - - private func parseData(_ data: Any) -> T? { - if T.self == NimbleNetOutput.self { - return NimbleNetOutput(data: data as! NSDictionary) as? T - } else if T.self == ModelStatusData.self { - return ModelStatusData(data: data as! NSDictionary) as? T - } else if T.self == Int.self { - return data as? T - } - else if T.self == UserEventdata.self{ - let dataDict = data as? [String: Any] - let userEventdata = UserEventdata(eventDataJSONString: dataDict?["eventJsonString"] as? String, eventType: dataDict?["eventType"] as? String) - return userEventdata as? T - } - - return nil } } -//extensions to stringify - +//MARK: extensions to stringify extension NimbleNetResult: CustomStringConvertible { public var description: String { var description = "NimbleNetResult - Status: \(status)" diff --git a/sdks/ios/deliteAI/Classes/sources/dataModel/UserEventData.swift b/sdks/ios/deliteAI/Classes/sources/dataModel/UserEventData.swift index 374ff93a..3c35bc43 100644 --- a/sdks/ios/deliteAI/Classes/sources/dataModel/UserEventData.swift +++ b/sdks/ios/deliteAI/Classes/sources/dataModel/UserEventData.swift @@ -7,10 +7,18 @@ import Foundation public class UserEventdata{ - init(eventDataJSONString: String? = nil, eventType: String? = nil) { + + /// The serialized JSON representation of the event data. + public var eventDataJSONString: String? + + /// The classification or category of the recorded event. + public var eventType:String? + + /// - Parameters: + /// - eventDataJSONString: The serialized JSON string of the event data. Defaults to `nil`. + /// - eventType: The classification or category of the recorded event. Defaults to `nil`. + public init(eventDataJSONString: String? = nil, eventType: String? = nil) { self.eventDataJSONString = eventDataJSONString self.eventType = eventType } - public var eventDataJSONString: String? - public var eventType:String? } From 8a04272bf24f8b8c084a35e05549a69e352e0005 Mon Sep 17 00:00:00 2001 From: Naman Anand <46650369+void-memories@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:54:06 +0530 Subject: [PATCH 02/20] [ANDROID][SDK] Update readme (#116) * update readme * simplify command --------- Signed-off-by: Naman Anand Signed-off-by: Suryansh Bisen --- sdks/android/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sdks/android/README.md b/sdks/android/README.md index 4dd2ad42..86c0ea75 100644 --- a/sdks/android/README.md +++ b/sdks/android/README.md @@ -132,6 +132,13 @@ keyPassword=your_key_password keyAlias=your_key_alias ``` +#### 6. External Dependencies + +Run the following command to download all the required dependencies: + +```bash +cd $(git rev-parse --show-toplevel) && ./setup.sh --sdk android +``` ## Quick Start Follow these steps to get the sample application running in minutes. From c0ad8c941b087c4866b7b2da4924859ee21d4a99 Mon Sep 17 00:00:00 2001 From: ultajain <74460243+ultajain@users.noreply.github.com> Date: Mon, 14 Jul 2025 13:47:41 +0530 Subject: [PATCH 03/20] Created Github workflow to build and publish DeliteAI docs (#96) Added github workflow to build and publish docs Signed-off-by: Atul Jain Co-authored-by: Atul Jain Signed-off-by: Suryansh Bisen --- .github/workflows/publish-docs.yml | 76 ++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/publish-docs.yml diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml new file mode 100644 index 00000000..18609241 --- /dev/null +++ b/.github/workflows/publish-docs.yml @@ -0,0 +1,76 @@ +name: Build and Publish Docs + +on: + workflow_dispatch: + +env: + S3_BUCKET: deliteai.dev + CLOUDFRONT_DIST_ID: EMNMVB8Y3G0BE + +jobs: + build-and-publish: + runs-on: ubuntu-latest + env: + ANDROID_SDK_ROOT: /usr/local/lib/android/sdk + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Set up AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.DOCS_AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.DOCS_AWS_SECRET_ACCESS_KEY }} + aws-region: ap-south-1 + + - name: Generate dummy local.properties + working-directory: sdks/android + run: | + cat < local.properties + sdk.dir=/usr/local/lib/android/sdk + storeFile=/path/to/keystore.jks + storePassword=your_store_password + keyPassword=your_key_password + keyAlias=your_key_alias + ANDROID_DEV_AWS_ACCESS_KEY_ID=your_aws_key + ANDROID_DEV_AWS_SECRET_ACCESS_KEY=your_aws_secret + ANDROID_DEV_AWS_S3_URL=your_s3_url + OSS_USER=your_maven_user + OSS_PASSWORD=your_maven_password + ANDROID_TEST_CLIENT_ID=test_client_id + ANDROID_TEST_CLIENT_SECRET=test_client_secret + ANDROID_TEST_HOST=https://test-api-endpoint.com + REMOTE_LOGGER_KEY=your_logger_key + REMOTE_LOGGER_URL=https://your-logging-endpoint.com + EOF + + - name: Generate Dokka docs + working-directory: sdks/android + run: ./gradlew dokkaGfm + + - name: Build site + working-directory: docs + run: | + pip install -r requirements.txt + ./scripts/run build_website + + - name: Sync to S3 + run: | + aws s3 sync ./docs/build/deliteai.dev/html s3://$S3_BUCKET --delete + + - name: Invalidate CloudFront Cache + run: | + aws cloudfront create-invalidation \ + --distribution-id "$CLOUDFRONT_DIST_ID" \ + --paths "/*" \ No newline at end of file From dddb1e4f807075ff50921ff2b31249f50d55a630 Mon Sep 17 00:00:00 2001 From: Suryansh Bisen <69685349+Suryansh1191@users.noreply.github.com> Date: Mon, 14 Jul 2025 15:00:31 +0530 Subject: [PATCH 04/20] [iOS][SDK] updated DEVELOPMENT.md (#117) * added setps in DEVELOPMENT.md to download third party binaries --------- Signed-off-by: Suryansh Bisen Co-authored-by: Neeraj Poddar Signed-off-by: Suryansh Bisen --- sdks/ios/docs/DEVELOPMENT.md | 44 +++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/sdks/ios/docs/DEVELOPMENT.md b/sdks/ios/docs/DEVELOPMENT.md index 7ae55d58..8f3f7ab6 100644 --- a/sdks/ios/docs/DEVELOPMENT.md +++ b/sdks/ios/docs/DEVELOPMENT.md @@ -1,43 +1,62 @@ # DeliteAI iOS SDK -To build the **DeliteAI iOS SDK** locally and run tests follow these steps below: +To build the **DeliteAI iOS SDK** locally and run tests, follow these steps: ## Running the SDK Locally Through Example App To effectively test and observe the functionalities of the DeliteAI iOS SDK locally, you can utilize the provided `NimbleNetExample` application. Follow these detailed steps to get it up and running: -1. **Navigate to the Example Directory:** - Open your terminal or command prompt and change your current directory to the `example` folder located within your cloned DeliteAI iOS SDK repository. +1. **Install Third-Party Binaries:** + Run the following command to download all the required dependencies: -2. **Install Dependencies via CocoaPods:** - From within the `example` directory, execute the following command. This will fetch all necessary dependencies, including the DeliteAI iOS SDK itself from your local code, ensuring you're testing against your current development version. + ```bash + cd $(git rev-parse --show-toplevel) && ./setup.sh --sdk ios + ``` + +1. **Build NimbleNet.xcframework:** + This command requires **CMake** to be installed on your machine. If you don't have CMake, you can install it using Homebrew: + + ```bash + brew install cmake + ``` + + Build the `NimbleNet.xcframework` by running the following command from the project's root directory: ```bash + cd $(git rev-parse --show-toplevel) && ./sdk/ios/script/build-deliteAI-static.sh + ``` + +1. **Install Dependencies via CocoaPods:** + Run the following commands to fetch all necessary dependencies - including the DeliteAI iOS SDK itself from your local code which will ensure that you're testing against your current development version. + + ```bash + cd sdk/ios/example pod install ``` -3. **Open the Xcode Workspace:** +1. **Open the Xcode Workspace:** Once the `pod install` command completes successfully, open the generated Xcode workspace file. It's crucial to open the `.xcworkspace` file, not the `.xcodeproj` file, to ensure all pods are correctly linked. ```bash open NimbleNetExample.xcworkspace ``` -4. **Select the Target:** +1. **Select the Target:** In Xcode, ensure that `NimbleNetExample` is selected as the active target for compilation and running. You can find this dropdown menu next to the play/stop buttons in the Xcode toolbar. -5. **Build and Run the Application:** +1. **Build and Run the Application:** With the target selected, click the **Run** (play) button in Xcode. Choose your desired simulator or a connected iOS device. As the app runs, closely observe the **Debug Area**. This output will help you verify the core functionalities of the SDK. + ## Running Unit Tests The `NimbleNetExample` project includes a dedicated test target, `NimbleNetExample_Tests`, with several unit tests to ensure the robustness and correctness of the DeliteAI iOS SDK's functionalities. Developers can run these tests to verify specific components and behaviors. The following test files are available: -1. RunMethodInstrumentation.swift -2. ProtoTest.swift -3. Keychaintest.swift +1. RunMethodInstrumentation.swift +2. ProtoTest.swift +3. Keychaintest.swift To run these test cases: @@ -53,5 +72,4 @@ To run these test cases: * **Run a Single Test Function:** Within a test file, each individual `func` (test method) also has a diamond-shaped "play" button next to its declaration. Clicking this will execute only that particular test function. 4. **Observe Test Results:** - After running tests, Xcode will display the results in the **Debug Area** and the **Test Navigator** (accessible via `Cmd + 6`). Successful tests will be marked with a green checkmark, while failures will show a red 'X' along with details about the assertion that failed. - + After running tests, Xcode will display the results in the **Debug Area** and the **Test Navigator** (accessible via `Cmd + 6`). Successful tests will be marked with a green checkmark, while failures will show a red 'X' along with details about the assertion that failed. \ No newline at end of file From 00b50c253b112f1d15150413a4176884157a4c78 Mon Sep 17 00:00:00 2001 From: Suryansh Bisen <69685349+Suryansh1191@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:29:15 +0530 Subject: [PATCH 05/20] [iOS][SDK] updated DEVELOPMENT.md for iOS (#121) updated DEVELOPMENT.md for iOS Signed-off-by: Suryansh Bisen --- sdks/ios/docs/DEVELOPMENT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdks/ios/docs/DEVELOPMENT.md b/sdks/ios/docs/DEVELOPMENT.md index 8f3f7ab6..9e7c2040 100644 --- a/sdks/ios/docs/DEVELOPMENT.md +++ b/sdks/ios/docs/DEVELOPMENT.md @@ -23,14 +23,14 @@ To effectively test and observe the functionalities of the DeliteAI iOS SDK loca Build the `NimbleNet.xcframework` by running the following command from the project's root directory: ```bash - cd $(git rev-parse --show-toplevel) && ./sdk/ios/script/build-deliteAI-static.sh + cd $(git rev-parse --show-toplevel) && ./sdks/ios/script/build-deliteAI-static.sh ``` 1. **Install Dependencies via CocoaPods:** Run the following commands to fetch all necessary dependencies - including the DeliteAI iOS SDK itself from your local code which will ensure that you're testing against your current development version. ```bash - cd sdk/ios/example + cd sdks/ios/example pod install ``` From e3a43982c37ce0d7311afc65f52be55fc116bb41 Mon Sep 17 00:00:00 2001 From: Naman Anand <46650369+void-memories@users.noreply.github.com> Date: Mon, 14 Jul 2025 17:32:35 +0530 Subject: [PATCH 06/20] [ANDROID][SDK] Make local.properties optional (#120) * remove dep on local.properties * remove localProperties load duplication --- Signed-off-by: Naman Anand Signed-off-by: Suryansh Bisen --- sdks/android/app/build.gradle | 31 ++++++++++--------- .../android/buildSrc/src/main/kotlin/Utils.kt | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/sdks/android/app/build.gradle b/sdks/android/app/build.gradle index 87fb9b75..0796c0e2 100644 --- a/sdks/android/app/build.gradle +++ b/sdks/android/app/build.gradle @@ -10,10 +10,6 @@ plugins { id "org.jetbrains.kotlin.plugin.compose" } -def executedTask = gradle.startParameter.taskNames.toString() -def localProps = new Properties() -localProps.load(new FileInputStream(rootProject.file("local.properties"))) - Properties localProperties = new Properties() def propertiesFile = project.rootProject.file('local.properties') if (propertiesFile.exists()) { @@ -22,12 +18,15 @@ if (propertiesFile.exists()) { android { signingConfigs { - externalRelease { - storeFile file(localProperties.getProperty('storeFile')) - storePassword localProperties.getProperty('storePassword') - keyPassword localProperties.getProperty('keyPassword') - keyAlias localProperties.getProperty('keyAlias') - } + +// Uncomment for sample app release build: +// +// externalRelease { +// storeFile file(localProperties.getProperty('storeFile')) +// storePassword localProperties.getProperty('storePassword') +// keyPassword localProperties.getProperty('keyPassword') +// keyAlias localProperties.getProperty('keyAlias') +// } } namespace 'dev.deliteai.android.sampleapp' @@ -41,19 +40,21 @@ android { versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - signingConfig signingConfigs.externalRelease + vectorDrawables { useSupportLibrary true } - buildConfigField "String", "APP_CLIENT_ID", "\"${localProps['APP_CLIENT_ID']}\"" - buildConfigField "String", "APP_CLIENT_SECRET", "\"${localProps['APP_CLIENT_SECRET']}\"" - buildConfigField "String", "APP_HOST", "\"${localProps['APP_HOST']}\"" + buildConfigField "String", "APP_CLIENT_ID", "\"${localProperties['APP_CLIENT_ID']}\"" + buildConfigField "String", "APP_CLIENT_SECRET", "\"${localProperties['APP_CLIENT_SECRET']}\"" + buildConfigField "String", "APP_HOST", "\"${localProperties['APP_HOST']}\"" } buildTypes { release { - signingConfig signingConfigs.externalRelease +// Uncomment for sample app release build: +// signingConfig signingConfigs.externalRelease + minifyEnabled true shrinkResources true debuggable false diff --git a/sdks/android/buildSrc/src/main/kotlin/Utils.kt b/sdks/android/buildSrc/src/main/kotlin/Utils.kt index 5dfd7f01..0564ea44 100644 --- a/sdks/android/buildSrc/src/main/kotlin/Utils.kt +++ b/sdks/android/buildSrc/src/main/kotlin/Utils.kt @@ -28,7 +28,7 @@ fun Project.getLocalProperty(key: String): String { val propsFile = rootProject.file("local.properties") val props = Properties().apply { if (propsFile.exists()) load(propsFile.inputStream()) } return props.getProperty(key) - ?: throw GradleException("Missing local property: $key") + ?: "" } fun fetchLocalProperties(rootDir: File) = From 839e4293340d92b36e98e8ca059b0e18cbcd66f1 Mon Sep 17 00:00:00 2001 From: Neeraj Poddar Date: Tue, 15 Jul 2025 15:34:55 +0530 Subject: [PATCH 07/20] Updated LLM DelitePy docs (#123) Signed-off-by: Neeraj Poddar Signed-off-by: Suryansh Bisen --- .../library_stubs/src_template/delitepy/nimblenet/llm.py | 1 - 1 file changed, 1 deletion(-) diff --git a/coreruntime/delitepy/library_stubs/src_template/delitepy/nimblenet/llm.py b/coreruntime/delitepy/library_stubs/src_template/delitepy/nimblenet/llm.py index b6ef6a9c..b794880b 100644 --- a/coreruntime/delitepy/library_stubs/src_template/delitepy/nimblenet/llm.py +++ b/coreruntime/delitepy/library_stubs/src_template/delitepy/nimblenet/llm.py @@ -260,4 +260,3 @@ def clear_context(self) -> None: """ pass -__all__ = ["LLM"] \ No newline at end of file From 44080c95de10ca2e0efa56a3a03d390ba8cb75df Mon Sep 17 00:00:00 2001 From: Naman Anand <46650369+void-memories@users.noreply.github.com> Date: Tue, 15 Jul 2025 19:29:33 +0530 Subject: [PATCH 08/20] [ANDROID][SDK] Fix asset copy logic + Add android tests + Code cleanup (#114) * code cleanup * address pr comments * make copy asset tests generic * cosmetics --------- Signed-off-by: Naman Anand Co-authored-by: Puneet Jindal Signed-off-by: Suryansh Bisen --- sdks/android/nimblenet_ktx/build.gradle.kts | 7 + .../src/androidTest/assets/fl1/f1 | 1 + .../src/androidTest/assets/fl1/f2 | 1 + .../src/androidTest/assets/fl2/f1 | 1 + .../src/androidTest/assets/fl2/f2 | 1 + .../deliteai/impl/io/FileUtilsAndroidTest.kt | 205 ++++++++++++++++++ .../src/main/kotlin/dev/deliteai/NimbleNet.kt | 32 +-- .../impl/controllers/NimbleNetController.kt | 29 ++- .../kotlin/dev/deliteai/impl/io/FileUtils.kt | 166 ++++++++------ 9 files changed, 340 insertions(+), 103 deletions(-) create mode 100644 sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f1 create mode 100644 sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f2 create mode 100644 sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f1 create mode 100644 sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f2 diff --git a/sdks/android/nimblenet_ktx/build.gradle.kts b/sdks/android/nimblenet_ktx/build.gradle.kts index 2cd35c8d..2fbc2a8c 100644 --- a/sdks/android/nimblenet_ktx/build.gradle.kts +++ b/sdks/android/nimblenet_ktx/build.gradle.kts @@ -67,6 +67,13 @@ android { sourceSets["main"].java.srcDir("src/gemini/kotlin") } + // Package androidTest assets into the app APK under test + sourceSets { + getByName("androidTest") { + assets.srcDir("src/androidTest/assets") + } + } + compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f1 b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f1 new file mode 100644 index 00000000..c3689bcf --- /dev/null +++ b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f1 @@ -0,0 +1 @@ +TEST FILE - llm/f1 \ No newline at end of file diff --git a/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f2 b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f2 new file mode 100644 index 00000000..6d4c12b9 --- /dev/null +++ b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl1/f2 @@ -0,0 +1 @@ +TEST FILE - llm/f2 \ No newline at end of file diff --git a/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f1 b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f1 new file mode 100644 index 00000000..78547528 --- /dev/null +++ b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f1 @@ -0,0 +1 @@ +TEST FILE - misc/f1 \ No newline at end of file diff --git a/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f2 b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f2 new file mode 100644 index 00000000..720b5d17 --- /dev/null +++ b/sdks/android/nimblenet_ktx/src/androidTest/assets/fl2/f2 @@ -0,0 +1 @@ +TEST FILE - misc/f2 \ No newline at end of file diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt index dda64c1c..f05446aa 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt @@ -13,6 +13,7 @@ import android.app.Application import android.os.Environment import androidx.test.core.app.ApplicationProvider import java.io.File +import org.json.JSONArray import org.json.JSONObject import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -121,4 +122,208 @@ class FileUtilsAndroidTest { destinationFile.delete() } + + @Test + fun copyAssetsAndUpdatePathShouldCopyFiles() { + val assetsJsonStr = """ + [ + { + "name": "workflow_script", + "version": "1.0.0", + "type": "script", + "location": { + "path": "fl1/f1" + } + }, + { + "name": "add_model", + "version": "1.0.0", + "type": "model", + "location": { + "path": "fl1/f2" + } + } + ] + """.trimIndent() + + val assetsJson = JSONArray(assetsJsonStr) + + fileUtils.copyAssetsAndUpdatePath(assetsJson) + + // Validate each asset's path is updated to an absolute path and the file exists + for (i in 0 until assetsJson.length()) { + val asset = assetsJson.getJSONObject(i) + val type = asset.getString("type") + if (type.equals("retriever", ignoreCase = true)) continue // Not applicable here + val location = asset.getJSONObject("location") + val updatedPath = location.getString("path") + val file = File(updatedPath) + assertTrue("$type path should be absolute", file.isAbsolute) + assertTrue("$type file should exist", file.exists()) + } + } + + @Test + fun copyAssetsAndUpdatePathShouldCopyNestedAssets() { + val assetsJsonStr = """ + [ + { + "name": "workflow_script", + "version": "1.0.0", + "type": "script", + "location": { + "path": "fl1/f1" + } + }, + { + "name": "GroceryRAG", + "version": "1.0.0", + "type": "retriever", + "arguments": [ + { + "name": "embeddingStoreModel", + "version": "1.0.0", + "type": "model", + "location": { + "path": "fl2/f1" + } + }, + { + "name": "groceryItems", + "version": "1.0.0", + "type": "document", + "location": { + "path": "fl2/f2" + } + } + ] + } + ] + """.trimIndent() + + val assetsJson = JSONArray(assetsJsonStr) + + fileUtils.copyAssetsAndUpdatePath(assetsJson) + + // Validate script asset + val scriptAsset = assetsJson.getJSONObject(0) + val scriptPath = scriptAsset.getJSONObject("location").getString("path") + val scriptFile = File(scriptPath) + assertTrue(scriptFile.isAbsolute) + assertTrue(scriptFile.exists()) + + // Validate nested assets inside retriever + val retrieverAsset = assetsJson.getJSONObject(1) + val argumentsArray = retrieverAsset.getJSONArray("arguments") + for (i in 0 until argumentsArray.length()) { + val arg = argumentsArray.getJSONObject(i) + val location = arg.getJSONObject("location") + val updatedPath = location.getString("path") + val file = File(updatedPath) + assertTrue(file.isAbsolute) + assertTrue(file.exists()) + } + } + + @Test + fun copyAssetsAndUpdatePathShouldCopyFolderRecursively() { + val assetsJsonStr = """ + [ + { + "name": "llama-3", + "version": "1.0.0", + "type": "llm", + "location": { + "path": "fl1" + } + } + ] + """.trimIndent() + + val assetsJson = JSONArray(assetsJsonStr) + + fileUtils.copyAssetsAndUpdatePath(assetsJson) + + // Validate LLM folder copied recursively + val llmAsset = assetsJson.getJSONObject(0) + val llmPath = llmAsset.getJSONObject("location").getString("path") + val llmDir = File(llmPath) + assertTrue(llmDir.isAbsolute) + assertTrue(llmDir.exists()) + assertTrue(llmDir.isDirectory) + + // Check that every file from the original assets/llm folder exists in copied directory + val assetManager = application.assets + + fun collectAssetPaths(base: String): List { + val children = assetManager.list(base) ?: return emptyList() + val paths = mutableListOf() + for (child in children) { + val childPath = if (base.isEmpty()) child else "$base/$child" + if ((assetManager.list(childPath)?.isNotEmpty() == true)) { + // directory + paths += collectAssetPaths(childPath).map { "$child/${it}" } + } else { + // file + paths += child + } + } + return paths + } + + val expectedFiles = collectAssetPaths("fl1") + assertTrue("LLM assets should not be empty", expectedFiles.isNotEmpty()) + + expectedFiles.forEach { relativePath -> + val copiedFile = File(llmDir, relativePath) + assertTrue("$relativePath should exist in copied LLM directory", copiedFile.exists()) + } + } + + @Test + fun copyAssetsAndUpdatePathShouldNotOverwriteExistingFiles() { + val assetsJsonStr = """ + [ + { + "name": "workflow_script", + "version": "1.0.0", + "type": "script", + "location": { + "path": "fl1/f1" + } + } + ] + """.trimIndent() + + val firstAssetsJson = JSONArray(assetsJsonStr) + + // First copy + fileUtils.copyAssetsAndUpdatePath(firstAssetsJson) + + val destPath = firstAssetsJson.getJSONObject(0) + .getJSONObject("location") + .getString("path") + + val destFile = File(destPath) + assertTrue(destFile.exists()) + + val lastModifiedFirst = destFile.lastModified() + + // Wait briefly to ensure timestamp would change if file were overwritten + Thread.sleep(500) + + // Second copy attempt + val secondAssetsJson = JSONArray(assetsJsonStr) + fileUtils.copyAssetsAndUpdatePath(secondAssetsJson) + + val destPathSecond = secondAssetsJson.getJSONObject(0) + .getJSONObject("location") + .getString("path") + + val destFileSecond = File(destPathSecond) + val lastModifiedSecond = destFileSecond.lastModified() + + // The file should remain unchanged (not overwritten) + assertEquals(lastModifiedFirst, lastModifiedSecond) + } } diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt index bc3d9bb3..adf29aa0 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt @@ -8,7 +8,6 @@ package dev.deliteai import android.app.Application import dev.deliteai.datamodels.NimbleNetConfig -import dev.deliteai.datamodels.NimbleNetError import dev.deliteai.datamodels.NimbleNetResult import dev.deliteai.datamodels.NimbleNetTensor import dev.deliteai.datamodels.UserEventData @@ -73,9 +72,11 @@ import org.json.JSONObject */ object NimbleNet { - @Volatile private lateinit var controller: NimbleNetController + @Volatile + private lateinit var controller: NimbleNetController - @Volatile private lateinit var localLogger: LocalLogger + @Volatile + private lateinit var localLogger: LocalLogger /** * Initializes the NimbleNet SDK with the provided configuration. @@ -161,28 +162,9 @@ object NimbleNet { controller = container.getNimbleNetController() localLogger = container.getLocalLogger() - // TODO: Move this logic to NimbleNetController - // Pass deliteAssets only if online flag is false, else pass it on as null - return if (config.online) { - runCatching { controller.initialize(config, null) } - .onFailure(localLogger::e) - .getOrElse { it.toNimbleNetResult() } - } else { - if (assetsJson == null) { - return NimbleNetResult( - false, - null, - NimbleNetError( - code = -1, - message = - "deliteAssets cannot be null in case NimbleNetConfig has online flag set to false.", - ), - ) - } - runCatching { controller.initialize(config, assetsJson) } - .onFailure(localLogger::e) - .getOrElse { it.toNimbleNetResult() } - } + return runCatching { controller.initialize(config, assetsJson) } + .onFailure(localLogger::e) + .getOrElse { it.toNimbleNetResult() } } /** diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt index 74900d60..bbea4994 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt @@ -10,7 +10,6 @@ import android.app.Application import android.os.SystemClock import androidx.annotation.VisibleForTesting import dev.deliteai.datamodels.NimbleNetConfig -import dev.deliteai.datamodels.NimbleNetError import dev.deliteai.datamodels.NimbleNetResult import dev.deliteai.datamodels.NimbleNetTensor import dev.deliteai.datamodels.UserEventData @@ -25,10 +24,10 @@ import dev.deliteai.impl.io.FileUtils import dev.deliteai.impl.loggers.RemoteLogger import dev.deliteai.impl.moduleInstallers.ModuleInstaller import dev.deliteai.impl.nativeBridge.CoreRuntime -import java.util.concurrent.atomic.AtomicBoolean import kotlinx.coroutines.runBlocking import org.json.JSONArray import org.json.JSONObject +import java.util.concurrent.atomic.AtomicBoolean internal class NimbleNetController( private val application: Application, @@ -46,29 +45,29 @@ internal class NimbleNetController( @Synchronized fun initialize(config: NimbleNetConfig, assetsJson: JSONArray? = null): NimbleNetResult = runBlocking(deliteAiScope.secondary.coroutineContext) { + if (!config.online && assetsJson == null) throw Exception( + "assetsJson can't be null during offline mode" + ) + val result = NimbleNetResult(payload = null) val storageInfo = fileUtils.getInternalStorageFolderSizes() + val sdkDir = fileUtils.getSDKDirPath() config.setInternalDeviceId(hardwareInfo.getInternalDeviceId()) moduleInstaller.execute() - var modifiedAssetsJson = assetsJson - if (assetsJson != null) { - try { - modifiedAssetsJson = fileUtils.processModules(application, assetsJson) - } catch (e: Exception) { - return@runBlocking NimbleNetResult( - false, - null, - NimbleNetError(1, "Loading of modules failed with the error: " + e.message), - ) - } - } + + //deep copy so that the user's assetsJson doesn't change + val modifiedAssetsJson = assetsJson + ?.let { JSONArray(it.toString()) } + + //no-op during assetJson == null + fileUtils.copyAssetsAndUpdatePath(modifiedAssetsJson) coreRuntime.initializeNimbleNet( application, config.toString(), modifiedAssetsJson, - fileUtils.getSDKDirPath(), + sdkDir, result, ) diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt index da1a94cc..dcd573fd 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt @@ -7,7 +7,7 @@ package dev.deliteai.impl.io import android.app.Application -import android.content.Context +import android.content.res.AssetManager import dev.deliteai.impl.common.SDK_CONSTANTS import dev.deliteai.impl.common.SDK_CONSTANTS.DELITE_ASSETS_TEMP_FILES_EXPIRY_IN_MILLIS import dev.deliteai.impl.common.SDK_CONSTANTS.DELITE_ASSETS_TEMP_STORAGE @@ -23,28 +23,30 @@ internal class FileUtils( private val application: Application, private val localLogger: LocalLogger, ) { + private val assetManager: AssetManager = application.assets + fun getInternalStorageFolderSizes(): String? = runCatching { - val parent = application.filesDir.resolve(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME) - val sizes = buildMap { - put(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME, parent.folderSize()) - listOf("metrics", "logs").forEach { name -> - put(name, parent.resolve(name).takeIf(File::exists)?.folderSize() ?: 0L) - } + val parent = application.filesDir.resolve(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME) + val sizes = buildMap { + put(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME, parent.folderSize()) + listOf("metrics", "logs").forEach { name -> + put(name, parent.resolve(name).takeIf(File::exists)?.folderSize() ?: 0L) } - JSONObject(sizes).toString() } + JSONObject(sizes).toString() + } .onFailure { localLogger.e(it) } .getOrNull() fun moveFile(source: File, dest: File): Boolean = runCatching { - source.inputStream().use { it.copyTo(dest.outputStream()) } - if (!source.delete()) { - localLogger.d("Failed to delete the source file") - } - true + source.inputStream().use { it.copyTo(dest.outputStream()) } + if (!source.delete()) { + localLogger.d("Failed to delete the source file") } + true + } .onFailure { localLogger.e(it) } .getOrDefault(false) @@ -56,68 +58,106 @@ internal class FileUtils( private fun File.folderSize(): Long = walk().filter { it.isFile }.sumOf { it.length() } - // TODO: Break this function - fun processModules(context: Context, assetsJson: JSONArray): JSONArray { - // Create target directory in internal storage - val targetDir = - File(getSDKDirPath(), DELITE_ASSETS_TEMP_STORAGE).apply { if (!exists()) mkdirs() } - - val retainedFiles = mutableSetOf() - - fun processModuleObject(module: JSONObject) { - if (module.has("location")) { - val location = module.getJSONObject("location") - val assetPath = location.getString("path") - val fileExt = File(assetPath).extension - val fileName = - "${module.getString("name")}_${module.getString("version")}" + - if (fileExt.isNotBlank()) ".$fileExt" else "" - retainedFiles += fileName - val outputFile = File(targetDir, fileName) - - // Only copy if file doesn't exist - if (!outputFile.exists()) { - context.assets.open(assetPath).use { input -> - FileOutputStream(outputFile).use { output -> input.copyTo(output) } - } - } + fun copyAssetsAndUpdatePath(assetsJson: JSONArray?) { + if (assetsJson == null) return + + val targetDir = File(getSDKDirPath(), DELITE_ASSETS_TEMP_STORAGE) + .apply { if (!exists()) mkdirs() } + + val filesToRetain = mutableSetOf() - // Update path in JSON - location.put("path", outputFile.absolutePath) + for (idx in 0 until assetsJson.length()) { + val assetInfo = assetsJson.getJSONObject(idx) + val name = assetInfo.getString("name") + val version = assetInfo.getString("version") + + val locationObject = assetInfo.optJSONObject("location") + val assetPath = locationObject?.optString("path") + val arguments = assetInfo.optJSONArray("arguments") + + if (arguments != null) { + copyAssetsAndUpdatePath(arguments) + } else if (assetPath != null) { + val targetFile = constructTargetFile(targetDir, assetPath, name, version) + filesToRetain.add(targetFile) + + if (isAssetDir(assetPath)) { + copyAssetFolderRecursively(assetPath, targetFile) + } else { + copyAssetFile(assetPath, targetFile) + } + locationObject.put("path", targetFile.absolutePath) + } else { + throw Exception("Both arguments & assetPath are null") } + } + + pruneStaleAssets(targetDir, filesToRetain) + } + + private fun constructTargetFile(targetDir: File, src: String, name: String, version: String): + File { + + val ext = File(src).extension + val filename = "${name}_${version}" + if (ext.isNotBlank()) ".$ext" else "" + return File(targetDir, filename) + } - // Recursively process nested arguments if present - if (module.has("arguments")) { - val argumentsArray = module.getJSONArray("arguments") - for (j in 0 until argumentsArray.length()) { - processModuleObject(argumentsArray.getJSONObject(j)) + private fun copyAssetFile(src: String, target: File) { + if (!target.exists()) { + assetManager.open(src).use { input -> + FileOutputStream(target).use { output -> + input.copyTo(output) } } } + } + + private fun copyAssetFolderRecursively( + src: String, + target: File + ) { + if (!target.exists()) target.mkdirs() - for (i in 0 until assetsJson.length()) { - processModuleObject(assetsJson.getJSONObject(i)) + val children = assetManager.list(src) ?: return + for (child in children) { + val childAssetPath = if (src.isEmpty()) child else "$src/$child" + val childTarget = File(target, child) + if (isAssetDir(childAssetPath)) { + copyAssetFolderRecursively(childAssetPath, childTarget) + } else { + copyAssetFile(childAssetPath, childTarget) + } } + } - // Delete files not modified in last 7 days - targetDir.listFiles()?.forEach { file -> - if (file.name !in retainedFiles) { - try { - val path = file.toPath() - val attrs = Files.readAttributes(path, BasicFileAttributes::class.java) - val lastAccessTime = attrs.lastAccessTime().toMillis() - - if ( - System.currentTimeMillis() - lastAccessTime > - DELITE_ASSETS_TEMP_FILES_EXPIRY_IN_MILLIS - ) { - file.delete() - } - } catch (e: Exception) { + private fun pruneStaleAssets(target: File, filesToRetain: Set) { + target.listFiles()?.forEach { file -> + try { + if (!filesToRetain.contains(file) && !wasAccessedWithinExpiry(file)) { file.delete() } + } catch (e: Exception) { + localLogger.e(e) + file.delete() } } - return assetsJson + } + + private fun wasAccessedWithinExpiry(file: File): Boolean { + val attrs = Files.readAttributes(file.toPath(), BasicFileAttributes::class.java) + val lastAccessMillis = attrs.lastAccessTime().toMillis() + return System.currentTimeMillis() - lastAccessMillis <= + DELITE_ASSETS_TEMP_FILES_EXPIRY_IN_MILLIS + } + + private fun isAssetDir(path: String): Boolean { + return try { + // list() returns the names of all entries under `path` + // if it's a file, we get an empty array + assetManager.list(path)?.isNotEmpty() == true + } catch (e: Exception) { + false + } } } From 8361177a341ce7bbe9d3187f9d40922b494af76f Mon Sep 17 00:00:00 2001 From: Naman Anand <46650369+void-memories@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:30:52 +0530 Subject: [PATCH 09/20] [ANDROID][SDK] Fix Integration Tests (#122) * add step to download ext deps Signed-off-by: Naman Anand * setup nnc for android test Signed-off-by: Naman Anand * add generated proto files Signed-off-by: Naman Anand * add workflow trigger on merge to main Signed-off-by: Naman Anand * add newline at EOF Signed-off-by: Naman Anand * Fetch assets before starting mock server Signed-off-by: ultajain <74460243+ultajain@users.noreply.github.com> * Fix end-of-file newline chars Signed-off-by: Puneet Jindal * Fix end-of-file newline chars Signed-off-by: Puneet Jindal Signed-off-by: Puneet Jindal --------- Signed-off-by: ultajain <74460243+ultajain@users.noreply.github.com> Signed-off-by: Puneet Jindal Signed-off-by: Puneet Jindal Co-authored-by: ultajain <74460243+ultajain@users.noreply.github.com> Co-authored-by: Puneet Jindal Co-authored-by: Puneet Jindal Signed-off-by: Suryansh Bisen --- .github/workflows/android-code-coverage.yml | 7 +- .../workflows/android-integration-tests.yml | 43 +- .github/workflows/android-lint.yml | 14 +- .github/workflows/android-unit-tests.yml | 7 +- sdks/android/app/.gitignore | 1 - .../androidTest/java/generated/Address.java | 1448 +++++ .../java/generated/AddressOrBuilder.java | 129 + .../androidTest/java/generated/Company.java | 5420 +++++++++++++++++ .../java/generated/CompanyOrBuilder.java | 81 + .../java/generated/CompanyProto.java | 150 + .../java/generated/EmailAddress.java | 542 ++ .../java/generated/EmailAddressOrBuilder.java | 22 + 12 files changed, 7840 insertions(+), 24 deletions(-) create mode 100644 sdks/android/app/src/androidTest/java/generated/Address.java create mode 100644 sdks/android/app/src/androidTest/java/generated/AddressOrBuilder.java create mode 100644 sdks/android/app/src/androidTest/java/generated/Company.java create mode 100644 sdks/android/app/src/androidTest/java/generated/CompanyOrBuilder.java create mode 100644 sdks/android/app/src/androidTest/java/generated/CompanyProto.java create mode 100644 sdks/android/app/src/androidTest/java/generated/EmailAddress.java create mode 100644 sdks/android/app/src/androidTest/java/generated/EmailAddressOrBuilder.java diff --git a/.github/workflows/android-code-coverage.yml b/.github/workflows/android-code-coverage.yml index 5af00571..0a3442e6 100644 --- a/.github/workflows/android-code-coverage.yml +++ b/.github/workflows/android-code-coverage.yml @@ -3,10 +3,13 @@ name: nimblenet_ktx code coverage on: pull_request_review: types: [submitted] + push: + branches: + - main jobs: build-and-test: - if: ${{ github.event.review.state == 'approved' }} + if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request_review' && github.event.review.state == 'approved') }} runs-on: ubuntu-latest steps: - name: Check out code @@ -32,4 +35,4 @@ jobs: name: coverage-reports path: | sdks/android/nimblenet_ktx/build/reports/jacoco/externalDebug/html - sdks/android/nimblenet_ktx/build/reports/jacoco/externalDebug/jacoco.xml \ No newline at end of file + sdks/android/nimblenet_ktx/build/reports/jacoco/externalDebug/jacoco.xml diff --git a/.github/workflows/android-integration-tests.yml b/.github/workflows/android-integration-tests.yml index 04940e3a..ef69359d 100644 --- a/.github/workflows/android-integration-tests.yml +++ b/.github/workflows/android-integration-tests.yml @@ -3,10 +3,13 @@ name: Run Android Instrumentation Tests on Linux on: pull_request_review: types: [submitted] + push: + branches: + - main jobs: test: - if: github.event.review.state == 'approved' + if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request_review' && github.event.review.state == 'approved') }} runs-on: ubuntu-latest strategy: matrix: @@ -18,7 +21,7 @@ jobs: - name: Setup docker and start mock server run: | - sudo apt install -y docker-ce docker-ce-cli + python3 coreruntime/tests/utils/download_from_s3.py --default_bucket deliteai --prefix build-dependencies/llama-3.2-1B/onnx --output mockserver/mockserver_assets/llama-3 --archive_output True cd mockserver docker compose up --build -d @@ -55,6 +58,20 @@ jobs: cores: 4 script: echo "Generated AVD snapshot for caching." + - name: Download external dependencies + run: ./setup.sh --sdk android + + - name: Configure Android test secrets + env: + ANDROID_TEST_CLIENT_ID: ${{ secrets.ANDROID_TEST_CLIENT_ID }} + ANDROID_TEST_CLIENT_SECRET: ${{ secrets.ANDROID_TEST_CLIENT_SECRET }} + ANDROID_TEST_HOST: ${{ secrets.ANDROID_TEST_HOST }} + run: | + echo '#nimbleNetConfig:androidTest' > sdks/android/local.properties + echo "ANDROID_TEST_CLIENT_ID=$ANDROID_TEST_CLIENT_ID" >> sdks/android/local.properties + echo "ANDROID_TEST_CLIENT_SECRET=$ANDROID_TEST_CLIENT_SECRET" >> sdks/android/local.properties + echo "ANDROID_TEST_HOST=$ANDROID_TEST_HOST" >> sdks/android/local.properties + - name: Run tests timeout-minutes: 60 uses: reactivecircus/android-emulator-runner@v2 @@ -68,19 +85,23 @@ jobs: disable-animations: true cores: 4 script: | + # Fail fast on any command error and ensure cleanup of crashpad_handler. + set -e + trap "killall -INT crashpad_handler || true" EXIT + ./gradlew clean assembleExternalDebug - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldWorkInIdealNetworkConditions && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldWorkAfterInitialServerFailure && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldNeverWorkAfterThreeServerFailure && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#onServerFailuresAssetDownloadShouldExactlyTryThreeTimes && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#onSuccessCodeSDKShouldNotMakeExtraNetworkCalls && killall -INT crashpad_handler || true - ./gradlew :nimblenet_ktx:connectedExternalDebugAndroidTest && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.proto.ProtoTest && killall -INT crashpad_handler || true - ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.proto.ProtoAddEventTest && killall -INT crashpad_handler || true + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldWorkInIdealNetworkConditions + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldWorkAfterInitialServerFailure + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#assetDownloadShouldNeverWorkAfterThreeServerFailure + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#onServerFailuresAssetDownloadShouldExactlyTryThreeTimes + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.e2e.E2ENetworkingAndroidTest#onSuccessCodeSDKShouldNotMakeExtraNetworkCalls + ./gradlew :nimblenet_ktx:connectedExternalDebugAndroidTest + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.proto.ProtoTest + ./gradlew :app:connectedExternalDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=dev.deliteai.android.sampleapp.proto.ProtoAddEventTest - name: Upload Test Reports (Failure Only) if: failure() uses: actions/upload-artifact@v4 with: name: android-test-report - path: "**/build/reports/androidTests/connected/**" \ No newline at end of file + path: "**/build/reports/androidTests/connected/**" diff --git a/.github/workflows/android-lint.yml b/.github/workflows/android-lint.yml index 9ec756c2..679535d4 100644 --- a/.github/workflows/android-lint.yml +++ b/.github/workflows/android-lint.yml @@ -1,17 +1,15 @@ name: Kotlin Lint Test on: + pull_request_review: + types: [submitted] push: - paths: - - '**/*.kt' - - '**/*.kts' - pull_request: - paths: - - '**/*.kt' - - '**/*.kts' + branches: + - main jobs: ktlint-lint: + if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request_review' && github.event.review.state == 'approved') }} name: Run ktlintCheck runs-on: ubuntu-latest @@ -27,4 +25,4 @@ jobs: cache: gradle - name: Run ktlint (lint test) - run: cd sdks/android && ./gradlew ktfmtCheck --quiet \ No newline at end of file + run: cd sdks/android && ./gradlew ktfmtCheck --quiet diff --git a/.github/workflows/android-unit-tests.yml b/.github/workflows/android-unit-tests.yml index d1bb03de..9ba7b6e4 100644 --- a/.github/workflows/android-unit-tests.yml +++ b/.github/workflows/android-unit-tests.yml @@ -3,10 +3,13 @@ name: Run Android Unit Tests on: pull_request_review: types: [submitted] + push: + branches: + - main jobs: unit_test: - if: github.event.review.state == 'approved' + if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request_review' && github.event.review.state == 'approved') }} runs-on: ubuntu-latest steps: @@ -31,4 +34,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: unit-test-report - path: sdks/android/nimblenet_ktx/build/reports/tests/testExternalDebugUnitTest/ \ No newline at end of file + path: sdks/android/nimblenet_ktx/build/reports/tests/testExternalDebugUnitTest/ diff --git a/sdks/android/app/.gitignore b/sdks/android/app/.gitignore index a4ae315f..0f534009 100644 --- a/sdks/android/app/.gitignore +++ b/sdks/android/app/.gitignore @@ -1,4 +1,3 @@ /build /edge /release_key.jks -/src/androidTest/java/generated diff --git a/sdks/android/app/src/androidTest/java/generated/Address.java b/sdks/android/app/src/androidTest/java/generated/Address.java new file mode 100644 index 00000000..c36832d7 --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/Address.java @@ -0,0 +1,1448 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +/** + * Protobuf type {@code generated.Address} + */ +public final class Address extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Address) + AddressOrBuilder { +private static final long serialVersionUID = 0L; + // Use Address.newBuilder() to construct. + private Address(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Address() { + street_ = ""; + city_ = ""; + state_ = ""; + zipCode_ = ""; + buildings_ = emptyIntList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Address(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Address_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetAdditionalInfo(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Address_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Address.class, generated.Address.Builder.class); + } + + public static final int STREET_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object street_ = ""; + /** + * string street = 1; + * @return The street. + */ + @java.lang.Override + public java.lang.String getStreet() { + java.lang.Object ref = street_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + street_ = s; + return s; + } + } + /** + * string street = 1; + * @return The bytes for street. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getStreetBytes() { + java.lang.Object ref = street_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + street_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CITY_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object city_ = ""; + /** + * string city = 2; + * @return The city. + */ + @java.lang.Override + public java.lang.String getCity() { + java.lang.Object ref = city_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + city_ = s; + return s; + } + } + /** + * string city = 2; + * @return The bytes for city. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCityBytes() { + java.lang.Object ref = city_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + city_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int STATE_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object state_ = ""; + /** + * string state = 3; + * @return The state. + */ + @java.lang.Override + public java.lang.String getState() { + java.lang.Object ref = state_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + state_ = s; + return s; + } + } + /** + * string state = 3; + * @return The bytes for state. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getStateBytes() { + java.lang.Object ref = state_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + state_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ZIP_CODE_FIELD_NUMBER = 4; + @SuppressWarnings("serial") + private volatile java.lang.Object zipCode_ = ""; + /** + * string zip_code = 4; + * @return The zipCode. + */ + @java.lang.Override + public java.lang.String getZipCode() { + java.lang.Object ref = zipCode_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + zipCode_ = s; + return s; + } + } + /** + * string zip_code = 4; + * @return The bytes for zipCode. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getZipCodeBytes() { + java.lang.Object ref = zipCode_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + zipCode_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ADDITIONAL_INFO_FIELD_NUMBER = 5; + private static final class AdditionalInfoDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, java.lang.String> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + generated.CompanyProto.internal_static_generated_Address_AdditionalInfoEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + @SuppressWarnings("serial") + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> additionalInfo_; + private com.google.protobuf.MapField + internalGetAdditionalInfo() { + if (additionalInfo_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AdditionalInfoDefaultEntryHolder.defaultEntry); + } + return additionalInfo_; + } + public int getAdditionalInfoCount() { + return internalGetAdditionalInfo().getMap().size(); + } + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public boolean containsAdditionalInfo( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetAdditionalInfo().getMap().containsKey(key); + } + /** + * Use {@link #getAdditionalInfoMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAdditionalInfo() { + return getAdditionalInfoMap(); + } + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public java.util.Map getAdditionalInfoMap() { + return internalGetAdditionalInfo().getMap(); + } + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public /* nullable */ +java.lang.String getAdditionalInfoOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetAdditionalInfo().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public java.lang.String getAdditionalInfoOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetAdditionalInfo().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int BUILDINGS_FIELD_NUMBER = 6; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList buildings_ = + emptyIntList(); + /** + * repeated int32 buildings = 6; + * @return A list containing the buildings. + */ + @java.lang.Override + public java.util.List + getBuildingsList() { + return buildings_; + } + /** + * repeated int32 buildings = 6; + * @return The count of buildings. + */ + public int getBuildingsCount() { + return buildings_.size(); + } + /** + * repeated int32 buildings = 6; + * @param index The index of the element to return. + * @return The buildings at the given index. + */ + public int getBuildings(int index) { + return buildings_.getInt(index); + } + private int buildingsMemoizedSerializedSize = -1; + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(street_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, street_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(city_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, city_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(state_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, state_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(zipCode_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, zipCode_); + } + com.google.protobuf.GeneratedMessageV3 + .serializeStringMapTo( + output, + internalGetAdditionalInfo(), + AdditionalInfoDefaultEntryHolder.defaultEntry, + 5); + if (getBuildingsList().size() > 0) { + output.writeUInt32NoTag(50); + output.writeUInt32NoTag(buildingsMemoizedSerializedSize); + } + for (int i = 0; i < buildings_.size(); i++) { + output.writeInt32NoTag(buildings_.getInt(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(street_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, street_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(city_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, city_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(state_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, state_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(zipCode_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, zipCode_); + } + for (java.util.Map.Entry entry + : internalGetAdditionalInfo().getMap().entrySet()) { + com.google.protobuf.MapEntry + additionalInfo__ = AdditionalInfoDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, additionalInfo__); + } + { + int dataSize = 0; + for (int i = 0; i < buildings_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(buildings_.getInt(i)); + } + size += dataSize; + if (!getBuildingsList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + buildingsMemoizedSerializedSize = dataSize; + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Address)) { + return super.equals(obj); + } + generated.Address other = (generated.Address) obj; + + if (!getStreet() + .equals(other.getStreet())) return false; + if (!getCity() + .equals(other.getCity())) return false; + if (!getState() + .equals(other.getState())) return false; + if (!getZipCode() + .equals(other.getZipCode())) return false; + if (!internalGetAdditionalInfo().equals( + other.internalGetAdditionalInfo())) return false; + if (!getBuildingsList() + .equals(other.getBuildingsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STREET_FIELD_NUMBER; + hash = (53 * hash) + getStreet().hashCode(); + hash = (37 * hash) + CITY_FIELD_NUMBER; + hash = (53 * hash) + getCity().hashCode(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + getState().hashCode(); + hash = (37 * hash) + ZIP_CODE_FIELD_NUMBER; + hash = (53 * hash) + getZipCode().hashCode(); + if (!internalGetAdditionalInfo().getMap().isEmpty()) { + hash = (37 * hash) + ADDITIONAL_INFO_FIELD_NUMBER; + hash = (53 * hash) + internalGetAdditionalInfo().hashCode(); + } + if (getBuildingsCount() > 0) { + hash = (37 * hash) + BUILDINGS_FIELD_NUMBER; + hash = (53 * hash) + getBuildingsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Address parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Address parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Address parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Address parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Address parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Address parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Address parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Address parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Address parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Address parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Address parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Address parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Address prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Address} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Address) + generated.AddressOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Address_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetAdditionalInfo(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetMutableAdditionalInfo(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Address_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Address.class, generated.Address.Builder.class); + } + + // Construct using generated.Address.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + street_ = ""; + city_ = ""; + state_ = ""; + zipCode_ = ""; + internalGetMutableAdditionalInfo().clear(); + buildings_ = emptyIntList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Address_descriptor; + } + + @java.lang.Override + public generated.Address getDefaultInstanceForType() { + return generated.Address.getDefaultInstance(); + } + + @java.lang.Override + public generated.Address build() { + generated.Address result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Address buildPartial() { + generated.Address result = new generated.Address(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(generated.Address result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.street_ = street_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.city_ = city_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.state_ = state_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.zipCode_ = zipCode_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.additionalInfo_ = internalGetAdditionalInfo(); + result.additionalInfo_.makeImmutable(); + } + if (((from_bitField0_ & 0x00000020) != 0)) { + buildings_.makeImmutable(); + result.buildings_ = buildings_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Address) { + return mergeFrom((generated.Address)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Address other) { + if (other == generated.Address.getDefaultInstance()) return this; + if (!other.getStreet().isEmpty()) { + street_ = other.street_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getCity().isEmpty()) { + city_ = other.city_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getState().isEmpty()) { + state_ = other.state_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (!other.getZipCode().isEmpty()) { + zipCode_ = other.zipCode_; + bitField0_ |= 0x00000008; + onChanged(); + } + internalGetMutableAdditionalInfo().mergeFrom( + other.internalGetAdditionalInfo()); + bitField0_ |= 0x00000010; + if (!other.buildings_.isEmpty()) { + if (buildings_.isEmpty()) { + buildings_ = other.buildings_; + buildings_.makeImmutable(); + bitField0_ |= 0x00000020; + } else { + ensureBuildingsIsMutable(); + buildings_.addAll(other.buildings_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + street_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + city_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + state_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: { + zipCode_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + com.google.protobuf.MapEntry + additionalInfo__ = input.readMessage( + AdditionalInfoDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableAdditionalInfo().getMutableMap().put( + additionalInfo__.getKey(), additionalInfo__.getValue()); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 48: { + int v = input.readInt32(); + ensureBuildingsIsMutable(); + buildings_.addInt(v); + break; + } // case 48 + case 50: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureBuildingsIsMutable(); + while (input.getBytesUntilLimit() > 0) { + buildings_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 50 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object street_ = ""; + /** + * string street = 1; + * @return The street. + */ + public java.lang.String getStreet() { + java.lang.Object ref = street_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + street_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string street = 1; + * @return The bytes for street. + */ + public com.google.protobuf.ByteString + getStreetBytes() { + java.lang.Object ref = street_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + street_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string street = 1; + * @param value The street to set. + * @return This builder for chaining. + */ + public Builder setStreet( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + street_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string street = 1; + * @return This builder for chaining. + */ + public Builder clearStreet() { + street_ = getDefaultInstance().getStreet(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string street = 1; + * @param value The bytes for street to set. + * @return This builder for chaining. + */ + public Builder setStreetBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + street_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object city_ = ""; + /** + * string city = 2; + * @return The city. + */ + public java.lang.String getCity() { + java.lang.Object ref = city_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + city_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string city = 2; + * @return The bytes for city. + */ + public com.google.protobuf.ByteString + getCityBytes() { + java.lang.Object ref = city_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + city_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string city = 2; + * @param value The city to set. + * @return This builder for chaining. + */ + public Builder setCity( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + city_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string city = 2; + * @return This builder for chaining. + */ + public Builder clearCity() { + city_ = getDefaultInstance().getCity(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string city = 2; + * @param value The bytes for city to set. + * @return This builder for chaining. + */ + public Builder setCityBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + city_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object state_ = ""; + /** + * string state = 3; + * @return The state. + */ + public java.lang.String getState() { + java.lang.Object ref = state_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + state_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string state = 3; + * @return The bytes for state. + */ + public com.google.protobuf.ByteString + getStateBytes() { + java.lang.Object ref = state_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + state_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string state = 3; + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + state_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * string state = 3; + * @return This builder for chaining. + */ + public Builder clearState() { + state_ = getDefaultInstance().getState(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + * string state = 3; + * @param value The bytes for state to set. + * @return This builder for chaining. + */ + public Builder setStateBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + state_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private java.lang.Object zipCode_ = ""; + /** + * string zip_code = 4; + * @return The zipCode. + */ + public java.lang.String getZipCode() { + java.lang.Object ref = zipCode_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + zipCode_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string zip_code = 4; + * @return The bytes for zipCode. + */ + public com.google.protobuf.ByteString + getZipCodeBytes() { + java.lang.Object ref = zipCode_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + zipCode_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string zip_code = 4; + * @param value The zipCode to set. + * @return This builder for chaining. + */ + public Builder setZipCode( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + zipCode_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * string zip_code = 4; + * @return This builder for chaining. + */ + public Builder clearZipCode() { + zipCode_ = getDefaultInstance().getZipCode(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + /** + * string zip_code = 4; + * @param value The bytes for zipCode to set. + * @return This builder for chaining. + */ + public Builder setZipCodeBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + zipCode_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> additionalInfo_; + private com.google.protobuf.MapField + internalGetAdditionalInfo() { + if (additionalInfo_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AdditionalInfoDefaultEntryHolder.defaultEntry); + } + return additionalInfo_; + } + private com.google.protobuf.MapField + internalGetMutableAdditionalInfo() { + if (additionalInfo_ == null) { + additionalInfo_ = com.google.protobuf.MapField.newMapField( + AdditionalInfoDefaultEntryHolder.defaultEntry); + } + if (!additionalInfo_.isMutable()) { + additionalInfo_ = additionalInfo_.copy(); + } + bitField0_ |= 0x00000010; + onChanged(); + return additionalInfo_; + } + public int getAdditionalInfoCount() { + return internalGetAdditionalInfo().getMap().size(); + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public boolean containsAdditionalInfo( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetAdditionalInfo().getMap().containsKey(key); + } + /** + * Use {@link #getAdditionalInfoMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAdditionalInfo() { + return getAdditionalInfoMap(); + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public java.util.Map getAdditionalInfoMap() { + return internalGetAdditionalInfo().getMap(); + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public /* nullable */ +java.lang.String getAdditionalInfoOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetAdditionalInfo().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + @java.lang.Override + public java.lang.String getAdditionalInfoOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetAdditionalInfo().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + public Builder clearAdditionalInfo() { + bitField0_ = (bitField0_ & ~0x00000010); + internalGetMutableAdditionalInfo().getMutableMap() + .clear(); + return this; + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + public Builder removeAdditionalInfo( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + internalGetMutableAdditionalInfo().getMutableMap() + .remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableAdditionalInfo() { + bitField0_ |= 0x00000010; + return internalGetMutableAdditionalInfo().getMutableMap(); + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + public Builder putAdditionalInfo( + java.lang.String key, + java.lang.String value) { + if (key == null) { throw new NullPointerException("map key"); } + if (value == null) { throw new NullPointerException("map value"); } + internalGetMutableAdditionalInfo().getMutableMap() + .put(key, value); + bitField0_ |= 0x00000010; + return this; + } + /** + *
+     * Stores extra details about the address
+     * 
+ * + * map<string, string> additional_info = 5; + */ + public Builder putAllAdditionalInfo( + java.util.Map values) { + internalGetMutableAdditionalInfo().getMutableMap() + .putAll(values); + bitField0_ |= 0x00000010; + return this; + } + + private com.google.protobuf.Internal.IntList buildings_ = emptyIntList(); + private void ensureBuildingsIsMutable() { + if (!buildings_.isModifiable()) { + buildings_ = makeMutableCopy(buildings_); + } + bitField0_ |= 0x00000020; + } + /** + * repeated int32 buildings = 6; + * @return A list containing the buildings. + */ + public java.util.List + getBuildingsList() { + buildings_.makeImmutable(); + return buildings_; + } + /** + * repeated int32 buildings = 6; + * @return The count of buildings. + */ + public int getBuildingsCount() { + return buildings_.size(); + } + /** + * repeated int32 buildings = 6; + * @param index The index of the element to return. + * @return The buildings at the given index. + */ + public int getBuildings(int index) { + return buildings_.getInt(index); + } + /** + * repeated int32 buildings = 6; + * @param index The index to set the value at. + * @param value The buildings to set. + * @return This builder for chaining. + */ + public Builder setBuildings( + int index, int value) { + + ensureBuildingsIsMutable(); + buildings_.setInt(index, value); + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * repeated int32 buildings = 6; + * @param value The buildings to add. + * @return This builder for chaining. + */ + public Builder addBuildings(int value) { + + ensureBuildingsIsMutable(); + buildings_.addInt(value); + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * repeated int32 buildings = 6; + * @param values The buildings to add. + * @return This builder for chaining. + */ + public Builder addAllBuildings( + java.lang.Iterable values) { + ensureBuildingsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, buildings_); + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * repeated int32 buildings = 6; + * @return This builder for chaining. + */ + public Builder clearBuildings() { + buildings_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Address) + } + + // @@protoc_insertion_point(class_scope:generated.Address) + private static final generated.Address DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Address(); + } + + public static generated.Address getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser
() { + @java.lang.Override + public Address parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser
parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser
getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Address getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/sdks/android/app/src/androidTest/java/generated/AddressOrBuilder.java b/sdks/android/app/src/androidTest/java/generated/AddressOrBuilder.java new file mode 100644 index 00000000..20bb9aee --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/AddressOrBuilder.java @@ -0,0 +1,129 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +public interface AddressOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Address) + com.google.protobuf.MessageOrBuilder { + + /** + * string street = 1; + * @return The street. + */ + java.lang.String getStreet(); + /** + * string street = 1; + * @return The bytes for street. + */ + com.google.protobuf.ByteString + getStreetBytes(); + + /** + * string city = 2; + * @return The city. + */ + java.lang.String getCity(); + /** + * string city = 2; + * @return The bytes for city. + */ + com.google.protobuf.ByteString + getCityBytes(); + + /** + * string state = 3; + * @return The state. + */ + java.lang.String getState(); + /** + * string state = 3; + * @return The bytes for state. + */ + com.google.protobuf.ByteString + getStateBytes(); + + /** + * string zip_code = 4; + * @return The zipCode. + */ + java.lang.String getZipCode(); + /** + * string zip_code = 4; + * @return The bytes for zipCode. + */ + com.google.protobuf.ByteString + getZipCodeBytes(); + + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + int getAdditionalInfoCount(); + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + boolean containsAdditionalInfo( + java.lang.String key); + /** + * Use {@link #getAdditionalInfoMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getAdditionalInfo(); + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + java.util.Map + getAdditionalInfoMap(); + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + /* nullable */ +java.lang.String getAdditionalInfoOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue); + /** + *
+   * Stores extra details about the address
+   * 
+ * + * map<string, string> additional_info = 5; + */ + java.lang.String getAdditionalInfoOrThrow( + java.lang.String key); + + /** + * repeated int32 buildings = 6; + * @return A list containing the buildings. + */ + java.util.List getBuildingsList(); + /** + * repeated int32 buildings = 6; + * @return The count of buildings. + */ + int getBuildingsCount(); + /** + * repeated int32 buildings = 6; + * @param index The index of the element to return. + * @return The buildings at the given index. + */ + int getBuildings(int index); +} diff --git a/sdks/android/app/src/androidTest/java/generated/Company.java b/sdks/android/app/src/androidTest/java/generated/Company.java new file mode 100644 index 00000000..c5ce1865 --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/Company.java @@ -0,0 +1,5420 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +/** + * Protobuf type {@code generated.Company} + */ +public final class Company extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Company) + CompanyOrBuilder { +private static final long serialVersionUID = 0L; + // Use Company.newBuilder() to construct. + private Company(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Company() { + companyId_ = ""; + companyName_ = ""; + departments_ = java.util.Collections.emptyList(); + officePincodes_ = emptyIntList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Company(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.class, generated.Company.Builder.class); + } + + public interface DepartmentOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Company.Department) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 department_id = 1; + * @return The departmentId. + */ + long getDepartmentId(); + + /** + * string department_name = 2; + * @return The departmentName. + */ + java.lang.String getDepartmentName(); + /** + * string department_name = 2; + * @return The bytes for departmentName. + */ + com.google.protobuf.ByteString + getDepartmentNameBytes(); + + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + java.util.List + getEmployeesList(); + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + generated.Company.Department.Employee getEmployees(int index); + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + int getEmployeesCount(); + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + java.util.List + getEmployeesOrBuilderList(); + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + generated.Company.Department.EmployeeOrBuilder getEmployeesOrBuilder( + int index); + + /** + * float revenue = 4; + * @return The revenue. + */ + float getRevenue(); + } + /** + * Protobuf type {@code generated.Company.Department} + */ + public static final class Department extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Company.Department) + DepartmentOrBuilder { + private static final long serialVersionUID = 0L; + // Use Department.newBuilder() to construct. + private Department(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Department() { + departmentName_ = ""; + employees_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Department(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.class, generated.Company.Department.Builder.class); + } + + public interface EmployeeOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Company.Department.Employee) + com.google.protobuf.MessageOrBuilder { + + /** + * string employee_id = 1; + * @return The employeeId. + */ + java.lang.String getEmployeeId(); + /** + * string employee_id = 1; + * @return The bytes for employeeId. + */ + com.google.protobuf.ByteString + getEmployeeIdBytes(); + + /** + * string name = 2; + * @return The name. + */ + java.lang.String getName(); + /** + * string name = 2; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * optional string title = 3; + * @return Whether the title field is set. + */ + boolean hasTitle(); + /** + * optional string title = 3; + * @return The title. + */ + java.lang.String getTitle(); + /** + * optional string title = 3; + * @return The bytes for title. + */ + com.google.protobuf.ByteString + getTitleBytes(); + + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return Whether the contactInfo field is set. + */ + boolean hasContactInfo(); + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return The contactInfo. + */ + generated.Company.Department.Employee.ContactInfo getContactInfo(); + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + generated.Company.Department.Employee.ContactInfoOrBuilder getContactInfoOrBuilder(); + + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + java.util.List + getProjectsList(); + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + generated.Company.Department.Employee.Project getProjects(int index); + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + int getProjectsCount(); + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + java.util.List + getProjectsOrBuilderList(); + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + generated.Company.Department.Employee.ProjectOrBuilder getProjectsOrBuilder( + int index); + } + /** + * Protobuf type {@code generated.Company.Department.Employee} + */ + public static final class Employee extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Company.Department.Employee) + EmployeeOrBuilder { + private static final long serialVersionUID = 0L; + // Use Employee.newBuilder() to construct. + private Employee(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Employee() { + employeeId_ = ""; + name_ = ""; + title_ = ""; + projects_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Employee(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.class, generated.Company.Department.Employee.Builder.class); + } + + public interface ContactInfoOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Company.Department.Employee.ContactInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * string phone = 1; + * @return The phone. + */ + java.lang.String getPhone(); + /** + * string phone = 1; + * @return The bytes for phone. + */ + com.google.protobuf.ByteString + getPhoneBytes(); + + /** + * .google.protobuf.Any address = 2; + * @return Whether the address field is set. + */ + boolean hasAddress(); + /** + * .google.protobuf.Any address = 2; + * @return The address. + */ + com.google.protobuf.Any getAddress(); + /** + * .google.protobuf.Any address = 2; + */ + com.google.protobuf.AnyOrBuilder getAddressOrBuilder(); + } + /** + * Protobuf type {@code generated.Company.Department.Employee.ContactInfo} + */ + public static final class ContactInfo extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Company.Department.Employee.ContactInfo) + ContactInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use ContactInfo.newBuilder() to construct. + private ContactInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ContactInfo() { + phone_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ContactInfo(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_ContactInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_ContactInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.ContactInfo.class, generated.Company.Department.Employee.ContactInfo.Builder.class); + } + + private int bitField0_; + public static final int PHONE_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object phone_ = ""; + /** + * string phone = 1; + * @return The phone. + */ + @java.lang.Override + public java.lang.String getPhone() { + java.lang.Object ref = phone_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + phone_ = s; + return s; + } + } + /** + * string phone = 1; + * @return The bytes for phone. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getPhoneBytes() { + java.lang.Object ref = phone_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + phone_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ADDRESS_FIELD_NUMBER = 2; + private com.google.protobuf.Any address_; + /** + * .google.protobuf.Any address = 2; + * @return Whether the address field is set. + */ + @java.lang.Override + public boolean hasAddress() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * .google.protobuf.Any address = 2; + * @return The address. + */ + @java.lang.Override + public com.google.protobuf.Any getAddress() { + return address_ == null ? com.google.protobuf.Any.getDefaultInstance() : address_; + } + /** + * .google.protobuf.Any address = 2; + */ + @java.lang.Override + public com.google.protobuf.AnyOrBuilder getAddressOrBuilder() { + return address_ == null ? com.google.protobuf.Any.getDefaultInstance() : address_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phone_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, phone_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getAddress()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phone_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, phone_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, getAddress()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Company.Department.Employee.ContactInfo)) { + return super.equals(obj); + } + generated.Company.Department.Employee.ContactInfo other = (generated.Company.Department.Employee.ContactInfo) obj; + + if (!getPhone() + .equals(other.getPhone())) return false; + if (hasAddress() != other.hasAddress()) return false; + if (hasAddress()) { + if (!getAddress() + .equals(other.getAddress())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PHONE_FIELD_NUMBER; + hash = (53 * hash) + getPhone().hashCode(); + if (hasAddress()) { + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Company.Department.Employee.ContactInfo parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Company.Department.Employee.ContactInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Company.Department.Employee.ContactInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee.ContactInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Company.Department.Employee.ContactInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Company.Department.Employee.ContactInfo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Company.Department.Employee.ContactInfo) + generated.Company.Department.Employee.ContactInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_ContactInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_ContactInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.ContactInfo.class, generated.Company.Department.Employee.ContactInfo.Builder.class); + } + + // Construct using generated.Company.Department.Employee.ContactInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getAddressFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + phone_ = ""; + address_ = null; + if (addressBuilder_ != null) { + addressBuilder_.dispose(); + addressBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_ContactInfo_descriptor; + } + + @java.lang.Override + public generated.Company.Department.Employee.ContactInfo getDefaultInstanceForType() { + return generated.Company.Department.Employee.ContactInfo.getDefaultInstance(); + } + + @java.lang.Override + public generated.Company.Department.Employee.ContactInfo build() { + generated.Company.Department.Employee.ContactInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Company.Department.Employee.ContactInfo buildPartial() { + generated.Company.Department.Employee.ContactInfo result = new generated.Company.Department.Employee.ContactInfo(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(generated.Company.Department.Employee.ContactInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.phone_ = phone_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.address_ = addressBuilder_ == null + ? address_ + : addressBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Company.Department.Employee.ContactInfo) { + return mergeFrom((generated.Company.Department.Employee.ContactInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Company.Department.Employee.ContactInfo other) { + if (other == generated.Company.Department.Employee.ContactInfo.getDefaultInstance()) return this; + if (!other.getPhone().isEmpty()) { + phone_ = other.phone_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasAddress()) { + mergeAddress(other.getAddress()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + phone_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + input.readMessage( + getAddressFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object phone_ = ""; + /** + * string phone = 1; + * @return The phone. + */ + public java.lang.String getPhone() { + java.lang.Object ref = phone_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + phone_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string phone = 1; + * @return The bytes for phone. + */ + public com.google.protobuf.ByteString + getPhoneBytes() { + java.lang.Object ref = phone_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + phone_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string phone = 1; + * @param value The phone to set. + * @return This builder for chaining. + */ + public Builder setPhone( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + phone_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string phone = 1; + * @return This builder for chaining. + */ + public Builder clearPhone() { + phone_ = getDefaultInstance().getPhone(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string phone = 1; + * @param value The bytes for phone to set. + * @return This builder for chaining. + */ + public Builder setPhoneBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + phone_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.protobuf.Any address_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> addressBuilder_; + /** + * .google.protobuf.Any address = 2; + * @return Whether the address field is set. + */ + public boolean hasAddress() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * .google.protobuf.Any address = 2; + * @return The address. + */ + public com.google.protobuf.Any getAddress() { + if (addressBuilder_ == null) { + return address_ == null ? com.google.protobuf.Any.getDefaultInstance() : address_; + } else { + return addressBuilder_.getMessage(); + } + } + /** + * .google.protobuf.Any address = 2; + */ + public Builder setAddress(com.google.protobuf.Any value) { + if (addressBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + address_ = value; + } else { + addressBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .google.protobuf.Any address = 2; + */ + public Builder setAddress( + com.google.protobuf.Any.Builder builderForValue) { + if (addressBuilder_ == null) { + address_ = builderForValue.build(); + } else { + addressBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * .google.protobuf.Any address = 2; + */ + public Builder mergeAddress(com.google.protobuf.Any value) { + if (addressBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) && + address_ != null && + address_ != com.google.protobuf.Any.getDefaultInstance()) { + getAddressBuilder().mergeFrom(value); + } else { + address_ = value; + } + } else { + addressBuilder_.mergeFrom(value); + } + if (address_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + /** + * .google.protobuf.Any address = 2; + */ + public Builder clearAddress() { + bitField0_ = (bitField0_ & ~0x00000002); + address_ = null; + if (addressBuilder_ != null) { + addressBuilder_.dispose(); + addressBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .google.protobuf.Any address = 2; + */ + public com.google.protobuf.Any.Builder getAddressBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getAddressFieldBuilder().getBuilder(); + } + /** + * .google.protobuf.Any address = 2; + */ + public com.google.protobuf.AnyOrBuilder getAddressOrBuilder() { + if (addressBuilder_ != null) { + return addressBuilder_.getMessageOrBuilder(); + } else { + return address_ == null ? + com.google.protobuf.Any.getDefaultInstance() : address_; + } + } + /** + * .google.protobuf.Any address = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder> + getAddressFieldBuilder() { + if (addressBuilder_ == null) { + addressBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Any, com.google.protobuf.Any.Builder, com.google.protobuf.AnyOrBuilder>( + getAddress(), + getParentForChildren(), + isClean()); + address_ = null; + } + return addressBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Company.Department.Employee.ContactInfo) + } + + // @@protoc_insertion_point(class_scope:generated.Company.Department.Employee.ContactInfo) + private static final generated.Company.Department.Employee.ContactInfo DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Company.Department.Employee.ContactInfo(); + } + + public static generated.Company.Department.Employee.ContactInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ContactInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Company.Department.Employee.ContactInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ProjectOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Company.Department.Employee.Project) + com.google.protobuf.MessageOrBuilder { + + /** + * string project_id = 1; + * @return The projectId. + */ + java.lang.String getProjectId(); + /** + * string project_id = 1; + * @return The bytes for projectId. + */ + com.google.protobuf.ByteString + getProjectIdBytes(); + + /** + * string project_name = 2; + * @return The projectName. + */ + java.lang.String getProjectName(); + /** + * string project_name = 2; + * @return The bytes for projectName. + */ + com.google.protobuf.ByteString + getProjectNameBytes(); + + /** + * string role = 3; + * @return The role. + */ + java.lang.String getRole(); + /** + * string role = 3; + * @return The bytes for role. + */ + com.google.protobuf.ByteString + getRoleBytes(); + } + /** + * Protobuf type {@code generated.Company.Department.Employee.Project} + */ + public static final class Project extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.Company.Department.Employee.Project) + ProjectOrBuilder { + private static final long serialVersionUID = 0L; + // Use Project.newBuilder() to construct. + private Project(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Project() { + projectId_ = ""; + projectName_ = ""; + role_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Project(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_Project_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_Project_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.Project.class, generated.Company.Department.Employee.Project.Builder.class); + } + + public static final int PROJECT_ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object projectId_ = ""; + /** + * string project_id = 1; + * @return The projectId. + */ + @java.lang.Override + public java.lang.String getProjectId() { + java.lang.Object ref = projectId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + projectId_ = s; + return s; + } + } + /** + * string project_id = 1; + * @return The bytes for projectId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getProjectIdBytes() { + java.lang.Object ref = projectId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + projectId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PROJECT_NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object projectName_ = ""; + /** + * string project_name = 2; + * @return The projectName. + */ + @java.lang.Override + public java.lang.String getProjectName() { + java.lang.Object ref = projectName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + projectName_ = s; + return s; + } + } + /** + * string project_name = 2; + * @return The bytes for projectName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getProjectNameBytes() { + java.lang.Object ref = projectName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + projectName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ROLE_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object role_ = ""; + /** + * string role = 3; + * @return The role. + */ + @java.lang.Override + public java.lang.String getRole() { + java.lang.Object ref = role_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + role_ = s; + return s; + } + } + /** + * string role = 3; + * @return The bytes for role. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getRoleBytes() { + java.lang.Object ref = role_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + role_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, projectId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, projectName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(role_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, role_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, projectId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, projectName_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(role_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, role_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Company.Department.Employee.Project)) { + return super.equals(obj); + } + generated.Company.Department.Employee.Project other = (generated.Company.Department.Employee.Project) obj; + + if (!getProjectId() + .equals(other.getProjectId())) return false; + if (!getProjectName() + .equals(other.getProjectName())) return false; + if (!getRole() + .equals(other.getRole())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PROJECT_ID_FIELD_NUMBER; + hash = (53 * hash) + getProjectId().hashCode(); + hash = (37 * hash) + PROJECT_NAME_FIELD_NUMBER; + hash = (53 * hash) + getProjectName().hashCode(); + hash = (37 * hash) + ROLE_FIELD_NUMBER; + hash = (53 * hash) + getRole().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Company.Department.Employee.Project parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.Project parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.Project parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.Project parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.Project parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee.Project parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee.Project parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee.Project parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Company.Department.Employee.Project parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Company.Department.Employee.Project parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Company.Department.Employee.Project parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee.Project parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Company.Department.Employee.Project prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Company.Department.Employee.Project} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Company.Department.Employee.Project) + generated.Company.Department.Employee.ProjectOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_Project_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_Project_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.Project.class, generated.Company.Department.Employee.Project.Builder.class); + } + + // Construct using generated.Company.Department.Employee.Project.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + projectId_ = ""; + projectName_ = ""; + role_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_Project_descriptor; + } + + @java.lang.Override + public generated.Company.Department.Employee.Project getDefaultInstanceForType() { + return generated.Company.Department.Employee.Project.getDefaultInstance(); + } + + @java.lang.Override + public generated.Company.Department.Employee.Project build() { + generated.Company.Department.Employee.Project result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Company.Department.Employee.Project buildPartial() { + generated.Company.Department.Employee.Project result = new generated.Company.Department.Employee.Project(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(generated.Company.Department.Employee.Project result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.projectId_ = projectId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.projectName_ = projectName_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.role_ = role_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Company.Department.Employee.Project) { + return mergeFrom((generated.Company.Department.Employee.Project)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Company.Department.Employee.Project other) { + if (other == generated.Company.Department.Employee.Project.getDefaultInstance()) return this; + if (!other.getProjectId().isEmpty()) { + projectId_ = other.projectId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getProjectName().isEmpty()) { + projectName_ = other.projectName_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.getRole().isEmpty()) { + role_ = other.role_; + bitField0_ |= 0x00000004; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + projectId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + projectName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + role_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object projectId_ = ""; + /** + * string project_id = 1; + * @return The projectId. + */ + public java.lang.String getProjectId() { + java.lang.Object ref = projectId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + projectId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string project_id = 1; + * @return The bytes for projectId. + */ + public com.google.protobuf.ByteString + getProjectIdBytes() { + java.lang.Object ref = projectId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + projectId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string project_id = 1; + * @param value The projectId to set. + * @return This builder for chaining. + */ + public Builder setProjectId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + projectId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string project_id = 1; + * @return This builder for chaining. + */ + public Builder clearProjectId() { + projectId_ = getDefaultInstance().getProjectId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string project_id = 1; + * @param value The bytes for projectId to set. + * @return This builder for chaining. + */ + public Builder setProjectIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + projectId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object projectName_ = ""; + /** + * string project_name = 2; + * @return The projectName. + */ + public java.lang.String getProjectName() { + java.lang.Object ref = projectName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + projectName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string project_name = 2; + * @return The bytes for projectName. + */ + public com.google.protobuf.ByteString + getProjectNameBytes() { + java.lang.Object ref = projectName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + projectName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string project_name = 2; + * @param value The projectName to set. + * @return This builder for chaining. + */ + public Builder setProjectName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + projectName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string project_name = 2; + * @return This builder for chaining. + */ + public Builder clearProjectName() { + projectName_ = getDefaultInstance().getProjectName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string project_name = 2; + * @param value The bytes for projectName to set. + * @return This builder for chaining. + */ + public Builder setProjectNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + projectName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object role_ = ""; + /** + * string role = 3; + * @return The role. + */ + public java.lang.String getRole() { + java.lang.Object ref = role_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + role_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string role = 3; + * @return The bytes for role. + */ + public com.google.protobuf.ByteString + getRoleBytes() { + java.lang.Object ref = role_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + role_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string role = 3; + * @param value The role to set. + * @return This builder for chaining. + */ + public Builder setRole( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + role_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * string role = 3; + * @return This builder for chaining. + */ + public Builder clearRole() { + role_ = getDefaultInstance().getRole(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + * string role = 3; + * @param value The bytes for role to set. + * @return This builder for chaining. + */ + public Builder setRoleBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + role_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Company.Department.Employee.Project) + } + + // @@protoc_insertion_point(class_scope:generated.Company.Department.Employee.Project) + private static final generated.Company.Department.Employee.Project DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Company.Department.Employee.Project(); + } + + public static generated.Company.Department.Employee.Project getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Project parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Company.Department.Employee.Project getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int EMPLOYEE_ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object employeeId_ = ""; + /** + * string employee_id = 1; + * @return The employeeId. + */ + @java.lang.Override + public java.lang.String getEmployeeId() { + java.lang.Object ref = employeeId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + employeeId_ = s; + return s; + } + } + /** + * string employee_id = 1; + * @return The bytes for employeeId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getEmployeeIdBytes() { + java.lang.Object ref = employeeId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + employeeId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + /** + * string name = 2; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + * string name = 2; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TITLE_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object title_ = ""; + /** + * optional string title = 3; + * @return Whether the title field is set. + */ + @java.lang.Override + public boolean hasTitle() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * optional string title = 3; + * @return The title. + */ + @java.lang.Override + public java.lang.String getTitle() { + java.lang.Object ref = title_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + title_ = s; + return s; + } + } + /** + * optional string title = 3; + * @return The bytes for title. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTitleBytes() { + java.lang.Object ref = title_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + title_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CONTACT_INFO_FIELD_NUMBER = 4; + private generated.Company.Department.Employee.ContactInfo contactInfo_; + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return Whether the contactInfo field is set. + */ + @java.lang.Override + public boolean hasContactInfo() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return The contactInfo. + */ + @java.lang.Override + public generated.Company.Department.Employee.ContactInfo getContactInfo() { + return contactInfo_ == null ? generated.Company.Department.Employee.ContactInfo.getDefaultInstance() : contactInfo_; + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + @java.lang.Override + public generated.Company.Department.Employee.ContactInfoOrBuilder getContactInfoOrBuilder() { + return contactInfo_ == null ? generated.Company.Department.Employee.ContactInfo.getDefaultInstance() : contactInfo_; + } + + public static final int PROJECTS_FIELD_NUMBER = 5; + @SuppressWarnings("serial") + private java.util.List projects_; + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + @java.lang.Override + public java.util.List getProjectsList() { + return projects_; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + @java.lang.Override + public java.util.List + getProjectsOrBuilderList() { + return projects_; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + @java.lang.Override + public int getProjectsCount() { + return projects_.size(); + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + @java.lang.Override + public generated.Company.Department.Employee.Project getProjects(int index) { + return projects_.get(index); + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + @java.lang.Override + public generated.Company.Department.Employee.ProjectOrBuilder getProjectsOrBuilder( + int index) { + return projects_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(employeeId_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, employeeId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, title_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(4, getContactInfo()); + } + for (int i = 0; i < projects_.size(); i++) { + output.writeMessage(5, projects_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(employeeId_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, employeeId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, title_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, getContactInfo()); + } + for (int i = 0; i < projects_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, projects_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Company.Department.Employee)) { + return super.equals(obj); + } + generated.Company.Department.Employee other = (generated.Company.Department.Employee) obj; + + if (!getEmployeeId() + .equals(other.getEmployeeId())) return false; + if (!getName() + .equals(other.getName())) return false; + if (hasTitle() != other.hasTitle()) return false; + if (hasTitle()) { + if (!getTitle() + .equals(other.getTitle())) return false; + } + if (hasContactInfo() != other.hasContactInfo()) return false; + if (hasContactInfo()) { + if (!getContactInfo() + .equals(other.getContactInfo())) return false; + } + if (!getProjectsList() + .equals(other.getProjectsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + EMPLOYEE_ID_FIELD_NUMBER; + hash = (53 * hash) + getEmployeeId().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + if (hasTitle()) { + hash = (37 * hash) + TITLE_FIELD_NUMBER; + hash = (53 * hash) + getTitle().hashCode(); + } + if (hasContactInfo()) { + hash = (37 * hash) + CONTACT_INFO_FIELD_NUMBER; + hash = (53 * hash) + getContactInfo().hashCode(); + } + if (getProjectsCount() > 0) { + hash = (37 * hash) + PROJECTS_FIELD_NUMBER; + hash = (53 * hash) + getProjectsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Company.Department.Employee parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department.Employee parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department.Employee parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Company.Department.Employee parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Company.Department.Employee parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Company.Department.Employee parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department.Employee parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Company.Department.Employee prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Company.Department.Employee} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Company.Department.Employee) + generated.Company.Department.EmployeeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.Employee.class, generated.Company.Department.Employee.Builder.class); + } + + // Construct using generated.Company.Department.Employee.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getContactInfoFieldBuilder(); + getProjectsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + employeeId_ = ""; + name_ = ""; + title_ = ""; + contactInfo_ = null; + if (contactInfoBuilder_ != null) { + contactInfoBuilder_.dispose(); + contactInfoBuilder_ = null; + } + if (projectsBuilder_ == null) { + projects_ = java.util.Collections.emptyList(); + } else { + projects_ = null; + projectsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Company_Department_Employee_descriptor; + } + + @java.lang.Override + public generated.Company.Department.Employee getDefaultInstanceForType() { + return generated.Company.Department.Employee.getDefaultInstance(); + } + + @java.lang.Override + public generated.Company.Department.Employee build() { + generated.Company.Department.Employee result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Company.Department.Employee buildPartial() { + generated.Company.Department.Employee result = new generated.Company.Department.Employee(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(generated.Company.Department.Employee result) { + if (projectsBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0)) { + projects_ = java.util.Collections.unmodifiableList(projects_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.projects_ = projects_; + } else { + result.projects_ = projectsBuilder_.build(); + } + } + + private void buildPartial0(generated.Company.Department.Employee result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.employeeId_ = employeeId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.name_ = name_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000004) != 0)) { + result.title_ = title_; + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.contactInfo_ = contactInfoBuilder_ == null + ? contactInfo_ + : contactInfoBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Company.Department.Employee) { + return mergeFrom((generated.Company.Department.Employee)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Company.Department.Employee other) { + if (other == generated.Company.Department.Employee.getDefaultInstance()) return this; + if (!other.getEmployeeId().isEmpty()) { + employeeId_ = other.employeeId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.hasTitle()) { + title_ = other.title_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.hasContactInfo()) { + mergeContactInfo(other.getContactInfo()); + } + if (projectsBuilder_ == null) { + if (!other.projects_.isEmpty()) { + if (projects_.isEmpty()) { + projects_ = other.projects_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensureProjectsIsMutable(); + projects_.addAll(other.projects_); + } + onChanged(); + } + } else { + if (!other.projects_.isEmpty()) { + if (projectsBuilder_.isEmpty()) { + projectsBuilder_.dispose(); + projectsBuilder_ = null; + projects_ = other.projects_; + bitField0_ = (bitField0_ & ~0x00000010); + projectsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getProjectsFieldBuilder() : null; + } else { + projectsBuilder_.addAllMessages(other.projects_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + employeeId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + title_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: { + input.readMessage( + getContactInfoFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: { + generated.Company.Department.Employee.Project m = + input.readMessage( + generated.Company.Department.Employee.Project.parser(), + extensionRegistry); + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + projects_.add(m); + } else { + projectsBuilder_.addMessage(m); + } + break; + } // case 42 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object employeeId_ = ""; + /** + * string employee_id = 1; + * @return The employeeId. + */ + public java.lang.String getEmployeeId() { + java.lang.Object ref = employeeId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + employeeId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string employee_id = 1; + * @return The bytes for employeeId. + */ + public com.google.protobuf.ByteString + getEmployeeIdBytes() { + java.lang.Object ref = employeeId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + employeeId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string employee_id = 1; + * @param value The employeeId to set. + * @return This builder for chaining. + */ + public Builder setEmployeeId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + employeeId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string employee_id = 1; + * @return This builder for chaining. + */ + public Builder clearEmployeeId() { + employeeId_ = getDefaultInstance().getEmployeeId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string employee_id = 1; + * @param value The bytes for employeeId to set. + * @return This builder for chaining. + */ + public Builder setEmployeeIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + employeeId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + * string name = 2; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string name = 2; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string name = 2; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string name = 2; + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string name = 2; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.lang.Object title_ = ""; + /** + * optional string title = 3; + * @return Whether the title field is set. + */ + public boolean hasTitle() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * optional string title = 3; + * @return The title. + */ + public java.lang.String getTitle() { + java.lang.Object ref = title_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + title_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string title = 3; + * @return The bytes for title. + */ + public com.google.protobuf.ByteString + getTitleBytes() { + java.lang.Object ref = title_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + title_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string title = 3; + * @param value The title to set. + * @return This builder for chaining. + */ + public Builder setTitle( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + title_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * optional string title = 3; + * @return This builder for chaining. + */ + public Builder clearTitle() { + title_ = getDefaultInstance().getTitle(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + * optional string title = 3; + * @param value The bytes for title to set. + * @return This builder for chaining. + */ + public Builder setTitleBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + title_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private generated.Company.Department.Employee.ContactInfo contactInfo_; + private com.google.protobuf.SingleFieldBuilderV3< + generated.Company.Department.Employee.ContactInfo, generated.Company.Department.Employee.ContactInfo.Builder, generated.Company.Department.Employee.ContactInfoOrBuilder> contactInfoBuilder_; + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return Whether the contactInfo field is set. + */ + public boolean hasContactInfo() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + * @return The contactInfo. + */ + public generated.Company.Department.Employee.ContactInfo getContactInfo() { + if (contactInfoBuilder_ == null) { + return contactInfo_ == null ? generated.Company.Department.Employee.ContactInfo.getDefaultInstance() : contactInfo_; + } else { + return contactInfoBuilder_.getMessage(); + } + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public Builder setContactInfo(generated.Company.Department.Employee.ContactInfo value) { + if (contactInfoBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + contactInfo_ = value; + } else { + contactInfoBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public Builder setContactInfo( + generated.Company.Department.Employee.ContactInfo.Builder builderForValue) { + if (contactInfoBuilder_ == null) { + contactInfo_ = builderForValue.build(); + } else { + contactInfoBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public Builder mergeContactInfo(generated.Company.Department.Employee.ContactInfo value) { + if (contactInfoBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) && + contactInfo_ != null && + contactInfo_ != generated.Company.Department.Employee.ContactInfo.getDefaultInstance()) { + getContactInfoBuilder().mergeFrom(value); + } else { + contactInfo_ = value; + } + } else { + contactInfoBuilder_.mergeFrom(value); + } + if (contactInfo_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public Builder clearContactInfo() { + bitField0_ = (bitField0_ & ~0x00000008); + contactInfo_ = null; + if (contactInfoBuilder_ != null) { + contactInfoBuilder_.dispose(); + contactInfoBuilder_ = null; + } + onChanged(); + return this; + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public generated.Company.Department.Employee.ContactInfo.Builder getContactInfoBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getContactInfoFieldBuilder().getBuilder(); + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + public generated.Company.Department.Employee.ContactInfoOrBuilder getContactInfoOrBuilder() { + if (contactInfoBuilder_ != null) { + return contactInfoBuilder_.getMessageOrBuilder(); + } else { + return contactInfo_ == null ? + generated.Company.Department.Employee.ContactInfo.getDefaultInstance() : contactInfo_; + } + } + /** + * .generated.Company.Department.Employee.ContactInfo contact_info = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + generated.Company.Department.Employee.ContactInfo, generated.Company.Department.Employee.ContactInfo.Builder, generated.Company.Department.Employee.ContactInfoOrBuilder> + getContactInfoFieldBuilder() { + if (contactInfoBuilder_ == null) { + contactInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + generated.Company.Department.Employee.ContactInfo, generated.Company.Department.Employee.ContactInfo.Builder, generated.Company.Department.Employee.ContactInfoOrBuilder>( + getContactInfo(), + getParentForChildren(), + isClean()); + contactInfo_ = null; + } + return contactInfoBuilder_; + } + + private java.util.List projects_ = + java.util.Collections.emptyList(); + private void ensureProjectsIsMutable() { + if (!((bitField0_ & 0x00000010) != 0)) { + projects_ = new java.util.ArrayList(projects_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee.Project, generated.Company.Department.Employee.Project.Builder, generated.Company.Department.Employee.ProjectOrBuilder> projectsBuilder_; + + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public java.util.List getProjectsList() { + if (projectsBuilder_ == null) { + return java.util.Collections.unmodifiableList(projects_); + } else { + return projectsBuilder_.getMessageList(); + } + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public int getProjectsCount() { + if (projectsBuilder_ == null) { + return projects_.size(); + } else { + return projectsBuilder_.getCount(); + } + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public generated.Company.Department.Employee.Project getProjects(int index) { + if (projectsBuilder_ == null) { + return projects_.get(index); + } else { + return projectsBuilder_.getMessage(index); + } + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder setProjects( + int index, generated.Company.Department.Employee.Project value) { + if (projectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureProjectsIsMutable(); + projects_.set(index, value); + onChanged(); + } else { + projectsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder setProjects( + int index, generated.Company.Department.Employee.Project.Builder builderForValue) { + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + projects_.set(index, builderForValue.build()); + onChanged(); + } else { + projectsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder addProjects(generated.Company.Department.Employee.Project value) { + if (projectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureProjectsIsMutable(); + projects_.add(value); + onChanged(); + } else { + projectsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder addProjects( + int index, generated.Company.Department.Employee.Project value) { + if (projectsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureProjectsIsMutable(); + projects_.add(index, value); + onChanged(); + } else { + projectsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder addProjects( + generated.Company.Department.Employee.Project.Builder builderForValue) { + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + projects_.add(builderForValue.build()); + onChanged(); + } else { + projectsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder addProjects( + int index, generated.Company.Department.Employee.Project.Builder builderForValue) { + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + projects_.add(index, builderForValue.build()); + onChanged(); + } else { + projectsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder addAllProjects( + java.lang.Iterable values) { + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, projects_); + onChanged(); + } else { + projectsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder clearProjects() { + if (projectsBuilder_ == null) { + projects_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + projectsBuilder_.clear(); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public Builder removeProjects(int index) { + if (projectsBuilder_ == null) { + ensureProjectsIsMutable(); + projects_.remove(index); + onChanged(); + } else { + projectsBuilder_.remove(index); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public generated.Company.Department.Employee.Project.Builder getProjectsBuilder( + int index) { + return getProjectsFieldBuilder().getBuilder(index); + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public generated.Company.Department.Employee.ProjectOrBuilder getProjectsOrBuilder( + int index) { + if (projectsBuilder_ == null) { + return projects_.get(index); } else { + return projectsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public java.util.List + getProjectsOrBuilderList() { + if (projectsBuilder_ != null) { + return projectsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(projects_); + } + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public generated.Company.Department.Employee.Project.Builder addProjectsBuilder() { + return getProjectsFieldBuilder().addBuilder( + generated.Company.Department.Employee.Project.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public generated.Company.Department.Employee.Project.Builder addProjectsBuilder( + int index) { + return getProjectsFieldBuilder().addBuilder( + index, generated.Company.Department.Employee.Project.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department.Employee.Project projects = 5; + */ + public java.util.List + getProjectsBuilderList() { + return getProjectsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee.Project, generated.Company.Department.Employee.Project.Builder, generated.Company.Department.Employee.ProjectOrBuilder> + getProjectsFieldBuilder() { + if (projectsBuilder_ == null) { + projectsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee.Project, generated.Company.Department.Employee.Project.Builder, generated.Company.Department.Employee.ProjectOrBuilder>( + projects_, + ((bitField0_ & 0x00000010) != 0), + getParentForChildren(), + isClean()); + projects_ = null; + } + return projectsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Company.Department.Employee) + } + + // @@protoc_insertion_point(class_scope:generated.Company.Department.Employee) + private static final generated.Company.Department.Employee DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Company.Department.Employee(); + } + + public static generated.Company.Department.Employee getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Employee parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Company.Department.Employee getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public static final int DEPARTMENT_ID_FIELD_NUMBER = 1; + private long departmentId_ = 0L; + /** + * int64 department_id = 1; + * @return The departmentId. + */ + @java.lang.Override + public long getDepartmentId() { + return departmentId_; + } + + public static final int DEPARTMENT_NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object departmentName_ = ""; + /** + * string department_name = 2; + * @return The departmentName. + */ + @java.lang.Override + public java.lang.String getDepartmentName() { + java.lang.Object ref = departmentName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + departmentName_ = s; + return s; + } + } + /** + * string department_name = 2; + * @return The bytes for departmentName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getDepartmentNameBytes() { + java.lang.Object ref = departmentName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + departmentName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EMPLOYEES_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private java.util.List employees_; + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + @java.lang.Override + public java.util.List getEmployeesList() { + return employees_; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + @java.lang.Override + public java.util.List + getEmployeesOrBuilderList() { + return employees_; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + @java.lang.Override + public int getEmployeesCount() { + return employees_.size(); + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + @java.lang.Override + public generated.Company.Department.Employee getEmployees(int index) { + return employees_.get(index); + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + @java.lang.Override + public generated.Company.Department.EmployeeOrBuilder getEmployeesOrBuilder( + int index) { + return employees_.get(index); + } + + public static final int REVENUE_FIELD_NUMBER = 4; + private float revenue_ = 0F; + /** + * float revenue = 4; + * @return The revenue. + */ + @java.lang.Override + public float getRevenue() { + return revenue_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (departmentId_ != 0L) { + output.writeInt64(1, departmentId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(departmentName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, departmentName_); + } + for (int i = 0; i < employees_.size(); i++) { + output.writeMessage(3, employees_.get(i)); + } + if (java.lang.Float.floatToRawIntBits(revenue_) != 0) { + output.writeFloat(4, revenue_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (departmentId_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, departmentId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(departmentName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, departmentName_); + } + for (int i = 0; i < employees_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, employees_.get(i)); + } + if (java.lang.Float.floatToRawIntBits(revenue_) != 0) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(4, revenue_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Company.Department)) { + return super.equals(obj); + } + generated.Company.Department other = (generated.Company.Department) obj; + + if (getDepartmentId() + != other.getDepartmentId()) return false; + if (!getDepartmentName() + .equals(other.getDepartmentName())) return false; + if (!getEmployeesList() + .equals(other.getEmployeesList())) return false; + if (java.lang.Float.floatToIntBits(getRevenue()) + != java.lang.Float.floatToIntBits( + other.getRevenue())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + DEPARTMENT_ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getDepartmentId()); + hash = (37 * hash) + DEPARTMENT_NAME_FIELD_NUMBER; + hash = (53 * hash) + getDepartmentName().hashCode(); + if (getEmployeesCount() > 0) { + hash = (37 * hash) + EMPLOYEES_FIELD_NUMBER; + hash = (53 * hash) + getEmployeesList().hashCode(); + } + hash = (37 * hash) + REVENUE_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getRevenue()); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Company.Department parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company.Department parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company.Department parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Company.Department parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Company.Department parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Company.Department parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company.Department parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Company.Department prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Company.Department} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Company.Department) + generated.Company.DepartmentOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_Department_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_Department_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.Department.class, generated.Company.Department.Builder.class); + } + + // Construct using generated.Company.Department.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + departmentId_ = 0L; + departmentName_ = ""; + if (employeesBuilder_ == null) { + employees_ = java.util.Collections.emptyList(); + } else { + employees_ = null; + employeesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + revenue_ = 0F; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Company_Department_descriptor; + } + + @java.lang.Override + public generated.Company.Department getDefaultInstanceForType() { + return generated.Company.Department.getDefaultInstance(); + } + + @java.lang.Override + public generated.Company.Department build() { + generated.Company.Department result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Company.Department buildPartial() { + generated.Company.Department result = new generated.Company.Department(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(generated.Company.Department result) { + if (employeesBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + employees_ = java.util.Collections.unmodifiableList(employees_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.employees_ = employees_; + } else { + result.employees_ = employeesBuilder_.build(); + } + } + + private void buildPartial0(generated.Company.Department result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.departmentId_ = departmentId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.departmentName_ = departmentName_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.revenue_ = revenue_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Company.Department) { + return mergeFrom((generated.Company.Department)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Company.Department other) { + if (other == generated.Company.Department.getDefaultInstance()) return this; + if (other.getDepartmentId() != 0L) { + setDepartmentId(other.getDepartmentId()); + } + if (!other.getDepartmentName().isEmpty()) { + departmentName_ = other.departmentName_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (employeesBuilder_ == null) { + if (!other.employees_.isEmpty()) { + if (employees_.isEmpty()) { + employees_ = other.employees_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureEmployeesIsMutable(); + employees_.addAll(other.employees_); + } + onChanged(); + } + } else { + if (!other.employees_.isEmpty()) { + if (employeesBuilder_.isEmpty()) { + employeesBuilder_.dispose(); + employeesBuilder_ = null; + employees_ = other.employees_; + bitField0_ = (bitField0_ & ~0x00000004); + employeesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getEmployeesFieldBuilder() : null; + } else { + employeesBuilder_.addAllMessages(other.employees_); + } + } + } + if (other.getRevenue() != 0F) { + setRevenue(other.getRevenue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + departmentId_ = input.readInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 18: { + departmentName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + generated.Company.Department.Employee m = + input.readMessage( + generated.Company.Department.Employee.parser(), + extensionRegistry); + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + employees_.add(m); + } else { + employeesBuilder_.addMessage(m); + } + break; + } // case 26 + case 37: { + revenue_ = input.readFloat(); + bitField0_ |= 0x00000008; + break; + } // case 37 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private long departmentId_ ; + /** + * int64 department_id = 1; + * @return The departmentId. + */ + @java.lang.Override + public long getDepartmentId() { + return departmentId_; + } + /** + * int64 department_id = 1; + * @param value The departmentId to set. + * @return This builder for chaining. + */ + public Builder setDepartmentId(long value) { + + departmentId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * int64 department_id = 1; + * @return This builder for chaining. + */ + public Builder clearDepartmentId() { + bitField0_ = (bitField0_ & ~0x00000001); + departmentId_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object departmentName_ = ""; + /** + * string department_name = 2; + * @return The departmentName. + */ + public java.lang.String getDepartmentName() { + java.lang.Object ref = departmentName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + departmentName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string department_name = 2; + * @return The bytes for departmentName. + */ + public com.google.protobuf.ByteString + getDepartmentNameBytes() { + java.lang.Object ref = departmentName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + departmentName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string department_name = 2; + * @param value The departmentName to set. + * @return This builder for chaining. + */ + public Builder setDepartmentName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + departmentName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string department_name = 2; + * @return This builder for chaining. + */ + public Builder clearDepartmentName() { + departmentName_ = getDefaultInstance().getDepartmentName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string department_name = 2; + * @param value The bytes for departmentName to set. + * @return This builder for chaining. + */ + public Builder setDepartmentNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + departmentName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.util.List employees_ = + java.util.Collections.emptyList(); + private void ensureEmployeesIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + employees_ = new java.util.ArrayList(employees_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee, generated.Company.Department.Employee.Builder, generated.Company.Department.EmployeeOrBuilder> employeesBuilder_; + + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public java.util.List getEmployeesList() { + if (employeesBuilder_ == null) { + return java.util.Collections.unmodifiableList(employees_); + } else { + return employeesBuilder_.getMessageList(); + } + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public int getEmployeesCount() { + if (employeesBuilder_ == null) { + return employees_.size(); + } else { + return employeesBuilder_.getCount(); + } + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public generated.Company.Department.Employee getEmployees(int index) { + if (employeesBuilder_ == null) { + return employees_.get(index); + } else { + return employeesBuilder_.getMessage(index); + } + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder setEmployees( + int index, generated.Company.Department.Employee value) { + if (employeesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEmployeesIsMutable(); + employees_.set(index, value); + onChanged(); + } else { + employeesBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder setEmployees( + int index, generated.Company.Department.Employee.Builder builderForValue) { + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + employees_.set(index, builderForValue.build()); + onChanged(); + } else { + employeesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder addEmployees(generated.Company.Department.Employee value) { + if (employeesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEmployeesIsMutable(); + employees_.add(value); + onChanged(); + } else { + employeesBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder addEmployees( + int index, generated.Company.Department.Employee value) { + if (employeesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureEmployeesIsMutable(); + employees_.add(index, value); + onChanged(); + } else { + employeesBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder addEmployees( + generated.Company.Department.Employee.Builder builderForValue) { + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + employees_.add(builderForValue.build()); + onChanged(); + } else { + employeesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder addEmployees( + int index, generated.Company.Department.Employee.Builder builderForValue) { + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + employees_.add(index, builderForValue.build()); + onChanged(); + } else { + employeesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder addAllEmployees( + java.lang.Iterable values) { + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, employees_); + onChanged(); + } else { + employeesBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder clearEmployees() { + if (employeesBuilder_ == null) { + employees_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + employeesBuilder_.clear(); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public Builder removeEmployees(int index) { + if (employeesBuilder_ == null) { + ensureEmployeesIsMutable(); + employees_.remove(index); + onChanged(); + } else { + employeesBuilder_.remove(index); + } + return this; + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public generated.Company.Department.Employee.Builder getEmployeesBuilder( + int index) { + return getEmployeesFieldBuilder().getBuilder(index); + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public generated.Company.Department.EmployeeOrBuilder getEmployeesOrBuilder( + int index) { + if (employeesBuilder_ == null) { + return employees_.get(index); } else { + return employeesBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public java.util.List + getEmployeesOrBuilderList() { + if (employeesBuilder_ != null) { + return employeesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(employees_); + } + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public generated.Company.Department.Employee.Builder addEmployeesBuilder() { + return getEmployeesFieldBuilder().addBuilder( + generated.Company.Department.Employee.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public generated.Company.Department.Employee.Builder addEmployeesBuilder( + int index) { + return getEmployeesFieldBuilder().addBuilder( + index, generated.Company.Department.Employee.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department.Employee employees = 3; + */ + public java.util.List + getEmployeesBuilderList() { + return getEmployeesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee, generated.Company.Department.Employee.Builder, generated.Company.Department.EmployeeOrBuilder> + getEmployeesFieldBuilder() { + if (employeesBuilder_ == null) { + employeesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department.Employee, generated.Company.Department.Employee.Builder, generated.Company.Department.EmployeeOrBuilder>( + employees_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + employees_ = null; + } + return employeesBuilder_; + } + + private float revenue_ ; + /** + * float revenue = 4; + * @return The revenue. + */ + @java.lang.Override + public float getRevenue() { + return revenue_; + } + /** + * float revenue = 4; + * @param value The revenue to set. + * @return This builder for chaining. + */ + public Builder setRevenue(float value) { + + revenue_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * float revenue = 4; + * @return This builder for chaining. + */ + public Builder clearRevenue() { + bitField0_ = (bitField0_ & ~0x00000008); + revenue_ = 0F; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Company.Department) + } + + // @@protoc_insertion_point(class_scope:generated.Company.Department) + private static final generated.Company.Department DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Company.Department(); + } + + public static generated.Company.Department getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Department parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Company.Department getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public static final int COMPANY_ID_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object companyId_ = ""; + /** + * string company_id = 1; + * @return The companyId. + */ + @java.lang.Override + public java.lang.String getCompanyId() { + java.lang.Object ref = companyId_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + companyId_ = s; + return s; + } + } + /** + * string company_id = 1; + * @return The bytes for companyId. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCompanyIdBytes() { + java.lang.Object ref = companyId_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + companyId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int COMPANY_NAME_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private volatile java.lang.Object companyName_ = ""; + /** + * string company_name = 2; + * @return The companyName. + */ + @java.lang.Override + public java.lang.String getCompanyName() { + java.lang.Object ref = companyName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + companyName_ = s; + return s; + } + } + /** + * string company_name = 2; + * @return The bytes for companyName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCompanyNameBytes() { + java.lang.Object ref = companyName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + companyName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DEPARTMENTS_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private java.util.List departments_; + /** + * repeated .generated.Company.Department departments = 3; + */ + @java.lang.Override + public java.util.List getDepartmentsList() { + return departments_; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + @java.lang.Override + public java.util.List + getDepartmentsOrBuilderList() { + return departments_; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + @java.lang.Override + public int getDepartmentsCount() { + return departments_.size(); + } + /** + * repeated .generated.Company.Department departments = 3; + */ + @java.lang.Override + public generated.Company.Department getDepartments(int index) { + return departments_.get(index); + } + /** + * repeated .generated.Company.Department departments = 3; + */ + @java.lang.Override + public generated.Company.DepartmentOrBuilder getDepartmentsOrBuilder( + int index) { + return departments_.get(index); + } + + public static final int GLOBAL_FIELD_NUMBER = 4; + private boolean global_ = false; + /** + * bool global = 4; + * @return The global. + */ + @java.lang.Override + public boolean getGlobal() { + return global_; + } + + public static final int OFFICE_PINCODES_FIELD_NUMBER = 5; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList officePincodes_ = + emptyIntList(); + /** + * repeated int32 office_pincodes = 5; + * @return A list containing the officePincodes. + */ + @java.lang.Override + public java.util.List + getOfficePincodesList() { + return officePincodes_; + } + /** + * repeated int32 office_pincodes = 5; + * @return The count of officePincodes. + */ + public int getOfficePincodesCount() { + return officePincodes_.size(); + } + /** + * repeated int32 office_pincodes = 5; + * @param index The index of the element to return. + * @return The officePincodes at the given index. + */ + public int getOfficePincodes(int index) { + return officePincodes_.getInt(index); + } + private int officePincodesMemoizedSerializedSize = -1; + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(companyId_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, companyId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(companyName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, companyName_); + } + for (int i = 0; i < departments_.size(); i++) { + output.writeMessage(3, departments_.get(i)); + } + if (global_ != false) { + output.writeBool(4, global_); + } + if (getOfficePincodesList().size() > 0) { + output.writeUInt32NoTag(42); + output.writeUInt32NoTag(officePincodesMemoizedSerializedSize); + } + for (int i = 0; i < officePincodes_.size(); i++) { + output.writeInt32NoTag(officePincodes_.getInt(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(companyId_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, companyId_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(companyName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, companyName_); + } + for (int i = 0; i < departments_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, departments_.get(i)); + } + if (global_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, global_); + } + { + int dataSize = 0; + for (int i = 0; i < officePincodes_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(officePincodes_.getInt(i)); + } + size += dataSize; + if (!getOfficePincodesList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + officePincodesMemoizedSerializedSize = dataSize; + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.Company)) { + return super.equals(obj); + } + generated.Company other = (generated.Company) obj; + + if (!getCompanyId() + .equals(other.getCompanyId())) return false; + if (!getCompanyName() + .equals(other.getCompanyName())) return false; + if (!getDepartmentsList() + .equals(other.getDepartmentsList())) return false; + if (getGlobal() + != other.getGlobal()) return false; + if (!getOfficePincodesList() + .equals(other.getOfficePincodesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + COMPANY_ID_FIELD_NUMBER; + hash = (53 * hash) + getCompanyId().hashCode(); + hash = (37 * hash) + COMPANY_NAME_FIELD_NUMBER; + hash = (53 * hash) + getCompanyName().hashCode(); + if (getDepartmentsCount() > 0) { + hash = (37 * hash) + DEPARTMENTS_FIELD_NUMBER; + hash = (53 * hash) + getDepartmentsList().hashCode(); + } + hash = (37 * hash) + GLOBAL_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getGlobal()); + if (getOfficePincodesCount() > 0) { + hash = (37 * hash) + OFFICE_PINCODES_FIELD_NUMBER; + hash = (53 * hash) + getOfficePincodesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.Company parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.Company parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.Company parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.Company parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.Company parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.Company parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.Company parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.Company prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.Company} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.Company) + generated.CompanyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_Company_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_Company_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.Company.class, generated.Company.Builder.class); + } + + // Construct using generated.Company.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + companyId_ = ""; + companyName_ = ""; + if (departmentsBuilder_ == null) { + departments_ = java.util.Collections.emptyList(); + } else { + departments_ = null; + departmentsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + global_ = false; + officePincodes_ = emptyIntList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_Company_descriptor; + } + + @java.lang.Override + public generated.Company getDefaultInstanceForType() { + return generated.Company.getDefaultInstance(); + } + + @java.lang.Override + public generated.Company build() { + generated.Company result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.Company buildPartial() { + generated.Company result = new generated.Company(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(generated.Company result) { + if (departmentsBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + departments_ = java.util.Collections.unmodifiableList(departments_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.departments_ = departments_; + } else { + result.departments_ = departmentsBuilder_.build(); + } + } + + private void buildPartial0(generated.Company result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.companyId_ = companyId_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.companyName_ = companyName_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.global_ = global_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + officePincodes_.makeImmutable(); + result.officePincodes_ = officePincodes_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.Company) { + return mergeFrom((generated.Company)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.Company other) { + if (other == generated.Company.getDefaultInstance()) return this; + if (!other.getCompanyId().isEmpty()) { + companyId_ = other.companyId_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getCompanyName().isEmpty()) { + companyName_ = other.companyName_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (departmentsBuilder_ == null) { + if (!other.departments_.isEmpty()) { + if (departments_.isEmpty()) { + departments_ = other.departments_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureDepartmentsIsMutable(); + departments_.addAll(other.departments_); + } + onChanged(); + } + } else { + if (!other.departments_.isEmpty()) { + if (departmentsBuilder_.isEmpty()) { + departmentsBuilder_.dispose(); + departmentsBuilder_ = null; + departments_ = other.departments_; + bitField0_ = (bitField0_ & ~0x00000004); + departmentsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getDepartmentsFieldBuilder() : null; + } else { + departmentsBuilder_.addAllMessages(other.departments_); + } + } + } + if (other.getGlobal() != false) { + setGlobal(other.getGlobal()); + } + if (!other.officePincodes_.isEmpty()) { + if (officePincodes_.isEmpty()) { + officePincodes_ = other.officePincodes_; + officePincodes_.makeImmutable(); + bitField0_ |= 0x00000010; + } else { + ensureOfficePincodesIsMutable(); + officePincodes_.addAll(other.officePincodes_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + companyId_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: { + companyName_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: { + generated.Company.Department m = + input.readMessage( + generated.Company.Department.parser(), + extensionRegistry); + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + departments_.add(m); + } else { + departmentsBuilder_.addMessage(m); + } + break; + } // case 26 + case 32: { + global_ = input.readBool(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: { + int v = input.readInt32(); + ensureOfficePincodesIsMutable(); + officePincodes_.addInt(v); + break; + } // case 40 + case 42: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureOfficePincodesIsMutable(); + while (input.getBytesUntilLimit() > 0) { + officePincodes_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 42 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object companyId_ = ""; + /** + * string company_id = 1; + * @return The companyId. + */ + public java.lang.String getCompanyId() { + java.lang.Object ref = companyId_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + companyId_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string company_id = 1; + * @return The bytes for companyId. + */ + public com.google.protobuf.ByteString + getCompanyIdBytes() { + java.lang.Object ref = companyId_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + companyId_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string company_id = 1; + * @param value The companyId to set. + * @return This builder for chaining. + */ + public Builder setCompanyId( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + companyId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string company_id = 1; + * @return This builder for chaining. + */ + public Builder clearCompanyId() { + companyId_ = getDefaultInstance().getCompanyId(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string company_id = 1; + * @param value The bytes for companyId to set. + * @return This builder for chaining. + */ + public Builder setCompanyIdBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + companyId_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object companyName_ = ""; + /** + * string company_name = 2; + * @return The companyName. + */ + public java.lang.String getCompanyName() { + java.lang.Object ref = companyName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + companyName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string company_name = 2; + * @return The bytes for companyName. + */ + public com.google.protobuf.ByteString + getCompanyNameBytes() { + java.lang.Object ref = companyName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + companyName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string company_name = 2; + * @param value The companyName to set. + * @return This builder for chaining. + */ + public Builder setCompanyName( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + companyName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * string company_name = 2; + * @return This builder for chaining. + */ + public Builder clearCompanyName() { + companyName_ = getDefaultInstance().getCompanyName(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * string company_name = 2; + * @param value The bytes for companyName to set. + * @return This builder for chaining. + */ + public Builder setCompanyNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + companyName_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private java.util.List departments_ = + java.util.Collections.emptyList(); + private void ensureDepartmentsIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + departments_ = new java.util.ArrayList(departments_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department, generated.Company.Department.Builder, generated.Company.DepartmentOrBuilder> departmentsBuilder_; + + /** + * repeated .generated.Company.Department departments = 3; + */ + public java.util.List getDepartmentsList() { + if (departmentsBuilder_ == null) { + return java.util.Collections.unmodifiableList(departments_); + } else { + return departmentsBuilder_.getMessageList(); + } + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public int getDepartmentsCount() { + if (departmentsBuilder_ == null) { + return departments_.size(); + } else { + return departmentsBuilder_.getCount(); + } + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public generated.Company.Department getDepartments(int index) { + if (departmentsBuilder_ == null) { + return departments_.get(index); + } else { + return departmentsBuilder_.getMessage(index); + } + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder setDepartments( + int index, generated.Company.Department value) { + if (departmentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDepartmentsIsMutable(); + departments_.set(index, value); + onChanged(); + } else { + departmentsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder setDepartments( + int index, generated.Company.Department.Builder builderForValue) { + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + departments_.set(index, builderForValue.build()); + onChanged(); + } else { + departmentsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder addDepartments(generated.Company.Department value) { + if (departmentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDepartmentsIsMutable(); + departments_.add(value); + onChanged(); + } else { + departmentsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder addDepartments( + int index, generated.Company.Department value) { + if (departmentsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDepartmentsIsMutable(); + departments_.add(index, value); + onChanged(); + } else { + departmentsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder addDepartments( + generated.Company.Department.Builder builderForValue) { + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + departments_.add(builderForValue.build()); + onChanged(); + } else { + departmentsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder addDepartments( + int index, generated.Company.Department.Builder builderForValue) { + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + departments_.add(index, builderForValue.build()); + onChanged(); + } else { + departmentsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder addAllDepartments( + java.lang.Iterable values) { + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, departments_); + onChanged(); + } else { + departmentsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder clearDepartments() { + if (departmentsBuilder_ == null) { + departments_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + departmentsBuilder_.clear(); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public Builder removeDepartments(int index) { + if (departmentsBuilder_ == null) { + ensureDepartmentsIsMutable(); + departments_.remove(index); + onChanged(); + } else { + departmentsBuilder_.remove(index); + } + return this; + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public generated.Company.Department.Builder getDepartmentsBuilder( + int index) { + return getDepartmentsFieldBuilder().getBuilder(index); + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public generated.Company.DepartmentOrBuilder getDepartmentsOrBuilder( + int index) { + if (departmentsBuilder_ == null) { + return departments_.get(index); } else { + return departmentsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public java.util.List + getDepartmentsOrBuilderList() { + if (departmentsBuilder_ != null) { + return departmentsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(departments_); + } + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public generated.Company.Department.Builder addDepartmentsBuilder() { + return getDepartmentsFieldBuilder().addBuilder( + generated.Company.Department.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public generated.Company.Department.Builder addDepartmentsBuilder( + int index) { + return getDepartmentsFieldBuilder().addBuilder( + index, generated.Company.Department.getDefaultInstance()); + } + /** + * repeated .generated.Company.Department departments = 3; + */ + public java.util.List + getDepartmentsBuilderList() { + return getDepartmentsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department, generated.Company.Department.Builder, generated.Company.DepartmentOrBuilder> + getDepartmentsFieldBuilder() { + if (departmentsBuilder_ == null) { + departmentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + generated.Company.Department, generated.Company.Department.Builder, generated.Company.DepartmentOrBuilder>( + departments_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + departments_ = null; + } + return departmentsBuilder_; + } + + private boolean global_ ; + /** + * bool global = 4; + * @return The global. + */ + @java.lang.Override + public boolean getGlobal() { + return global_; + } + /** + * bool global = 4; + * @param value The global to set. + * @return This builder for chaining. + */ + public Builder setGlobal(boolean value) { + + global_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + * bool global = 4; + * @return This builder for chaining. + */ + public Builder clearGlobal() { + bitField0_ = (bitField0_ & ~0x00000008); + global_ = false; + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList officePincodes_ = emptyIntList(); + private void ensureOfficePincodesIsMutable() { + if (!officePincodes_.isModifiable()) { + officePincodes_ = makeMutableCopy(officePincodes_); + } + bitField0_ |= 0x00000010; + } + /** + * repeated int32 office_pincodes = 5; + * @return A list containing the officePincodes. + */ + public java.util.List + getOfficePincodesList() { + officePincodes_.makeImmutable(); + return officePincodes_; + } + /** + * repeated int32 office_pincodes = 5; + * @return The count of officePincodes. + */ + public int getOfficePincodesCount() { + return officePincodes_.size(); + } + /** + * repeated int32 office_pincodes = 5; + * @param index The index of the element to return. + * @return The officePincodes at the given index. + */ + public int getOfficePincodes(int index) { + return officePincodes_.getInt(index); + } + /** + * repeated int32 office_pincodes = 5; + * @param index The index to set the value at. + * @param value The officePincodes to set. + * @return This builder for chaining. + */ + public Builder setOfficePincodes( + int index, int value) { + + ensureOfficePincodesIsMutable(); + officePincodes_.setInt(index, value); + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * repeated int32 office_pincodes = 5; + * @param value The officePincodes to add. + * @return This builder for chaining. + */ + public Builder addOfficePincodes(int value) { + + ensureOfficePincodesIsMutable(); + officePincodes_.addInt(value); + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * repeated int32 office_pincodes = 5; + * @param values The officePincodes to add. + * @return This builder for chaining. + */ + public Builder addAllOfficePincodes( + java.lang.Iterable values) { + ensureOfficePincodesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, officePincodes_); + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + * repeated int32 office_pincodes = 5; + * @return This builder for chaining. + */ + public Builder clearOfficePincodes() { + officePincodes_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.Company) + } + + // @@protoc_insertion_point(class_scope:generated.Company) + private static final generated.Company DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.Company(); + } + + public static generated.Company getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Company parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.Company getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/sdks/android/app/src/androidTest/java/generated/CompanyOrBuilder.java b/sdks/android/app/src/androidTest/java/generated/CompanyOrBuilder.java new file mode 100644 index 00000000..cf3d4192 --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/CompanyOrBuilder.java @@ -0,0 +1,81 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +public interface CompanyOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.Company) + com.google.protobuf.MessageOrBuilder { + + /** + * string company_id = 1; + * @return The companyId. + */ + java.lang.String getCompanyId(); + /** + * string company_id = 1; + * @return The bytes for companyId. + */ + com.google.protobuf.ByteString + getCompanyIdBytes(); + + /** + * string company_name = 2; + * @return The companyName. + */ + java.lang.String getCompanyName(); + /** + * string company_name = 2; + * @return The bytes for companyName. + */ + com.google.protobuf.ByteString + getCompanyNameBytes(); + + /** + * repeated .generated.Company.Department departments = 3; + */ + java.util.List + getDepartmentsList(); + /** + * repeated .generated.Company.Department departments = 3; + */ + generated.Company.Department getDepartments(int index); + /** + * repeated .generated.Company.Department departments = 3; + */ + int getDepartmentsCount(); + /** + * repeated .generated.Company.Department departments = 3; + */ + java.util.List + getDepartmentsOrBuilderList(); + /** + * repeated .generated.Company.Department departments = 3; + */ + generated.Company.DepartmentOrBuilder getDepartmentsOrBuilder( + int index); + + /** + * bool global = 4; + * @return The global. + */ + boolean getGlobal(); + + /** + * repeated int32 office_pincodes = 5; + * @return A list containing the officePincodes. + */ + java.util.List getOfficePincodesList(); + /** + * repeated int32 office_pincodes = 5; + * @return The count of officePincodes. + */ + int getOfficePincodesCount(); + /** + * repeated int32 office_pincodes = 5; + * @param index The index of the element to return. + * @return The officePincodes at the given index. + */ + int getOfficePincodes(int index); +} diff --git a/sdks/android/app/src/androidTest/java/generated/CompanyProto.java b/sdks/android/app/src/androidTest/java/generated/CompanyProto.java new file mode 100644 index 00000000..c513298c --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/CompanyProto.java @@ -0,0 +1,150 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +public final class CompanyProto { + private CompanyProto() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Address_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Address_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Address_AdditionalInfoEntry_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Address_AdditionalInfoEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_EmailAddress_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_EmailAddress_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Company_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Company_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Company_Department_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Company_Department_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Company_Department_Employee_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Company_Department_Employee_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Company_Department_Employee_ContactInfo_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Company_Department_Employee_ContactInfo_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_generated_Company_Department_Employee_Project_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_generated_Company_Department_Employee_Project_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\023company_proto.proto\022\tgenerated\032\031google" + + "/protobuf/any.proto\"\323\001\n\007Address\022\016\n\006stree" + + "t\030\001 \001(\t\022\014\n\004city\030\002 \001(\t\022\r\n\005state\030\003 \001(\t\022\020\n\010" + + "zip_code\030\004 \001(\t\022?\n\017additional_info\030\005 \003(\0132" + + "&.generated.Address.AdditionalInfoEntry\022" + + "\021\n\tbuildings\030\006 \003(\005\0325\n\023AdditionalInfoEntr" + + "y\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\035\n\014Ema" + + "ilAddress\022\r\n\005email\030\001 \001(\t\"\375\004\n\007Company\022\022\n\n" + + "company_id\030\001 \001(\t\022\024\n\014company_name\030\002 \001(\t\0222" + + "\n\013departments\030\003 \003(\0132\035.generated.Company." + + "Department\022\016\n\006global\030\004 \001(\010\022\027\n\017office_pin" + + "codes\030\005 \003(\005\032\352\003\n\nDepartment\022\025\n\rdepartment" + + "_id\030\001 \001(\003\022\027\n\017department_name\030\002 \001(\t\0229\n\tem" + + "ployees\030\003 \003(\0132&.generated.Company.Depart" + + "ment.Employee\022\017\n\007revenue\030\004 \001(\002\032\337\002\n\010Emplo" + + "yee\022\023\n\013employee_id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\022\022" + + "\n\005title\030\003 \001(\tH\000\210\001\001\022H\n\014contact_info\030\004 \001(\013" + + "22.generated.Company.Department.Employee" + + ".ContactInfo\022@\n\010projects\030\005 \003(\0132..generat" + + "ed.Company.Department.Employee.Project\032C" + + "\n\013ContactInfo\022\r\n\005phone\030\001 \001(\t\022%\n\007address\030" + + "\002 \001(\0132\024.google.protobuf.Any\032A\n\007Project\022\022" + + "\n\nproject_id\030\001 \001(\t\022\024\n\014project_name\030\002 \001(\t" + + "\022\014\n\004role\030\003 \001(\tB\010\n\006_titleB\r\n\tgeneratedP\001b" + + "\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.google.protobuf.AnyProto.getDescriptor(), + }); + internal_static_generated_Address_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_generated_Address_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Address_descriptor, + new java.lang.String[] { "Street", "City", "State", "ZipCode", "AdditionalInfo", "Buildings", }); + internal_static_generated_Address_AdditionalInfoEntry_descriptor = + internal_static_generated_Address_descriptor.getNestedTypes().get(0); + internal_static_generated_Address_AdditionalInfoEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Address_AdditionalInfoEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); + internal_static_generated_EmailAddress_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_generated_EmailAddress_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_EmailAddress_descriptor, + new java.lang.String[] { "Email", }); + internal_static_generated_Company_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_generated_Company_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Company_descriptor, + new java.lang.String[] { "CompanyId", "CompanyName", "Departments", "Global", "OfficePincodes", }); + internal_static_generated_Company_Department_descriptor = + internal_static_generated_Company_descriptor.getNestedTypes().get(0); + internal_static_generated_Company_Department_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Company_Department_descriptor, + new java.lang.String[] { "DepartmentId", "DepartmentName", "Employees", "Revenue", }); + internal_static_generated_Company_Department_Employee_descriptor = + internal_static_generated_Company_Department_descriptor.getNestedTypes().get(0); + internal_static_generated_Company_Department_Employee_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Company_Department_Employee_descriptor, + new java.lang.String[] { "EmployeeId", "Name", "Title", "ContactInfo", "Projects", }); + internal_static_generated_Company_Department_Employee_ContactInfo_descriptor = + internal_static_generated_Company_Department_Employee_descriptor.getNestedTypes().get(0); + internal_static_generated_Company_Department_Employee_ContactInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Company_Department_Employee_ContactInfo_descriptor, + new java.lang.String[] { "Phone", "Address", }); + internal_static_generated_Company_Department_Employee_Project_descriptor = + internal_static_generated_Company_Department_Employee_descriptor.getNestedTypes().get(1); + internal_static_generated_Company_Department_Employee_Project_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_generated_Company_Department_Employee_Project_descriptor, + new java.lang.String[] { "ProjectId", "ProjectName", "Role", }); + com.google.protobuf.AnyProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/sdks/android/app/src/androidTest/java/generated/EmailAddress.java b/sdks/android/app/src/androidTest/java/generated/EmailAddress.java new file mode 100644 index 00000000..9e5b309d --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/EmailAddress.java @@ -0,0 +1,542 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +/** + * Protobuf type {@code generated.EmailAddress} + */ +public final class EmailAddress extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:generated.EmailAddress) + EmailAddressOrBuilder { +private static final long serialVersionUID = 0L; + // Use EmailAddress.newBuilder() to construct. + private EmailAddress(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private EmailAddress() { + email_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new EmailAddress(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_EmailAddress_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_EmailAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.EmailAddress.class, generated.EmailAddress.Builder.class); + } + + public static final int EMAIL_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private volatile java.lang.Object email_ = ""; + /** + * string email = 1; + * @return The email. + */ + @java.lang.Override + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } + } + /** + * string email = 1; + * @return The bytes for email. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, email_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, email_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof generated.EmailAddress)) { + return super.equals(obj); + } + generated.EmailAddress other = (generated.EmailAddress) obj; + + if (!getEmail() + .equals(other.getEmail())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + EMAIL_FIELD_NUMBER; + hash = (53 * hash) + getEmail().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static generated.EmailAddress parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.EmailAddress parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.EmailAddress parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.EmailAddress parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.EmailAddress parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static generated.EmailAddress parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static generated.EmailAddress parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.EmailAddress parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static generated.EmailAddress parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + + public static generated.EmailAddress parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static generated.EmailAddress parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static generated.EmailAddress parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(generated.EmailAddress prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code generated.EmailAddress} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:generated.EmailAddress) + generated.EmailAddressOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return generated.CompanyProto.internal_static_generated_EmailAddress_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return generated.CompanyProto.internal_static_generated_EmailAddress_fieldAccessorTable + .ensureFieldAccessorsInitialized( + generated.EmailAddress.class, generated.EmailAddress.Builder.class); + } + + // Construct using generated.EmailAddress.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + email_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return generated.CompanyProto.internal_static_generated_EmailAddress_descriptor; + } + + @java.lang.Override + public generated.EmailAddress getDefaultInstanceForType() { + return generated.EmailAddress.getDefaultInstance(); + } + + @java.lang.Override + public generated.EmailAddress build() { + generated.EmailAddress result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public generated.EmailAddress buildPartial() { + generated.EmailAddress result = new generated.EmailAddress(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(generated.EmailAddress result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.email_ = email_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof generated.EmailAddress) { + return mergeFrom((generated.EmailAddress)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(generated.EmailAddress other) { + if (other == generated.EmailAddress.getDefaultInstance()) return this; + if (!other.getEmail().isEmpty()) { + email_ = other.email_; + bitField0_ |= 0x00000001; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + email_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.lang.Object email_ = ""; + /** + * string email = 1; + * @return The email. + */ + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string email = 1; + * @return The bytes for email. + */ + public com.google.protobuf.ByteString + getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string email = 1; + * @param value The email to set. + * @return This builder for chaining. + */ + public Builder setEmail( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + email_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * string email = 1; + * @return This builder for chaining. + */ + public Builder clearEmail() { + email_ = getDefaultInstance().getEmail(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * string email = 1; + * @param value The bytes for email to set. + * @return This builder for chaining. + */ + public Builder setEmailBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + email_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:generated.EmailAddress) + } + + // @@protoc_insertion_point(class_scope:generated.EmailAddress) + private static final generated.EmailAddress DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new generated.EmailAddress(); + } + + public static generated.EmailAddress getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public EmailAddress parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public generated.EmailAddress getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/sdks/android/app/src/androidTest/java/generated/EmailAddressOrBuilder.java b/sdks/android/app/src/androidTest/java/generated/EmailAddressOrBuilder.java new file mode 100644 index 00000000..aaea1863 --- /dev/null +++ b/sdks/android/app/src/androidTest/java/generated/EmailAddressOrBuilder.java @@ -0,0 +1,22 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: company_proto.proto + +// Protobuf Java Version: 3.25.2 +package generated; + +public interface EmailAddressOrBuilder extends + // @@protoc_insertion_point(interface_extends:generated.EmailAddress) + com.google.protobuf.MessageOrBuilder { + + /** + * string email = 1; + * @return The email. + */ + java.lang.String getEmail(); + /** + * string email = 1; + * @return The bytes for email. + */ + com.google.protobuf.ByteString + getEmailBytes(); +} From b1b08701e1cdceaa9888e9064f5459da8f8a4b86 Mon Sep 17 00:00:00 2001 From: Naman Anand <46650369+void-memories@users.noreply.github.com> Date: Thu, 17 Jul 2025 11:45:33 +0530 Subject: [PATCH 10/20] [ANDROID][SDK](NO CODE CHANGES) Format kotlin (#125) format kotlin code Signed-off-by: Naman Anand Signed-off-by: Suryansh Bisen --- sdks/android/nimblenet_ktx/build.gradle.kts | 12 ++-- .../dev/deliteai/NimbleNetAndroidTest.kt | 6 +- .../impl/common/HardwareInfoAndroidTest.kt | 4 +- .../coroutine/DeliteAiScopeAndroidTest.kt | 2 +- .../io/ChunkDownloadManagerAndroidTest.kt | 6 +- .../deliteai/impl/io/FileUtilsAndroidTest.kt | 39 +++++++------ .../impl/loggers/RemoteLoggerAndroidTest.kt | 4 +- .../LogsUploadSchedulerAndroidTest.kt | 6 +- .../dev/deliteai/testUtils/Constants.kt | 23 ++++---- .../kotlin/dev/deliteai/NimbleNetInternal.kt | 2 +- .../src/main/kotlin/dev/deliteai/NimbleNet.kt | 57 +++++++------------ .../deliteai/datamodels/NimbleNetConfig.kt | 21 +++---- .../deliteai/datamodels/NimbleNetResult.kt | 29 +++++----- .../deliteai/datamodels/NimbleNetTensor.kt | 57 ++++++++++++++----- .../dev/deliteai/datamodels/UserEventData.kt | 6 +- .../dev/deliteai/impl/DependencyContainer.kt | 10 ++-- .../dev/deliteai/impl/common/HardwareInfo.kt | 4 +- .../controllers/InternalTaskController.kt | 2 +- .../impl/controllers/NimbleNetController.kt | 14 ++--- .../deliteai/impl/coroutine/DeliteAiScope.kt | 7 +-- .../delitePy/proto/ProtoMemberExtender.kt | 6 +- .../delitePy/proto/impl/ProtoAnyWrapper.kt | 4 +- .../delitePy/proto/impl/ProtoListWrapper.kt | 4 +- .../delitePy/proto/impl/ProtoMapWrapper.kt | 4 +- .../delitePy/proto/impl/ProtoObjectWrapper.kt | 4 +- .../proto/impl/ProtoPrimitiveWrapper.kt | 4 +- .../deliteai/impl/io/ChunkDownloadManager.kt | 12 ++-- .../kotlin/dev/deliteai/impl/io/FileUtils.kt | 45 +++++++-------- .../kotlin/dev/deliteai/impl/io/Networking.kt | 4 +- .../dev/deliteai/impl/loggers/LocalLogger.kt | 2 +- .../dev/deliteai/impl/loggers/RemoteLogger.kt | 3 +- .../workManager/LogsUploadScheduler.kt | 6 +- .../loggers/workManager/LogsUploadWorker.kt | 6 +- .../impl/GoogleDynamicModuleInstaller.kt | 10 ++-- .../test/kotlin/dev/deliteai/NimbleNetTest.kt | 2 +- .../deliteai/impl/DependencyContainerTest.kt | 8 +-- .../deliteai/impl/common/HardwareInfoTest.kt | 6 +- .../impl/io/ChunkDownloadManagerTest.kt | 8 +-- .../workManager/LogsUploadSchedulerTest.kt | 10 ++-- .../workManager/LogsUploadWorkerTest.kt | 8 +-- .../dev/deliteai/testUtils/Constants.kt | 2 +- 41 files changed, 231 insertions(+), 238 deletions(-) diff --git a/sdks/android/nimblenet_ktx/build.gradle.kts b/sdks/android/nimblenet_ktx/build.gradle.kts index 2fbc2a8c..a5c8e345 100644 --- a/sdks/android/nimblenet_ktx/build.gradle.kts +++ b/sdks/android/nimblenet_ktx/build.gradle.kts @@ -41,7 +41,7 @@ android { "REMOTE_LOGGER_KEY", "REMOTE_LOGGER_URL", ), - project + project, ) } @@ -68,11 +68,7 @@ android { } // Package androidTest assets into the app APK under test - sourceSets { - getByName("androidTest") { - assets.srcDir("src/androidTest/assets") - } - } + sourceSets { getByName("androidTest") { assets.srcDir("src/androidTest/assets") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 @@ -187,7 +183,7 @@ tasks.withType().configureEach { documentedVisibilities.set( setOf( org.jetbrains.dokka.DokkaConfiguration.Visibility.PUBLIC, - org.jetbrains.dokka.DokkaConfiguration.Visibility.PROTECTED + org.jetbrains.dokka.DokkaConfiguration.Visibility.PROTECTED, ) ) @@ -212,7 +208,7 @@ tasks.named("dokkaGfm") { documentedVisibilities.set( setOf( org.jetbrains.dokka.DokkaConfiguration.Visibility.PUBLIC, - org.jetbrains.dokka.DokkaConfiguration.Visibility.PROTECTED + org.jetbrains.dokka.DokkaConfiguration.Visibility.PROTECTED, ) ) perPackageOption { diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/NimbleNetAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/NimbleNetAndroidTest.kt index 4cf937c7..4fce2b86 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/NimbleNetAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/NimbleNetAndroidTest.kt @@ -6,12 +6,12 @@ package dev.deliteai -import dev.deliteai.datamodels.NimbleNetTensor -import dev.deliteai.impl.common.DATATYPE -import dev.deliteai.testUtils.nnConfig import android.app.Application import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry +import dev.deliteai.datamodels.NimbleNetTensor +import dev.deliteai.impl.common.DATATYPE +import dev.deliteai.testUtils.nnConfig import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runBlocking import org.json.JSONArray diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/common/HardwareInfoAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/common/HardwareInfoAndroidTest.kt index 1aa7db3f..251f9312 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/common/HardwareInfoAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/common/HardwareInfoAndroidTest.kt @@ -6,13 +6,13 @@ package dev.deliteai.impl.common -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.testUtils.nnConfig import android.app.Application import android.content.Context import android.net.ConnectivityManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.testUtils.nnConfig import io.mockk.MockKAnnotations import org.json.JSONObject import org.junit.Assert.assertNotNull diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/coroutine/DeliteAiScopeAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/coroutine/DeliteAiScopeAndroidTest.kt index d92c392c..f6f0b09e 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/coroutine/DeliteAiScopeAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/coroutine/DeliteAiScopeAndroidTest.kt @@ -6,8 +6,8 @@ package dev.deliteai.impl.coroutine -import dev.deliteai.impl.common.SDK_CONSTANTS import androidx.test.ext.junit.runners.AndroidJUnit4 +import dev.deliteai.impl.common.SDK_CONSTANTS import java.util.concurrent.ThreadPoolExecutor import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExecutorCoroutineDispatcher diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerAndroidTest.kt index 655b212e..321ee741 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerAndroidTest.kt @@ -6,15 +6,15 @@ package dev.deliteai.impl.io -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.loggers.LocalLogger -import dev.deliteai.testUtils.nnConfig import android.app.Application import android.app.DownloadManager import android.content.Context import android.os.Environment import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.loggers.LocalLogger +import dev.deliteai.testUtils.nnConfig import java.io.File import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt index f05446aa..aede938c 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/io/FileUtilsAndroidTest.kt @@ -6,12 +6,12 @@ package dev.deliteai.impl.io -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.common.SDK_CONSTANTS -import dev.deliteai.testUtils.nnConfig import android.app.Application import android.os.Environment import androidx.test.core.app.ApplicationProvider +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.common.SDK_CONSTANTS +import dev.deliteai.testUtils.nnConfig import java.io.File import org.json.JSONArray import org.json.JSONObject @@ -125,7 +125,8 @@ class FileUtilsAndroidTest { @Test fun copyAssetsAndUpdatePathShouldCopyFiles() { - val assetsJsonStr = """ + val assetsJsonStr = + """ [ { "name": "workflow_script", @@ -144,7 +145,8 @@ class FileUtilsAndroidTest { } } ] - """.trimIndent() + """ + .trimIndent() val assetsJson = JSONArray(assetsJsonStr) @@ -165,7 +167,8 @@ class FileUtilsAndroidTest { @Test fun copyAssetsAndUpdatePathShouldCopyNestedAssets() { - val assetsJsonStr = """ + val assetsJsonStr = + """ [ { "name": "workflow_script", @@ -199,7 +202,8 @@ class FileUtilsAndroidTest { ] } ] - """.trimIndent() + """ + .trimIndent() val assetsJson = JSONArray(assetsJsonStr) @@ -227,7 +231,8 @@ class FileUtilsAndroidTest { @Test fun copyAssetsAndUpdatePathShouldCopyFolderRecursively() { - val assetsJsonStr = """ + val assetsJsonStr = + """ [ { "name": "llama-3", @@ -238,7 +243,8 @@ class FileUtilsAndroidTest { } } ] - """.trimIndent() + """ + .trimIndent() val assetsJson = JSONArray(assetsJsonStr) @@ -282,7 +288,8 @@ class FileUtilsAndroidTest { @Test fun copyAssetsAndUpdatePathShouldNotOverwriteExistingFiles() { - val assetsJsonStr = """ + val assetsJsonStr = + """ [ { "name": "workflow_script", @@ -293,16 +300,15 @@ class FileUtilsAndroidTest { } } ] - """.trimIndent() + """ + .trimIndent() val firstAssetsJson = JSONArray(assetsJsonStr) // First copy fileUtils.copyAssetsAndUpdatePath(firstAssetsJson) - val destPath = firstAssetsJson.getJSONObject(0) - .getJSONObject("location") - .getString("path") + val destPath = firstAssetsJson.getJSONObject(0).getJSONObject("location").getString("path") val destFile = File(destPath) assertTrue(destFile.exists()) @@ -316,9 +322,8 @@ class FileUtilsAndroidTest { val secondAssetsJson = JSONArray(assetsJsonStr) fileUtils.copyAssetsAndUpdatePath(secondAssetsJson) - val destPathSecond = secondAssetsJson.getJSONObject(0) - .getJSONObject("location") - .getString("path") + val destPathSecond = + secondAssetsJson.getJSONObject(0).getJSONObject("location").getString("path") val destFileSecond = File(destPathSecond) val lastModifiedSecond = destFileSecond.lastModified() diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/RemoteLoggerAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/RemoteLoggerAndroidTest.kt index 0caa0906..c3310ac0 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/RemoteLoggerAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/RemoteLoggerAndroidTest.kt @@ -6,10 +6,10 @@ package dev.deliteai.impl.loggers -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.testUtils.nnConfig import android.app.Application import androidx.test.core.app.ApplicationProvider +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.testUtils.nnConfig import org.json.JSONObject import org.junit.Assert.assertTrue import org.junit.Before diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadSchedulerAndroidTest.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadSchedulerAndroidTest.kt index ba2fe833..56cac928 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadSchedulerAndroidTest.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadSchedulerAndroidTest.kt @@ -6,14 +6,14 @@ package dev.deliteai.impl.loggers.workManager -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.common.WORK_MANAGER -import dev.deliteai.testUtils.nnConfig import android.app.Application import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.WorkInfo import androidx.work.WorkManager +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.common.WORK_MANAGER +import dev.deliteai.testUtils.nnConfig import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withTimeoutOrNull diff --git a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/testUtils/Constants.kt b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/testUtils/Constants.kt index 36666282..8942983d 100644 --- a/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/testUtils/Constants.kt +++ b/sdks/android/nimblenet_ktx/src/androidTest/kotlin/dev/deliteai/testUtils/Constants.kt @@ -10,14 +10,15 @@ import dev.deliteai.datamodels.NimbleNetConfig import dev.deliteai.impl.common.NIMBLENET_VARIANTS import dev.deliteai.nimblenet_ktx.BuildConfig -val nnConfig = NimbleNetConfig( - clientId = BuildConfig.ANDROID_TEST_CLIENT_ID, - host = BuildConfig.ANDROID_TEST_HOST, - deviceId = "android-test", - clientSecret = BuildConfig.ANDROID_TEST_CLIENT_SECRET, - debug = true, - initTimeOutInMs = 20000, - compatibilityTag = "android-output-verification", - libraryVariant = NIMBLENET_VARIANTS.STATIC, - online = true, -) +val nnConfig = + NimbleNetConfig( + clientId = BuildConfig.ANDROID_TEST_CLIENT_ID, + host = BuildConfig.ANDROID_TEST_HOST, + deviceId = "android-test", + clientSecret = BuildConfig.ANDROID_TEST_CLIENT_SECRET, + debug = true, + initTimeOutInMs = 20000, + compatibilityTag = "android-output-verification", + libraryVariant = NIMBLENET_VARIANTS.STATIC, + online = true, + ) diff --git a/sdks/android/nimblenet_ktx/src/internal/kotlin/dev/deliteai/NimbleNetInternal.kt b/sdks/android/nimblenet_ktx/src/internal/kotlin/dev/deliteai/NimbleNetInternal.kt index 08ce4968..895562ae 100644 --- a/sdks/android/nimblenet_ktx/src/internal/kotlin/dev/deliteai/NimbleNetInternal.kt +++ b/sdks/android/nimblenet_ktx/src/internal/kotlin/dev/deliteai/NimbleNetInternal.kt @@ -6,9 +6,9 @@ package dev.deliteai +import android.app.Application import dev.deliteai.datamodels.NimbleNetResult import dev.deliteai.impl.DependencyContainer -import android.app.Application import dev.deliteai.impl.controllers.InternalTaskController object NimbleNetInternal { diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt index adf29aa0..f801fc84 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/NimbleNet.kt @@ -72,18 +72,15 @@ import org.json.JSONObject */ object NimbleNet { - @Volatile - private lateinit var controller: NimbleNetController + @Volatile private lateinit var controller: NimbleNetController - @Volatile - private lateinit var localLogger: LocalLogger + @Volatile private lateinit var localLogger: LocalLogger /** * Initializes the NimbleNet SDK with the provided configuration. * - * This method must be called before any other NimbleNet operations. - * After calling this method, use [isReady] to check when the SDK is - * fully initialized and ready for model execution. + * This method must be called before any other NimbleNet operations. After calling this method, + * use [isReady] to check when the SDK is fully initialized and ready for model execution. * * ## Example * @@ -144,11 +141,9 @@ object NimbleNet { * * @param application The Android application context * @param config The configuration object containing client credentials and settings - * @param assetsJson The assets configuration to initialize the SDK when assets such as - * the workflow script, models etc are bundled with the app - * + * @param assetsJson The assets configuration to initialize the SDK when assets such as the + * workflow script, models etc are bundled with the app * @return [NimbleNetResult]<[Unit]> indicating success or failure - * * @see isReady * @see NimbleNetConfig * @since 1.0.0 @@ -187,9 +182,7 @@ object NimbleNet { * * @param eventMap A map containing the event data * @param eventType A string identifier for the type of event - * * @return [NimbleNetResult]<[UserEventData]> with event processing results - * * @since 1.0.0 */ fun addEvent(eventMap: Map, eventType: String): NimbleNetResult = @@ -216,9 +209,7 @@ object NimbleNet { * * @param serializedEventMap A JSON string representing the event data * @param eventType A string identifier for the type of event - * * @return [NimbleNetResult]<[UserEventData]> with event processing results - * * @since 1.0.0 */ fun addEvent(serializedEventMap: String, eventType: String): NimbleNetResult = @@ -238,9 +229,7 @@ object NimbleNet { * * @param protoEvent A [ProtoObjectWrapper] containing the Protocol Buffer message * @param eventType A string identifier for the type of event - * * @return [NimbleNetResult]<[UserEventData]> with event processing results - * * @see ProtoObjectWrapper * @since 1.0.0 */ @@ -252,8 +241,8 @@ object NimbleNet { /** * Executes a function from a workflow script written in Python. * - * The workflow script is either uploaded via the NimbleNet dashboard or loaded - * offline using the offline initialization capabilities. + * The workflow script is either uploaded via the NimbleNet dashboard or loaded offline using + * the offline initialization capabilities. * * ## Example * @@ -281,9 +270,7 @@ object NimbleNet { * * @param methodName The name of the Python function to execute from the workflow script * @param inputs A map of input tensors. Can be null for functions that don't require inputs. - * * @return [NimbleNetResult]<[HashMap]<[String], [NimbleNetTensor]>> with function outputs - * * @see NimbleNetTensor * @since 1.0.0 */ @@ -310,7 +297,6 @@ object NimbleNet { * ``` * * @return [NimbleNetResult]<[Unit]> indicating if SDK is ready - * * @see initialize * @since 1.0.0 */ @@ -323,9 +309,9 @@ object NimbleNet { */ fun restartSession() { runCatching { - checkInit() - controller.restartSession("") - } + checkInit() + controller.restartSession("") + } .onFailure(localLogger::e) } @@ -333,36 +319,31 @@ object NimbleNet { * Restarts the session with a specific session identifier. * * @param sessionId A unique identifier for the new session - * * @since 1.0.0 */ fun restartSessionWithId(sessionId: String) { runCatching { - checkInit() - controller.restartSession(sessionId) - } + checkInit() + controller.restartSession(sessionId) + } .onFailure(localLogger::e) } - /** - * Validates that the SDK has been properly initialized. - */ + /** Validates that the SDK has been properly initialized. */ private fun checkInit() { if (!this::controller.isInitialized || !controller.isNimbleNetInitialized()) { throw IllegalStateException(MESSAGES.SDK_NOT_INITIALIZED) } } - /** - * Executes a block of code with proper error handling and initialization checks. - */ + /** Executes a block of code with proper error handling and initialization checks. */ private inline fun safeCall( crossinline block: () -> NimbleNetResult ): NimbleNetResult = runCatching { - checkInit() - block() - } + checkInit() + block() + } .onFailure(localLogger::e) .getOrElse { it.toNimbleNetResult() } } diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetConfig.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetConfig.kt index 9e4e1348..17bceed9 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetConfig.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetConfig.kt @@ -30,8 +30,8 @@ import org.json.JSONObject * - [maxEventsSizeKBs]: Event data storage limit in kilobytes * - [cohortIds]: Array of cohort identifiers for A/B testing * - [showDownloadProgress]: Display download progress indicators for models in the notification bar - * - [online]: Flag to control whether the SDK should connect to cloud to download assets - * or if the assets already bundled with the app + * - [online]: Flag to control whether the SDK should connect to cloud to download assets or if the + * assets already bundled with the app * * ## Usage Examples * @@ -62,18 +62,14 @@ import org.json.JSONObject * - Use [debug] = false in production for optimal performance * * @param clientId Unique client identifier provided by NimbleNet platform. Must be a non-empty - * string obtained from your NimbleNet account. - * Default: "" (empty string) + * string obtained from your NimbleNet account. Default: "" (empty string) * @param clientSecret Authentication secret key for API access. Keep this value secure and never - * expose it in logs or client-side code. - * Default: "" (empty string) + * expose it in logs or client-side code. Default: "" (empty string) * @param host The base URL of the NimbleNet platform API endpoint. Must be a valid HTTPS URL (e.g., - * "https://api.nimblenet.ai"). - * Default: "" (empty string) + * "https://api.nimblenet.ai"). Default: "" (empty string) * @param deviceId Unique identifier for this device or application installation. Can be a UUID, * device fingerprint, or custom identifier. Should remain consistent across app sessions for the - * same device. - * Default: "" (empty string) + * same device. Default: "" (empty string) * @param debug Enable debug mode for detailed logging and diagnostics. Set to false in production * builds for optimal performance. Default: false * @param initTimeOutInMs Maximum time in milliseconds to wait for SDK initialization. Default: @@ -95,9 +91,8 @@ import org.json.JSONObject * based on your app distribution and size requirements. Default: NIMBLENET_VARIANTS.STATIC * @param showDownloadProgress Whether to display progress indicators during model downloads. * Default: false - * @param online Whether the assets will be downloaded from cloud or they are - * already bundled with the app - * Default: false + * @param online Whether the assets will be downloaded from cloud or they are already bundled + * with the app Default: false * @see NIMBLENET_VARIANTS * @see SDK_CONSTANTS * @since 1.0.0 diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetResult.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetResult.kt index f3bf54b5..fd553094 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetResult.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetResult.kt @@ -11,9 +11,9 @@ import dev.deliteai.impl.common.ERROR_CODES /** * Represents error information for failed NimbleNet operations. * - * This class encapsulates error details returned by the NimbleNet SDK when operations fail. - * It provides both a numeric error code for programmatic handling and a human-readable - * message for debugging and logging purposes. + * This class encapsulates error details returned by the NimbleNet SDK when operations fail. It + * provides both a numeric error code for programmatic handling and a human-readable message for + * debugging and logging purposes. * * ## Usage Example * @@ -25,11 +25,9 @@ import dev.deliteai.impl.common.ERROR_CODES * } * ``` * - * @param code Numeric error code identifying the specific type of error. - * Defaults to [ERROR_CODES.KOTLIN_ERROR] if not specified. - * @param message Human-readable description of the error. - * May be empty if not specified. - * + * @param code Numeric error code identifying the specific type of error. Defaults to + * [ERROR_CODES.KOTLIN_ERROR] if not specified. + * @param message Human-readable description of the error. May be empty if not specified. * @see ERROR_CODES * @see NimbleNetResult * @since 1.0.0 @@ -54,9 +52,9 @@ class NimbleNetError(var code: Int = ERROR_CODES.KOTLIN_ERROR, var message: Stri /** * Generic result wrapper for all NimbleNet SDK operations. * - * This class provides a consistent way to handle both successful and failed operations - * across the entire NimbleNet SDK. It encapsulates success status, payload data, - * and error information in a single object. + * This class provides a consistent way to handle both successful and failed operations across the + * entire NimbleNet SDK. It encapsulates success status, payload data, and error information in a + * single object. * * ## Result States * @@ -86,11 +84,10 @@ class NimbleNetError(var code: Int = ERROR_CODES.KOTLIN_ERROR, var message: Stri * * @param T The type of data contained in the payload when the operation succeeds * @param status Boolean indicating whether the operation succeeded (true) or failed (false). - * @param payload The actual result data when the operation succeeds. - * Will be null for failed operations. - * @param error Detailed error information when the operation fails. - * Will be null for successful operations. - * + * @param payload The actual result data when the operation succeeds. Will be null for failed + * operations. + * @param error Detailed error information when the operation fails. Will be null for successful + * operations. * @see NimbleNetError * @since 1.0.0 */ diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetTensor.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetTensor.kt index b0be1bc4..5b86a42b 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetTensor.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/NimbleNetTensor.kt @@ -8,8 +8,9 @@ package dev.deliteai.datamodels import dev.deliteai.impl.common.DATATYPE /** - * Multi-type tensor for ML data in NimbleNet SDK. - * Supports primitives, arrays, JSON, protobufs, and functions. + * Multi-type tensor for ML data in NimbleNet SDK. Supports primitives, arrays, JSON, protobufs, and + * functions. + * * @property data actual tensor data (nullable for outputs) * @property datatype enum indicating data interpretation * @property shape optional dimensions (null or empty for scalars) @@ -21,67 +22,93 @@ class NimbleNetTensor { /** Scalar Int tensor (32-bit). */ constructor(data: Int, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.INT32; this.shape = shape + this.data = data + this.datatype = DATATYPE.INT32 + this.shape = shape } /** Scalar Long tensor (64-bit). */ constructor(data: Long, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.INT64; this.shape = shape + this.data = data + this.datatype = DATATYPE.INT64 + this.shape = shape } /** Scalar Float tensor (32-bit). */ constructor(data: Float, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.FLOAT; this.shape = shape + this.data = data + this.datatype = DATATYPE.FLOAT + this.shape = shape } /** Scalar Double tensor (64-bit). */ constructor(data: Double, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.DOUBLE; this.shape = shape + this.data = data + this.datatype = DATATYPE.DOUBLE + this.shape = shape } /** Scalar Boolean tensor. */ constructor(data: Boolean, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.BOOL; this.shape = shape + this.data = data + this.datatype = DATATYPE.BOOL + this.shape = shape } /** Scalar String tensor. */ constructor(data: String, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.STRING; this.shape = shape + this.data = data + this.datatype = DATATYPE.STRING + this.shape = shape } /** Array of Ints tensor. */ constructor(data: IntArray, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.INT32; this.shape = shape + this.data = data + this.datatype = DATATYPE.INT32 + this.shape = shape } /** Array of Longs tensor. */ constructor(data: LongArray, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.INT64; this.shape = shape + this.data = data + this.datatype = DATATYPE.INT64 + this.shape = shape } /** Array of Floats tensor. */ constructor(data: FloatArray, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.FLOAT; this.shape = shape + this.data = data + this.datatype = DATATYPE.FLOAT + this.shape = shape } /** Array of Doubles tensor. */ constructor(data: DoubleArray, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.DOUBLE; this.shape = shape + this.data = data + this.datatype = DATATYPE.DOUBLE + this.shape = shape } /** Array of Booleans tensor. */ constructor(data: BooleanArray, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.BOOL; this.shape = shape + this.data = data + this.datatype = DATATYPE.BOOL + this.shape = shape } /** Custom type by int code. */ constructor(data: Any?, datatypeInt: Int, shape: IntArray? = null) { - this.data = data; this.datatype = DATATYPE.fromInt(datatypeInt); this.shape = shape + this.data = data + this.datatype = DATATYPE.fromInt(datatypeInt) + this.shape = shape } /** Explicit datatype constructor. */ constructor(data: Any?, datatype: DATATYPE, shape: IntArray? = null) { - this.data = data; this.datatype = datatype; this.shape = shape + this.data = data + this.datatype = datatype + this.shape = shape } /** Numeric representation of datatype. */ diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/UserEventData.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/UserEventData.kt index ad5f3c80..6561960b 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/UserEventData.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/datamodels/UserEventData.kt @@ -9,9 +9,8 @@ package dev.deliteai.datamodels /** * Data container for user event information returned by the NimbleNet SDK. * - * This data class encapsulates information about events that have been - * processed by the NimbleNet platform. It contains the event type and - * the serialized event data. + * This data class encapsulates information about events that have been processed by the NimbleNet + * platform. It contains the event type and the serialized event data. * * ## Usage Example * @@ -34,7 +33,6 @@ package dev.deliteai.datamodels * * @param eventType The classification or category of the recorded event. * @param eventJsonString The serialized JSON representation of the event data. - * * @see NimbleNet.addEvent * @see NimbleNetResult * @since 1.0.0 diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/DependencyContainer.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/DependencyContainer.kt index c99d97c9..8fe9c74f 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/DependencyContainer.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/DependencyContainer.kt @@ -6,6 +6,11 @@ package dev.deliteai.impl +import android.app.Application +import android.app.DownloadManager +import android.content.Context +import com.google.android.play.core.splitinstall.SplitInstallManager +import com.google.android.play.core.splitinstall.SplitInstallManagerFactory import dev.deliteai.datamodels.NimbleNetConfig import dev.deliteai.impl.common.HardwareInfo import dev.deliteai.impl.common.NIMBLENET_VARIANTS @@ -25,11 +30,6 @@ import dev.deliteai.impl.moduleInstallers.impl.GoogleDynamicModuleInstaller import dev.deliteai.impl.moduleInstallers.impl.StaticModuleInstaller import dev.deliteai.impl.nativeBridge.CoreRuntime import dev.deliteai.impl.nativeBridge.impl.CoreRuntimeImpl -import android.app.Application -import android.app.DownloadManager -import android.content.Context -import com.google.android.play.core.splitinstall.SplitInstallManager -import com.google.android.play.core.splitinstall.SplitInstallManagerFactory import okhttp3.OkHttpClient internal class DependencyContainer diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/common/HardwareInfo.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/common/HardwareInfo.kt index f13c8db3..0cf0b8e2 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/common/HardwareInfo.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/common/HardwareInfo.kt @@ -6,8 +6,6 @@ package dev.deliteai.impl.common -import dev.deliteai.impl.common.utils.EnvironmentDelegate -import dev.deliteai.impl.loggers.LocalLogger import android.Manifest.permission import android.annotation.SuppressLint import android.app.ActivityManager @@ -25,6 +23,8 @@ import android.system.Os import android.system.OsConstants import android.telephony.TelephonyManager import androidx.core.content.ContextCompat +import dev.deliteai.impl.common.utils.EnvironmentDelegate +import dev.deliteai.impl.loggers.LocalLogger import org.json.JSONObject internal class HardwareInfo( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/InternalTaskController.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/InternalTaskController.kt index aa8af3b7..cce7cdd5 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/InternalTaskController.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/InternalTaskController.kt @@ -6,10 +6,10 @@ package dev.deliteai.impl.controllers +import android.app.Application import dev.deliteai.datamodels.NimbleNetResult import dev.deliteai.impl.io.FileUtils import dev.deliteai.impl.nativeBridge.CoreRuntime -import android.app.Application internal class InternalTaskController( private val application: Application, diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt index bbea4994..38256f41 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/controllers/NimbleNetController.kt @@ -24,10 +24,10 @@ import dev.deliteai.impl.io.FileUtils import dev.deliteai.impl.loggers.RemoteLogger import dev.deliteai.impl.moduleInstallers.ModuleInstaller import dev.deliteai.impl.nativeBridge.CoreRuntime +import java.util.concurrent.atomic.AtomicBoolean import kotlinx.coroutines.runBlocking import org.json.JSONArray import org.json.JSONObject -import java.util.concurrent.atomic.AtomicBoolean internal class NimbleNetController( private val application: Application, @@ -45,9 +45,8 @@ internal class NimbleNetController( @Synchronized fun initialize(config: NimbleNetConfig, assetsJson: JSONArray? = null): NimbleNetResult = runBlocking(deliteAiScope.secondary.coroutineContext) { - if (!config.online && assetsJson == null) throw Exception( - "assetsJson can't be null during offline mode" - ) + if (!config.online && assetsJson == null) + throw Exception("assetsJson can't be null during offline mode") val result = NimbleNetResult(payload = null) val storageInfo = fileUtils.getInternalStorageFolderSizes() @@ -56,11 +55,10 @@ internal class NimbleNetController( config.setInternalDeviceId(hardwareInfo.getInternalDeviceId()) moduleInstaller.execute() - //deep copy so that the user's assetsJson doesn't change - val modifiedAssetsJson = assetsJson - ?.let { JSONArray(it.toString()) } + // deep copy so that the user's assetsJson doesn't change + val modifiedAssetsJson = assetsJson?.let { JSONArray(it.toString()) } - //no-op during assetJson == null + // no-op during assetJson == null fileUtils.copyAssetsAndUpdatePath(modifiedAssetsJson) coreRuntime.initializeNimbleNet( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/coroutine/DeliteAiScope.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/coroutine/DeliteAiScope.kt index 8ffb39c1..6607e4d9 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/coroutine/DeliteAiScope.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/coroutine/DeliteAiScope.kt @@ -6,8 +6,8 @@ package dev.deliteai.impl.coroutine -import dev.deliteai.impl.common.SDK_CONSTANTS import androidx.annotation.VisibleForTesting +import dev.deliteai.impl.common.SDK_CONSTANTS import java.util.concurrent.Executors import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope @@ -17,10 +17,7 @@ internal class DeliteAiScope { val primary = getScope("primaryDeliteAiScope", SDK_CONSTANTS.NUM_THREADS_FOR_PRIMARY_COROUTINE_SCOPE) val secondary = - getScope( - "secondaryDeliteAiScope", - SDK_CONSTANTS.NUM_THREADS_FOR_SECONDARY_COROUTINE_SCOPE, - ) + getScope("secondaryDeliteAiScope", SDK_CONSTANTS.NUM_THREADS_FOR_SECONDARY_COROUTINE_SCOPE) @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun getScope(name: String, numThreads: Int): CoroutineScope { diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/ProtoMemberExtender.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/ProtoMemberExtender.kt index eacefd7f..b328700c 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/ProtoMemberExtender.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/ProtoMemberExtender.kt @@ -6,6 +6,9 @@ package dev.deliteai.impl.delitePy.proto +import com.google.protobuf.Descriptors +import com.google.protobuf.MessageOrBuilder +import com.google.protobuf.util.JsonFormat.TypeRegistry import dev.deliteai.impl.common.DATATYPE import dev.deliteai.impl.delitePy.proto.impl.ProtoAnyWrapper import dev.deliteai.impl.delitePy.proto.impl.ProtoListWrapper @@ -13,9 +16,6 @@ import dev.deliteai.impl.delitePy.proto.impl.ProtoMapWrapper import dev.deliteai.impl.delitePy.proto.impl.ProtoNullWrapper import dev.deliteai.impl.delitePy.proto.impl.ProtoObjectWrapper import dev.deliteai.impl.delitePy.proto.impl.ProtoPrimitiveWrapper -import com.google.protobuf.Descriptors -import com.google.protobuf.MessageOrBuilder -import com.google.protobuf.util.JsonFormat.TypeRegistry import org.json.JSONArray import org.json.JSONObject diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoAnyWrapper.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoAnyWrapper.kt index 71b95f77..1ef8795c 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoAnyWrapper.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoAnyWrapper.kt @@ -6,8 +6,6 @@ package dev.deliteai.impl.delitePy.proto.impl -import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender -import dev.deliteai.impl.delitePy.proto.ProtoObject import com.google.protobuf.ByteString import com.google.protobuf.Descriptors import com.google.protobuf.Descriptors.FieldDescriptor @@ -15,6 +13,8 @@ import com.google.protobuf.DynamicMessage import com.google.protobuf.Message import com.google.protobuf.MessageOrBuilder import com.google.protobuf.util.JsonFormat +import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender +import dev.deliteai.impl.delitePy.proto.ProtoObject class ProtoAnyWrapper( private var protoOrBuilder: MessageOrBuilder, diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoListWrapper.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoListWrapper.kt index 49c5d661..a2ec7542 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoListWrapper.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoListWrapper.kt @@ -6,12 +6,12 @@ package dev.deliteai.impl.delitePy.proto.impl -import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender -import dev.deliteai.impl.delitePy.proto.ProtoObject import com.google.protobuf.Descriptors import com.google.protobuf.Descriptors.FieldDescriptor import com.google.protobuf.MessageOrBuilder import com.google.protobuf.util.JsonFormat +import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender +import dev.deliteai.impl.delitePy.proto.ProtoObject import org.json.JSONArray class ProtoListWrapper( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoMapWrapper.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoMapWrapper.kt index 76ecb277..3a4e5ca1 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoMapWrapper.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoMapWrapper.kt @@ -6,8 +6,6 @@ package dev.deliteai.impl.delitePy.proto.impl -import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender -import dev.deliteai.impl.delitePy.proto.ProtoObject import com.google.protobuf.Descriptors import com.google.protobuf.Descriptors.FieldDescriptor import com.google.protobuf.DynamicMessage @@ -15,6 +13,8 @@ import com.google.protobuf.MapEntry import com.google.protobuf.MessageOrBuilder import com.google.protobuf.util.JsonFormat import com.google.protobuf.util.JsonFormat.TypeRegistry +import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender +import dev.deliteai.impl.delitePy.proto.ProtoObject import org.json.JSONObject class ProtoMapWrapper( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoObjectWrapper.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoObjectWrapper.kt index 931ee5bb..c39c5c04 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoObjectWrapper.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoObjectWrapper.kt @@ -6,13 +6,13 @@ package dev.deliteai.impl.delitePy.proto.impl -import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender -import dev.deliteai.impl.delitePy.proto.ProtoObject import com.google.protobuf.Descriptors import com.google.protobuf.Descriptors.FieldDescriptor import com.google.protobuf.Message import com.google.protobuf.MessageOrBuilder import com.google.protobuf.util.JsonFormat +import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender +import dev.deliteai.impl.delitePy.proto.ProtoObject import java.util.concurrent.ConcurrentHashMap class ProtoObjectWrapper( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoPrimitiveWrapper.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoPrimitiveWrapper.kt index 9b70d55e..057fefe7 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoPrimitiveWrapper.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/delitePy/proto/impl/ProtoPrimitiveWrapper.kt @@ -6,11 +6,11 @@ package dev.deliteai.impl.delitePy.proto.impl +import com.google.protobuf.Descriptors +import com.google.protobuf.Descriptors.FieldDescriptor.JavaType import dev.deliteai.impl.common.DATATYPE import dev.deliteai.impl.delitePy.proto.ProtoMemberExtender import dev.deliteai.impl.delitePy.proto.ProtoObject -import com.google.protobuf.Descriptors -import com.google.protobuf.Descriptors.FieldDescriptor.JavaType class ProtoPrimitiveWrapper(val value: Any?, override var modified: Boolean = false) : ProtoMemberExtender { diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/ChunkDownloadManager.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/ChunkDownloadManager.kt index 722c17b4..b12347b6 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/ChunkDownloadManager.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/ChunkDownloadManager.kt @@ -6,6 +6,12 @@ package dev.deliteai.impl.io +import android.annotation.SuppressLint +import android.app.Application +import android.app.DownloadManager +import android.net.Uri +import android.os.Environment +import androidx.annotation.VisibleForTesting import dev.deliteai.impl.common.ERROR_CODES.DM_UNABLE_TO_CREATE_REQUEST import dev.deliteai.impl.common.STATUS_CODES import dev.deliteai.impl.common.utils.jsonStringToHeaders @@ -13,12 +19,6 @@ import dev.deliteai.impl.io.datamodels.DownloadManagerCursor import dev.deliteai.impl.io.datamodels.DownloadTask import dev.deliteai.impl.io.datamodels.FileDownloadStateTransition import dev.deliteai.impl.loggers.LocalLogger -import android.annotation.SuppressLint -import android.app.Application -import android.app.DownloadManager -import android.net.Uri -import android.os.Environment -import androidx.annotation.VisibleForTesting import java.io.File internal class ChunkDownloadManager( diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt index dcd573fd..c064a312 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/FileUtils.kt @@ -27,26 +27,26 @@ internal class FileUtils( fun getInternalStorageFolderSizes(): String? = runCatching { - val parent = application.filesDir.resolve(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME) - val sizes = buildMap { - put(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME, parent.folderSize()) - listOf("metrics", "logs").forEach { name -> - put(name, parent.resolve(name).takeIf(File::exists)?.folderSize() ?: 0L) + val parent = application.filesDir.resolve(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME) + val sizes = buildMap { + put(SDK_CONSTANTS.NIMBLE_SDK_FOLDER_NAME, parent.folderSize()) + listOf("metrics", "logs").forEach { name -> + put(name, parent.resolve(name).takeIf(File::exists)?.folderSize() ?: 0L) + } } + JSONObject(sizes).toString() } - JSONObject(sizes).toString() - } .onFailure { localLogger.e(it) } .getOrNull() fun moveFile(source: File, dest: File): Boolean = runCatching { - source.inputStream().use { it.copyTo(dest.outputStream()) } - if (!source.delete()) { - localLogger.d("Failed to delete the source file") + source.inputStream().use { it.copyTo(dest.outputStream()) } + if (!source.delete()) { + localLogger.d("Failed to delete the source file") + } + true } - true - } .onFailure { localLogger.e(it) } .getOrDefault(false) @@ -61,8 +61,8 @@ internal class FileUtils( fun copyAssetsAndUpdatePath(assetsJson: JSONArray?) { if (assetsJson == null) return - val targetDir = File(getSDKDirPath(), DELITE_ASSETS_TEMP_STORAGE) - .apply { if (!exists()) mkdirs() } + val targetDir = + File(getSDKDirPath(), DELITE_ASSETS_TEMP_STORAGE).apply { if (!exists()) mkdirs() } val filesToRetain = mutableSetOf() @@ -95,8 +95,12 @@ internal class FileUtils( pruneStaleAssets(targetDir, filesToRetain) } - private fun constructTargetFile(targetDir: File, src: String, name: String, version: String): - File { + private fun constructTargetFile( + targetDir: File, + src: String, + name: String, + version: String, + ): File { val ext = File(src).extension val filename = "${name}_${version}" + if (ext.isNotBlank()) ".$ext" else "" @@ -106,17 +110,12 @@ internal class FileUtils( private fun copyAssetFile(src: String, target: File) { if (!target.exists()) { assetManager.open(src).use { input -> - FileOutputStream(target).use { output -> - input.copyTo(output) - } + FileOutputStream(target).use { output -> input.copyTo(output) } } } } - private fun copyAssetFolderRecursively( - src: String, - target: File - ) { + private fun copyAssetFolderRecursively(src: String, target: File) { if (!target.exists()) target.mkdirs() val children = assetManager.list(src) ?: return diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/Networking.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/Networking.kt index 022ab78a..1eb9333d 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/Networking.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/io/Networking.kt @@ -6,6 +6,8 @@ package dev.deliteai.impl.io +import android.annotation.SuppressLint +import androidx.annotation.VisibleForTesting import dev.deliteai.impl.common.STATUS_CODES import dev.deliteai.impl.common.utils.jsonStringToHeaders import dev.deliteai.impl.io.datamodels.FileDownloadStateTransition @@ -13,8 +15,6 @@ import dev.deliteai.impl.io.datamodels.NetworkResponse import dev.deliteai.impl.io.datamodels.emptyNetworkResponse import dev.deliteai.impl.io.datamodels.toNetworkResponse import dev.deliteai.impl.loggers.LocalLogger -import android.annotation.SuppressLint -import androidx.annotation.VisibleForTesting import java.util.concurrent.TimeUnit import kotlinx.coroutines.delay import okhttp3.Headers diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/LocalLogger.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/LocalLogger.kt index 9ac5b7f7..c3f33092 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/LocalLogger.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/LocalLogger.kt @@ -6,8 +6,8 @@ package dev.deliteai.impl.loggers -import dev.deliteai.impl.common.SDK_CONSTANTS import android.util.Log +import dev.deliteai.impl.common.SDK_CONSTANTS internal class LocalLogger { fun d(msg: String) { diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/RemoteLogger.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/RemoteLogger.kt index e5473ef3..828463fe 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/RemoteLogger.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/RemoteLogger.kt @@ -6,12 +6,11 @@ package dev.deliteai.impl.loggers +import android.annotation.SuppressLint import dev.deliteai.datamodels.NimbleNetConfig import dev.deliteai.impl.common.HardwareInfo -import dev.deliteai.impl.common.SDK_CONSTANTS import dev.deliteai.impl.io.Networking import dev.deliteai.impl.nativeBridge.CoreRuntime -import android.annotation.SuppressLint import dev.deliteai.nimblenet_ktx.BuildConfig import java.text.SimpleDateFormat import java.util.Collections diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadScheduler.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadScheduler.kt index 698c1b85..0538fcb5 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadScheduler.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadScheduler.kt @@ -6,9 +6,6 @@ package dev.deliteai.impl.loggers.workManager -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.common.WORK_MANAGER -import dev.deliteai.impl.common.WORK_MANAGER.WM_LOGS_UPLOAD_PAYLOAD_ID import android.app.Application import androidx.work.BackoffPolicy import androidx.work.Constraints @@ -18,6 +15,9 @@ import androidx.work.OneTimeWorkRequest import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import androidx.work.workDataOf +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.common.WORK_MANAGER +import dev.deliteai.impl.common.WORK_MANAGER.WM_LOGS_UPLOAD_PAYLOAD_ID import java.util.concurrent.TimeUnit internal class LogsUploadScheduler(private val application: Application) { diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadWorker.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadWorker.kt index de9f8473..fee42fe8 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadWorker.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/loggers/workManager/LogsUploadWorker.kt @@ -6,13 +6,13 @@ package dev.deliteai.impl.loggers.workManager -import dev.deliteai.datamodels.NimbleNetConfig -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.common.WORK_MANAGER.WM_LOGS_UPLOAD_PAYLOAD_ID import android.app.Application import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkerParameters +import dev.deliteai.datamodels.NimbleNetConfig +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.common.WORK_MANAGER.WM_LOGS_UPLOAD_PAYLOAD_ID import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext diff --git a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/moduleInstallers/impl/GoogleDynamicModuleInstaller.kt b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/moduleInstallers/impl/GoogleDynamicModuleInstaller.kt index 008a192a..a029bb87 100644 --- a/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/moduleInstallers/impl/GoogleDynamicModuleInstaller.kt +++ b/sdks/android/nimblenet_ktx/src/main/kotlin/dev/deliteai/impl/moduleInstallers/impl/GoogleDynamicModuleInstaller.kt @@ -6,6 +6,11 @@ package dev.deliteai.impl.moduleInstallers.impl +import android.os.SystemClock +import com.google.android.play.core.splitinstall.SplitInstallManager +import com.google.android.play.core.splitinstall.SplitInstallRequest +import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener +import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus import dev.deliteai.impl.common.METRIC_TYPE import dev.deliteai.impl.common.SDK_CONSTANTS import dev.deliteai.impl.common.SHARED_PREFERENCES @@ -14,11 +19,6 @@ import dev.deliteai.impl.io.AppPreferencesStore import dev.deliteai.impl.loggers.LocalLogger import dev.deliteai.impl.loggers.RemoteLogger import dev.deliteai.impl.moduleInstallers.ModuleInstaller -import android.os.SystemClock -import com.google.android.play.core.splitinstall.SplitInstallManager -import com.google.android.play.core.splitinstall.SplitInstallRequest -import com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener -import com.google.android.play.core.splitinstall.model.SplitInstallSessionStatus internal class GoogleDynamicModuleInstaller( private val splitInstallManager: SplitInstallManager, diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/NimbleNetTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/NimbleNetTest.kt index 67731658..5ad55d16 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/NimbleNetTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/NimbleNetTest.kt @@ -6,13 +6,13 @@ package dev.deliteai +import android.app.Application import dev.deliteai.impl.DependencyContainer import dev.deliteai.impl.common.MESSAGES import dev.deliteai.impl.controllers.NimbleNetController import dev.deliteai.impl.delitePy.proto.impl.ProtoObjectWrapper import dev.deliteai.impl.loggers.LocalLogger import dev.deliteai.testUtils.nnConfig -import android.app.Application import io.mockk.MockKAnnotations import io.mockk.clearMocks import io.mockk.every diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/DependencyContainerTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/DependencyContainerTest.kt index 9d7f5e50..254f3266 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/DependencyContainerTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/DependencyContainerTest.kt @@ -6,6 +6,10 @@ package dev.deliteai.impl +import android.app.Application +import android.app.DownloadManager +import android.content.Context +import android.content.SharedPreferences import dev.deliteai.impl.common.HardwareInfo import dev.deliteai.impl.controllers.InternalTaskController import dev.deliteai.impl.controllers.NimbleNetController @@ -15,10 +19,6 @@ import dev.deliteai.impl.io.Networking import dev.deliteai.impl.loggers.LocalLogger import dev.deliteai.impl.moduleInstallers.ModuleInstaller import dev.deliteai.testUtils.nnConfig -import android.app.Application -import android.app.DownloadManager -import android.content.Context -import android.content.SharedPreferences import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.mockk diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/common/HardwareInfoTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/common/HardwareInfoTest.kt index b8e05eac..6ec5eed1 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/common/HardwareInfoTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/common/HardwareInfoTest.kt @@ -6,9 +6,6 @@ package dev.deliteai.impl.common -import dev.deliteai.impl.common.utils.EnvironmentDelegate -import dev.deliteai.impl.loggers.LocalLogger -import dev.deliteai.testUtils.Reflection import android.app.ActivityManager import android.app.Application import android.content.Context @@ -21,6 +18,9 @@ import android.system.Os import android.system.OsConstants import android.telephony.TelephonyManager import androidx.core.content.ContextCompat +import dev.deliteai.impl.common.utils.EnvironmentDelegate +import dev.deliteai.impl.loggers.LocalLogger +import dev.deliteai.testUtils.Reflection import io.mockk.MockKAnnotations import io.mockk.clearAllMocks import io.mockk.every diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerTest.kt index 37baa105..0f4252a5 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/io/ChunkDownloadManagerTest.kt @@ -6,14 +6,14 @@ package dev.deliteai.impl.io -import dev.deliteai.impl.common.STATUS_CODES -import dev.deliteai.impl.io.datamodels.DownloadManagerCursor -import dev.deliteai.impl.io.datamodels.DownloadTask -import dev.deliteai.impl.loggers.LocalLogger import android.app.Application import android.app.DownloadManager import android.database.Cursor import android.os.Environment +import dev.deliteai.impl.common.STATUS_CODES +import dev.deliteai.impl.io.datamodels.DownloadManagerCursor +import dev.deliteai.impl.io.datamodels.DownloadTask +import dev.deliteai.impl.loggers.LocalLogger import io.mockk.every import io.mockk.mockk import io.mockk.slot diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadSchedulerTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadSchedulerTest.kt index 7da8bb2c..86b2544e 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadSchedulerTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadSchedulerTest.kt @@ -6,11 +6,6 @@ package dev.deliteai.impl.logger.workManager -import dev.deliteai.impl.DependencyContainer -import dev.deliteai.impl.common.WORK_MANAGER -import dev.deliteai.impl.loggers.LocalLogger -import dev.deliteai.impl.loggers.workManager.LogsUploadScheduler -import dev.deliteai.impl.loggers.workManager.LogsUploadWorker import android.app.Application import androidx.work.BackoffPolicy import androidx.work.Constraints @@ -18,6 +13,11 @@ import androidx.work.ExistingWorkPolicy import androidx.work.NetworkType import androidx.work.OneTimeWorkRequest import androidx.work.WorkManager +import dev.deliteai.impl.DependencyContainer +import dev.deliteai.impl.common.WORK_MANAGER +import dev.deliteai.impl.loggers.LocalLogger +import dev.deliteai.impl.loggers.workManager.LogsUploadScheduler +import dev.deliteai.impl.loggers.workManager.LogsUploadWorker import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.mockk diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadWorkerTest.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadWorkerTest.kt index 349edeba..9d288608 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadWorkerTest.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/impl/logger/workManager/LogsUploadWorkerTest.kt @@ -6,6 +6,10 @@ package dev.deliteai.impl.logger.workManager +import android.app.Application +import androidx.work.Data +import androidx.work.ListenableWorker.Result +import androidx.work.WorkerParameters import dev.deliteai.datamodels.NimbleNetConfig import dev.deliteai.impl.DependencyContainer import dev.deliteai.impl.common.WORK_MANAGER.WM_LOGS_UPLOAD_PAYLOAD_ID @@ -13,10 +17,6 @@ import dev.deliteai.impl.controllers.InternalTaskController import dev.deliteai.impl.loggers.workManager.LogsUploadWorker import dev.deliteai.impl.moduleInstallers.ModuleInstaller import dev.deliteai.testUtils.nnConfig -import android.app.Application -import androidx.work.Data -import androidx.work.ListenableWorker.Result -import androidx.work.WorkerParameters import io.mockk.MockKAnnotations import io.mockk.Runs import io.mockk.coEvery diff --git a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/testUtils/Constants.kt b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/testUtils/Constants.kt index ed526f90..ee77ad36 100644 --- a/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/testUtils/Constants.kt +++ b/sdks/android/nimblenet_ktx/src/test/kotlin/dev/deliteai/testUtils/Constants.kt @@ -19,5 +19,5 @@ val nnConfig = initTimeOutInMs = 1000000000, compatibilityTag = "test", libraryVariant = NIMBLENET_VARIANTS.STATIC, - online = true + online = true, ) From 7dc2efa74d4a3af0e01307b249804ea29e15fb8c Mon Sep 17 00:00:00 2001 From: acinaction Date: Fri, 18 Jul 2025 13:15:28 +0530 Subject: [PATCH 11/20] Added a hyperlink for ONNX (#141) Signed-off-by: Arsh Chauhan Signed-off-by: Suryansh Bisen --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 484760f6..8c67ebd6 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ on mobile devices. ### Extensibility - Easy integration of custom Python operators -- Flexible runtime support (ONNX or ExecuTorch) +- Flexible runtime support ([ONNX](https://onnx.ai/) or ExecuTorch) ## Getting Started To get started you can: From c6af2ea8bbf1e34537d015fb85667e8e4c9e1a30 Mon Sep 17 00:00:00 2001 From: sandeep14k <143644790+sandeep14k@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:24:23 +0530 Subject: [PATCH 12/20] Add step to clean build directory before running tests (#140) Signed-off-by: Sandeep Kumar Signed-off-by: Suryansh Bisen --- coreruntime/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/coreruntime/README.md b/coreruntime/README.md index 0236a71f..337706de 100644 --- a/coreruntime/README.md +++ b/coreruntime/README.md @@ -45,6 +45,7 @@ Pre-requisite: Setup mockserver by following the steps at [MockServerDocs](../mo ### Run Coreruntime tests ```sh cd $GIT_ROOT/coreruntime +rm -rf build python3 build.py --testing cd build ./nimbletest @@ -63,6 +64,7 @@ Pre-requisite: For linux since we are using Clang for compilation, appropriate g ### Run for nimbletest: ```sh cd $GIT_ROOT/coreruntime +rm -rf build python3 build.py --testing --coverage cd build ./nimbletest From 68269b417965f712c67b7187c1c0ad1b2da99172 Mon Sep 17 00:00:00 2001 From: ashishkj23 <158827883+ashishkj23@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:26:31 +0530 Subject: [PATCH 13/20] changed file build/nimbleclient to build/nimble_client/nimble_client (#146) Signed-off-by: Ashish Kumar Jha Signed-off-by: Suryansh Bisen --- coreruntime/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coreruntime/README.md b/coreruntime/README.md index 337706de..d4454479 100644 --- a/coreruntime/README.md +++ b/coreruntime/README.md @@ -26,7 +26,7 @@ Navigate to `$GIT_ROOT/coreruntime` and run: ```sh python3 build.py ``` -This will compile an executable `build/nimbleclient` from `main.cpp`. +This will compile an executable `build/nimble_client/nimble_client` from `main.cpp`. ### Build python SDK Pre-requisite: From 857a6c5dea24571e34d6902edccf6c113f05b5f1 Mon Sep 17 00:00:00 2001 From: Dhruv Kejriwal Date: Fri, 18 Jul 2025 13:32:31 +0530 Subject: [PATCH 14/20] Fixed coming soon (#148) Signed-off-by: Dhruv Kejriwal Signed-off-by: Suryansh Bisen --- docs/deliteai.dev/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deliteai.dev/index.md b/docs/deliteai.dev/index.md index a4301496..e53f5537 100644 --- a/docs/deliteai.dev/index.md +++ b/docs/deliteai.dev/index.md @@ -43,7 +43,7 @@ Visit the [assistant](https://github.com/NimbleEdge/assistant) repo to see it al ## Documentation -[Coming Soon] +Explore our documentation at [deliteai.dev](https://deliteai.dev) ## Community engagement From 9f58dfc705f91a07622483bf518aed3685283382 Mon Sep 17 00:00:00 2001 From: divyaman-pal <147003864+divyaman-pal@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:34:22 +0530 Subject: [PATCH 15/20] added command to set GIT_ROOT (#144) --------- Signed-off-by: divyaman pal Co-authored-by: Neeraj Poddar Signed-off-by: Suryansh Bisen --- coreruntime/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/coreruntime/README.md b/coreruntime/README.md index d4454479..4c39335b 100644 --- a/coreruntime/README.md +++ b/coreruntime/README.md @@ -24,6 +24,7 @@ pip3 install -r requirements.txt ### Build Coreruntime Navigate to `$GIT_ROOT/coreruntime` and run: ```sh +export GIT_ROOT=$(git rev-parse --show-toplevel) python3 build.py ``` This will compile an executable `build/nimble_client/nimble_client` from `main.cpp`. From 91d81b14ec055b9e88fe9409eaea0fe2cd5096ec Mon Sep 17 00:00:00 2001 From: TaladaJaswanth <138481759+TaladaJaswanth@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:35:16 +0530 Subject: [PATCH 16/20] The hyperlink for onnx in docs/deliteai.dev/index.md has been ADDED (#150) Signed-off-by: talada jaswanth Signed-off-by: Suryansh Bisen --- docs/deliteai.dev/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deliteai.dev/index.md b/docs/deliteai.dev/index.md index e53f5537..3e7b4b5c 100644 --- a/docs/deliteai.dev/index.md +++ b/docs/deliteai.dev/index.md @@ -29,7 +29,7 @@ across multiple platforms and devices. ### Extensibility - Easy integration of custom Python operators -- Flexible runtime support (ONNX or ExecuTorch) +- Flexible runtime support ([ONNX](https://onnx.ai/) or ExecuTorch) ## Getting Started From 21177e37b184dfbe1886e0a2248239e76c1b4de4 Mon Sep 17 00:00:00 2001 From: Tavishi Maini <153937358+Tavishi-Maini@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:59:04 +0530 Subject: [PATCH 17/20] Added hyperlink to ExecuTorch (#152) Signed-off-by: Tavishi Maini Signed-off-by: Suryansh Bisen --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c67ebd6..466b6c71 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ on mobile devices. ### Extensibility - Easy integration of custom Python operators -- Flexible runtime support ([ONNX](https://onnx.ai/) or ExecuTorch) +- Flexible runtime support ([ONNX](https://onnx.ai/) or [ExecuTorch](https://docs.pytorch.org/executorch-overview)) ## Getting Started To get started you can: From 00a9ae02b542959f1339e70585df4bc1849c44d1 Mon Sep 17 00:00:00 2001 From: Kaustubh3008 Date: Fri, 18 Jul 2025 13:59:28 +0530 Subject: [PATCH 18/20] Updated anchor link for prerequisites (#151) Signed-off-by: Kaustubh3008 Signed-off-by: Suryansh Bisen --- sdks/android/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdks/android/README.md b/sdks/android/README.md index 86c0ea75..78e6fcb7 100644 --- a/sdks/android/README.md +++ b/sdks/android/README.md @@ -396,7 +396,7 @@ Run instrumented tests on a connected device or emulator: **Prerequisites for Android Tests:** - Connected Android device or running emulator -- Device meets the minimum requirements listed in [Prerequisites](#-prerequisites) +- Device meets the minimum requirements listed in [Prerequisites](#prerequisites) - Proper configuration in `local.properties` ## API Reference From f9f76607180cf2c7b173307f209a8307935d0883 Mon Sep 17 00:00:00 2001 From: Dhruv Kejriwal Date: Fri, 18 Jul 2025 14:18:32 +0530 Subject: [PATCH 19/20] Removed TBD (#153) Signed-off-by: Dhruv Kejriwal Signed-off-by: Suryansh Bisen --- docs/deliteai.dev/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deliteai.dev/index.md b/docs/deliteai.dev/index.md index 3e7b4b5c..9f5d99d5 100644 --- a/docs/deliteai.dev/index.md +++ b/docs/deliteai.dev/index.md @@ -88,7 +88,7 @@ DL_SDKS_DIR/android/README.md coreruntime iOS -Android (TBD) +Android ``` ```{toctree} From b210799a05b8d0333de7bfbb39e906ea5053b0e6 Mon Sep 17 00:00:00 2001 From: ultajain <74460243+ultajain@users.noreply.github.com> Date: Mon, 21 Jul 2025 17:50:30 +0530 Subject: [PATCH 20/20] [ANDROID] Update workflow trigger for android instrumentation tests (#157) Update workflow trigger for android instrumentation tests Signed-off-by: Atul Jain Co-authored-by: Atul Jain Signed-off-by: Suryansh Bisen --- .github/workflows/android-integration-tests.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/android-integration-tests.yml b/.github/workflows/android-integration-tests.yml index ef69359d..f262e4ca 100644 --- a/.github/workflows/android-integration-tests.yml +++ b/.github/workflows/android-integration-tests.yml @@ -1,16 +1,16 @@ name: Run Android Instrumentation Tests on Linux on: - pull_request_review: - types: [submitted] - push: - branches: - - main + pull_request_target: + types: [labeled, synchronize] jobs: test: - if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request_review' && github.event.review.state == 'approved') }} + if: contains(github.event.pull_request.labels.*.name, 'ready-for-test') runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write strategy: matrix: api-level: [31] @@ -18,6 +18,9 @@ jobs: steps: - name: checkout uses: actions/checkout@v4 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} - name: Setup docker and start mock server run: |