2 using System.Collections.Generic;
3 using System.Diagnostics.Contracts;
6 using System.Threading;
7 using Pithos.Interfaces;
11 [ContractClass(typeof(IStatusKeeperContract))]
12 public interface IStatusKeeper
14 void SetFileOverlayStatus(string path,FileOverlayStatus status);
15 void UpdateFileChecksum(string path, string checksum);
16 void SetFileStatus(string path, FileStatus status);
17 FileStatus GetFileStatus(string path);
18 void ClearFileStatus(string path);
19 void SetPithosStatus(PithosStatus status);
20 FileOverlayStatus GetFileOverlayStatus(string path);
21 void ProcessExistingFiles(IEnumerable<FileInfo> paths);
23 void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus);
24 void StoreInfo(string path, ObjectInfo objectInfo);
25 //T GetStatus<T>(string path,Func<FileState,T> getter,T defaultValue );
26 //void SetStatus(string path, Action<FileState> setter);
28 void StartProcessing(CancellationToken token);
30 string BlockHash { get; set; }
31 int BlockSize { get; set; }
32 void ChangeRoots(string oldPath, string newPath);
33 FileState GetStateByFilePath(string path);
34 void ClearFolderStatus(string path);
35 IEnumerable<FileState> GetChildren(FileState fileState);
38 [ContractClassFor(typeof(IStatusKeeper))]
39 public abstract class IStatusKeeperContract : IStatusKeeper
41 public void SetFileOverlayStatus(string path, FileOverlayStatus status)
43 Contract.Requires(!String.IsNullOrWhiteSpace(path));
44 Contract.Requires(Path.IsPathRooted(path));
47 public void UpdateFileChecksum(string path, string checksum)
49 Contract.Requires(!String.IsNullOrWhiteSpace(path));
50 Contract.Requires(checksum!=null);
51 Contract.Requires(Path.IsPathRooted(path));
54 /* public void RemoveFileOverlayStatus(string path)
56 Contract.Requires(!String.IsNullOrWhiteSpace(path));
57 Contract.Requires(Path.IsPathRooted(path));
60 public void RenameFileOverlayStatus(string oldPath, string newPath)
62 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
63 Contract.Requires(Path.IsPathRooted(oldPath));
64 Contract.Requires(!String.IsNullOrWhiteSpace(newPath));
65 Contract.Requires(Path.IsPathRooted(newPath));
69 public void SetFileStatus(string path, FileStatus status)
71 Contract.Requires(!String.IsNullOrWhiteSpace(path));
72 Contract.Requires(Path.IsPathRooted(path));
75 public FileStatus GetFileStatus(string path)
77 Contract.Requires(!String.IsNullOrWhiteSpace(path));
78 Contract.Requires(Path.IsPathRooted(path));
80 return default(FileStatus);
83 public FileOverlayStatus GetFileOverlayStatus(string path)
85 Contract.Requires(!String.IsNullOrWhiteSpace(path));
86 Contract.Requires(Path.IsPathRooted(path));
88 return default(FileOverlayStatus);
91 public void ProcessExistingFiles(IEnumerable<FileInfo> paths)
93 Contract.Requires(paths!=null);
101 public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus)
103 Contract.Requires(!String.IsNullOrWhiteSpace(path));
104 Contract.Requires(Path.IsPathRooted(path));
107 public void StoreInfo(string path, ObjectInfo objectInfo)
109 Contract.Requires(!String.IsNullOrWhiteSpace(path));
110 Contract.Requires(objectInfo!=null);
111 Contract.Requires(Path.IsPathRooted(path));
114 public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
116 Contract.Requires(!String.IsNullOrWhiteSpace(path));
117 Contract.Requires(getter!=null);
118 Contract.Requires(Path.IsPathRooted(path));
123 public void SetStatus(string path, Action<FileState> setter)
125 Contract.Requires(!String.IsNullOrWhiteSpace(path));
126 Contract.Requires(setter != null);
127 Contract.Requires(Path.IsPathRooted(path));
130 public void SetNetworkState(string path, NetworkOperation operation)
132 Contract.Requires(!String.IsNullOrWhiteSpace(path));
133 Contract.Requires(Path.IsPathRooted(path));
134 Contract.Requires(Path.IsPathRooted(path));
137 public NetworkOperation GetNetworkState(string path)
139 Contract.Requires(!String.IsNullOrWhiteSpace(path));
140 Contract.Requires(Path.IsPathRooted(path));
142 return default(NetworkOperation);
145 public void ClearFileStatus(string path)
147 Contract.Requires(!String.IsNullOrWhiteSpace(path));
148 Contract.Requires(Path.IsPathRooted(path));
151 public void SetPithosStatus(PithosStatus status)
155 public void StartProcessing(CancellationToken token)
157 Contract.Requires(token != null, "token can't be empty");
160 public abstract string BlockHash { get; set; }
161 public abstract int BlockSize { get; set; }
162 public void ChangeRoots(string oldPath, string newPath)
164 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
165 Contract.Requires(Path.IsPathRooted(oldPath));
166 Contract.Requires(!string.IsNullOrWhiteSpace(newPath));
167 Contract.Requires(Path.IsPathRooted(newPath));
170 public FileState GetStateByFilePath(string path)
172 Contract.Requires(!String.IsNullOrWhiteSpace(path));
173 Contract.Requires(Path.IsPathRooted(path));
178 public void ClearFolderStatus(string path)
180 Contract.Requires(!String.IsNullOrWhiteSpace(path));
181 Contract.Requires(Path.IsPathRooted(path));
184 public IEnumerable<FileState> GetChildren(FileState fileState)
186 Contract.Requires(fileState!=null);
187 Contract.Ensures(Contract.Result<IEnumerable<FileState>>()!=null);
188 return default(IEnumerable<FileState>);