Statistics
| Branch: | Tag: | Revision:

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