diff --git a/README.md b/README.md
index c284101..555c43d 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,15 @@ 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) |
+
+
## Troubleshooting
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 1ba7f30..9119592 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -32,7 +32,11 @@
0.1.1
-
+
+ com.google.cloud
+ google-cloud-storage
+ 2.6.0
+
junit
junit
@@ -81,4 +85,4 @@
-
+
\ 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 1f67e12..8a7fac1 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -32,6 +32,11 @@
+
+ com.google.cloud
+ google-cloud-storage
+ 2.6.0
+
junit
junit
@@ -80,4 +85,4 @@
-
+
\ No newline at end of file
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index dae97ee..b843131 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
+ libraries-bom
+ 25.1.0
+ pom
+ import
+
+
+
+
-
com.google.cloud
google-cloud-optimization
0.1.1
-
+
+
+ com.google.cloud
+ google-cloud-storage
+
junit
junit
@@ -44,4 +63,4 @@
test
-
+
\ 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/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");
+ }
+}