root / asi-http-request-with-pithos / Classes / Pithos / ASIPithosObject.m @ ca7626d7
History | View | Annotate | Download (5.6 kB)
1 |
// ASIPithosObject.m |
---|---|
2 |
// Based on ASICloudFilesObject.m |
3 |
// |
4 |
// Copyright 2011 GRNET S.A. All rights reserved. |
5 |
// |
6 |
// Redistribution and use in source and binary forms, with or |
7 |
// without modification, are permitted provided that the following |
8 |
// conditions are met: |
9 |
// |
10 |
// 1. Redistributions of source code must retain the above |
11 |
// copyright notice, this list of conditions and the following |
12 |
// disclaimer. |
13 |
// |
14 |
// 2. Redistributions in binary form must reproduce the above |
15 |
// copyright notice, this list of conditions and the following |
16 |
// disclaimer in the documentation and/or other materials |
17 |
// provided with the distribution. |
18 |
// |
19 |
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
20 |
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
21 |
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 |
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
23 |
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
24 |
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
25 |
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
26 |
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
27 |
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
28 |
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
29 |
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
30 |
// POSSIBILITY OF SUCH DAMAGE. |
31 |
// |
32 |
// The views and conclusions contained in the software and |
33 |
// documentation are those of the authors and should not be |
34 |
// interpreted as representing official policies, either expressed |
35 |
// or implied, of GRNET S.A. |
36 |
|
37 |
#import "ASIPithosObject.h" |
38 |
#import "ASIPithosSharingUser.h" |
39 |
|
40 |
@implementation ASIPithosObject |
41 |
@synthesize subdir; |
42 |
@synthesize name, hash, objectHash, UUID, bytes, contentType, contentEncoding, contentDisposition, lastModified, |
43 |
version, versionTimestamp, modifiedBy, manifest, sharing, sharedBy, publicURI, metadata, allowedTo, |
44 |
data, permissions; |
45 |
|
46 |
+ (id)object { |
47 |
ASIPithosObject *object = [[self alloc] init]; |
48 |
object.subdir = NO; |
49 |
return object; |
50 |
} |
51 |
|
52 |
+ (id)subdirWithName:(NSString *)name { |
53 |
ASIPithosObject *object = [[self alloc] init]; |
54 |
object.subdir = YES; |
55 |
object.name = name; |
56 |
return object; |
57 |
} |
58 |
|
59 |
- (NSString *)description { |
60 |
if (subdir) |
61 |
return [NSString stringWithFormat:@"subdir name: %@", name]; |
62 |
return [NSString stringWithFormat:@"name: %@, hash: %@, objectHash: %@, UUID: %@, bytes: %lu, contentType: %@, contentEncoding: %@, contentDisposition: %@, lastModified: %@, version: %@, versionTimestamp: %@, modifiedBy: %@, manifest: %@, sharing: %@, sharedBy: %@, publicURI: %@, metadata: %@, allowedTo: %@", |
63 |
name, hash, objectHash, UUID, bytes, contentType, contentEncoding, contentDisposition, lastModified, version, versionTimestamp, modifiedBy, manifest, sharing, sharedBy, publicURI, metadata, allowedTo]; |
64 |
} |
65 |
|
66 |
- (void)setSharing:(NSString *)aSharing { |
67 |
if (!aSharing || ![aSharing isEqualToString:sharing]) { |
68 |
permissions = nil; |
69 |
} |
70 |
sharing = aSharing; |
71 |
} |
72 |
|
73 |
- (NSMutableArray *)permissions { |
74 |
if (!permissions) { |
75 |
NSMutableArray *newPermissions = [NSMutableArray array]; |
76 |
if (self.sharing.length) { |
77 |
for (NSString *sharingList in [self.sharing componentsSeparatedByString:@";"]) { |
78 |
NSRange equalsRange = [sharingList rangeOfString:@"="]; |
79 |
if (equalsRange.location != NSNotFound) { |
80 |
NSString *sharingType = [sharingList substringToIndex:equalsRange.location]; |
81 |
if ([sharingType hasPrefix:@" "]) { |
82 |
sharingType = [sharingType substringFromIndex:1]; |
83 |
} |
84 |
for (NSString *sharingUser in [[sharingList substringFromIndex:(equalsRange.location + 1)] componentsSeparatedByString:@","]) { |
85 |
[newPermissions addObject:[ASIPithosSharingUser sharingUserWithUser:sharingUser permission:sharingType]]; |
86 |
} |
87 |
} |
88 |
} |
89 |
} |
90 |
permissions = newPermissions; |
91 |
} |
92 |
return permissions; |
93 |
} |
94 |
|
95 |
- (void)setPermissions:(NSMutableArray *)aPermissions { |
96 |
if (!aPermissions || ![aPermissions isEqualToArray:permissions]) { |
97 |
if (aPermissions.count) { |
98 |
NSMutableDictionary *sharingListsDictionary = [NSMutableDictionary dictionary]; |
99 |
for (ASIPithosSharingUser *sharingUser in aPermissions) { |
100 |
if (sharingUser.permission) { |
101 |
NSMutableString *sharingList = [sharingListsDictionary objectForKey:sharingUser.permission]; |
102 |
if (!sharingList) { |
103 |
sharingList = [NSMutableString stringWithFormat:@"%@=", sharingUser.permission]; |
104 |
[sharingListsDictionary setObject:sharingList forKey:sharingUser.permission]; |
105 |
} |
106 |
if (sharingUser.name) { |
107 |
if (sharingUser.group) { |
108 |
[sharingList appendFormat:@"%@:%@,", sharingUser.name, sharingUser.group]; |
109 |
} else { |
110 |
[sharingList appendFormat:@"%@,", sharingUser.name]; |
111 |
} |
112 |
} |
113 |
} |
114 |
} |
115 |
NSMutableString *newSharing = [NSMutableString string]; |
116 |
for (NSMutableString *sharingList in [sharingListsDictionary objectEnumerator]) { |
117 |
[newSharing appendFormat:@"%@;", [sharingList substringToIndex:(sharingList.length - 1)]]; |
118 |
} |
119 |
self.sharing = [newSharing substringToIndex:(newSharing.length - 1)]; |
120 |
} else { |
121 |
self.sharing = nil; |
122 |
} |
123 |
} |
124 |
permissions = aPermissions; |
125 |
} |
126 |
|
127 |
@end |