X-Git-Url: https://code.grnet.gr/git/pithos-ms-client/blobdiff_plain/1caef52ee05a66de6404903b1d1191afee6a4704..5b2e4db44ee763804b13cb1bfcb543f787648a61:/trunk/Pithos.Network/ICloudClient.cs diff --git a/trunk/Pithos.Network/ICloudClient.cs b/trunk/Pithos.Network/ICloudClient.cs index 907aba2..526bfa5 100644 --- a/trunk/Pithos.Network/ICloudClient.cs +++ b/trunk/Pithos.Network/ICloudClient.cs @@ -1,232 +1,411 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.Contracts; -using System.Threading.Tasks; -using Pithos.Interfaces; - -namespace Pithos.Network -{ - [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); - - - Task GetHashMap(string container, string objectName); - Task PutHashMap(string container, string objectName, TreeHash hash); - } - - - [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 Task GetHashMap(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(Task); - } - - public Task PutHashMap(string container, string objectName, TreeHash hash) - { - Contract.Requires(!String.IsNullOrWhiteSpace(Token)); - Contract.Requires(StorageUrl != null); - Contract.Requires(!String.IsNullOrWhiteSpace(container)); - Contract.Requires(!String.IsNullOrWhiteSpace(objectName)); - Contract.Requires(hash != null); - - return default(Task); - } - } - - public class ContainerInfo - { - public string Name { get; set; } - public long Count { get; set; } - public long Bytes { get; set; } - public string BlockHash { get; set; } - public int BlockSize { get; set; } - - public static ContainerInfo Empty=new ContainerInfo(); - } -} +#region +/* ----------------------------------------------------------------------- + * + * + * Copyright 2011-2012 GRNET S.A. All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * 1. Redistributions of source code must retain the above + * copyright notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * + * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and + * documentation are those of the authors and should not be + * interpreted as representing official policies, either expressed + * or implied, of GRNET S.A. + * + * ----------------------------------------------------------------------- + */ +#endregion +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Net; +using System.Threading; +using System.Threading.Tasks; +using Pithos.Interfaces; + +namespace Pithos.Network +{ + [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; } + Task Authenticate(); + //WebProxy Proxy { get; set; } + double DownloadPercentLimit { get; set; } + double UploadPercentLimit { get; set; } + string AuthenticationUrl { get; set; } + + #region Container operations + + Task> ListContainers(string account); + IList ListObjects(string account, Uri container, DateTime? since = null); + IList ListObjects(string account, Uri container, Uri folder, DateTime? since = null); + bool ContainerExists(string account, Uri container); + ContainerInfo GetContainerInfo(string account, Uri container); + void CreateContainer(string account, Uri container); + void DeleteContainer(string account, Uri container); + #endregion + + #region Object operations + Task GetObject(string account, Uri container, Uri objectName, string fileName, CancellationToken cancellationToken); + Task PutObject(string account, Uri container, Uri objectName, string fileName, string hash = null, string contentType = "application/octet-stream"); + void DeleteObject(string account, Uri container, Uri objectName, bool isDirectory); + //void DeleteObject(string container, string objectName, string account = null); + void MoveObject(string account, Uri sourceContainer, Uri oldObjectName, Uri targetContainer, Uri newObjectName); + bool ObjectExists(string account, Uri container, Uri objectName); + ObjectInfo GetObjectInfo(string account, Uri container, Uri objectName); + void CreateFolder(string account, Uri container, Uri folder); + #endregion + + #region Hashmap operations + Task GetHashMap(string account, Uri container, Uri objectName); + Task> PutHashMap(string account, Uri container, Uri objectName, TreeHash hash); + Task PostBlock(string account, Uri container, byte[] block, int offset, int count, CancellationToken token); + Task GetBlock(string account, Uri container, Uri relativeUrl, long start, long? end, CancellationToken cancellationToken); + #endregion + + #region Sharing operations + IList ListSharedObjects(HashSet knownContainers, DateTime? since); + void ShareObject(string account, Uri container, Uri objectName, string shareTo, bool read, bool write); + + #endregion + + AccountInfo GetAccountPolicies(AccountInfo accountInfo); + + void UpdateMetadata(ObjectInfo objectInfo); + + void UpdateMetadata(ContainerInfo Container); + IList ListSharingAccounts(DateTime? since=null); + } + + + [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 double DownloadPercentLimit { get; set; } + public double UploadPercentLimit { get; set; } + + public string AuthenticationUrl { get; set; } + + public bool UsePithos { get; set; } + + public Task Authenticate() + { + Contract.Requires(!String.IsNullOrWhiteSpace(ApiKey), "ApiKey must be filled before calling Authenticate"); + Contract.Requires(!String.IsNullOrWhiteSpace(UserName), "UserName must be filled before calling Authenticate"); + + return default(Task); + } + + public Task> ListContainers(string account) + { + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + + return default(Task>); + } + + public IList ListSharedObjects(HashSet knownContainers, DateTime? since) + { + + Contract.Requires(knownContainers!=null); + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + + return default(IList); + } + + public void ShareObject(string account, Uri container, Uri objectName, string shareTo, bool read, bool write) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container!=null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + Contract.Requires(!String.IsNullOrWhiteSpace(account)); + Contract.Requires(!String.IsNullOrWhiteSpace(shareTo)); + + } + + public AccountInfo GetAccountPolicies(AccountInfo accountInfo) + { + Contract.Requires(accountInfo!=null); + + return default(AccountInfo); + } + + public void UpdateMetadata(ObjectInfo objectInfo) + { + Contract.Requires(objectInfo!=null); + + return ; + } + + public void UpdateMetadata(ContainerInfo objectInfo) + { + Contract.Requires(objectInfo!=null); + + return ; + } + + public IList ListSharingAccounts(DateTime? since = new DateTime?()) + { + return default(IList); + } + + + public IList ListObjects(string account, Uri container, DateTime? since = null) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + + return default(IList); + } + + public IList ListObjects(string account, Uri container, Uri folder, DateTime? since = null) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + + //Contract.Requires(!String.IsNullOrWhiteSpace(folder)); + + return default(IList); + } + + public bool ContainerExists(string account, Uri container) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + + return default(bool); + } + + public ContainerInfo GetContainerInfo(string account, Uri container) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + + return default(ContainerInfo); + } + + public void CreateContainer(string account, Uri container) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + } + + public void DeleteContainer(string account, Uri container) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + } + + public Task GetObject(string account, Uri container, Uri objectName, string fileName, CancellationToken cancellationToken) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + + return default(Task); + } + + public Task PutObject(string account, Uri container, Uri objectName, string fileName, string hash = null, string contentType = "application/octet-stream") + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(!String.IsNullOrWhiteSpace(fileName)); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + Contract.Requires(!String.IsNullOrWhiteSpace(contentType)); + + return default(Task); + } + + public void DeleteObject(string account, Uri container, Uri objectName, bool isDirectory) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + } + + public void MoveObject(string account, Uri sourceContainer, Uri oldObjectName, Uri targetContainer, Uri newObjectName) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(sourceContainer != null); + Contract.Requires(!sourceContainer.IsAbsoluteUri); + Contract.Requires(oldObjectName != null); + Contract.Requires(!oldObjectName.IsAbsoluteUri); + + Contract.Requires(targetContainer != null); + Contract.Requires(!targetContainer.IsAbsoluteUri); + Contract.Requires(newObjectName != null); + Contract.Requires(!newObjectName.IsAbsoluteUri); + + } + + public bool ObjectExists(string account, Uri container, Uri objectName) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + + return default(bool); + } + + public ObjectInfo GetObjectInfo(string account, Uri container, Uri objectName) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl!=null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + + return default(ObjectInfo); + } + + public void CreateFolder(string account, Uri container, Uri folder) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(folder != null); + Contract.Requires(!folder .IsAbsoluteUri); + } + + public Task GetHashMap(string account, Uri container, Uri objectName) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + + return default(Task); + } + + public Task> PutHashMap(string account, Uri container, Uri objectName, TreeHash hash) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(objectName != null); + Contract.Requires(!objectName.IsAbsoluteUri); + Contract.Requires(hash != null); + + return default(Task>); + } + + public Task PostBlock(string account, Uri container, byte[] block, int offset, int count, CancellationToken token) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(block != null); + Contract.Requires(offset>=0); + Contract.Requires(offset < block.Length); + Contract.Requires(count>=0); + Contract.Requires(count <= block.Length); + + return default(Task); + } + + public Task GetBlock(string account, Uri container, Uri relativeUrl, long start, long? end, CancellationToken cancellationToken) + { + + Contract.Requires(!String.IsNullOrWhiteSpace(Token)); + Contract.Requires(StorageUrl != null); + Contract.Requires(container != null); + Contract.Requires(!container.IsAbsoluteUri); + Contract.Requires(relativeUrl != null); + Contract.Requires(start>=0); + Contract.Requires(end==null || end>=0); + + return default(Task); + } + + } +}