Statistics
| Branch: | Revision:

root / trunk / Pithos.Interfaces / ICloudClient.cs @ 3c43ec9b

History | View | Annotate | Download (7.8 kB)

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