Statistics
| Branch: | Revision:

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