root / Classes / Container.m @ 54fd5c36
History | View | Annotate | Download (4.9 kB)
1 |
// |
---|---|
2 |
// Container.m |
3 |
// OpenStack |
4 |
// |
5 |
// Created by Mike Mayo on 12/7/10. |
6 |
// The OpenStack project is provided under the Apache 2.0 license. |
7 |
// |
8 |
|
9 |
#import "Container.h" |
10 |
#import "Folder.h" |
11 |
#import "StorageObject.h" |
12 |
#import "NSObject+NSCoding.h" |
13 |
#import "NSObject+Conveniences.h" |
14 |
|
15 |
|
16 |
@implementation Container |
17 |
|
18 |
// regular container attributes |
19 |
@synthesize name, count, bytes; |
20 |
|
21 |
//policy |
22 |
@synthesize versioning, quota; |
23 |
|
24 |
//metdata |
25 |
@synthesize metadata; |
26 |
|
27 |
// CDN container attributes |
28 |
@synthesize cdnEnabled, ttl, cdnURL, logRetention, referrerACL, useragentACL, rootFolder, objectsBuffer; |
29 |
|
30 |
@synthesize hasEverBeenCDNEnabled; |
31 |
|
32 |
#pragma mark - |
33 |
#pragma mark Serialization |
34 |
|
35 |
- (void)encodeWithCoder:(NSCoder *)coder { |
36 |
[coder encodeObject:name forKey:@"name"]; |
37 |
[coder encodeInt:count forKey:@"count"]; |
38 |
[coder encodeInt:bytes forKey:@"bytes"]; |
39 |
[coder encodeBool:cdnEnabled forKey:@"cdnEnabled"]; |
40 |
[coder encodeInt:ttl forKey:@"ttl"]; |
41 |
[coder encodeObject:cdnURL forKey:@"cdnURL"]; |
42 |
[coder encodeBool:logRetention forKey:@"logRetention"]; |
43 |
[coder encodeObject:referrerACL forKey:@"referrerACL"]; |
44 |
[coder encodeObject:useragentACL forKey:@"useragentACL"]; |
45 |
[coder encodeObject:rootFolder forKey:@"rootFolder"]; |
46 |
[coder encodeBool:hasEverBeenCDNEnabled forKey:@"hasEverBeenCDNEnabled"]; |
47 |
} |
48 |
|
49 |
- (id)initWithCoder:(NSCoder *)coder { |
50 |
self = [super init]; |
51 |
if (self) { |
52 |
name = [[coder decodeObjectForKey:@"name"] retain]; |
53 |
@try { |
54 |
count = [coder decodeIntForKey:@"count"]; |
55 |
bytes = [coder decodeIntForKey:@"bytes"]; |
56 |
cdnEnabled = [coder decodeBoolForKey:@"cdnEnabled"]; |
57 |
ttl = [coder decodeIntForKey:@"ttl"]; |
58 |
logRetention = [coder decodeBoolForKey:@"logRetention"]; |
59 |
hasEverBeenCDNEnabled = [coder decodeBoolForKey:@"hasEverBeenCDNEnabled"]; |
60 |
} |
61 |
@catch (NSException *exception) { |
62 |
// we want to encode as primitives and the auto encode/decode apparently |
63 |
// wasn't working properly. this try/catch block prevents a potential |
64 |
// crash for users who have been encoded/decoded the other way |
65 |
count = 0; |
66 |
bytes = 0; |
67 |
cdnEnabled = NO; |
68 |
ttl = 0; |
69 |
logRetention = NO; |
70 |
hasEverBeenCDNEnabled = NO; |
71 |
} |
72 |
cdnURL = [[coder decodeObjectForKey:@"cdnURL"] retain]; |
73 |
referrerACL = [[coder decodeObjectForKey:@"referrerACL"] retain]; |
74 |
useragentACL = [[coder decodeObjectForKey:@"useragentACL"] retain]; |
75 |
rootFolder = [[coder decodeObjectForKey:@"rootFolder"] retain]; |
76 |
} |
77 |
return self; |
78 |
} |
79 |
|
80 |
#pragma mark - |
81 |
#pragma mark JSON |
82 |
|
83 |
+ (Container *)fromJSON:(NSDictionary *)dict { |
84 |
Container *container = [[[Container alloc] init] autorelease]; |
85 |
// regular attributes |
86 |
container.name = [dict objectForKey:@"name"]; |
87 |
|
88 |
//policy |
89 |
container.versioning = [dict objectForKey:@"x_container_policy_versioning"]; |
90 |
container.quota = [[dict objectForKey:@"x_container_policy_quota"] integerValue]; |
91 |
|
92 |
// metadata |
93 |
container.metadata = nil; |
94 |
|
95 |
// if count is in here, we're parsing from the object storage API |
96 |
if ([dict objectForKey:@"count"]) { |
97 |
container.count = [[dict objectForKey:@"count"] intValue]; |
98 |
container.bytes = [[dict objectForKey:@"bytes"] unsignedLongLongValue]; |
99 |
} |
100 |
|
101 |
// if cdn_enabled is in here, we're parsing from the cdn API |
102 |
if ([dict objectForKey:@"cdn_enabled"]) { |
103 |
container.hasEverBeenCDNEnabled = YES; |
104 |
container.cdnEnabled = [[dict objectForKey:@"cdn_enabled"] boolValue]; |
105 |
container.ttl = [[dict objectForKey:@"ttl"] intValue]; |
106 |
container.cdnURL = [dict objectForKey:@"cdn_uri"]; |
107 |
container.referrerACL = [dict objectForKey:@"referrer_acl"]; |
108 |
container.useragentACL = [dict objectForKey:@"useragent_acl"]; |
109 |
container.logRetention = [[dict objectForKey:@"log_retention"] boolValue]; |
110 |
} |
111 |
|
112 |
return container; |
113 |
} |
114 |
|
115 |
#pragma mark - |
116 |
#pragma mark Display |
117 |
|
118 |
- (NSString *)humanizedBytes { |
119 |
return [Container humanizedBytes:self.bytes]; |
120 |
} |
121 |
|
122 |
- (NSString *)osxStyleHumanizedBytes { |
123 |
return [Container osxStyleHumanizedBytes:self.bytes]; |
124 |
} |
125 |
|
126 |
- (NSString *)humanizedCount { |
127 |
NSString *noun = NSLocalizedString(@"objects", @"objects"); |
128 |
if (self.count == 1) { |
129 |
noun = NSLocalizedString(@"object", @"object"); |
130 |
} |
131 |
return [NSString stringWithFormat:@"%i %@", self.count, noun]; |
132 |
} |
133 |
|
134 |
- (NSString *)humanizedSize { |
135 |
return [NSString stringWithFormat:@"%@, %@", [self humanizedCount], [self humanizedBytes]]; |
136 |
} |
137 |
|
138 |
- (NSString *)osxStyleHumanizedSize { |
139 |
return [NSString stringWithFormat:@"%@, %@", [self humanizedCount], [self osxStyleHumanizedBytes]]; |
140 |
} |
141 |
|
142 |
#pragma mark - |
143 |
#pragma mark Comparison |
144 |
|
145 |
// flavors should be sorted by RAM instead of name |
146 |
- (NSComparisonResult)compare:(Container *)aContainer { |
147 |
return [self.name compare:aContainer.name]; |
148 |
} |
149 |
|
150 |
#pragma mark - |
151 |
#pragma mark Memory Management |
152 |
|
153 |
-(void) dealloc { |
154 |
[name release]; |
155 |
[rootFolder release]; |
156 |
[super dealloc]; |
157 |
} |
158 |
|
159 |
@end |