Statistics
| Branch: | Revision:

root / trunk / Pithos.Core / IStatusKeeper.cs @ e6faf02b

History | View | Annotate | Download (8.5 kB)

1 255f5f86 Panagiotis Kanavos
#region
2 255f5f86 Panagiotis Kanavos
/* -----------------------------------------------------------------------
3 255f5f86 Panagiotis Kanavos
 * <copyright file="IStatusKeeper.cs" company="GRNet">
4 255f5f86 Panagiotis Kanavos
 * 
5 255f5f86 Panagiotis Kanavos
 * Copyright 2011-2012 GRNET S.A. All rights reserved.
6 255f5f86 Panagiotis Kanavos
 *
7 255f5f86 Panagiotis Kanavos
 * Redistribution and use in source and binary forms, with or
8 255f5f86 Panagiotis Kanavos
 * without modification, are permitted provided that the following
9 255f5f86 Panagiotis Kanavos
 * conditions are met:
10 255f5f86 Panagiotis Kanavos
 *
11 255f5f86 Panagiotis Kanavos
 *   1. Redistributions of source code must retain the above
12 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
13 255f5f86 Panagiotis Kanavos
 *      disclaimer.
14 255f5f86 Panagiotis Kanavos
 *
15 255f5f86 Panagiotis Kanavos
 *   2. Redistributions in binary form must reproduce the above
16 255f5f86 Panagiotis Kanavos
 *      copyright notice, this list of conditions and the following
17 255f5f86 Panagiotis Kanavos
 *      disclaimer in the documentation and/or other materials
18 255f5f86 Panagiotis Kanavos
 *      provided with the distribution.
19 255f5f86 Panagiotis Kanavos
 *
20 255f5f86 Panagiotis Kanavos
 *
21 255f5f86 Panagiotis Kanavos
 * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
22 255f5f86 Panagiotis Kanavos
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23 255f5f86 Panagiotis Kanavos
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 255f5f86 Panagiotis Kanavos
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
25 255f5f86 Panagiotis Kanavos
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 255f5f86 Panagiotis Kanavos
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 255f5f86 Panagiotis Kanavos
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
28 255f5f86 Panagiotis Kanavos
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 255f5f86 Panagiotis Kanavos
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 255f5f86 Panagiotis Kanavos
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 255f5f86 Panagiotis Kanavos
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 255f5f86 Panagiotis Kanavos
 * POSSIBILITY OF SUCH DAMAGE.
33 255f5f86 Panagiotis Kanavos
 *
34 255f5f86 Panagiotis Kanavos
 * The views and conclusions contained in the software and
35 255f5f86 Panagiotis Kanavos
 * documentation are those of the authors and should not be
36 255f5f86 Panagiotis Kanavos
 * interpreted as representing official policies, either expressed
37 255f5f86 Panagiotis Kanavos
 * or implied, of GRNET S.A.
38 255f5f86 Panagiotis Kanavos
 * </copyright>
39 255f5f86 Panagiotis Kanavos
 * -----------------------------------------------------------------------
40 255f5f86 Panagiotis Kanavos
 */
