Statistics
| Branch: | Revision:

root / trunk / Pithos.Network / ICloudClient.cs @ cfed7823

History | View | Annotate | Download (12.3 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
        string ApiKey { get; set; }
13
        string UserName { get; set; }
14
        Uri StorageUrl { get; set; }
15
        string Token { get; set; }
16
        bool UsePithos { get; set; }
17
        void Authenticate(string userName,string apiKey);
18
        Uri Proxy { get; set; }
19
        double DownloadPercentLimit { get; set; }
20
        double UploadPercentLimit { get; set; }
21
        string AuthenticationUrl { get; set; }
22

    
23
        #region Container operations
24
        
25
        IList<ContainerInfo> ListContainers(string account=null);
26
        IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null);
27
        IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null);
28
        bool ContainerExists(string account, string container);
29
        ContainerInfo GetContainerInfo(string account, string container);
30
        void CreateContainer(string account, string container);
31
        void DeleteContainer(string account, string container);
32
        #endregion
33

    
34
        #region Object operations        
35
        Task GetObject(string account, string container, string objectName, string fileName);
36
        Task PutObject(string account, string container, string objectName, string fileName, string hash = null);
37
        void DeleteObject(string account, string container, string objectName, string trashContainer);
38
        //void DeleteObject(string container, string objectName, string account = null);
39
        void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName);
40
        bool ObjectExists(string account, string container, string objectName);
41
        ObjectInfo GetObjectInfo(string account, string container, string objectName);
42
        void CreateFolder(string account, string container, string folder);
43
        #endregion
44

    
45
        #region Hashmap operations        
46
        Task<TreeHash> GetHashMap(string account, string container, string objectName);
47
        Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash);
48
        Task PostBlock(string account, string container, byte[] block, int offset, int count);
49
        Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end);
50
        #endregion
51

    
52
        #region Sharing operations        
53
        IList<ObjectInfo> ListSharedObjects(DateTime? since);
54
        void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write);
55

    
56
        #endregion
57
    }
58

    
59

    
60
    [ContractClassFor(typeof(ICloudClient))]
61
    public abstract class ICloudClientContract:ICloudClient
62
    {
63
        public string ApiKey { get; set; }
64
        public string UserName { get; set; }
65
        public Uri StorageUrl { get; set; }
66
        public string Token { get; set; }
67
        public Uri Proxy { get; set; }
68
        public double DownloadPercentLimit { get; set; }
69
        public double UploadPercentLimit { get; set; }
70

    
71
        public string AuthenticationUrl { get; set; }
72

    
73
        public bool UsePithos { get; set; }
74

    
75
        public void Authenticate(string userName, string apiKey)
76
        {
77
            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(apiKey), "ApiKey must be filled before calling Authenticate");
78
            Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(userName), "UserName must be filled before calling Authenticate");
79

    
80

    
81
            Contract.Ensures(apiKey==ApiKey);
82
            Contract.Ensures(userName==UserName);
83
            Contract.Ensures(StorageUrl!=null);
84
            Contract.Ensures(!String.IsNullOrWhiteSpace(Token));
85
            
86
        }
87

    
88
        public IList<ContainerInfo> ListContainers(string account=null)
89
        {
90
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
91
            Contract.Requires(StorageUrl!=null);            
92

    
93
            return default(IList<ContainerInfo>);
94
        }
95

    
96
        public IList<ObjectInfo> ListSharedObjects(DateTime? since)
97
        {
98
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
99
            Contract.Requires(StorageUrl != null);
100

    
101
            return default(IList<ObjectInfo>);
102
        }
103

    
104
        public void ShareObject(string account, string container, string objectName, string shareTo, bool read, bool write)
105
        {
106
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
107
            Contract.Requires(StorageUrl != null);
108
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
109
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
110
            Contract.Requires(!String.IsNullOrWhiteSpace(account));
111
            Contract.Requires(!String.IsNullOrWhiteSpace(shareTo));
112
   
113
        }
114

    
115

    
116
        public IList<ObjectInfo> ListObjects(string account, string container, DateTime? since = null)
117
        {
118
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
119
            Contract.Requires(StorageUrl != null);
120
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
121

    
122
            return default(IList<ObjectInfo>);
123
        }
124

    
125
        public IList<ObjectInfo> ListObjects(string account, string container, string folder, DateTime? since = null)
