2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
8 namespace Pithos.Interfaces
10 [ContractClass(typeof(ICloudClientContract))]
11 public interface ICloudClient
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);
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);
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);
37 [ContractClassFor(typeof(ICloudClient))]
38 public abstract class ICloudClientContract:ICloudClient
40 public string ApiKey { get; set; }
41 public string UserName { get; set; }
42 public Uri StorageUrl { get; set; }
43 public string Token { get; set; }
45 public bool UsePithos { get; set; }
47 public void Authenticate(string userName, string apiKey)
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");
53 Contract.Ensures(apiKey==ApiKey);
54 Contract.Ensures(userName==UserName);
55 Contract.Ensures(StorageUrl!=null);
56 Contract.Ensures(!String.IsNullOrWhiteSpace(Token));
60 public IList<ContainerInfo> ListContainers()
62 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
63 Contract.Requires(StorageUrl!=null);
65 return default(IList<ContainerInfo>);
68 public IList<ObjectInfo> ListObjects(string container)
70 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
71 Contract.Requires(StorageUrl != null);
72 Contract.Requires(!String.IsNullOrWhiteSpace(container));
74 return default(IList<ObjectInfo>);
77 public bool ContainerExists(string container)
79 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
80 Contract.Requires(StorageUrl!=null);
81 Contract.Requires(!String.IsNullOrWhiteSpace(container));
86 public ContainerInfo GetContainerInfo(string container)
88 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
89 Contract.Requires(StorageUrl!=null);
90 Contract.Requires(!String.IsNullOrWhiteSpace(container));
92 return default(ContainerInfo);
95 public void CreateContainer(string container)
97 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
98 Contract.Requires(StorageUrl!=null);
99 Contract.Requires(!String.IsNullOrWhiteSpace(container));
102 public void DeleteContainer(string container)
104 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
105 Contract.Requires(StorageUrl!=null);
106 Contract.Requires(!String.IsNullOrWhiteSpace(container));
109 public Stream GetObject(string container, string objectName)
111 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
112 Contract.Requires(StorageUrl!=null);
113 Contract.Requires(!String.IsNullOrWhiteSpace(container));
114 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
116 return default(Stream);
119 public void PutObject(string container, string objectName, string fileName,long fileSize)
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));
129 public void DeleteObject(string container, string objectName)
131 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
132 Contract.Requires(StorageUrl!=null);
133 Contract.Requires(!String.IsNullOrWhiteSpace(container));
134 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
137 public void MoveObject(string container, string oldObjectName, string newObjectName)
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));
146 public bool ObjectExists(string container,string objectName)
148 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
149 Contract.Requires(StorageUrl!=null);
150 Contract.Requires(!String.IsNullOrWhiteSpace(container));
151 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
153 return default(bool);
156 public ObjectInfo GetObjectInfo(string container,string objectName)
158 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
159 Contract.Requires(StorageUrl!=null);
160 Contract.Requires(!String.IsNullOrWhiteSpace(container));
161 Contract.Requires(!String.IsNullOrWhiteSpace(objectName));
163 return default(ObjectInfo);
166 public void CreateFolder(string container, string folder)
168 Contract.Requires(!String.IsNullOrWhiteSpace(Token));
169 Contract.Requires(StorageUrl != null);
170 Contract.Requires(!String.IsNullOrWhiteSpace(container));
171 Contract.Requires(!String.IsNullOrWhiteSpace(folder));
175 public class ContainerInfo
177 public string Name { get; set; }
178 public long Count { get; set; }
179 public long Bytes { get; set; }
181 public static ContainerInfo Empty=new ContainerInfo();
184 public class ObjectInfo
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; }
192 public static ObjectInfo Empty=new ObjectInfo {Name=String.Empty,Hash=String.Empty,Bytes=0,Content_Type=String.Empty,Last_Modified=DateTime.MinValue};