2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
4 using System.Threading.Tasks;
5 using Pithos.Interfaces;
7 namespace Pithos.Network
9 [ContractClass(typeof(ICloudClientContract))]
10 public interface ICloudClient
13 string ApiKey { get; set; }
14 string UserName { get; set; }
15 Uri StorageUrl { get; set; }
17 string Token { get; set; }
19 bool UsePithos { get; set; }
20 AccountInfo Authenticate();
21 Uri Proxy { get; set; }
22 double DownloadPercentLimit { get; set; }
23 double UploadPercentLimit { get; set; }
24 string AuthenticationUrl { get; set; }
26 #region Container operations
28 IList<ContainerInfo> ListContainers(string account);
29 IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null);
30 IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null);
31 bool ContainerExists(string account, string container);
32 ContainerInfo GetContainerInfo(string account, string container);
33 void CreateContainer(string account, string container);
34 void DeleteContainer(string account, string container);
37 #region Object operations
38 Task GetObject(string account, string container, string objectName, string fileName);
39 Task PutObject(string account, string container, string objectName, string fileName, string hash = null);
40 void DeleteObject(string account, string container, string objectName);
41 //void DeleteObject(string container, string objectName, string account = null);
42 void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName);
43 bool ObjectExists(string account, string container, string objectName);
44 ObjectInfo GetObjectInfo(string account, string container, string objectName);
45 void CreateFolder(string account, string container, string folder);
48 #region Hashmap operations
49 Task<TreeHash> GetHashMap(string account, string container, string objectName);
50 Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash);
51 Task PostBlock(string account, string container, byte[] block, int offset, int count);
52 Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end);
55 #region Sharing operations
56 IList<ObjectInfo> ListSharedObjects(DateTime? since);
57 void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write);
61 AccountInfo GetAccountPolicies(AccountInfo accountInfo);
63 void UpdateMetadata(ObjectInfo objectInfo);
65 void UpdateMetadata(ContainerInfo Container);
69 [ContractClassFor(typeof(ICloudClient))]
70 public abstract class ICloudClientContract:ICloudClient
73 public string ApiKey { get; set; }
74 public string UserName { get; set; }
75 public Uri StorageUrl { get; set; }
76 public string Token { get; set; }
78 public Uri Proxy { get; set; }
79 public double DownloadPercentLimit { get; set; }
80 public double UploadPercentLimit { get; set; }
82 public string AuthenticationUrl { get; set; }
84 public bool UsePithos { get; set; }
86 public AccountInfo Authenticate()
88 Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(ApiKey), "ApiKey must be filled before calling Authenticate");
89 Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(UserName), "UserName must be filled before calling Authenticate");
91 return default(AccountInfo);
94 public IList<ContainerInfo> ListContainers(string account)
96 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
97 Contract.Requires(StorageUrl!=null);
99 return default(IList<ContainerInfo>);
102 public IList<ObjectInfo> ListSharedObjects(DateTime? since)
106 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
107 Contract.Requires(StorageUrl != null);
109 return default(IList<ObjectInfo>);
112 public void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write)
115 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
116 Contract.Requires(StorageUrl != null);
117 Contract.Requires(!String.IsNullOrWhiteSpace(container));
118 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
119 Contract.Requires(!String.IsNullOrWhiteSpace(account));
120 Contract.Requires(!String.IsNullOrWhiteSpace(shareTo));
124 public AccountInfo GetAccountPolicies(AccountInfo accountInfo)
126 Contract.Requires(accountInfo!=null);
128 return default(AccountInfo);
131 public void UpdateMetadata(ObjectInfo objectInfo)
133 Contract.Requires(objectInfo!=null);
138 public void UpdateMetadata(ContainerInfo objectInfo)
140 Contract.Requires(objectInfo!=null);
146 public IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null)
149 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
150 Contract.Requires(StorageUrl != null);
151 Contract.Requires(!String.IsNullOrWhiteSpace(container));
153 return default(IList<ObjectInfo>);
156 public IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null)
159 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
160 Contract.Requires(StorageUrl != null);
161 Contract.Requires(!String.IsNullOrWhiteSpace(container));
162 Contract.Requires(!String.IsNullOrWhiteSpace(folder));
164 return default(IList<ObjectInfo>);
167 public bool ContainerExists(string account, string container)
170 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
171 Contract.Requires(StorageUrl!=null);
172 Contract.Requires(!String.IsNullOrWhiteSpace(container));
174 return default(bool);
177 public ContainerInfo GetContainerInfo(string account, string container)
180 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
181 Contract.Requires(StorageUrl!=null);
182 Contract.Requires(!String.IsNullOrWhiteSpace(container));
184 return default(ContainerInfo);
187 public void CreateContainer(string account, string container)
190 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
191 Contract.Requires(StorageUrl!=null);
192 Contract.Requires(!String.IsNullOrWhiteSpace(container));
195 public void DeleteContainer(string account, string container)
198 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
199 Contract.Requires(StorageUrl!=null);
200 Contract.Requires(!String.IsNullOrWhiteSpace(container));
203 public Task GetObject(string account, string container, string objectName, string fileName)
206 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
207 Contract.Requires(StorageUrl!=null);
208 Contract.Requires(!String.IsNullOrWhiteSpace(container));
209 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
211 return default(Task);
214 public Task PutObject(string account, string container, string objectName, string fileName, string hash = null)
217 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
218 Contract.Requires(StorageUrl!=null);
219 Contract.Requires(!String.IsNullOrWhiteSpace(container));
220 Contract.Requires(!String.IsNullOrWhiteSpace(fileName));
221 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
223 return default(Task);
226 public void DeleteObject(string account, string container, string objectName)
229 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
230 Contract.Requires(StorageUrl!=null);
231 Contract.Requires(!String.IsNullOrWhiteSpace(container));
232 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
235 public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
238 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
239 Contract.Requires(StorageUrl!=null);
240 Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer));
241 Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
242 Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer));
243 Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
246 public bool ObjectExists(string account, string container, string objectName)
249 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
250 Contract.Requires(StorageUrl!=null);
251 Contract.Requires(!String.IsNullOrWhiteSpace(container));
252 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
254 return default(bool);
257 public ObjectInfo GetObjectInfo(string account, string container, string objectName)
260 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
261 Contract.Requires(StorageUrl!=null);
262 Contract.Requires(!String.IsNullOrWhiteSpace(container));
263 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
265 return default(ObjectInfo);
268 public void CreateFolder(string account, string container, string folder)
271 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
272 Contract.Requires(StorageUrl != null);
273 Contract.Requires(!String.IsNullOrWhiteSpace(container));
274 Contract.Requires(!String.IsNullOrWhiteSpace(folder));
277 public Task<TreeHash> GetHashMap(string account, string container, string objectName)
280 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
281 Contract.Requires(StorageUrl != null);
282 Contract.Requires(!String.IsNullOrWhiteSpace(container));
283 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
285 return default(Task<TreeHash>);
288 public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
291 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
292 Contract.Requires(StorageUrl != null);
293 Contract.Requires(!String.IsNullOrWhiteSpace(container));
294 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
295 Contract.Requires(hash != null);
297 return default(Task<IList<string>>);
300 public Task PostBlock(string account, string container, byte[] block, int offset, int count)
303 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
304 Contract.Requires(StorageUrl != null);
305 Contract.Requires(!String.IsNullOrWhiteSpace(container));
306 Contract.Requires(block != null);
307 Contract.Requires(offset>=0);
308 Contract.Requires(offset < block.Length);
309 Contract.Requires(count>=0);
310 Contract.Requires(count <= block.Length);
312 return default(Task);
315 public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end)
318 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
319 Contract.Requires(StorageUrl != null);
320 Contract.Requires(!String.IsNullOrWhiteSpace(container));
321 Contract.Requires(relativeUrl!=null);
322 Contract.Requires(start>=0);
323 Contract.Requires(end==null || end>=0);
325 return default(Task<byte[]>);