Added folder tests
[pithos-ms-client] / trunk / Pithos.Interfaces / ICloudClient.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
4 using System.IO;
5 using System.Linq;
6 using System.Text;
7
8 namespace Pithos.Interfaces
9 {
10     [ContractClass(typeof(ICloudClientContract))]
11     public interface ICloudClient
12     {
13         string ApiKey { get; set; }
14         string UserName { get; set; }
15         Uri StorageUrl { get; set; }
16         string Token { get; set; }
17         bool UsePithos { get; set; }
18         void Authenticate(string userName,string apiKey);
19         
20         IList<ContainerInfo> ListContainers();
21         IList<ObjectInfo> ListObjects(string container);
22         bool ContainerExists(string container);
23         ContainerInfo GetContainerInfo(string container);
24         void CreateContainer(string container);
25         void DeleteContainer(string container);
26         
27         Stream GetObject(string container, string objectName);
28         void PutObject(string container, string objectName, string fileName,long fileSize);
29         void DeleteObject(string container, string objectName);
30         void MoveObject(string container, string oldObjectName, string newObjectName);
31         bool ObjectExists(string container,string objectName);
32         ObjectInfo GetObjectInfo(string container, string objectName);
33         void CreateFolder(string container, string folder);
34     }
35
36
37     [ContractClassFor(typeof(ICloudClient))]
38     public abstract class ICloudClientContract:ICloudClient
39     {
40         public string ApiKey { get; set; }
41         public string UserName { get; set; }
42         public Uri StorageUrl { get; set; }
43         public string Token { get; set; }
44
45         public bool UsePithos { get; set; }
46
47         public void Authenticate(string userName, string apiKey)
48         {
49             Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(apiKey), "ApiKey must be filled before calling Authenticate");
50             Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(userName), "UserName must be filled before calling Authenticate");
51
52
53             Contract.Ensures(apiKey==ApiKey);
54             Contract.Ensures(userName==UserName);
55             Contract.Ensures(StorageUrl!=null);
56             Contract.Ensures(!String.IsNullOrWhiteSpace(Token));
57             
58         }
59
60         public IList<ContainerInfo> ListContainers()
61         {
62             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
63             Contract.Requires(StorageUrl!=null);            
64
65             return default(IList<ContainerInfo>);
66         }
67
68         public IList<ObjectInfo> ListObjects(string container)
69         {
70             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
71             Contract.Requires(StorageUrl != null);
72             Contract.Requires(!String.IsNullOrWhiteSpace(container));
73
74             return default(IList<ObjectInfo>);
75         }
76
77         public bool ContainerExists(string container)
78         {
79             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
80             Contract.Requires(StorageUrl!=null);
81             Contract.Requires(!String.IsNullOrWhiteSpace(container));
82
83             return default(bool);
84         }
85
86         public ContainerInfo GetContainerInfo(string container)
87         {
88             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
89             Contract.Requires(StorageUrl!=null);
90             Contract.Requires(!String.IsNullOrWhiteSpace(container));
91
92             return default(ContainerInfo);
93         }
94
95         public void CreateContainer(string container)
96         {
97             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
98             Contract.Requires(StorageUrl!=null);
99             Contract.Requires(!String.IsNullOrWhiteSpace(container));
100         }
101
102         public void DeleteContainer(string container)
103         {
104             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
105             Contract.Requires(StorageUrl!=null);
106             Contract.Requires(!String.IsNullOrWhiteSpace(container));
107         }
108
109         public Stream GetObject(string container, string objectName)
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
116             return default(Stream);
117         }
118
119         public void PutObject(string container, string objectName, string fileName,long fileSize)
120         {
121             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
122             Contract.Requires(StorageUrl!=null);
123             Contract.Requires(!String.IsNullOrWhiteSpace(container));
124             Contract.Requires(!String.IsNullOrWhiteSpace(fileName));            
125             Contract.Requires(fileSize>=0);            
126             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
127         }
128
129         public void DeleteObject(string container, string objectName)
130         {
131             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
132             Contract.Requires(StorageUrl!=null);
133             Contract.Requires(!String.IsNullOrWhiteSpace(container));
134             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
135         }
136
137         public void MoveObject(string container, string oldObjectName, string newObjectName)
138         {
139             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
140             Contract.Requires(StorageUrl!=null);
141             Contract.Requires(!String.IsNullOrWhiteSpace(container));
142             Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
143             Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
144         }
145
146         public bool ObjectExists(string container,string objectName)
147         {
148             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
149             Contract.Requires(StorageUrl!=null);
150             Contract.Requires(!String.IsNullOrWhiteSpace(container));
151             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
152
153             return default(bool);
154         }
155
156         public ObjectInfo GetObjectInfo(string container,string objectName)
157         {
158             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
159             Contract.Requires(StorageUrl!=null);
160             Contract.Requires(!String.IsNullOrWhiteSpace(container));
161             Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
162
163             return default(ObjectInfo);
164         }
165
166         public void CreateFolder(string container, string folder)
167         {
168             Contract.Requires(!String.IsNullOrWhiteSpace(Token));
169             Contract.Requires(StorageUrl != null);
170             Contract.Requires(!String.IsNullOrWhiteSpace(container));
171             Contract.Requires(!String.IsNullOrWhiteSpace(folder));            
172         }
173     }
174
175     public class ContainerInfo
176     {
177         public string Name { get; set; }
178         public long Count { get; set; }
179         public long Bytes { get; set; }
180
181         public static ContainerInfo Empty=new ContainerInfo();
182     }
183     
184     public class ObjectInfo
185     {
186         public string Name { get; set; }
187         public string Hash { get; set; }
188         public long Bytes { get; set; }
189         public string Content_Type { get; set; }
190         public DateTime Last_Modified { get; set; }
191
192         public static ObjectInfo Empty=new ObjectInfo {Name=String.Empty,Hash=String.Empty,Bytes=0,Content_Type=String.Empty,Last_Modified=DateTime.MinValue};
193     }
194 }