diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index bdbf465..f60d774 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -12,5 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
docker:
- digest: sha256:b0b1c1c89570e229b1026372a2b8989ba31495007055b8d30178b7648503eefa
- image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
\ No newline at end of file
+ image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest
+ digest: sha256:fc52b202aa298a50a12c64efd04fea3884d867947effe2fa85382a246c09e813
+# created: 2022-04-06T16:30:03.627422514Z
diff --git a/.github/auto-label.yaml b/.github/auto-label.yaml
new file mode 100644
index 0000000..4caef68
--- /dev/null
+++ b/.github/auto-label.yaml
@@ -0,0 +1,15 @@
+# Copyright 2021 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+requestsize:
+ enabled: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c1ab16d..b70d9b5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+### [0.1.2](https://github.com/googleapis/java-optimization/compare/v0.1.1...v0.1.2) (2022-04-18)
+
+
+### Documentation
+
+* add a code snippet for the sync api ([#24](https://github.com/googleapis/java-optimization/issues/24)) ([4dc1dd8](https://github.com/googleapis/java-optimization/commit/4dc1dd8072e41823751a01904c56cf8a0dc41978))
+* add async api code snippet ([#25](https://github.com/googleapis/java-optimization/issues/25)) ([fb23c17](https://github.com/googleapis/java-optimization/commit/fb23c17de88919609cff8e1e20d2a57ddd120d05))
+* add get operation code snippet ([#28](https://github.com/googleapis/java-optimization/issues/28)) ([9f23fe2](https://github.com/googleapis/java-optimization/commit/9f23fe2b38291764c95909a8fa6e65ef4f7d8711))
+
+
+### Dependencies
+
+* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.10.0 ([#29](https://github.com/googleapis/java-optimization/issues/29)) ([4db5464](https://github.com/googleapis/java-optimization/commit/4db5464b2d11f45d568fd598b318f24240d2e61d))
+* update dependency com.google.cloud:google-cloud-storage to v2.6.1 ([#30](https://github.com/googleapis/java-optimization/issues/30)) ([faf4a15](https://github.com/googleapis/java-optimization/commit/faf4a156ee95fce53c29c860d120079089329236))
+
### [0.1.1](https://github.com/googleapis/java-optimization/compare/v0.1.0...v0.1.1) (2022-03-29)
diff --git a/README.md b/README.md
index 05c9fc8..144d88c 100644
--- a/README.md
+++ b/README.md
@@ -22,20 +22,20 @@ If you are using Maven, add this to your pom.xml file:
com.google.cloud
google-cloud-optimization
- 0.1.0
+ 0.1.1
```
If you are using Gradle without BOM, add this to your dependencies
```Groovy
-implementation 'com.google.cloud:google-cloud-optimization:0.1.0'
+implementation 'com.google.cloud:google-cloud-optimization:0.1.1'
```
If you are using SBT, add this to your dependencies
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-optimization" % "0.1.0"
+libraryDependencies += "com.google.cloud" % "google-cloud-optimization" % "0.1.1"
```
## Authentication
@@ -73,6 +73,18 @@ use this Cloud Fleet Routing Client Library.
+## Samples
+
+Samples are in the [`samples/`](https://github.com/googleapis/java-optimization/tree/main/samples) directory.
+
+| Sample | Source Code | Try it |
+| --------------------------- | --------------------------------- | ------ |
+| Async Api | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-optimization&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java) |
+| Get Operation | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-optimization&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java) |
+| Sync Api | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-optimization&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java) |
+| Sync Api With Long Timeout | [source code](https://github.com/googleapis/java-optimization/blob/main/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-optimization&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java) |
+
+
## Troubleshooting
diff --git a/google-cloud-optimization-bom/pom.xml b/google-cloud-optimization-bom/pom.xml
index 028d064..4d3d51e 100644
--- a/google-cloud-optimization-bom/pom.xml
+++ b/google-cloud-optimization-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-optimization-bom
- 0.1.1
+ 0.1.2
pom
com.google.cloud
@@ -65,17 +65,17 @@
com.google.cloud
google-cloud-optimization
- 0.1.1
+ 0.1.2
com.google.api.grpc
grpc-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
com.google.api.grpc
proto-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
diff --git a/google-cloud-optimization/pom.xml b/google-cloud-optimization/pom.xml
index c705779..9123b50 100644
--- a/google-cloud-optimization/pom.xml
+++ b/google-cloud-optimization/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-optimization
- 0.1.1
+ 0.1.2
jar
Google Cloud Fleet Routing
https://github.com/googleapis/java-optimization
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-optimization-parent
- 0.1.1
+ 0.1.2
google-cloud-optimization
diff --git a/grpc-google-cloud-optimization-v1/pom.xml b/grpc-google-cloud-optimization-v1/pom.xml
index bd42740..896d958 100644
--- a/grpc-google-cloud-optimization-v1/pom.xml
+++ b/grpc-google-cloud-optimization-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
grpc-google-cloud-optimization-v1
GRPC library for google-cloud-optimization
com.google.cloud
google-cloud-optimization-parent
- 0.1.1
+ 0.1.2
diff --git a/pom.xml b/pom.xml
index 2b38751..5eb858f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-optimization-parent
pom
- 0.1.1
+ 0.1.2
Google Cloud Fleet Routing Parent
https://github.com/googleapis/java-optimization
@@ -69,23 +69,23 @@
com.google.cloud
google-cloud-optimization
- 0.1.1
+ 0.1.2
com.google.api.grpc
grpc-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
com.google.api.grpc
proto-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
com.google.cloud
google-cloud-shared-dependencies
- 2.9.0
+ 2.10.0
pom
import
diff --git a/proto-google-cloud-optimization-v1/pom.xml b/proto-google-cloud-optimization-v1/pom.xml
index 77a00fe..8d53637 100644
--- a/proto-google-cloud-optimization-v1/pom.xml
+++ b/proto-google-cloud-optimization-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-optimization-v1
- 0.1.1
+ 0.1.2
proto-google-cloud-optimization-v1
Proto library for google-cloud-optimization
com.google.cloud
google-cloud-optimization-parent
- 0.1.1
+ 0.1.2
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 3a535f5..6d2dbea 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -29,10 +29,14 @@
com.google.cloud
google-cloud-optimization
- 0.0.0
+ 0.1.1
-
+
+ com.google.cloud
+ google-cloud-storage
+ 2.6.1
+
junit
junit
@@ -81,4 +85,4 @@
-
+
\ No newline at end of file
diff --git a/samples/install-without-bom/resources/sync_request.textproto b/samples/install-without-bom/resources/sync_request.textproto
new file mode 100644
index 0000000..d1026f9
--- /dev/null
+++ b/samples/install-without-bom/resources/sync_request.textproto
@@ -0,0 +1,64 @@
+# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto
+# proto-message: OptimizeToursRequest
+model {
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.874507 longitude: 2.30361 }
+ time_windows {
+ start_time { seconds: 1000 }
+ end_time { seconds: 2000 }
+ }
+ duration { seconds: 150 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880942 longitude: 2.323866 }
+ time_windows {
+ start_time { seconds: 3000 }
+ end_time { seconds: 4000 }
+ }
+ duration: { seconds: 250 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 10 }
+ }
+ }
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.880943 longitude: 2.323867 }
+ time_windows {
+ start_time { seconds: 1001 }
+ end_time { seconds: 2001 }
+ }
+ duration { seconds: 151 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880940 longitude: 2.323844 }
+ time_windows {
+ start_time { seconds: 3001 }
+ end_time { seconds: 4001 }
+ }
+ duration { seconds: 251 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 20 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863102 longitude: 2.341204 }
+ end_location { latitude: 48.863110 longitude: 2.341205 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 50 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863112 longitude: 2.341214 }
+ end_location { latitude: 48.863120 longitude: 2.341215 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 60 }
+ }
+ }
+ }
\ No newline at end of file
diff --git a/samples/pom.xml b/samples/pom.xml
index 1ac0e01..bfb97b8 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud--samples
- 0.0.1-SNAPSHOT
+ 0.0.1-SNAPSHOT
pom
Google Cloud Fleet Routing Samples Parent
https://github.com/googleapis/java-optimization
@@ -53,4 +53,4 @@
-
+
\ No newline at end of file
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 5c13175..4f14088 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -28,10 +28,15 @@
com.google.cloud
google-cloud-optimization
- 0.1.1
+ 0.1.2
+
+ com.google.cloud
+ google-cloud-storage
+ 2.6.1
+
junit
junit
@@ -80,4 +85,4 @@
-
+
\ No newline at end of file
diff --git a/samples/snapshot/resources/sync_request.textproto b/samples/snapshot/resources/sync_request.textproto
new file mode 100644
index 0000000..d1026f9
--- /dev/null
+++ b/samples/snapshot/resources/sync_request.textproto
@@ -0,0 +1,64 @@
+# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto
+# proto-message: OptimizeToursRequest
+model {
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.874507 longitude: 2.30361 }
+ time_windows {
+ start_time { seconds: 1000 }
+ end_time { seconds: 2000 }
+ }
+ duration { seconds: 150 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880942 longitude: 2.323866 }
+ time_windows {
+ start_time { seconds: 3000 }
+ end_time { seconds: 4000 }
+ }
+ duration: { seconds: 250 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 10 }
+ }
+ }
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.880943 longitude: 2.323867 }
+ time_windows {
+ start_time { seconds: 1001 }
+ end_time { seconds: 2001 }
+ }
+ duration { seconds: 151 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880940 longitude: 2.323844 }
+ time_windows {
+ start_time { seconds: 3001 }
+ end_time { seconds: 4001 }
+ }
+ duration { seconds: 251 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 20 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863102 longitude: 2.341204 }
+ end_location { latitude: 48.863110 longitude: 2.341205 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 50 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863112 longitude: 2.341214 }
+ end_location { latitude: 48.863120 longitude: 2.341215 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 60 }
+ }
+ }
+ }
\ No newline at end of file
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 5e36cb5..06cfa0f 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -2,10 +2,13 @@
4.0.0
com.google.cloud
- -snippets
- jar
- Google Cloud Fleet Routing Snippets
+ optimization-ai-snippets
+ pom
+ Google Cloud Fleet Routing Samples Parent
https://github.com/googleapis/java-optimization
+
+ Java idiomatic client for Google Cloud Platform services.
+
com.google.cloud
google-cloud-optimization
- 0.0.0
+ 0.1.1
+
+
+ com.google.cloud
+ google-cloud-storage
-
junit
junit
@@ -44,4 +62,4 @@
test
-
+
\ No newline at end of file
diff --git a/samples/snippets/resources/sync_request.textproto b/samples/snippets/resources/sync_request.textproto
new file mode 100644
index 0000000..d1026f9
--- /dev/null
+++ b/samples/snippets/resources/sync_request.textproto
@@ -0,0 +1,64 @@
+# proto-file: google3/google/cloud/optimization/v1/fleet_routing.proto
+# proto-message: OptimizeToursRequest
+model {
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.874507 longitude: 2.30361 }
+ time_windows {
+ start_time { seconds: 1000 }
+ end_time { seconds: 2000 }
+ }
+ duration { seconds: 150 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880942 longitude: 2.323866 }
+ time_windows {
+ start_time { seconds: 3000 }
+ end_time { seconds: 4000 }
+ }
+ duration: { seconds: 250 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 10 }
+ }
+ }
+ shipments {
+ pickups {
+ arrival_location { latitude: 48.880943 longitude: 2.323867 }
+ time_windows {
+ start_time { seconds: 1001 }
+ end_time { seconds: 2001 }
+ }
+ duration { seconds: 151 }
+ }
+ deliveries {
+ arrival_location { latitude: 48.880940 longitude: 2.323844 }
+ time_windows {
+ start_time { seconds: 3001 }
+ end_time { seconds: 4001 }
+ }
+ duration { seconds: 251 }
+ }
+ load_demands {
+ key: "weight"
+ value: { amount: 20 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863102 longitude: 2.341204 }
+ end_location { latitude: 48.863110 longitude: 2.341205 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 50 }
+ }
+ }
+ vehicles {
+ start_location { latitude: 48.863112 longitude: 2.341214 }
+ end_location { latitude: 48.863120 longitude: 2.341215 }
+ load_limits {
+ key: "weight"
+ value: { max_load: 60 }
+ }
+ }
+ }
\ No newline at end of file
diff --git a/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java b/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java
new file mode 100644
index 0000000..97430d3
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/optimizationai/AsyncApi.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.optimizationai;
+
+// [START cloudoptimization_async_api]
+import com.google.api.gax.longrunning.OperationFuture;
+import com.google.cloud.optimization.v1.AsyncModelMetadata;
+import com.google.cloud.optimization.v1.BatchOptimizeToursRequest;
+import com.google.cloud.optimization.v1.BatchOptimizeToursRequest.AsyncModelConfig;
+import com.google.cloud.optimization.v1.BatchOptimizeToursResponse;
+import com.google.cloud.optimization.v1.DataFormat;
+import com.google.cloud.optimization.v1.FleetRoutingClient;
+import com.google.cloud.optimization.v1.GcsDestination;
+import com.google.cloud.optimization.v1.GcsSource;
+import com.google.cloud.optimization.v1.InputConfig;
+import com.google.cloud.optimization.v1.OutputConfig;
+
+/**
+ * This is an example to send a request to Cloud Fleet Routing asynchronous API via Java API Client.
+ * A sample async_request_java.textproto file and a sample request_model_java.json file can be found
+ * in the resources folder.
+ */
+public class AsyncApi {
+ public static void callAsyncApi() throws Exception {
+ // TODO(developer): Replace these variables before running the sample.
+ String projectParent = "projects/{YOUR_GCP_PROJECT_ID}";
+ String inputUri = "gs://YOUR_GCS_PATH";
+ String outputUri = "gs://YOUR_SOLUTION_PATH";
+ callAsyncApi(projectParent, inputUri, outputUri);
+ }
+
+ public static void callAsyncApi(String projectParent, String inputUri, String outputUri)
+ throws Exception {
+ GcsSource gcsSource = GcsSource.newBuilder().setUri(inputUri).build();
+ InputConfig inputConfig =
+ InputConfig.newBuilder().setGcsSource(gcsSource).setDataFormat(DataFormat.JSON).build();
+ GcsDestination gcsDestination = GcsDestination.newBuilder().setUri(outputUri).build();
+ OutputConfig outputConfig =
+ OutputConfig.newBuilder()
+ .setGcsDestination(gcsDestination)
+ .setDataFormat(DataFormat.JSON)
+ .build();
+
+ AsyncModelConfig asyncModelConfig =
+ AsyncModelConfig.newBuilder()
+ .setInputConfig(inputConfig)
+ .setOutputConfig(outputConfig)
+ .build();
+ BatchOptimizeToursRequest request =
+ BatchOptimizeToursRequest.newBuilder()
+ .setParent(projectParent)
+ .addModelConfigs(asyncModelConfig)
+ .build();
+
+ FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create();
+ OperationFuture response =
+ fleetRoutingClient.batchOptimizeToursAsync(request);
+ System.out.format("the response name: %s\n", response.getInitialFuture().get().getName());
+
+ // Block to wait for the job to finish.
+ response.getPollingFuture().get();
+ if (response.getMetadata().get().getState() == AsyncModelMetadata.State.SUCCEEDED) {
+ // Code to do your stuff
+ System.out.println("Job finished successfully.");
+ } else {
+ System.out.println(
+ "Job failed with message:" + response.getPollingFuture().get().getErrorMessage());
+ }
+ }
+}
+// [END cloudoptimization_async_api]
diff --git a/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java b/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java
new file mode 100644
index 0000000..6a6e8fd
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/optimizationai/GetOperation.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+// [START cloudoptimization_get_operation]
+import com.google.cloud.optimization.v1.FleetRoutingClient;
+import com.google.longrunning.Operation;
+import java.io.IOException;
+
+class GetOperation {
+
+ static void getOperation() throws IOException {
+ // TODO(developer): Replace these variables before running the sample.
+ String operationFullId = "projects/[projectId]/operations/[operationId]";
+ getOperation(operationFullId);
+ }
+
+ // Get the status of an operation
+ static void getOperation(String operationFullId) throws IOException {
+ // Initialize client that will be used to send requests. This client only needs to be created
+ // once, and can be reused for multiple requests. After completing all of your requests, call
+ // the "close" method on the client to safely clean up any remaining background resources.
+ try (FleetRoutingClient client = FleetRoutingClient.create()) {
+ // Get the latest state of a long-running operation.
+ Operation operation = client.getOperationsClient().getOperation(operationFullId);
+
+ // Display operation details.
+ System.out.println("Operation details:");
+ System.out.format("\tName: %s\n", operation.getName());
+ System.out.format("\tMetadata Type Url: %s\n", operation.getMetadata().getTypeUrl());
+ System.out.format("\tDone: %s\n", operation.getDone());
+ if (operation.hasResponse()) {
+ System.out.format("\tResponse Type Url: %s\n", operation.getResponse().getTypeUrl());
+ }
+ if (operation.hasError()) {
+ System.out.println("\tResponse:");
+ System.out.format("\t\tError code: %s\n", operation.getError().getCode());
+ System.out.format("\t\tError message: %s\n", operation.getError().getMessage());
+ }
+ }
+ }
+}
+// [END cloudoptimization_get_operation]
diff --git a/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java b/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java
new file mode 100644
index 0000000..5e73344
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/optimizationai/SyncApi.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+// [START cloudoptimization_sync_api]
+
+import com.google.cloud.optimization.v1.FleetRoutingClient;
+import com.google.cloud.optimization.v1.OptimizeToursRequest;
+import com.google.cloud.optimization.v1.OptimizeToursResponse;
+import com.google.protobuf.Duration;
+import com.google.protobuf.TextFormat;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+/**
+ * This is an example to send a request to Cloud Fleet Routing synchronous API via Java API Client.
+ * A sample sync_request.textproto file can be found in the resources folder.
+ */
+public class SyncApi {
+ public static void callSyncApi() throws Exception {
+ // TODO(developer): Replace these variables before running the sample.
+ String projectParent = "projects/{YOUR_GCP_PROJECT_ID}";
+ String modelPath = "YOUR_MODEL_PATH";
+ callSyncApi(projectParent, modelPath);
+ }
+
+ public static void callSyncApi(String projectParent, String modelPath) throws Exception {
+ int timeoutSeconds = 100;
+ InputStream modelInputstream = new FileInputStream(modelPath);
+ Reader modelInputStreamReader = new InputStreamReader(modelInputstream);
+ OptimizeToursRequest.Builder requestBuilder =
+ OptimizeToursRequest.newBuilder()
+ .setTimeout(Duration.newBuilder().setSeconds(timeoutSeconds).build())
+ .setParent(projectParent);
+ TextFormat.getParser().merge(modelInputStreamReader, requestBuilder);
+ FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create();
+ OptimizeToursResponse response = fleetRoutingClient.optimizeTours(requestBuilder.build());
+ System.out.println(response.toString());
+ }
+}
+// [END cloudoptimization_sync_api]
diff --git a/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java b/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java
new file mode 100644
index 0000000..152fd08
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/optimizationai/SyncApiWithLongTimeout.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+// [START cloudoptimization_long_timeout]
+
+import com.google.cloud.optimization.v1.FleetRoutingClient;
+import com.google.cloud.optimization.v1.FleetRoutingSettings;
+import com.google.cloud.optimization.v1.OptimizeToursRequest;
+import com.google.cloud.optimization.v1.OptimizeToursResponse;
+import com.google.protobuf.Duration;
+import com.google.protobuf.TextFormat;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+/**
+ * This is an example to send a request to Cloud Fleet Routing synchronous API via Java API Client.
+ */
+public class SyncApiWithLongTimeout {
+ public static void longTimeout() throws Exception {
+ // TODO(developer): Replace these variables before running the sample.
+ String projectParent = "projects/{YOUR_GCP_PROJECT_ID}";
+ String modelPath = "YOUR_MODEL_PATH";
+ longTimeout(projectParent, modelPath);
+ }
+
+ public static void longTimeout(String projectParent, String modelPath) throws Exception {
+ int timeoutSeconds = 100;
+ InputStream modelInputstream = new FileInputStream(modelPath);
+ Reader modelInputStreamReader = new InputStreamReader(modelInputstream);
+ OptimizeToursRequest.Builder requestBuilder =
+ OptimizeToursRequest.newBuilder()
+ .setTimeout(Duration.newBuilder().setSeconds(timeoutSeconds).build())
+ .setParent(projectParent);
+ TextFormat.getParser().merge(modelInputStreamReader, requestBuilder);
+
+ // Checks the gRPC connection every 5 mins and keeps it alive.
+ FleetRoutingClient fleetRoutingClientClient =
+ FleetRoutingClient.create(
+ FleetRoutingSettings.newBuilder()
+ .setTransportChannelProvider(
+ FleetRoutingSettings.defaultGrpcTransportProviderBuilder()
+ .setKeepAliveTime(org.threeten.bp.Duration.ofSeconds(300))
+ .build())
+ .build());
+ OptimizeToursResponse response = fleetRoutingClientClient.optimizeTours(requestBuilder.build());
+ System.out.println(response.toString());
+ }
+}
+// [END cloudoptimization_long_timeout]
diff --git a/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java b/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java
new file mode 100644
index 0000000..058b46a
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/optimizationai/AsyncApiTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.optimizationai;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.api.gax.paging.Page;
+import com.google.cloud.storage.Blob;
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.StorageOptions;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.util.UUID;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Tests for AsyncApi sample. */
+public class AsyncApiTest {
+ private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
+ private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID);
+ private static final String BUCKET_NAME =
+ String.format("optimizationai-test-%s", UUID.randomUUID());
+ private static final String INPUT_URI =
+ "gs://cloud-samples-data/optimization-ai/async_request_model.json";
+ private static final String BATCH_OUTPUT_URI =
+ String.format("gs://%s/code_snippets_test_output.json", BUCKET_NAME);
+
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private PrintStream originalPrintStream;
+
+ private static void cleanUpBucket() {
+ Storage storage = StorageOptions.getDefaultInstance().getService();
+ Page blobs = storage.list(BUCKET_NAME, Storage.BlobListOption.currentDirectory());
+
+ deleteDirectory(storage, blobs);
+ }
+
+ private static void deleteDirectory(Storage storage, Page blobs) {
+ for (Blob blob : blobs.iterateAll()) {
+ if (!blob.delete()) {
+ Page subBlobs =
+ storage.list(
+ BUCKET_NAME,
+ Storage.BlobListOption.currentDirectory(),
+ Storage.BlobListOption.prefix(blob.getName()));
+
+ deleteDirectory(storage, subBlobs);
+ }
+ }
+ }
+
+ @Before
+ public void setUp() {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ originalPrintStream = System.out;
+ System.setOut(out);
+
+ Storage storage = StorageOptions.getDefaultInstance().getService();
+ storage.create(BucketInfo.of(BUCKET_NAME));
+ }
+
+ @After
+ public void tearDown() {
+ cleanUpBucket();
+ System.out.flush();
+ System.setOut(originalPrintStream);
+ }
+
+ @Test
+ public void testAsyncApi() throws Exception {
+ AsyncApi.callAsyncApi(PROJECT_PARENT, INPUT_URI, BATCH_OUTPUT_URI);
+ String got = bout.toString();
+ assertThat(got).contains("Job");
+ }
+}
diff --git a/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java b/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java
new file mode 100644
index 0000000..32ef2cb
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/optimizationai/GetOperationTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.api.gax.longrunning.OperationFuture;
+import com.google.cloud.optimization.v1.AsyncModelMetadata;
+import com.google.cloud.optimization.v1.BatchOptimizeToursRequest;
+import com.google.cloud.optimization.v1.BatchOptimizeToursResponse;
+import com.google.cloud.optimization.v1.FleetRoutingClient;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Tests for GetOperation sample. */
+public class GetOperationTest {
+ private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
+ private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID);
+
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private PrintStream originalPrintStream;
+
+ @Before
+ public void setUp() {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ originalPrintStream = System.out;
+ System.setOut(out);
+ }
+
+ @After
+ public void tearDown() {
+ System.out.flush();
+ System.setOut(originalPrintStream);
+ }
+
+ @Test
+ public void testSyncApi() throws Exception {
+ FleetRoutingClient fleetRoutingClient = FleetRoutingClient.create();
+ BatchOptimizeToursRequest request =
+ BatchOptimizeToursRequest.newBuilder().setParent(PROJECT_PARENT).build();
+ OperationFuture response =
+ fleetRoutingClient.batchOptimizeToursAsync(request);
+
+ GetOperation.getOperation(response.getInitialFuture().get().getName());
+ String got = bout.toString();
+ assertThat(got).contains("operations");
+ }
+}
diff --git a/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java
new file mode 100644
index 0000000..e663a92
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Tests for SyncApi sample. */
+public class SyncApiTest {
+ private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
+ private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID);
+ private static final String MODEL_PATH = "resources/sync_request.textproto";
+
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private PrintStream originalPrintStream;
+
+ @Before
+ public void setUp() {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ originalPrintStream = System.out;
+ System.setOut(out);
+ }
+
+ @After
+ public void tearDown() {
+ System.out.flush();
+ System.setOut(originalPrintStream);
+ }
+
+ @Test
+ public void testSyncApi() throws Exception {
+ SyncApi.callSyncApi(PROJECT_PARENT, MODEL_PATH);
+ String got = bout.toString();
+ assertThat(got).contains("routes");
+ }
+}
diff --git a/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java
new file mode 100644
index 0000000..0dc7b11
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/optimizationai/SyncApiWithLongTimeoutTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.optimizationai;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Tests for SyncApiWithLongTimeout sample. */
+public class SyncApiWithLongTimeoutTest {
+ private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
+ private static final String PROJECT_PARENT = String.format("projects/%s", PROJECT_ID);
+ private static final String MODEL_PATH = "resources/sync_request.textproto";
+
+ private ByteArrayOutputStream bout;
+ private PrintStream out;
+ private PrintStream originalPrintStream;
+
+ @Before
+ public void setUp() {
+ bout = new ByteArrayOutputStream();
+ out = new PrintStream(bout);
+ originalPrintStream = System.out;
+ System.setOut(out);
+ }
+
+ @After
+ public void tearDown() {
+ System.out.flush();
+ System.setOut(originalPrintStream);
+ }
+
+ @Test
+ public void testSyncApi() throws Exception {
+ SyncApiWithLongTimeout.longTimeout(PROJECT_PARENT, MODEL_PATH);
+ String got = bout.toString();
+ assertThat(got).contains("routes");
+ }
+}
diff --git a/versions.txt b/versions.txt
index d9a95c1..4462adf 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,6 +1,6 @@
# Format:
# module:released-version:current-version
-google-cloud-optimization:0.1.1:0.1.1
-proto-google-cloud-optimization-v1:0.1.1:0.1.1
-grpc-google-cloud-optimization-v1:0.1.1:0.1.1
+google-cloud-optimization:0.1.2:0.1.2
+proto-google-cloud-optimization-v1:0.1.2:0.1.2
+grpc-google-cloud-optimization-v1:0.1.2:0.1.2