First version of File Properties window. Works with random file
[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
64
65     [ContractClassFor(typeof(ICloudClient))]
66     public abstract class ICloudClientContract:ICloudClient
67     {
68
69         public string ApiKey { get; set; }
70         public string UserName { get; set; }
71         public Uri StorageUrl { get; set; }
72         public string Token { get; set; }
73
74         public Uri Proxy { get; set; }
75         public double DownloadPercentLimit { get; set; }
76         public double UploadPercentLimit { get; set; }
77
78         public string AuthenticationUrl { get; set; }
79
80         public bool UsePithos { get; set; }
81
82         public AccountInfo Authenticate()
83         {
84             Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(ApiKey), "ApiKey must be filled before calling Authenticate");
85             Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(UserName), "UserName must be filled before calling Authenticate");
86
87             return default(AccountInfo);
88         }
89
90         public IList<ContainerInfo> ListContainers(string account)
91         {
92             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
93             Contract.Requires(StorageUrl!=null);            
94
95             return default(IList<ContainerInfo>);
96         }
97
98         public IList<ObjectInfo> ListSharedObjects(DateTime? since)
99         {
100
101             
102             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
103             Contract.Requires(StorageUrl != null);
104
105             return default(IList<ObjectInfo>);
106         }
107
108         public void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write)
109         {
110             
111             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
112             Contract.Requires(StorageUrl != null);
113             Contract.Requires(!String.IsNullOrWhiteSpace(container));
114             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
115             Contract.Requires(!String.IsNullOrWhiteSpace(account));
116             Contract.Requires(!String.IsNullOrWhiteSpace(shareTo));
117    
118         }
119
120         public AccountInfo GetAccountPolicies(AccountInfo accountInfo)
121         {
122             Contract.Requires(accountInfo!=null);
123
124             return default(AccountInfo);
125         }
126
127
128         public IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null)
129         {
130             
131             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
132             Contract.Requires(StorageUrl != null);
133             Contract.Requires(!String.IsNullOrWhiteSpace(container));
134
135             return default(IList<ObjectInfo>);
136         }
137
138         public IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null)
139         {
140             
141             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
142             Contract.Requires(StorageUrl != null);
143             Contract.Requires(!String.IsNullOrWhiteSpace(container));
144             Contract.Requires(!String.IsNullOrWhiteSpace(folder));
145
146             return default(IList<ObjectInfo>);
147         }
148
149         public bool ContainerExists(string account, string container)
150         {
151             
152             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
153             Contract.Requires(StorageUrl!=null);
154             Contract.Requires(!String.IsNullOrWhiteSpace(container));
155
156             return default(bool);
157         }
158
159         public ContainerInfo GetContainerInfo(string account, string container)
160         {
161             
162             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
163             Contract.Requires(StorageUrl!=null);
164             Contract.Requires(!String.IsNullOrWhiteSpace(container));
165
166             return default(ContainerInfo);
167         }
168
169         public void CreateContainer(string account, string container)
170         {
171             
172             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
173             Contract.Requires(StorageUrl!=null);
174             Contract.Requires(!String.IsNullOrWhiteSpace(container));
175         }
176
177         public void DeleteContainer(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
185         public Task GetObject(string account, string container, string objectName, string fileName)
186         {
187             
188             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
189             Contract.Requires(StorageUrl!=null);
190             Contract.Requires(!String.IsNullOrWhiteSpace(container));
191             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
192
193             return default(Task);
194         }
195
196         public Task PutObject(string account, string container, string objectName, string fileName, string hash = null)
197         {
198             
199             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
200             Contract.Requires(StorageUrl!=null);
201             Contract.Requires(!String.IsNullOrWhiteSpace(container));
202             Contract.Requires(!String.IsNullOrWhiteSpace(fileName));                        
203             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
204
205             return default(Task);
206         }
207
208         public void DeleteObject(string account, string container, string objectName)
209         {
210             
211             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
212             Contract.Requires(StorageUrl!=null);
213             Contract.Requires(!String.IsNullOrWhiteSpace(container));
214             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));            
215         }
216
217         public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
218         {
219             
220             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
221             Contract.Requires(StorageUrl!=null);
222             Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer));
223             Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
224             Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer));
225             Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
226         }
227
228         public bool ObjectExists(string account, string container, string objectName)
229         {
230             
231             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
232             Contract.Requires(StorageUrl!=null);
233             Contract.Requires(!String.IsNullOrWhiteSpace(container));
234             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
235
236             return default(bool);
237         }
238
239         public ObjectInfo GetObjectInfo(string account, string container, string objectName)
240         {
241             
242             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
243             Contract.Requires(StorageUrl!=null);
244             Contract.Requires(!String.IsNullOrWhiteSpace(container));
245             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
246
247             return default(ObjectInfo);
248         }
249
250         public void CreateFolder(string account, string container, string folder)
251         {
252             
253             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
254             Contract.Requires(StorageUrl != null);
255             Contract.Requires(!String.IsNullOrWhiteSpace(container));
256             Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
257         }
258
259         public Task<TreeHash> GetHashMap(string account, string container, string objectName)
260         {
261             
262             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
263             Contract.Requires(StorageUrl != null);
264             Contract.Requires(!String.IsNullOrWhiteSpace(container));
265             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
266
267             return default(Task<TreeHash>);
268         }
269
270         public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
271         {
272             
273             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
274             Contract.Requires(StorageUrl != null);
275             Contract.Requires(!String.IsNullOrWhiteSpace(container));
276             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
277             Contract.Requires(hash != null);
278
279             return default(Task<IList<string>>);
280         }
281
282         public Task PostBlock(string account, string container, byte[] block, int offset, int count)
283         {
284             
285             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
286             Contract.Requires(StorageUrl != null);
287             Contract.Requires(!String.IsNullOrWhiteSpace(container));
288             Contract.Requires(block != null);
289             Contract.Requires(offset>=0);
290             Contract.Requires(offset < block.Length);
291             Contract.Requires(count>=0);
292             Contract.Requires(count <= block.Length);
293             
294             return default(Task);
295         }
296
297         public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end)
298         {
299             
300             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
301             Contract.Requires(StorageUrl != null);
302             Contract.Requires(!String.IsNullOrWhiteSpace(container));
303             Contract.Requires(relativeUrl!=null);
304             Contract.Requires(start>=0);
305             Contract.Requires(end==null || end>=0);
306
307             return default(Task<byte[]>);
308         }
309
310     }
311 }