41 255f5f86 Panagiotis Kanavos
#endregion
42 d78cbf09 Panagiotis Kanavos
using System;
43 b5061ac8 Panagiotis Kanavos
using System.Collections.Generic;
44 d78cbf09 Panagiotis Kanavos
using System.Diagnostics.Contracts;
45 283809f3 Panagiotis Kanavos
using System.IO;
46 b5061ac8 Panagiotis Kanavos
using System.Linq;
47 3c43ec9b Panagiotis Kanavos
using System.Threading;
48 174bbb6e Panagiotis Kanavos
using System.Threading.Tasks;
49 d78cbf09 Panagiotis Kanavos
using Pithos.Interfaces;
50 d78cbf09 Panagiotis Kanavos
51 d78cbf09 Panagiotis Kanavos
namespace Pithos.Core
52 d78cbf09 Panagiotis Kanavos
{
53 d78cbf09 Panagiotis Kanavos
    [ContractClass(typeof(IStatusKeeperContract))]
54 d78cbf09 Panagiotis Kanavos
    public interface IStatusKeeper
55 d78cbf09 Panagiotis Kanavos
    {
56 174bbb6e Panagiotis Kanavos
        Task SetFileOverlayStatus(string path, FileOverlayStatus status, string shortHash = null);
57 174bbb6e Panagiotis Kanavos
        void UpdateFileChecksum(string path, string shortHash, string checksum);
58 d78cbf09 Panagiotis Kanavos
        void SetFileStatus(string path, FileStatus status);
59 d78cbf09 Panagiotis Kanavos
        FileStatus GetFileStatus(string path);
60 d78cbf09 Panagiotis Kanavos
        void ClearFileStatus(string path);
61 b5061ac8 Panagiotis Kanavos
        FileOverlayStatus GetFileOverlayStatus(string path);
62 0af3141d Panagiotis Kanavos
        void ProcessExistingFiles(IEnumerable<FileInfo> paths);
63 0eea575a Panagiotis Kanavos
        void Stop();
64 283809f3 Panagiotis Kanavos
        void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus);
65 283809f3 Panagiotis Kanavos
        void StoreInfo(string path, ObjectInfo objectInfo);
66 ab2f6f79 Panagiotis Kanavos
        //T GetStatus<T>(string path,Func<FileState,T> getter,T defaultValue );
67 ab2f6f79 Panagiotis Kanavos
        //void SetStatus(string path, Action<FileState> setter);        
68 3c43ec9b Panagiotis Kanavos
69 3c43ec9b Panagiotis Kanavos
        void StartProcessing(CancellationToken token);
70 3c43ec9b Panagiotis Kanavos
71 9c4346c9 Panagiotis Kanavos
        string BlockHash { get; set; }
72 5ce54458 Panagiotis Kanavos
        int BlockSize { get; set; }
73 5120f3cb Panagiotis Kanavos
        void ChangeRoots(string oldPath, string newPath);
74 039a89e5 Panagiotis Kanavos
        FileState GetStateByFilePath(string path);
75 3c76f045 Panagiotis Kanavos
        void ClearFolderStatus(string path);
76 3c76f045 Panagiotis Kanavos
        IEnumerable<FileState> GetChildren(FileState fileState);
77 174bbb6e Panagiotis Kanavos
        void EnsureFileState(string path);
78 d78cbf09 Panagiotis Kanavos
    }
79 d78cbf09 Panagiotis Kanavos
80 d78cbf09 Panagiotis Kanavos
    [ContractClassFor(typeof(IStatusKeeper))]
81 d78cbf09 Panagiotis Kanavos
    public abstract class IStatusKeeperContract : IStatusKeeper
82 d78cbf09 Panagiotis Kanavos
    {
83 174bbb6e Panagiotis Kanavos
        public Task SetFileOverlayStatus(string path, FileOverlayStatus status, string shortHash = null)
84 d78cbf09 Panagiotis Kanavos
        {
85 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
86 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
87 174bbb6e Panagiotis Kanavos
            return default(Task);
88 d78cbf09 Panagiotis Kanavos
        }
89 d78cbf09 Panagiotis Kanavos
90 174bbb6e Panagiotis Kanavos
        public void UpdateFileChecksum(string path, string shortHash, string checksum)
91 d78cbf09 Panagiotis Kanavos
        {
92 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
93 d78cbf09 Panagiotis Kanavos
            Contract.Requires(checksum!=null);
94 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
95 d78cbf09 Panagiotis Kanavos
        }
96 d78cbf09 Panagiotis Kanavos
97 cfed7823 Panagiotis Kanavos
     /*   public void RemoveFileOverlayStatus(string path)
98 d78cbf09 Panagiotis Kanavos
        {
99 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
100 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
101 cfed7823 Panagiotis Kanavos
        }*/
102 d78cbf09 Panagiotis Kanavos
103 d78cbf09 Panagiotis Kanavos
        public void RenameFileOverlayStatus(string oldPath, string newPath)
104 d78cbf09 Panagiotis Kanavos
        {
105 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
106 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(oldPath));
107 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(newPath));
108 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(newPath));
109 d78cbf09 Panagiotis Kanavos
110 d78cbf09 Panagiotis Kanavos
        }
