1 /**
2 *
3 * Copyright (C) 2011 Cloud Conscious, LLC. <info@cloudconscious.com>
4 *
5 * ====================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 * ====================================================================
18 */
19 package org.jclouds.blobstore;
20
21 import org.jclouds.blobstore.attr.ConsistencyModel;
22 import org.jclouds.blobstore.internal.BlobStoreContextImpl;
23 import org.jclouds.blobstore.options.ListContainerOptions;
24 import org.jclouds.rest.RestContext;
25 import org.jclouds.rest.Utils;
26
27 import com.google.inject.ImplementedBy;
28
29 /**
30 * Represents a cloud that has key-value storage functionality. This object is scoped to a service
31 * and an identity.
32 *
33 * @author Adrian Cole
34 *
35 */
36 @ImplementedBy(BlobStoreContextImpl.class)
37 public interface BlobStoreContext {
38 /**
39 *
40 * Generates signed requests for blobs. useful in other tools such as backup utilities.
41 *
42 */
43 BlobRequestSigner getSigner();
44
45 /**
46 * Creates a <code>Map<String,InputStream></code> view of the specified container. Use this for
47 * simplest access to blobstore, knowing that MD5s will be calculated for every object.
48 *
49 * @param container
50 * existing container you wish to read or modify
51 * @param options
52 * allow you to specify a directory within the container, or whether to list
53 * recursively.
54 */
55 InputStreamMap createInputStreamMap(String container, ListContainerOptions options);
56
57 /**
58 * Creates a <code>Map<String,InputStream></code> view of the specified container. Use this for
59 * simplest access to blobstore, knowing that MD5s will be calculated for every object.
60 *
61 * Only root-level blobs will be visible.
62 *
63 * @param container
64 * existing container you wish to read or modify
65 */
66 InputStreamMap createInputStreamMap(String container);
67
68 /**
69 * Creates a <code>Map<String,Blob></code> view of the specified container. Use this when you wan
70 * to control the content type, or manually specify length or size of blobs.
71 *
72 * @param container
73 * existing container you wish to read or modify
74 * @param options
75 * allow you to specify a directory within the container, or whether to list
76 * recursively.
77 */
78 BlobMap createBlobMap(String container, ListContainerOptions options);
79
80 /**
81 * Creates a <code>Map<String,Blob></code> view of the specified container. Use this when you wan
82 * to control the content type, or manually specify length or size of blobs.
83 *
84 * Only root-level blobs will be visible.
85 *
86 * @param container
87 * existing container you wish to read or modify
88 */
89 BlobMap createBlobMap(String container);
90
91 /**
92 * @return a portable asynchronous interface for the BlobStore, which returns {@code Future}s for
93 * each call.
94 */
95 AsyncBlobStore getAsyncBlobStore();
96
97 /**
98 * @return a portable interface for the BlobStore.
99 */
100 BlobStore getBlobStore();
101
102 /**
103 *
104 * @return best guess at the consistency model used in this BlobStore.
105 */
106 ConsistencyModel getConsistencyModel();
107
108 /**
109 *
110 * @return a context you can use to the access provider or vendor specific api underlying this
111 * context.
112 */
113 <S, A> RestContext<S, A> getProviderSpecificContext();
114
115 Utils getUtils();
116
117 /**
118 * @see #getUtils
119 */
120 Utils utils();
121
122 /**
123 * closes threads and resources related to this connection.
124 *
125 */
126 void close();
127 }