Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.jclouds.examples.glacier; import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; import java.util.InputMismatchException; import java.util.Scanner; import java.util.UUID; import org.jclouds.ContextBuilder; import org.jclouds.blobstore.BlobStore; import org.jclouds.blobstore.BlobStoreContext; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.options.PutOptions; import org.jclouds.glacier.GlacierClient; import org.jclouds.glacier.blobstore.strategy.internal.BasePollingStrategy; import org.jclouds.glacier.domain.ArchiveRetrievalJobRequest; import org.jclouds.glacier.domain.JobRequest; import org.jclouds.io.ByteSources; import org.jclouds.io.Payload; import org.jclouds.io.payloads.ByteSourcePayload; import org.jclouds.util.Strings2; import com.google.common.base.Charsets; import com.google.common.base.Throwables; import com.google.common.io.ByteSource; import com.google.common.io.CharStreams; /** * Demonstrates the use of Glacier provider and BlobStore. * * Usage is: java MainApp "identity" "credential" */ public class MainApp { private static final long MiB = 1L << 20; public static void main(String[] args) throws IOException { if (args.length < 2) { throw new IllegalArgumentException( "Invalid number of parameters. Syntax is: \"identity\" \"credential\""); } String identity = args[0]; String credentials = args[1]; // Init BlobStoreContext context = ContextBuilder.newBuilder("glacier").credentials(identity, credentials) .buildView(BlobStoreContext.class); try { while (chooseOption(context)) ; } finally { context.close(); } } private static void putAndRetrieveBlobExample(BlobStore blobstore) throws IOException { // Create a container String containerName = "jclouds_putAndRetrieveBlobExample_" + UUID.randomUUID().toString(); blobstore.createContainerInLocation(null, containerName); // Create a vault // Create a blob ByteSource payload = ByteSource.wrap("data".getBytes(Charsets.UTF_8)); Blob blob = blobstore.blobBuilder("ignored") // The blob name is ignored in Glacier .payload(payload).contentLength(payload.size()).build(); // Put the blob in the container String blobId = blobstore.putBlob(containerName, blob); // Retrieve the blob Blob result = blobstore.getBlob(containerName, blobId); // Print the result InputStream is = result.getPayload().openStream(); try { String data = CharStreams.toString(new InputStreamReader(is, Charsets.UTF_8)); System.out.println("The retrieved payload is: " + data); } finally { is.close(); } } private static void multipartUploadExample(BlobStore blobstore) throws IOException { // Create a container String containerName = "jclouds_multipartUploadExample_" + UUID.randomUUID().toString(); blobstore.createContainerInLocation(null, containerName); // Create a vault // Create a blob ByteSource payload = buildData(16 * MiB); Blob blob = blobstore.blobBuilder("ignored") // The blob name is ignored in Glacier .payload(payload).contentLength(payload.size()).build(); // Create the PutOptions PutOptions options = PutOptions.Builder.multipart(true); // Put the blob in the container blobstore.putBlob(containerName, blob, options); System.out.println("The blob has been uploaded"); } private static void interruptionExample(final BlobStore blobstore) throws IOException { // Create a container final String containerName = "jclouds_interruptionExample_" + UUID.randomUUID().toString(); blobstore.createContainerInLocation(null, containerName); // Create a vault // Create a blob ByteSource payload = ByteSource.wrap("data".getBytes(Charsets.UTF_8)); Blob blob = blobstore.blobBuilder("ignored") // The blob name is ignored in Glacier .payload(payload).contentLength(payload.size()).build(); // Put the blob in the container final String blobId = blobstore.putBlob(containerName, blob); // New thread Thread thread = new Thread() { public void run() { try { blobstore.getBlob(containerName, blobId); } catch (RuntimeException e) { System.out.println("The request was aborted"); } } }; // Start and interrupt the thread thread.start(); thread.interrupt(); try { thread.join(); } catch (InterruptedException e) { Throwables.propagate(e); } } private static void providerExample(BlobStoreContext context) throws IOException { // Get the provider API GlacierClient client = context.unwrapApi(GlacierClient.class); // Create a vault final String vaultName = "jclouds_providerExample_" + UUID.randomUUID().toString(); client.createVault(vaultName); // Upload an archive Payload payload = new ByteSourcePayload(buildData(16)); payload.getContentMetadata().setContentType(PLAIN_TEXT_UTF_8.toString()); payload.getContentMetadata().setContentLength(16L); String archiveId = client.uploadArchive(vaultName, payload); // Create an archive retrieval job request JobRequest archiveRetrievalJobRequest = ArchiveRetrievalJobRequest.builder().archiveId(archiveId) .description("retrieval job").build(); // Initiate job String jobId = client.initiateJob(vaultName, archiveRetrievalJobRequest); try { // Poll until the job is done new BasePollingStrategy(client).waitForSuccess(vaultName, jobId); // Get the job output Payload result = client.getJobOutput(vaultName, jobId); // Print the result System.out.println("The retrieved payload is: " + Strings2.toStringAndClose(result.openStream())); } catch (InterruptedException e) { Throwables.propagate(e); } } public static boolean chooseOption(BlobStoreContext context) throws IOException { Scanner scan = new Scanner(System.in); System.out.println(""); System.out.println("Glacier examples"); System.out.println("1. Put and retrieve blob (~4-5 hours)"); System.out.println("2. Multipart upload (~1-5 minutes)"); System.out.println("3. Call interruption (~0-2 minutes)"); System.out.println("4. Provider API (~4-5 hours)"); System.out.println("5. Exit"); System.out.print("Choose an option: "); try { switch (scan.nextInt()) { case 1: putAndRetrieveBlobExample(context.getBlobStore()); break; case 2: multipartUploadExample(context.getBlobStore()); break; case 3: interruptionExample(context.getBlobStore()); break; case 4: providerExample(context); break; case 5: return false; default: System.out.println("Not a valid option"); break; } } catch (InputMismatchException e) { System.out.println("Not a valid option"); } return true; } private static ByteSource buildData(long size) { byte[] array = new byte[1024]; Arrays.fill(array, (byte) 'a'); return ByteSources.repeatingArrayByteSource(array).slice(0, size); } }