2 /* -----------------------------------------------------------------------
3 * <copyright file="IStatusKeeper.cs" company="GRNet">
5 * Copyright 2011-2012 GRNET S.A. All rights reserved.
7 * Redistribution and use in source and binary forms, with or
8 * without modification, are permitted provided that the following
11 * 1. Redistributions of source code must retain the above
12 * copyright notice, this list of conditions and the following
15 * 2. Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials
18 * provided with the distribution.
21 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
34 * The views and conclusions contained in the software and
35 * documentation are those of the authors and should not be
36 * interpreted as representing official policies, either expressed
37 * or implied, of GRNET S.A.
39 * -----------------------------------------------------------------------
43 using System.Collections.Generic;
44 using System.Diagnostics.Contracts;
47 using System.Threading;
48 using System.Threading.Tasks;
49 using Pithos.Interfaces;
53 [ContractClass(typeof(IStatusKeeperContract))]
54 public interface IStatusKeeper
56 Task SetFileOverlayStatus(string path, FileOverlayStatus status, string shortHash = null);
57 void UpdateFileChecksum(string path, string shortHash, string checksum);
58 void SetFileStatus(string path, FileStatus status);
59 FileStatus GetFileStatus(string path);
60 void ClearFileStatus(string path);
61 FileOverlayStatus GetFileOverlayStatus(string path);
62 void ProcessExistingFiles(IEnumerable<FileInfo> paths);
64 void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus, string localFileMissingFromServer);
65 void StoreInfo(string path, ObjectInfo objectInfo);
66 //T GetStatus<T>(string path,Func<FileState,T> getter,T defaultValue );
67 //void SetStatus(string path, Action<FileState> setter);
69 void StartProcessing(CancellationToken token);
71 string BlockHash { get; set; }
72 int BlockSize { get; set; }
73 void ChangeRoots(string oldPath, string newPath);
74 FileState GetStateByFilePath(string path);
75 void ClearFolderStatus(string path);
76 IEnumerable<FileState> GetChildren(FileState fileState);
77 void EnsureFileState(string path);
79 void CleanupStaleStates(Network.AccountInfo accountInfo, List<ObjectInfo> objectInfos);
80 void CleanupOrphanStates();
83 [ContractClassFor(typeof(IStatusKeeper))]
84 public abstract class IStatusKeeperContract : IStatusKeeper
86 public Task SetFileOverlayStatus(string path, FileOverlayStatus status, string shortHash = null)
88 Contract.Requires(!String.IsNullOrWhiteSpace(path));
89 Contract.Requires(Path.IsPathRooted(path));
93 public void UpdateFileChecksum(string path, string shortHash, string checksum)
95 Contract.Requires(!String.IsNullOrWhiteSpace(path));
96 Contract.Requires(checksum!=null);
97 Contract.Requires(Path.IsPathRooted(path));
100 /* public void RemoveFileOverlayStatus(string path)
102 Contract.Requires(!String.IsNullOrWhiteSpace(path));
103 Contract.Requires(Path.IsPathRooted(path));
106 public void RenameFileOverlayStatus(string oldPath, string newPath)
108 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
109 Contract.Requires(Path.IsPathRooted(oldPath));
110 Contract.Requires(!String.IsNullOrWhiteSpace(newPath));
111 Contract.Requires(Path.IsPathRooted(newPath));
115 public void SetFileStatus(string path, FileStatus status)
117 Contract.Requires(!String.IsNullOrWhiteSpace(path));
118 Contract.Requires(Path.IsPathRooted(path));
121 public FileStatus GetFileStatus(string path)
123 Contract.Requires(!String.IsNullOrWhiteSpace(path));
124 Contract.Requires(Path.IsPathRooted(path));
126 return default(FileStatus);
129 public FileOverlayStatus GetFileOverlayStatus(string path)
131 Contract.Requires(!String.IsNullOrWhiteSpace(path));
132 Contract.Requires(Path.IsPathRooted(path));
134 return default(FileOverlayStatus);
137 public void ProcessExistingFiles(IEnumerable<FileInfo> paths)
139 Contract.Requires(paths!=null);
147 public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus, string localFileMissingFromServer)
149 Contract.Requires(!String.IsNullOrWhiteSpace(path));
150 Contract.Requires(Path.IsPathRooted(path));
153 public void StoreInfo(string path, ObjectInfo objectInfo)
155 Contract.Requires(!String.IsNullOrWhiteSpace(path));
156 Contract.Requires(objectInfo!=null);
157 Contract.Requires(Path.IsPathRooted(path));
160 public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
162 Contract.Requires(!String.IsNullOrWhiteSpace(path));
163 Contract.Requires(getter!=null);
164 Contract.Requires(Path.IsPathRooted(path));
169 public void SetStatus(string path, Action<FileState> setter)
171 Contract.Requires(!String.IsNullOrWhiteSpace(path));
172 Contract.Requires(setter != null);
173 Contract.Requires(Path.IsPathRooted(path));
176 public void SetNetworkState(string path, NetworkOperation operation)
178 Contract.Requires(!String.IsNullOrWhiteSpace(path));
179 Contract.Requires(Path.IsPathRooted(path));
180 Contract.Requires(Path.IsPathRooted(path));
183 public NetworkOperation GetNetworkState(string path)
185 Contract.Requires(!String.IsNullOrWhiteSpace(path));
186 Contract.Requires(Path.IsPathRooted(path));
188 return default(NetworkOperation);
191 public void ClearFileStatus(string path)
193 Contract.Requires(!String.IsNullOrWhiteSpace(path));
194 Contract.Requires(Path.IsPathRooted(path));
197 public void SetPithosStatus(PithosStatus status)
201 public void StartProcessing(CancellationToken token)
203 Contract.Requires(token != null, "token can't be empty");
206 public abstract string BlockHash { get; set; }
207 public abstract int BlockSize { get; set; }
208 public void ChangeRoots(string oldPath, string newPath)
210 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
211 Contract.Requires(Path.IsPathRooted(oldPath));
212 Contract.Requires(!string.IsNullOrWhiteSpace(newPath));
213 Contract.Requires(Path.IsPathRooted(newPath));
216 public FileState GetStateByFilePath(string path)
218 Contract.Requires(!String.IsNullOrWhiteSpace(path));
219 Contract.Requires(Path.IsPathRooted(path));
224 public void ClearFolderStatus(string path)
226 Contract.Requires(!String.IsNullOrWhiteSpace(path));
227 Contract.Requires(Path.IsPathRooted(path));
230 public IEnumerable<FileState> GetChildren(FileState fileState)
232 Contract.Requires(fileState!=null);
233 Contract.Ensures(Contract.Result<IEnumerable<FileState>>()!=null);
234 return default(IEnumerable<FileState>);
237 public void EnsureFileState(string path)
243 public void CleanupStaleStates(Network.AccountInfo accountInfo, List<ObjectInfo> objectInfos)
245 Contract.Requires(accountInfo != null);
246 Contract.Requires(objectInfos != null);
250 public void CleanupOrphanStates()