using System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Pithos.Interfaces { [ContractClass(typeof(ICloudClientContract))] public interface ICloudClient { string ApiKey { get; set; } string UserName { get; set; } Uri StorageUrl { get; set; } string Token { get; set; } bool UsePithos { get; set; } void Authenticate(string userName,string apiKey); Uri Proxy { get; set; } double DownloadPercentLimit { get; set; } double UploadPercentLimit { get; set; } string AuthenticationUrl { get; set; } IList ListContainers(); IList ListObjects(string container,DateTime? since=null); IList ListObjects(string container, string folder, DateTime? since = null); bool ContainerExists(string container); ContainerInfo GetContainerInfo(string container); void CreateContainer(string container); void DeleteContainer(string container); Task GetObject(string container, string objectName, string fileName); Task PutObject(string container, string objectName, string fileName, string hash = null); void DeleteObject(string container, string objectName); void MoveObject(string sourceContainer, string oldObjectName, string targetContainer,string newObjectName); bool ObjectExists(string container,string objectName); ObjectInfo GetObjectInfo(string container, string objectName); void CreateFolder(string container, string folder); } [ContractClassFor(typeof(ICloudClient))] public abstract class ICloudClientContract:ICloudClient { public string ApiKey { get; set; } public string UserName { get; set; } public Uri StorageUrl { get; set; } public string Token { get; set; } public Uri Proxy { get; set; } public double DownloadPercentLimit { get; set; } public double UploadPercentLimit { get; set; } public string AuthenticationUrl { get; set; } public bool UsePithos { get; set; } public void Authenticate(string userName, string apiKey) { Contract.Requires(!String.IsNullOrWhiteSpace(apiKey), "ApiKey must be filled before calling Authenticate"); Contract.Requires(!String.IsNullOrWhiteSpace(userName), "UserName must be filled before calling Authenticate"); Contract.Ensures(apiKey==ApiKey); Contract.Ensures(userName==UserName); Contract.Ensures(StorageUrl!=null); Contract.Ensures(!String.IsNullOrWhiteSpace(Token)); } public IList ListContainers() { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); return default(IList); } public IList ListObjects(string container, DateTime? since = null) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl != null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); return default(IList); } public IList ListObjects(string container, string folder, DateTime? since = null) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl != null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(folder)); return default(IList); } public bool ContainerExists(string container) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); return default(bool); } public ContainerInfo GetContainerInfo(string container) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); return default(ContainerInfo); } public void CreateContainer(string container) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); } public void DeleteContainer(string container) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); } public Task GetObject(string container, string objectName, string fileName) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); return default(Task); } public Task PutObject(string container, string objectName, string fileName, string hash = null) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(fileName)); Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); return default(Task); } public void DeleteObject(string container, string objectName) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); } public void MoveObject(string sourceContainer, string oldObjectName, string targetContainer,string newObjectName) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(sourceContainer)); Contract.Requires(!String.IsNullOrWhiteSpace(oldObjectName)); Contract.Requires(!String.IsNullOrWhiteSpace(targetContainer)); Contract.Requires(!String.IsNullOrWhiteSpace(newObjectName)); } public bool ObjectExists(string container,string objectName) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); return default(bool); } public ObjectInfo GetObjectInfo(string container,string objectName) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl!=null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); return default(ObjectInfo); } public void CreateFolder(string container, string folder) { Contract.Requires(!String.IsNullOrWhiteSpace(Token)); Contract.Requires(StorageUrl != null); Contract.Requires(!String.IsNullOrWhiteSpace(container)); Contract.Requires(!String.IsNullOrWhiteSpace(folder)); } } public class ContainerInfo { public string Name { get; set; } public long Count { get; set; } public long Bytes { get; set; } public static ContainerInfo Empty=new ContainerInfo(); } }