126
        {
127
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
128
            Contract.Requires(StorageUrl != null);
129
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
130
            Contract.Requires(!String.IsNullOrWhiteSpace(folder));
131

    
132
            return default(IList<ObjectInfo>);
133
        }
134

    
135
        public bool ContainerExists(string account, string container)
136
        {
137
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
138
            Contract.Requires(StorageUrl!=null);
139
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
140

    
141
            return default(bool);
142
        }
143

    
144
        public ContainerInfo GetContainerInfo(string account, string container)
145
        {
146
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
147
            Contract.Requires(StorageUrl!=null);
148
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
149

    
150
            return default(ContainerInfo);
151
        }
152

    
153
        public void CreateContainer(string account, string container)
154
        {
155
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
156
            Contract.Requires(StorageUrl!=null);
157
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
158
        }
159

    
160
        public void DeleteContainer(string account, string container)
161
        {
162
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
163
            Contract.Requires(StorageUrl!=null);
164
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
165
        }
166

    
167
        public Task GetObject(string account, string container, string objectName, string fileName)
168
        {
169
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
170
            Contract.Requires(StorageUrl!=null);
171
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
172
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
173

    
174
            return default(Task);
175
        }
176

    
177
        public Task PutObject(string account, string container, string objectName, string fileName, string hash = null)
178
        {
179
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
180
            Contract.Requires(StorageUrl!=null);
181
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
182
            Contract.Requires(!String.IsNullOrWhiteSpace(fileName));                        
183
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
184

    
185
            return default(Task);
186
        }
187

    
188
        public void DeleteObject(string account, string container, string objectName, string trashContainer)
189
        {
190
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
191
            Contract.Requires(StorageUrl!=null);
192
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
193
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
194
            Contract.Requires(!String.IsNullOrWhiteSpace(trashContainer));
195
        }
196

    
197
        public void DeleteObject(string container, string objectName, string account = null)
198
        {
199
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
200
            Contract.Requires(StorageUrl!=null);
201
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
202
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));            
203
        }
204

    
205
        public void MoveObject(string account, string sourceContainer, string oldObjectName, string targetContainer, string newObjectName)
206
        {
207
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
208
            Contract.Requires(StorageUrl!=null);
209
            Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer));
210
            Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
211
            Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer));
212
            Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
213
        }
214

    
215
        public bool ObjectExists(string account, string container, string objectName)
216
        {
217
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
218
            Contract.Requires(StorageUrl!=null);
219
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
220
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
221

    
222
            return default(bool);
223
        }
224

    
225
        public ObjectInfo GetObjectInfo(string account, string container, string objectName)
226
        {
227
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
228
            Contract.Requires(StorageUrl!=null);
229
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
230
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
231

    
232
            return default(ObjectInfo);
233
        }
234

    
235
        public void CreateFolder(string account, string container, string folder)
236
        {
237
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
238
            Contract.Requires(StorageUrl != null);
239
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
240
            Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
241
        }
242

    
243
        public Task<TreeHash> GetHashMap(string account, string container, string objectName)
244
        {
245
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
246
            Contract.Requires(StorageUrl != null);
247
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
248
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
249

    
250
            return default(Task<TreeHash>);
251
        }
252

    
253
        public Task<IList<string>> PutHashMap(string account, string container, string objectName, TreeHash hash)
254
        {
255
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
256
            Contract.Requires(StorageUrl != null);
257
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
258
            Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
259
            Contract.Requires(hash != null);
260

    
261
            return default(Task<IList<string>>);
262
        }
263

    
264
        public Task PostBlock(string account, string container, byte[] block, int offset, int count)
265
        {
266
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
267
            Contract.Requires(StorageUrl != null);
268
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
269
            Contract.Requires(block != null);
270
            Contract.Requires(offset>=0);
271
            Contract.Requires(offset < block.Length);
272
            Contract.Requires(count>=0);
273
            Contract.Requires(count <= block.Length);
274
            
275
            return default(Task);
276
        }
277

    
278
        public Task<byte[]> GetBlock(string account, string container, Uri relativeUrl, long start, long? end)
279
        {
280
            Contract.Requires(!String.IsNullOrWhiteSpace(Token));
281
            Contract.Requires(StorageUrl != null);
282
            Contract.Requires(!String.IsNullOrWhiteSpace(container));
283
            Contract.Requires(relativeUrl!=null);
284
            Contract.Requires(start>=0);
285
            Contract.Requires(end==null || end>=0);
286

    
287
            return default(Task<byte[]>);
288
        }
289

    
290
    }
291
}