Removed unneeded registry key. Resolves #1690
[pithos-ms-client] / trunk / Pithos.Network / ICloudClient.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
4 using System.Threading.Tasks;
5 using Pithos.Interfaces;
6
7 namespace Pithos.Network
8 {
9     [ContractClass(typeof(ICloudClientContract))]
10     public interface ICloudClient
11     {
12
13         string ApiKey { get; set; }
14         string UserName { get; set; }
15         Uri StorageUrl { get; set; }
16
17         string Token { get; set; }
18
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; }
25
26         #region Container operations
27
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);
35         #endregion
36
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);
46         #endregion
47
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);
53         #endregion
54
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);
58
59         #endregion
60
61         AccountInfo GetAccountPolicies(AccountInfo accountInfo);
62
63         void UpdateMetadata(ObjectInfo objectInfo);
64
65         void UpdateMetadata(ContainerInfo Container);
66     }
67
68
69     [ContractClassFor(typeof(ICloudClient))]
70     public abstract class ICloudClientContract:ICloudClient
71     {
72
73         public string ApiKey { get; set; }
74         public string UserName { get; set; }
75         public Uri StorageUrl { get; set; }
76         public string Token { get; set; }
77
78         public Uri Proxy { get; set; }
79         public double DownloadPercentLimit { get; set; }
80         public double UploadPercentLimit { get; set; }
81
82         public string AuthenticationUrl { get; set; }
83
84         public bool UsePithos { get; set; }
85
86         public AccountInfo Authenticate()
87         {
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");
90
91             return default(AccountInfo);
92         }
93
94         public IList<ContainerInfo> ListContainers(string account)
95         {
96             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
97             Contract.Requires(StorageUrl!=null);            
98
99             return default(IList<ContainerInfo>);
100         }
101
102         public IList<ObjectInfo> ListSharedObjects(DateTime? since)
103         {
104
105             
106             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
107             Contract.Requires(StorageUrl != null);
108
109             return default(IList<ObjectInfo>);
110         }
111
112         public void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write)
113         {
114             
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));
121    
122         }
123
124         public AccountInfo GetAccountPolicies(AccountInfo accountInfo)
125         {
126             Contract.Requires(accountInfo!=null);
127
128             return default(AccountInfo);
129         }
130
131         public void UpdateMetadata(ObjectInfo objectInfo)
132         {
133             Contract.Requires(objectInfo!=null);
134
135             return ;
136         }
137         
138         public void UpdateMetadata(ContainerInfo objectInfo)
139         {
140             Contract.Requires(objectInfo!=null);
141
142             return ;
143         }
144
145
146         public IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null)
147         {
148             
149             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
150             Contract.Requires(StorageUrl != null);
151             Contract.Requires(!String.IsNullOrWhiteSpace(container));
152
153             return default(IList<ObjectInfo>);
154         }
155
156         public IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null)
157         {
158             
159             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
160             Contract.Requires(StorageUrl != null);
161             Contract.Requires(!String.IsNullOrWhiteSpace(container));
162             Contract.Requires(!String.IsNullOrWhiteSpace(folder));
163
164             return default(IList<ObjectInfo>);
165         }
166
167         public bool ContainerExists(string account, string container)
168         {
169             
170             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
171             Contract.Requires(StorageUrl!=null);
172             Contract.Requires(!String.IsNullOrWhiteSpace(container));
173
174             return default(bool);
175         }
176
177         public ContainerInfo GetContainerInfo(string account, string container)
178         {
179             
180             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
181             Contract.Requires(StorageUrl!=null);
182             Contract.Requires(!String.IsNullOrWhiteSpace(container));
183
184             return default(ContainerInfo);
185         }
186
187         public void CreateContainer(string account, string container)
188         {
189             
190             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
191             Contract.Requires(StorageUrl!=null);
192             Contract.Requires(!String.IsNullOrWhiteSpace(container));
193         }
194
195         public void DeleteContainer(string account, string container)
196         {
197             
198             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
199             Contract.Requires(StorageUrl!=null);
200             Contract.Requires(!String.IsNullOrWhiteSpace(container));
201         }
202
203         public Task GetObject(string account, string container, string objectName, string fileName)
204         {
205             
206             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
207             Contract.Requires(StorageUrl!=null);
208             Contract.Requires(!String.IsNullOrWhiteSpace(container));
209             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
210
211             return default(Task);
212         }
213
214         public Task PutObject(string account, string container, string objectName, string fileName, string hash = null)
215         {
216             
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));
222
223             return default(Task);
224         }
225
226         public void DeleteObject(string account, string container, string objectName)
227         {
228             
229             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
230             Contract.Requires(StorageUrl!=null);
231             Contract.Requires(!String.IsNullOrWhiteSpace(container));
232             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));            
233         }
234
235         public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
236         {
237             
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));
244         }
245
246         public bool ObjectExists(string account, string container, string objectName)
247         {
248             
249             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
250             Contract.Requires(StorageUrl!=null);
251             Contract.Requires(!String.IsNullOrWhiteSpace(container));
252             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
253
254             return default(bool);
255         }
256
257         public ObjectInfo GetObjectInfo(string account, string container, string objectName)
258         {
259             
260             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
261             Contract.Requires(StorageUrl!=null);
262             Contract.Requires(!String.IsNullOrWhiteSpace(container));
263             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
264
265             return default(ObjectInfo);
266         }
267
268         public void CreateFolder(string account, string container, string folder)
269         {
270             
271             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
272             Contract.Requires(StorageUrl != null);
273             Contract.Requires(!String.IsNullOrWhiteSpace(container));
274             Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
275         }
276
277         public Task<TreeHash> GetHashMap(string account, string container, string objectName)
278         {
279             
280             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
281             Contract.Requires(StorageUrl != null);
282             Contract.Requires(!String.IsNullOrWhiteSpace(container));
283             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
284
285             return default(Task<TreeHash>);
286         }
287
288         public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
289         {
290             
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);
296
297             return default(Task<IList<string>>);
298         }
299
300         public Task PostBlock(string account, string container, byte[] block, int offset, int count)
301         {
302             
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);
311             
312             return default(Task);
313         }
314
315         public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end)
316         {
317             
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);
324
325             return default(Task<byte[]>);
326         }
327
328     }
329 }