111 d78cbf09 Panagiotis Kanavos
112 d78cbf09 Panagiotis Kanavos
        public void SetFileStatus(string path, FileStatus status)
113 d78cbf09 Panagiotis Kanavos
        {
114 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
115 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
116 d78cbf09 Panagiotis Kanavos
        }
117 d78cbf09 Panagiotis Kanavos
118 d78cbf09 Panagiotis Kanavos
        public FileStatus GetFileStatus(string path)
119 d78cbf09 Panagiotis Kanavos
        {
120 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
121 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
122 d78cbf09 Panagiotis Kanavos
123 d78cbf09 Panagiotis Kanavos
            return default(FileStatus);
124 d78cbf09 Panagiotis Kanavos
        }
125 d78cbf09 Panagiotis Kanavos
126 b5061ac8 Panagiotis Kanavos
        public FileOverlayStatus GetFileOverlayStatus(string path)
127 b5061ac8 Panagiotis Kanavos
        {
128 b5061ac8 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
129 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
130 b5061ac8 Panagiotis Kanavos
131 b5061ac8 Panagiotis Kanavos
            return default(FileOverlayStatus);
132 b5061ac8 Panagiotis Kanavos
        }
133 b5061ac8 Panagiotis Kanavos
134 0af3141d Panagiotis Kanavos
        public void ProcessExistingFiles(IEnumerable<FileInfo> paths)
135 b5061ac8 Panagiotis Kanavos
        {
136 b5061ac8 Panagiotis Kanavos
            Contract.Requires(paths!=null);
137 b5061ac8 Panagiotis Kanavos
        }
138 b5061ac8 Panagiotis Kanavos
139 0eea575a Panagiotis Kanavos
        public void Stop()
140 0eea575a Panagiotis Kanavos
        {
141 0eea575a Panagiotis Kanavos
            
142 0eea575a Panagiotis Kanavos
        }
143 0eea575a Panagiotis Kanavos
144 283809f3 Panagiotis Kanavos
        public void SetFileState(string path, FileStatus fileStatus, FileOverlayStatus overlayStatus)
145 283809f3 Panagiotis Kanavos
        {
146 283809f3 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
147 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
148 283809f3 Panagiotis Kanavos
        }
149 283809f3 Panagiotis Kanavos
150 283809f3 Panagiotis Kanavos
        public void StoreInfo(string path, ObjectInfo objectInfo)
151 283809f3 Panagiotis Kanavos
        {
152 283809f3 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
153 cfed7823 Panagiotis Kanavos
            Contract.Requires(objectInfo!=null);
154 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
155 283809f3 Panagiotis Kanavos
        }
156 283809f3 Panagiotis Kanavos
157 283809f3 Panagiotis Kanavos
        public T GetStatus<T>(string path, Func<FileState, T> getter, T defaultValue)
158 283809f3 Panagiotis Kanavos
        {
159 283809f3 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
160 283809f3 Panagiotis Kanavos
            Contract.Requires(getter!=null);
161 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
162 283809f3 Panagiotis Kanavos
163 283809f3 Panagiotis Kanavos
            return default(T);
164 283809f3 Panagiotis Kanavos
        }
165 283809f3 Panagiotis Kanavos
166 283809f3 Panagiotis Kanavos
        public void SetStatus(string path, Action<FileState> setter)
167 283809f3 Panagiotis Kanavos
        {
168 283809f3 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
169 283809f3 Panagiotis Kanavos
            Contract.Requires(setter != null);
170 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
171 283809f3 Panagiotis Kanavos
        }
172 283809f3 Panagiotis Kanavos
173 5ce54458 Panagiotis Kanavos
        public void SetNetworkState(string path, NetworkOperation operation)
174 283809f3 Panagiotis Kanavos
        {
175 9c4346c9 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
176 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
177 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
178 283809f3 Panagiotis Kanavos
        }
