2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
7 using System.Threading.Tasks;
9 namespace Pithos.Interfaces
11 [ContractClass(typeof(ICloudClientContract))]
12 public interface ICloudClient
14 string ApiKey { get; set; }
15 string UserName { get; set; }
16 Uri StorageUrl { get; set; }
17 string Token { get; set; }
18 bool UsePithos { get; set; }
19 void Authenticate(string userName,string apiKey);
20 Uri Proxy { get; set; }
21 double DownloadPercentLimit { get; set; }
22 double UploadPercentLimit { get; set; }
25 IList<ContainerInfo> ListContainers();
26 IList<ObjectInfo> ListObjects(string container);
27 IList<ObjectInfo> ListObjects(string container, string folder);
28 bool ContainerExists(string container);
29 ContainerInfo GetContainerInfo(string container);
30 void CreateContainer(string container);
31 void DeleteContainer(string container);
33 Stream GetObject(string container, string objectName);
34 Task PutObject(string container, string objectName, string fileName, string hash = null);
35 void DeleteObject(string container, string objectName);
36 void MoveObject(string container, string oldObjectName, string newObjectName);
37 bool ObjectExists(string container,string objectName);
38 ObjectInfo GetObjectInfo(string container, string objectName);
39 void CreateFolder(string container, string folder);
45 [ContractClassFor(typeof(ICloudClient))]
46 public abstract class ICloudClientContract:ICloudClient
48 public string ApiKey { get; set; }
49 public string UserName { get; set; }
50 public Uri StorageUrl { get; set; }
51 public string Token { get; set; }
52 public Uri Proxy { get; set; }
53 public double DownloadPercentLimit { get; set; }
54 public double UploadPercentLimit { get; set; }
56 public bool UsePithos { get; set; }
58 public void Authenticate(string userName, string apiKey)
60 Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(apiKey), "ApiKey must be filled before calling Authenticate");
61 Contract.Requires<ArgumentNullException>(!String.IsNullOrWhiteSpace(userName), "UserName must be filled before calling Authenticate");
64 Contract.Ensures(apiKey==ApiKey);
65 Contract.Ensures(userName==UserName);
66 Contract.Ensures(StorageUrl!=null);
67 Contract.Ensures(!String.IsNullOrWhiteSpace(Token));
71 public IList<ContainerInfo> ListContainers()
73 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
74 Contract.Requires(StorageUrl!=null);
76 return default(IList<ContainerInfo>);
79 public IList<ObjectInfo> ListObjects(string container)
81 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
82 Contract.Requires(StorageUrl != null);
83 Contract.Requires(!String.IsNullOrWhiteSpace(container));
85 return default(IList<ObjectInfo>);
88 public IList<ObjectInfo> ListObjects(string container, string folder)
90 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
91 Contract.Requires(StorageUrl != null);
92 Contract.Requires(!String.IsNullOrWhiteSpace(container));
93 Contract.Requires(!String.IsNullOrWhiteSpace(folder));
95 return default(IList<ObjectInfo>);
98 public bool ContainerExists(string container)
100 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
101 Contract.Requires(StorageUrl!=null);
102 Contract.Requires(!String.IsNullOrWhiteSpace(container));
104 return default(bool);
107 public ContainerInfo GetContainerInfo(string container)
109 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
110 Contract.Requires(StorageUrl!=null);
111 Contract.Requires(!String.IsNullOrWhiteSpace(container));
113 return default(ContainerInfo);
116 public void CreateContainer(string container)
118 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
119 Contract.Requires(StorageUrl!=null);
120 Contract.Requires(!String.IsNullOrWhiteSpace(container));
123 public void DeleteContainer(string container)
125 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
126 Contract.Requires(StorageUrl!=null);
127 Contract.Requires(!String.IsNullOrWhiteSpace(container));
130 public Stream GetObject(string container, string objectName)
132 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
133 Contract.Requires(StorageUrl!=null);
134 Contract.Requires(!String.IsNullOrWhiteSpace(container));
135 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
137 return default(Stream);
140 public Task PutObject(string container, string objectName, string fileName, string hash = null)
142 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
143 Contract.Requires(StorageUrl!=null);
144 Contract.Requires(!String.IsNullOrWhiteSpace(container));
145 Contract.Requires(!String.IsNullOrWhiteSpace(fileName));
146 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
148 return default(Task);
151 public void DeleteObject(string container, string objectName)
153 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
154 Contract.Requires(StorageUrl!=null);
155 Contract.Requires(!String.IsNullOrWhiteSpace(container));
156 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
159 public void MoveObject(string container, string oldObjectName, string newObjectName)
161 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
162 Contract.Requires(StorageUrl!=null);
163 Contract.Requires(!String.IsNullOrWhiteSpace(container));
164 Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName));
165 Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName));
168 public bool ObjectExists(string container,string objectName)
170 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
171 Contract.Requires(StorageUrl!=null);
172 Contract.Requires(!String.IsNullOrWhiteSpace(container));
173 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
175 return default(bool);
178 public ObjectInfo GetObjectInfo(string container,string objectName)
180 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
181 Contract.Requires(StorageUrl!=null);
182 Contract.Requires(!String.IsNullOrWhiteSpace(container));
183 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
185 return default(ObjectInfo);
188 public void CreateFolder(string container, string folder)
190 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
191 Contract.Requires(StorageUrl != null);
192 Contract.Requires(!String.IsNullOrWhiteSpace(container));
193 Contract.Requires(!String.IsNullOrWhiteSpace(folder));
197 public class ContainerInfo
199 public string Name { get; set; }
200 public long Count { get; set; }
201 public long Bytes { get; set; }
203 public static ContainerInfo Empty=new ContainerInfo();
206 public class ObjectInfo
208 public string Name { get; set; }
209 public string Hash { get; set; }
210 public long Bytes { get; set; }
211 public string Content_Type { get; set; }
212 public DateTime Last_Modified { get; set; }
214 private Dictionary<string, string> _tags=new Dictionary<string, string>();
215 public Dictionary<string, string> Tags
217 get { return _tags; }
218 set { _tags = value; }
221 public static ObjectInfo Empty=new ObjectInfo {Name=String.Empty,Hash=String.Empty,Bytes=0,Content_Type=String.Empty,Last_Modified=DateTime.MinValue};