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 Pithos.Interfaces;
52 [ContractClass(typeof(IStatusKeeperContract))]
53 public interface IStatusKeeper
55 void SetFileOverlayStatus(string path,FileOverlayStatus status);
56 void UpdateFileChecksum(string path, string checksum);
57 void SetFileStatus(string path, FileStatus status);
58 FileStatus GetFileStatus(string path);
59 void ClearFileStatus(string path);
60 void SetPithosStatus(PithosStatus status);
61 FileOverlayStatus GetFileOverlayStatus(string path);
62 void ProcessExistingFiles(IEnumerable<FileInfo> paths);
64 void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus);
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);
79 [ContractClassFor(typeof(IStatusKeeper))]
80 public abstract class IStatusKeeperContract : IStatusKeeper
82 public void SetFileOverlayStatus(string path, FileOverlayStatus status)
84 Contract.Requires(!String.IsNullOrWhiteSpace(path));
85 Contract.Requires(Path.IsPathRooted(path));
88 public void UpdateFileChecksum(string path, string checksum)
90 Contract.Requires(!String.IsNullOrWhiteSpace(path));
91 Contract.Requires(checksum!=null);
92 Contract.Requires(Path.IsPathRooted(path));
95 /* public void RemoveFileOverlayStatus(string path)
97 Contract.Requires(!String.IsNullOrWhiteSpace(path));
98 Contract.Requires(Path.IsPathRooted(path));
101 public void RenameFileOverlayStatus(string oldPath, string newPath)
103 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
104 Contract.Requires(Path.IsPathRooted(oldPath));
105 Contract.Requires(!String.IsNullOrWhiteSpace(newPath));
106 Contract.Requires(Path.IsPathRooted(newPath));
110 public void SetFileStatus(string path, FileStatus status)
112 Contract.Requires(!String.IsNullOrWhiteSpace(path));
113 Contract.Requires(Path.IsPathRooted(path));
116 public FileStatus GetFileStatus(string path)
118 Contract.Requires(!String.IsNullOrWhiteSpace(path));
119 Contract.Requires(Path.IsPathRooted(path));
121 return default(FileStatus);
124 public FileOverlayStatus GetFileOverlayStatus(string path)
126 Contract.Requires(!String.IsNullOrWhiteSpace(path));
127 Contract.Requires(Path.IsPathRooted(path));
129 return default(FileOverlayStatus);
132 public void ProcessExistingFiles(IEnumerable<FileInfo> paths)
134 Contract.Requires(paths!=null);
142 public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus)
144 Contract.Requires(!String.IsNullOrWhiteSpace(path));
145 Contract.Requires(Path.IsPathRooted(path));
148 public void StoreInfo(string path, ObjectInfo objectInfo)
150 Contract.Requires(!String.IsNullOrWhiteSpace(path));
151 Contract.Requires(objectInfo!=null);
152 Contract.Requires(Path.IsPathRooted(path));
155 public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
157 Contract.Requires(!String.IsNullOrWhiteSpace(path));
158 Contract.Requires(getter!=null);
159 Contract.Requires(Path.IsPathRooted(path));
164 public void SetStatus(string path, Action<FileState> setter)
166 Contract.Requires(!String.IsNullOrWhiteSpace(path));
167 Contract.Requires(setter != null);
168 Contract.Requires(Path.IsPathRooted(path));
171 public void SetNetworkState(string path, NetworkOperation operation)
173 Contract.Requires(!String.IsNullOrWhiteSpace(path));
174 Contract.Requires(Path.IsPathRooted(path));
175 Contract.Requires(Path.IsPathRooted(path));
178 public NetworkOperation GetNetworkState(string path)
180 Contract.Requires(!String.IsNullOrWhiteSpace(path));
181 Contract.Requires(Path.IsPathRooted(path));
183 return default(NetworkOperation);
186 public void ClearFileStatus(string path)
188 Contract.Requires(!String.IsNullOrWhiteSpace(path));
189 Contract.Requires(Path.IsPathRooted(path));
192 public void SetPithosStatus(PithosStatus status)
196 public void StartProcessing(CancellationToken token)
198 Contract.Requires(token != null, "token can't be empty");
201 public abstract string BlockHash { get; set; }
202 public abstract int BlockSize { get; set; }
203 public void ChangeRoots(string oldPath, string newPath)
205 Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
206 Contract.Requires(Path.IsPathRooted(oldPath));
207 Contract.Requires(!string.IsNullOrWhiteSpace(newPath));
208 Contract.Requires(Path.IsPathRooted(newPath));
211 public FileState GetStateByFilePath(string path)
213 Contract.Requires(!String.IsNullOrWhiteSpace(path));
214 Contract.Requires(Path.IsPathRooted(path));
219 public void ClearFolderStatus(string path)
221 Contract.Requires(!String.IsNullOrWhiteSpace(path));
222 Contract.Requires(Path.IsPathRooted(path));
225 public IEnumerable<FileState> GetChildren(FileState fileState)
227 Contract.Requires(fileState!=null);
228 Contract.Ensures(Contract.Result<IEnumerable<FileState>>()!=null);
229 return default(IEnumerable<FileState>);