Statistics
| Branch: | Revision:

root / trunk / Pithos.Network / ICloudClient.cs @ 4f6d51d4

History | View | Annotate | Download (12.6 kB)

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, string contentType = "application/octet-stream");
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, string contentType = "application/octet-stream")
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
            Contract.Requires(!String.IsNullOrWhiteSpace(contentType));
223

    
224
            return default(Task);
225
        }
226

    
227
        public void DeleteObject(string account, string container, string objectName)
228
        {
229
            
230
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
231
            Contract.Requires(StorageUrl!=null);
232
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
233
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));            
234
        }
235

    
236
        public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
237
        {
238
            
239
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
240
            Contract.Requires(StorageUrl!=null);
241
            Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer));
242
            Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
243
            Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer));
244
            Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
245
        }
246

    
247
        public bool ObjectExists(string account, string container, string objectName)
248
        {
249
            
250
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
251
            Contract.Requires(StorageUrl!=null);
252
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
253
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
254

    
255
            return default(bool);
256
        }
257

    
258
        public ObjectInfo GetObjectInfo(string account, string container, string objectName)
259
        {
260
            
261
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
262
            Contract.Requires(StorageUrl!=null);
263
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
264
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
265

    
266
            return default(ObjectInfo);
267
        }
268

    
269
        public void CreateFolder(string account, string container, string folder)
270
        {
271
            
272
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
273
            Contract.Requires(StorageUrl != null);
274
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
275
            Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
276
        }
277

    
278
        public Task<TreeHash> GetHashMap(string account, string container, string objectName)
279
        {
280
            
281
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
282
            Contract.Requires(StorageUrl != null);
283
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
284
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
285

    
286
            return default(Task<TreeHash>);
287
        }
288

    
289
        public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
290
        {
291
            
292
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
293
            Contract.Requires(StorageUrl != null);
294
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
295
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
296
            Contract.Requires(hash != null);
297

    
298
            return default(Task<IList<string>>);
299
        }
300

    
301
        public Task PostBlock(string account, string container, byte[] block, int offset, int count)
302
        {
303
            
304
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
305
            Contract.Requires(StorageUrl != null);
306
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
307
            Contract.Requires(block != null);
308
            Contract.Requires(offset>=0);
309
            Contract.Requires(offset < block.Length);
310
            Contract.Requires(count>=0);
311
            Contract.Requires(count <= block.Length);
312
            
313
            return default(Task);
314
        }
315

    
316
        public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end)
317
        {
318
            
319
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
320
            Contract.Requires(StorageUrl != null);
321
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
322
            Contract.Requires(relativeUrl!=null);
323
            Contract.Requires(start>=0);
324
            Contract.Requires(end==null || end>=0);
325

    
326
            return default(Task<byte[]>);
327
        }
328

    
329
    }
330
}