179 283809f3 Panagiotis Kanavos
180 5ce54458 Panagiotis Kanavos
        public NetworkOperation GetNetworkState(string path)
181 283809f3 Panagiotis Kanavos
        {
182 283809f3 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
183 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
184 283809f3 Panagiotis Kanavos
185 5ce54458 Panagiotis Kanavos
            return default(NetworkOperation);
186 283809f3 Panagiotis Kanavos
        }
187 283809f3 Panagiotis Kanavos
188 d78cbf09 Panagiotis Kanavos
        public void ClearFileStatus(string path)
189 d78cbf09 Panagiotis Kanavos
        {
190 d78cbf09 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
191 cfed7823 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
192 d78cbf09 Panagiotis Kanavos
        }
193 5bcf6d70 Panagiotis Kanavos
194 5bcf6d70 Panagiotis Kanavos
        public void SetPithosStatus(PithosStatus status)
195 5bcf6d70 Panagiotis Kanavos
        {
196 5bcf6d70 Panagiotis Kanavos
        }
197 3c43ec9b Panagiotis Kanavos
198 3c43ec9b Panagiotis Kanavos
        public void StartProcessing(CancellationToken token)
199 3c43ec9b Panagiotis Kanavos
        {
200 3c43ec9b Panagiotis Kanavos
            Contract.Requires(token != null, "token can't be empty");
201 3c43ec9b Panagiotis Kanavos
        }
202 3c43ec9b Panagiotis Kanavos
203 5ce54458 Panagiotis Kanavos
        public abstract string BlockHash { get; set; }
204 5ce54458 Panagiotis Kanavos
        public abstract int BlockSize { get; set; }
205 5120f3cb Panagiotis Kanavos
        public void ChangeRoots(string oldPath, string newPath)
206 5120f3cb Panagiotis Kanavos
        {
207 5120f3cb Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(oldPath));
208 5120f3cb Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(oldPath));
209 5120f3cb Panagiotis Kanavos
            Contract.Requires(!string.IsNullOrWhiteSpace(newPath));
210 5120f3cb Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(newPath));            
211 5120f3cb Panagiotis Kanavos
        }
212 039a89e5 Panagiotis Kanavos
213 039a89e5 Panagiotis Kanavos
        public FileState GetStateByFilePath(string path)
214 039a89e5 Panagiotis Kanavos
        {
215 039a89e5 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
216 039a89e5 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
217 039a89e5 Panagiotis Kanavos
218 039a89e5 Panagiotis Kanavos
            return null;
219 039a89e5 Panagiotis Kanavos
        }
220 3c76f045 Panagiotis Kanavos
221 3c76f045 Panagiotis Kanavos
        public void ClearFolderStatus(string path)
222 3c76f045 Panagiotis Kanavos
        {
223 3c76f045 Panagiotis Kanavos
            Contract.Requires(!String.IsNullOrWhiteSpace(path));
224 3c76f045 Panagiotis Kanavos
            Contract.Requires(Path.IsPathRooted(path));
225 3c76f045 Panagiotis Kanavos
        }
226 3c76f045 Panagiotis Kanavos
227 3c76f045 Panagiotis Kanavos
        public IEnumerable<FileState> GetChildren(FileState fileState)
228 3c76f045 Panagiotis Kanavos
        {
229 3c76f045 Panagiotis Kanavos
            Contract.Requires(fileState!=null);
230 3c76f045 Panagiotis Kanavos
            Contract.Ensures(Contract.Result<IEnumerable<FileState>>()!=null);
231 3c76f045 Panagiotis Kanavos
            return default(IEnumerable<FileState>);
232 3c76f045 Panagiotis Kanavos
        }
233 174bbb6e Panagiotis Kanavos
234 174bbb6e Panagiotis Kanavos
        public void EnsureFileState(string path)
235 174bbb6e Panagiotis Kanavos
        {
236 174bbb6e Panagiotis Kanavos
            
237 174bbb6e Panagiotis Kanavos
        }
238 d78cbf09 Panagiotis Kanavos
    }
239 d78cbf09 Panagiotis Kanavos
}