root / trunk / Pithos.Interfaces / ObjectInfo.cs @ 6bcdd8e2
History | View | Annotate | Download (11.3 kB)
1 | 255f5f86 | Panagiotis Kanavos | #region |
---|---|---|---|
2 | 255f5f86 | Panagiotis Kanavos | /* ----------------------------------------------------------------------- |
3 | 255f5f86 | Panagiotis Kanavos | * <copyright file="ObjectInfo.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 | 3c43ec9b | Panagiotis Kanavos | using System; |
43 | 3c43ec9b | Panagiotis Kanavos | using System.Collections.Generic; |
44 | a0dcfcc9 | Panagiotis Kanavos | using System.Diagnostics; |
45 | cfed7823 | Panagiotis Kanavos | using System.Diagnostics.Contracts; |
46 | 9aa8abad | Panagiotis Kanavos | using System.Dynamic; |
47 | 9c4346c9 | Panagiotis Kanavos | using System.Globalization; |
48 | 3c43ec9b | Panagiotis Kanavos | using System.IO; |
49 | aba9e6d9 | Panagiotis Kanavos | using System.Linq; |
50 | aba9e6d9 | Panagiotis Kanavos | using System.Text; |
51 | 9aa8abad | Panagiotis Kanavos | using Newtonsoft.Json; |
52 | 3c43ec9b | Panagiotis Kanavos | |
53 | 3c43ec9b | Panagiotis Kanavos | namespace Pithos.Interfaces |
54 | 3c43ec9b | Panagiotis Kanavos | { |
55 | a0dcfcc9 | Panagiotis Kanavos | [DebuggerDisplay("Name {Name}")] |
56 | 31c97141 | Panagiotis Kanavos | public class ObjectInfo//:DynamicObject |
57 | 3c43ec9b | Panagiotis Kanavos | { |
58 | 9aa8abad | Panagiotis Kanavos | private readonly List<string> _knownContainers= new List<string>{"trash"}; |
59 | 3c43ec9b | Panagiotis Kanavos | public string Name { get; set; } |
60 | 06f11e8b | Panagiotis Kanavos | |
61 | 06f11e8b | Panagiotis Kanavos | |
62 | 3c43ec9b | Panagiotis Kanavos | public string Hash { get; set; } |
63 | 06f11e8b | Panagiotis Kanavos | |
64 | 06f11e8b | Panagiotis Kanavos | public string X_Object_Hash { get { return Hash; } set { Hash = value; } } |
65 | 06f11e8b | Panagiotis Kanavos | |
66 | 06f11e8b | Panagiotis Kanavos | [JsonProperty("x_object_uuid")] |
67 | 06f11e8b | Panagiotis Kanavos | public string UUID { get; set; } |
68 | 06f11e8b | Panagiotis Kanavos | |
69 | 3c43ec9b | Panagiotis Kanavos | public long Bytes { get; set; } |
70 | 3c43ec9b | Panagiotis Kanavos | public string Content_Type { get; set; } |
71 | 3c43ec9b | Panagiotis Kanavos | public DateTime Last_Modified { get; set; } |
72 | 3c43ec9b | Panagiotis Kanavos | |
73 | 3c43ec9b | Panagiotis Kanavos | private Dictionary<string, string> _tags=new Dictionary<string, string>(); |
74 | 3c43ec9b | Panagiotis Kanavos | public Dictionary<string, string> Tags |
75 | 3c43ec9b | Panagiotis Kanavos | { |
76 | 3c43ec9b | Panagiotis Kanavos | get { return _tags; } |
77 | 3c43ec9b | Panagiotis Kanavos | set { _tags = value; } |
78 | 3c43ec9b | Panagiotis Kanavos | } |
79 | 3c43ec9b | Panagiotis Kanavos | |
80 | 3c43ec9b | Panagiotis Kanavos | private Dictionary<string, string> _extensions=new Dictionary<string, string>(); |
81 | 3c43ec9b | Panagiotis Kanavos | public Dictionary<string, string> Extensions |
82 | 3c43ec9b | Panagiotis Kanavos | { |
83 | 3c43ec9b | Panagiotis Kanavos | get { return _extensions; } |
84 | 9c4346c9 | Panagiotis Kanavos | set |
85 | 9c4346c9 | Panagiotis Kanavos | { |
86 | 9c4346c9 | Panagiotis Kanavos | _extensions = value; |
87 | 9c4346c9 | Panagiotis Kanavos | ExtractKnownExtensions(); |
88 | 9c4346c9 | Panagiotis Kanavos | } |
89 | 3c43ec9b | Panagiotis Kanavos | } |
90 | bfc13ed8 | Panagiotis Kanavos | |
91 | 9aa8abad | Panagiotis Kanavos | |
92 | 9aa8abad | Panagiotis Kanavos | private Dictionary<string, string> _permissions=new Dictionary<string, string>(); |
93 | 9aa8abad | Panagiotis Kanavos | [JsonProperty("x_object_sharing")] |
94 | 9aa8abad | Panagiotis Kanavos | [JsonConverter(typeof(PermissionConverter))] |
95 | 9aa8abad | Panagiotis Kanavos | public Dictionary<string, string> Permissions |
96 | bfc13ed8 | Panagiotis Kanavos | { |
97 | 9aa8abad | Panagiotis Kanavos | get { return _permissions; } |
98 | 9aa8abad | Panagiotis Kanavos | set |
99 | 9aa8abad | Panagiotis Kanavos | { |
100 | 9aa8abad | Panagiotis Kanavos | _permissions = value; |
101 | 9aa8abad | Panagiotis Kanavos | } |
102 | bfc13ed8 | Panagiotis Kanavos | } |
103 | cfed7823 | Panagiotis Kanavos | |
104 | 9aa8abad | Panagiotis Kanavos | /// <summary> |
105 | 9aa8abad | Panagiotis Kanavos | /// Version number |
106 | 9aa8abad | Panagiotis Kanavos | /// </summary> |
107 | 9aa8abad | Panagiotis Kanavos | [JsonProperty("x_object_version")] |
108 | 9aa8abad | Panagiotis Kanavos | public long? Version { get; set; } |
109 | cfed7823 | Panagiotis Kanavos | |
110 | cfed7823 | Panagiotis Kanavos | |
111 | 9aa8abad | Panagiotis Kanavos | /// <summary> |
112 | 9aa8abad | Panagiotis Kanavos | /// Shared object permissions can be Read or Write |
113 | 9aa8abad | Panagiotis Kanavos | /// </summary> |
114 | 9aa8abad | Panagiotis Kanavos | [JsonProperty("x_object_allowed_to")] |
115 | 9aa8abad | Panagiotis Kanavos | public string AllowedTo { get; set; } |
116 | cfed7823 | Panagiotis Kanavos | |
117 | bfc13ed8 | Panagiotis Kanavos | |
118 | 9aa8abad | Panagiotis Kanavos | /// <summary> |
119 | 9aa8abad | Panagiotis Kanavos | /// Version timestamp |
120 | 9aa8abad | Panagiotis Kanavos | /// </summary> |
121 | 9aa8abad | Panagiotis Kanavos | [JsonProperty("X_Object_Version_Timestamp"), JsonConverter(typeof(PithosDateTimeConverter))] |
122 | 9aa8abad | Panagiotis Kanavos | public DateTime? VersionTimestamp { get; set; } |
123 | bfc13ed8 | Panagiotis Kanavos | |
124 | 9aa8abad | Panagiotis Kanavos | [JsonProperty("X_Object_Modified_By")] |
125 | 9aa8abad | Panagiotis Kanavos | public string ModifiedBy { get; set; } |
126 | bfc13ed8 | Panagiotis Kanavos | |
127 | 3c43ec9b | Panagiotis Kanavos | |
128 | 3c43ec9b | Panagiotis Kanavos | public Stream Stream { get; set; } |
129 | 3c43ec9b | Panagiotis Kanavos | |
130 | 759bd3c4 | Panagiotis Kanavos | |
131 | 759bd3c4 | Panagiotis Kanavos | public Uri StorageUri { get; set; } |
132 | 759bd3c4 | Panagiotis Kanavos | |
133 | cfed7823 | Panagiotis Kanavos | public string Account { get; set; } |
134 | cfed7823 | Panagiotis Kanavos | |
135 | cfed7823 | Panagiotis Kanavos | public string Container { get; set; } |
136 | cfed7823 | Panagiotis Kanavos | |
137 | 759bd3c4 | Panagiotis Kanavos | public Uri Uri |
138 | 759bd3c4 | Panagiotis Kanavos | { |
139 | 759bd3c4 | Panagiotis Kanavos | get |
140 | 759bd3c4 | Panagiotis Kanavos | { |
141 | 759bd3c4 | Panagiotis Kanavos | var relativeUrl=String.Format("{0}/{1}/{2}",Account, Container,Name); |
142 | 6bcdd8e2 | Panagiotis Kanavos | return StorageUri==null |
143 | 6bcdd8e2 | Panagiotis Kanavos | ? new Uri(relativeUrl,UriKind.Relative) |
144 | 6bcdd8e2 | Panagiotis Kanavos | : new Uri(StorageUri, relativeUrl); |
145 | 759bd3c4 | Panagiotis Kanavos | } |
146 | 759bd3c4 | Panagiotis Kanavos | } |
147 | 759bd3c4 | Panagiotis Kanavos | |
148 | aba9e6d9 | Panagiotis Kanavos | public string ContendDisposition { get; set; } |
149 | aba9e6d9 | Panagiotis Kanavos | |
150 | aba9e6d9 | Panagiotis Kanavos | public string ContentEncoding { get; set; } |
151 | aba9e6d9 | Panagiotis Kanavos | |
152 | aba9e6d9 | Panagiotis Kanavos | public string Manifest { get; set; } |
153 | 06f11e8b | Panagiotis Kanavos | |
154 | aba9e6d9 | Panagiotis Kanavos | public bool IsPublic |
155 | aba9e6d9 | Panagiotis Kanavos | { |
156 | aba9e6d9 | Panagiotis Kanavos | get { return !String.IsNullOrWhiteSpace(PublicUrl); } |
157 | aba9e6d9 | Panagiotis Kanavos | set |
158 | aba9e6d9 | Panagiotis Kanavos | { |
159 | aba9e6d9 | Panagiotis Kanavos | if (!value) |
160 | f0947233 | Panagiotis Kanavos | PublicUrl = null; |
161 | aba9e6d9 | Panagiotis Kanavos | else if (String.IsNullOrWhiteSpace(PublicUrl)) |
162 | aba9e6d9 | Panagiotis Kanavos | PublicUrl="true"; |
163 | aba9e6d9 | Panagiotis Kanavos | } |
164 | aba9e6d9 | Panagiotis Kanavos | } |
165 | aba9e6d9 | Panagiotis Kanavos | |
166 | 06f11e8b | Panagiotis Kanavos | [JsonProperty("X_Object_Public")] |
167 | aba9e6d9 | Panagiotis Kanavos | public string PublicUrl { get; set; } |
168 | aba9e6d9 | Panagiotis Kanavos | |
169 | 64171b56 | Panagiotis Kanavos | public string PreviousHash { get; set; } |
170 | 64171b56 | Panagiotis Kanavos | |
171 | 27361404 | Panagiotis Kanavos | public ObjectInfo() |
172 | 27361404 | Panagiotis Kanavos | {} |
173 | 27361404 | Panagiotis Kanavos | |
174 | 4f6d51d4 | Panagiotis Kanavos | public ObjectInfo(string accountPath,string accountName,FileSystemInfo fileInfo) |
175 | 27361404 | Panagiotis Kanavos | { |
176 | 5e31048f | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(accountPath)) |
177 | 5e31048f | Panagiotis Kanavos | throw new ArgumentNullException("accountPath"); |
178 | 5e31048f | Panagiotis Kanavos | if (string.IsNullOrWhiteSpace(accountName)) |
179 | 5e31048f | Panagiotis Kanavos | throw new ArgumentNullException("accountName"); |
180 | 5e31048f | Panagiotis Kanavos | if (fileInfo == null) |
181 | 5e31048f | Panagiotis Kanavos | throw new ArgumentNullException("fileInfo"); |
182 | 5e31048f | Panagiotis Kanavos | Contract.EndContractBlock(); |
183 | 5e31048f | Panagiotis Kanavos | |
184 | 3c76f045 | Panagiotis Kanavos | var relativeUrl = fileInfo.WithProperCapitalization().AsRelativeUrlTo(accountPath); |
185 | 27361404 | Panagiotis Kanavos | //The first part of the URL is the container |
186 | 27361404 | Panagiotis Kanavos | var slashIndex = relativeUrl.IndexOf('/'); |
187 | 27361404 | Panagiotis Kanavos | var container = relativeUrl.Substring(0, slashIndex); |
188 | 27361404 | Panagiotis Kanavos | //The second is the file's url relative to the container |
189 | 27361404 | Panagiotis Kanavos | var fileUrl = relativeUrl.Substring(slashIndex + 1); |
190 | 27361404 | Panagiotis Kanavos | |
191 | 27361404 | Panagiotis Kanavos | Account = accountName; |
192 | 27361404 | Panagiotis Kanavos | Container = container; |
193 | 27361404 | Panagiotis Kanavos | Name = fileUrl; |
194 | 27361404 | Panagiotis Kanavos | } |
195 | 27361404 | Panagiotis Kanavos | |
196 | 9c4346c9 | Panagiotis Kanavos | |
197 | 9c4346c9 | Panagiotis Kanavos | private void ExtractKnownExtensions() |
198 | 9c4346c9 | Panagiotis Kanavos | { |
199 | bfc13ed8 | Panagiotis Kanavos | Version=GetLong(KnownExtensions.X_Object_Version); |
200 | bfc13ed8 | Panagiotis Kanavos | VersionTimestamp = GetTimestamp(KnownExtensions.X_Object_Version_Timestamp); |
201 | bfc13ed8 | Panagiotis Kanavos | ModifiedBy = GetString(KnownExtensions.X_Object_Modified_By); |
202 | bfc13ed8 | Panagiotis Kanavos | } |
203 | bfc13ed8 | Panagiotis Kanavos | |
204 | bfc13ed8 | Panagiotis Kanavos | private string GetString(string name) |
205 | bfc13ed8 | Panagiotis Kanavos | { |
206 | 3ddbb7b8 | Panagiotis Kanavos | string value; |
207 | bfc13ed8 | Panagiotis Kanavos | _extensions.TryGetValue(name, out value); |
208 | bfc13ed8 | Panagiotis Kanavos | return value ; |
209 | 9c4346c9 | Panagiotis Kanavos | } |
210 | a0dcfcc9 | Panagiotis Kanavos | |
211 | 9c4346c9 | Panagiotis Kanavos | private long? GetLong(string name) |
212 | 9c4346c9 | Panagiotis Kanavos | { |
213 | 9c4346c9 | Panagiotis Kanavos | string version; |
214 | 9c4346c9 | Panagiotis Kanavos | long value; |
215 | bfc13ed8 | Panagiotis Kanavos | return _extensions.TryGetValue(name, out version) && long.TryParse(version, out value) |
216 | bfc13ed8 | Panagiotis Kanavos | ? (long?) value |
217 | bfc13ed8 | Panagiotis Kanavos | : null; |
218 | 9c4346c9 | Panagiotis Kanavos | } |
219 | 9c4346c9 | Panagiotis Kanavos | |
220 | 9c4346c9 | Panagiotis Kanavos | private DateTime? GetTimestamp(string name) |
221 | 9c4346c9 | Panagiotis Kanavos | { |
222 | 9c4346c9 | Panagiotis Kanavos | string version; |
223 | 9c4346c9 | Panagiotis Kanavos | DateTime value; |
224 | 9c4346c9 | Panagiotis Kanavos | if (_extensions.TryGetValue(name, out version) && |
225 | 9c4346c9 | Panagiotis Kanavos | DateTime.TryParse(version,CultureInfo.InvariantCulture,DateTimeStyles.AdjustToUniversal, out value)) |
226 | 9c4346c9 | Panagiotis Kanavos | { |
227 | 9c4346c9 | Panagiotis Kanavos | return value; |
228 | 9c4346c9 | Panagiotis Kanavos | } |
229 | 9c4346c9 | Panagiotis Kanavos | return null; |
230 | 9c4346c9 | Panagiotis Kanavos | } |
231 | 9c4346c9 | Panagiotis Kanavos | |
232 | 9c4346c9 | Panagiotis Kanavos | |
233 | 9c4346c9 | Panagiotis Kanavos | public static ObjectInfo Empty = new ObjectInfo |
234 | 9c4346c9 | Panagiotis Kanavos | { |
235 | 9c4346c9 | Panagiotis Kanavos | Name = String.Empty, |
236 | 9c4346c9 | Panagiotis Kanavos | Hash = String.Empty, |
237 | 9c4346c9 | Panagiotis Kanavos | Bytes = 0, |
238 | 9c4346c9 | Panagiotis Kanavos | Content_Type = String.Empty, |
239 | 31c97141 | Panagiotis Kanavos | Last_Modified = DateTime.MinValue, |
240 | 31c97141 | Panagiotis Kanavos | Exists=false |
241 | 9c4346c9 | Panagiotis Kanavos | }; |
242 | bfc13ed8 | Panagiotis Kanavos | |
243 | 31c97141 | Panagiotis Kanavos | private bool _exists=true; |
244 | 31c97141 | Panagiotis Kanavos | |
245 | 31c97141 | Panagiotis Kanavos | public bool Exists |
246 | 31c97141 | Panagiotis Kanavos | { |
247 | 31c97141 | Panagiotis Kanavos | get { |
248 | 31c97141 | Panagiotis Kanavos | return _exists; |
249 | 31c97141 | Panagiotis Kanavos | } |
250 | 31c97141 | Panagiotis Kanavos | set { |
251 | 31c97141 | Panagiotis Kanavos | _exists = value; |
252 | 31c97141 | Panagiotis Kanavos | } |
253 | 31c97141 | Panagiotis Kanavos | } |
254 | 31c97141 | Panagiotis Kanavos | |
255 | 759bd3c4 | Panagiotis Kanavos | |
256 | cfed7823 | Panagiotis Kanavos | public string RelativeUrlToFilePath(string currentAccount) |
257 | cfed7823 | Panagiotis Kanavos | { |
258 | 9aa8abad | Panagiotis Kanavos | if (Name==null) |
259 | cfed7823 | Panagiotis Kanavos | throw new InvalidOperationException("Name can't be null"); |
260 | cfed7823 | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(currentAccount)) |
261 | cfed7823 | Panagiotis Kanavos | throw new ArgumentNullException("currentAccount"); |
262 | cfed7823 | Panagiotis Kanavos | Contract.EndContractBlock(); |
263 | cfed7823 | Panagiotis Kanavos | |
264 | cfed7823 | Panagiotis Kanavos | if (this == Empty) |
265 | cfed7823 | Panagiotis Kanavos | return String.Empty; |
266 | cfed7823 | Panagiotis Kanavos | |
267 | 9aa8abad | Panagiotis Kanavos | var unescaped = Uri.UnescapeDataString(Name); |
268 | cfed7823 | Panagiotis Kanavos | var path = unescaped.Replace("/", "\\"); |
269 | cfed7823 | Panagiotis Kanavos | var pathParts=new Stack<string>(); |
270 | cfed7823 | Panagiotis Kanavos | pathParts.Push(path); |
271 | cfed7823 | Panagiotis Kanavos | if (!String.IsNullOrWhiteSpace(Container) && !_knownContainers.Contains(Container)) |
272 | cfed7823 | Panagiotis Kanavos | pathParts.Push(Container); |
273 | cfed7823 | Panagiotis Kanavos | if (!currentAccount.Equals(Account, StringComparison.InvariantCultureIgnoreCase)) |
274 | cfed7823 | Panagiotis Kanavos | { |
275 | cfed7823 | Panagiotis Kanavos | if (Account != null) |
276 | cfed7823 | Panagiotis Kanavos | { |
277 | cfed7823 | Panagiotis Kanavos | pathParts.Push(Account); |
278 | d9b1cbeb | Panagiotis Kanavos | pathParts.Push(FolderConstants.OthersFolder); |
279 | cfed7823 | Panagiotis Kanavos | } |
280 | cfed7823 | Panagiotis Kanavos | } |
281 | cfed7823 | Panagiotis Kanavos | var finalPath=Path.Combine(pathParts.ToArray()); |
282 | cfed7823 | Panagiotis Kanavos | return finalPath; |
283 | cfed7823 | Panagiotis Kanavos | } |
284 | cfed7823 | Panagiotis Kanavos | |
285 | 31c97141 | Panagiotis Kanavos | /* |
286 | 9aa8abad | Panagiotis Kanavos | public override bool TrySetMember(SetMemberBinder binder, object value) |
287 | 9aa8abad | Panagiotis Kanavos | { |
288 | 9aa8abad | Panagiotis Kanavos | if (binder.Name.StartsWith("x_object_meta")) |
289 | 9aa8abad | Panagiotis Kanavos | { |
290 | 9aa8abad | Panagiotis Kanavos | Tags[binder.Name] = value.ToString(); |
291 | 9aa8abad | Panagiotis Kanavos | } |
292 | 9aa8abad | Panagiotis Kanavos | return false; |
293 | 9aa8abad | Panagiotis Kanavos | } |
294 | 31c97141 | Panagiotis Kanavos | */ |
295 | 9aa8abad | Panagiotis Kanavos | |
296 | aba9e6d9 | Panagiotis Kanavos | public string GetPermissionString() |
297 | aba9e6d9 | Panagiotis Kanavos | { |
298 | 3ddbb7b8 | Panagiotis Kanavos | if (Permissions==null) |
299 | 3ddbb7b8 | Panagiotis Kanavos | throw new InvalidOperationException(); |
300 | 3ddbb7b8 | Panagiotis Kanavos | Contract.EndContractBlock(); |
301 | 3ddbb7b8 | Panagiotis Kanavos | |
302 | aba9e6d9 | Panagiotis Kanavos | var permissionBuilder = new StringBuilder(); |
303 | f0947233 | Panagiotis Kanavos | var groupings = Permissions.GroupBy(pair => pair.Value, pair => pair.Key); |
304 | aba9e6d9 | Panagiotis Kanavos | foreach (var grouping in groupings) |
305 | aba9e6d9 | Panagiotis Kanavos | { |
306 | f0947233 | Panagiotis Kanavos | permissionBuilder.AppendFormat("{0}={1};", grouping.Key, String.Join(",", grouping)); |
307 | aba9e6d9 | Panagiotis Kanavos | } |
308 | f0947233 | Panagiotis Kanavos | var permissions = permissionBuilder.ToString().Trim(';'); |
309 | aba9e6d9 | Panagiotis Kanavos | return permissions; |
310 | aba9e6d9 | Panagiotis Kanavos | } |
311 | f0947233 | Panagiotis Kanavos | |
312 | f0947233 | Panagiotis Kanavos | public void SetPermissions(string permissions) |
313 | f0947233 | Panagiotis Kanavos | { |
314 | c92e02f3 | Panagiotis Kanavos | if (String.IsNullOrWhiteSpace(permissions)) |
315 | c92e02f3 | Panagiotis Kanavos | return; |
316 | c92e02f3 | Panagiotis Kanavos | |
317 | f0947233 | Panagiotis Kanavos | var permDict=new Dictionary<string, string>(); |
318 | f0947233 | Panagiotis Kanavos | var perms=permissions.Split(';'); |
319 | f0947233 | Panagiotis Kanavos | foreach (var perm in perms) |
320 | f0947233 | Panagiotis Kanavos | { |
321 | f0947233 | Panagiotis Kanavos | var permPairs=perm.Split('='); |
322 | f0947233 | Panagiotis Kanavos | var right = permPairs[0]; |
323 | f0947233 | Panagiotis Kanavos | var users= permPairs[1].Split(new[]{','},StringSplitOptions.RemoveEmptyEntries); |
324 | f0947233 | Panagiotis Kanavos | foreach (var user in users) |
325 | f0947233 | Panagiotis Kanavos | { |
326 | f0947233 | Panagiotis Kanavos | permDict[user] = right; |
327 | f0947233 | Panagiotis Kanavos | } |
328 | f0947233 | Panagiotis Kanavos | } |
329 | f0947233 | Panagiotis Kanavos | Permissions = permDict; |
330 | f0947233 | Panagiotis Kanavos | } |
331 | 64171b56 | Panagiotis Kanavos | |
332 | 64171b56 | Panagiotis Kanavos | //The previous values that correspond to a NoModification object |
333 | 64171b56 | Panagiotis Kanavos | //have the same account, container and possibly the same folder |
334 | 64171b56 | Panagiotis Kanavos | public bool CorrespondsTo(ObjectInfo other) |
335 | 64171b56 | Panagiotis Kanavos | { |
336 | 64171b56 | Panagiotis Kanavos | return other.Account == this.Account |
337 | 64171b56 | Panagiotis Kanavos | && other.Container == this.Container |
338 | 64171b56 | Panagiotis Kanavos | && (this.Name == null || other.Name.StartsWith(this.Name)); |
339 | 64171b56 | Panagiotis Kanavos | } |
340 | b666b39a | Panagiotis Kanavos | |
341 | b666b39a | Panagiotis Kanavos | |
342 | b666b39a | Panagiotis Kanavos | public ObjectInfo Previous { get; private set; } |
343 | b666b39a | Panagiotis Kanavos | |
344 | b666b39a | Panagiotis Kanavos | public ObjectInfo SetPrevious(ObjectInfo previous) |
345 | b666b39a | Panagiotis Kanavos | { |
346 | b666b39a | Panagiotis Kanavos | Previous = previous; |
347 | b666b39a | Panagiotis Kanavos | PreviousHash = previous.Hash; |
348 | b666b39a | Panagiotis Kanavos | return this; |
349 | b666b39a | Panagiotis Kanavos | } |
350 | 3c43ec9b | Panagiotis Kanavos | } |
351 | 3c43ec9b | Panagiotis Kanavos | } |