Statistics
| Branch: | Revision:

root / asi-http-request-with-pithos / Classes / Pithos / ASIPithosAccountRequest.m @ 6b3a5e6a

History | View | Annotate | Download (12.1 kB)

1 be116d22 Miltiadis Vasilakis
//  ASIPithosAccountRequest.m
2 be116d22 Miltiadis Vasilakis
//  Based on ASICloudFilesContainerRequest.m
3 be116d22 Miltiadis Vasilakis
//
4 be116d22 Miltiadis Vasilakis
// Copyright 2011 GRNET S.A. All rights reserved.
5 be116d22 Miltiadis Vasilakis
//
6 be116d22 Miltiadis Vasilakis
// Redistribution and use in source and binary forms, with or
7 be116d22 Miltiadis Vasilakis
// without modification, are permitted provided that the following
8 be116d22 Miltiadis Vasilakis
// conditions are met:
9 be116d22 Miltiadis Vasilakis
// 
10 be116d22 Miltiadis Vasilakis
//   1. Redistributions of source code must retain the above
11 be116d22 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
12 be116d22 Miltiadis Vasilakis
//      disclaimer.
13 be116d22 Miltiadis Vasilakis
// 
14 be116d22 Miltiadis Vasilakis
//   2. Redistributions in binary form must reproduce the above
15 be116d22 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
16 be116d22 Miltiadis Vasilakis
//      disclaimer in the documentation and/or other materials
17 be116d22 Miltiadis Vasilakis
//      provided with the distribution.
18 be116d22 Miltiadis Vasilakis
// 
19 be116d22 Miltiadis Vasilakis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
20 be116d22 Miltiadis Vasilakis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 be116d22 Miltiadis Vasilakis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 be116d22 Miltiadis Vasilakis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
23 be116d22 Miltiadis Vasilakis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 be116d22 Miltiadis Vasilakis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 be116d22 Miltiadis Vasilakis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 be116d22 Miltiadis Vasilakis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
27 be116d22 Miltiadis Vasilakis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 be116d22 Miltiadis Vasilakis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
29 be116d22 Miltiadis Vasilakis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 be116d22 Miltiadis Vasilakis
// POSSIBILITY OF SUCH DAMAGE.
31 be116d22 Miltiadis Vasilakis
// 
32 be116d22 Miltiadis Vasilakis
// The views and conclusions contained in the software and
33 be116d22 Miltiadis Vasilakis
// documentation are those of the authors and should not be
34 be116d22 Miltiadis Vasilakis
// interpreted as representing official policies, either expressed
35 be116d22 Miltiadis Vasilakis
// or implied, of GRNET S.A.
36 be116d22 Miltiadis Vasilakis
37 be116d22 Miltiadis Vasilakis
#import "ASIPithosAccountRequest.h"
38 78355da3 Miltiadis Vasilakis
#import "ASIPithosAccount.h"
39 be116d22 Miltiadis Vasilakis
#import "ASIPithosContainer.h"
40 be116d22 Miltiadis Vasilakis
41 be116d22 Miltiadis Vasilakis
@implementation ASIPithosAccountRequest
42 6ba383d0 Miltiadis Vasilakis
@synthesize currentContainer;
43 be116d22 Miltiadis Vasilakis
44 be116d22 Miltiadis Vasilakis
#pragma mark -
45 be116d22 Miltiadis Vasilakis
#pragma mark Constructors
46 be116d22 Miltiadis Vasilakis
47 be116d22 Miltiadis Vasilakis
+ (id)storageRequestWithMethod:(NSString *)method queryString:(NSString *)queryString {
48 be116d22 Miltiadis Vasilakis
    NSString *urlString = [NSString stringWithString:[self storageURL]];
49 be116d22 Miltiadis Vasilakis
    if (queryString)
50 be116d22 Miltiadis Vasilakis
        urlString = [urlString stringByAppendingString:queryString];
51 be116d22 Miltiadis Vasilakis
52 be116d22 Miltiadis Vasilakis
	ASIPithosAccountRequest *request = [[[self alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease];
53 be116d22 Miltiadis Vasilakis
	[request setRequestMethod:method];
54 be116d22 Miltiadis Vasilakis
	[request addRequestHeader:@"X-Auth-Token" value:[self authToken]];
55 be116d22 Miltiadis Vasilakis
	return request;
56 be116d22 Miltiadis Vasilakis
}
57 be116d22 Miltiadis Vasilakis
58 be116d22 Miltiadis Vasilakis
+ (id)storageRequestWithMethod:(NSString *)method {
59 be116d22 Miltiadis Vasilakis
	return [self storageRequestWithMethod:method queryString:nil];
60 be116d22 Miltiadis Vasilakis
}
61 be116d22 Miltiadis Vasilakis
62 be116d22 Miltiadis Vasilakis
#pragma mark -
63 be116d22 Miltiadis Vasilakis
#pragma mark Memory Management
64 be116d22 Miltiadis Vasilakis
65 be116d22 Miltiadis Vasilakis
- (void)dealloc {
66 be116d22 Miltiadis Vasilakis
	[currentContainer release];
67 be116d22 Miltiadis Vasilakis
    [containers release];
68 be116d22 Miltiadis Vasilakis
    [metadata release];
69 0a4b9bd3 Miltiadis Vasilakis
    [policy release];
70 be116d22 Miltiadis Vasilakis
    [groups release];
71 be116d22 Miltiadis Vasilakis
	[super dealloc];
72 be116d22 Miltiadis Vasilakis
}
73 be116d22 Miltiadis Vasilakis
74 be116d22 Miltiadis Vasilakis
#pragma mark -
75 be116d22 Miltiadis Vasilakis
#pragma mark HEAD
76 be116d22 Miltiadis Vasilakis
77 be116d22 Miltiadis Vasilakis
// HEAD storageURL
78 be116d22 Miltiadis Vasilakis
+ (id)accountMetadataRequest {
79 be116d22 Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"HEAD"];
80 be116d22 Miltiadis Vasilakis
}
81 be116d22 Miltiadis Vasilakis
82 be116d22 Miltiadis Vasilakis
// HEAD storageURL?[until=untilTimestamp]
83 be116d22 Miltiadis Vasilakis
+ (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp {
84 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
85 be116d22 Miltiadis Vasilakis
    if (untilTimestamp)
86 be116d22 Miltiadis Vasilakis
        queryString = [NSString stringWithFormat:@"?until=%d", (int)[untilTimestamp timeIntervalSince1970]];
87 be116d22 Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"HEAD" queryString:queryString];
88 be116d22 Miltiadis Vasilakis
}
89 be116d22 Miltiadis Vasilakis
90 be116d22 Miltiadis Vasilakis
// HEAD storageURL?[until=untilTimestamp] [If-Modified-Since]
91 be116d22 Miltiadis Vasilakis
+ (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp ifModifiedSince:(NSDate *)sinceTimestamp {
92 be116d22 Miltiadis Vasilakis
    ASIPithosAccountRequest *request = [self accountMetadataRequestUntil:untilTimestamp];
93 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
94 be116d22 Miltiadis Vasilakis
    return request;
95 be116d22 Miltiadis Vasilakis
}
96 be116d22 Miltiadis Vasilakis
97 be116d22 Miltiadis Vasilakis
// HEAD storageURL?[until=untilTimestamp] [If-Unmodified-Since]
98 be116d22 Miltiadis Vasilakis
+ (id)accountMetadataRequestUntil:(NSDate *)untilTimestamp ifUnmodifiedSince:(NSDate *)sinceTimestamp {
99 be116d22 Miltiadis Vasilakis
    ASIPithosAccountRequest *request = [self accountMetadataRequestUntil:untilTimestamp];
100 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
101 be116d22 Miltiadis Vasilakis
    return request;
102 be116d22 Miltiadis Vasilakis
}
103 be116d22 Miltiadis Vasilakis
104 be116d22 Miltiadis Vasilakis
- (NSUInteger)containerCount {
105 be116d22 Miltiadis Vasilakis
	return [[[self responseHeaders] objectForKey:@"X-Account-Container-Count"] intValue];
106 be116d22 Miltiadis Vasilakis
}
107 be116d22 Miltiadis Vasilakis
108 be116d22 Miltiadis Vasilakis
- (NSUInteger)bytesUsed {
109 be116d22 Miltiadis Vasilakis
	return [[[self responseHeaders] objectForKey:@"X-Account-Bytes-Used"] intValue];
110 be116d22 Miltiadis Vasilakis
}
111 be116d22 Miltiadis Vasilakis
112 be116d22 Miltiadis Vasilakis
- (NSDate *)untilTimestamp {
113 be116d22 Miltiadis Vasilakis
    NSString *untilTimestampString = [[self responseHeaders] objectForKey:@"X-Account-Until-Timestamp"];
114 be116d22 Miltiadis Vasilakis
    if (untilTimestampString)
115 be116d22 Miltiadis Vasilakis
        return [[self dateFormatterWithFormatId:1] dateFromString:untilTimestampString];
116 be116d22 Miltiadis Vasilakis
    return nil;
117 be116d22 Miltiadis Vasilakis
}
118 be116d22 Miltiadis Vasilakis
119 be116d22 Miltiadis Vasilakis
- (NSDictionary *)groups {
120 be116d22 Miltiadis Vasilakis
    if (groups == nil) {
121 be116d22 Miltiadis Vasilakis
        groups = [self getHeadersDictionaryForPrefix:@"X-Account-Group-"];
122 be116d22 Miltiadis Vasilakis
        [groups retain];
123 be116d22 Miltiadis Vasilakis
    }
124 be116d22 Miltiadis Vasilakis
    return groups;
125 be116d22 Miltiadis Vasilakis
}
126 be116d22 Miltiadis Vasilakis
127 0a4b9bd3 Miltiadis Vasilakis
- (NSDictionary *)policy {
128 0a4b9bd3 Miltiadis Vasilakis
    if (policy == nil) {
129 0a4b9bd3 Miltiadis Vasilakis
        policy = [self getHeadersDictionaryForPrefix:@"X-Account-Policy-"];
130 0a4b9bd3 Miltiadis Vasilakis
        [policy retain];
131 0a4b9bd3 Miltiadis Vasilakis
    }
132 0a4b9bd3 Miltiadis Vasilakis
    return policy;
133 0a4b9bd3 Miltiadis Vasilakis
}
134 0a4b9bd3 Miltiadis Vasilakis
135 be116d22 Miltiadis Vasilakis
- (NSDictionary *)metadata {
136 be116d22 Miltiadis Vasilakis
    if (metadata == nil) {
137 be116d22 Miltiadis Vasilakis
        metadata = [self getHeadersDictionaryForPrefix:@"X-Account-Meta-"];
138 be116d22 Miltiadis Vasilakis
        [metadata retain];
139 be116d22 Miltiadis Vasilakis
    }
140 be116d22 Miltiadis Vasilakis
    return metadata;
141 be116d22 Miltiadis Vasilakis
}
142 be116d22 Miltiadis Vasilakis
143 be116d22 Miltiadis Vasilakis
- (NSDate *)lastModified {
144 be116d22 Miltiadis Vasilakis
    NSString *lastModifiedString = [[self responseHeaders] objectForKey:@"Last-Modified"];
145 be116d22 Miltiadis Vasilakis
    if (lastModifiedString)
146 be116d22 Miltiadis Vasilakis
        return [[self dateFormatterWithFormatId:1] dateFromString:lastModifiedString];
147 be116d22 Miltiadis Vasilakis
    return nil;
148 be116d22 Miltiadis Vasilakis
}
149 be116d22 Miltiadis Vasilakis
150 78355da3 Miltiadis Vasilakis
- (ASIPithosAccount *)account {
151 78355da3 Miltiadis Vasilakis
    ASIPithosAccount *account = [ASIPithosAccount account];
152 78355da3 Miltiadis Vasilakis
    account.containerCount = [self containerCount];
153 78355da3 Miltiadis Vasilakis
    account.bytesUsed = [self bytesUsed];
154 78355da3 Miltiadis Vasilakis
    account.untilTimestamp = [self untilTimestamp];
155 78355da3 Miltiadis Vasilakis
    account.groups = (NSMutableDictionary *)[self groups];
156 0a4b9bd3 Miltiadis Vasilakis
    account.policy = (NSMutableDictionary *)[self policy];
157 78355da3 Miltiadis Vasilakis
    account.metadata = (NSMutableDictionary *)[self metadata];
158 78355da3 Miltiadis Vasilakis
    account.lastModified = [self lastModified];
159 78355da3 Miltiadis Vasilakis
    return account;
160 78355da3 Miltiadis Vasilakis
}
161 78355da3 Miltiadis Vasilakis
162 78355da3 Miltiadis Vasilakis
163 be116d22 Miltiadis Vasilakis
#pragma mark -
164 be116d22 Miltiadis Vasilakis
#pragma mark GET
165 be116d22 Miltiadis Vasilakis
166 be116d22 Miltiadis Vasilakis
// GET storageURL
167 be116d22 Miltiadis Vasilakis
+ (id)listContainersRequest {
168 be116d22 Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"GET" queryString:@"?format=xml"];
169 be116d22 Miltiadis Vasilakis
}
170 be116d22 Miltiadis Vasilakis
171 be116d22 Miltiadis Vasilakis
// GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp]
172 be116d22 Miltiadis Vasilakis
+ (id)listContainersRequestWithLimit:(NSUInteger)limit 
173 be116d22 Miltiadis Vasilakis
                              marker:(NSString *)marker 
174 be116d22 Miltiadis Vasilakis
                              shared:(BOOL)shared 
175 be116d22 Miltiadis Vasilakis
                               until:(NSDate *)untilTimestamp {
176 be116d22 Miltiadis Vasilakis
	NSString *queryString = @"?format=xml";
177 be116d22 Miltiadis Vasilakis
	if (limit && (limit > 0))
178 be116d22 Miltiadis Vasilakis
		queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&limit=%lu", limit]];
179 be116d22 Miltiadis Vasilakis
	if (marker)
180 be116d22 Miltiadis Vasilakis
		queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", [marker stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
181 be116d22 Miltiadis Vasilakis
	if (shared)
182 be116d22 Miltiadis Vasilakis
		queryString = [queryString stringByAppendingString:@"&shared="];    
183 be116d22 Miltiadis Vasilakis
    if (untilTimestamp)
184 be116d22 Miltiadis Vasilakis
        queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&until=%d", (int)[untilTimestamp timeIntervalSince1970]]];
185 be116d22 Miltiadis Vasilakis
	
186 be116d22 Miltiadis Vasilakis
	return [self storageRequestWithMethod:@"GET" queryString:queryString];
187 be116d22 Miltiadis Vasilakis
}
188 be116d22 Miltiadis Vasilakis
189 be116d22 Miltiadis Vasilakis
// GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp] [If-Modified-Since]
190 be116d22 Miltiadis Vasilakis
+ (id)listContainersRequestWithLimit:(NSUInteger)limit 
191 be116d22 Miltiadis Vasilakis
                              marker:(NSString *)marker 
192 be116d22 Miltiadis Vasilakis
                              shared:(BOOL)shared 
193 be116d22 Miltiadis Vasilakis
                               until:(NSDate *)untilTimestamp 
194 be116d22 Miltiadis Vasilakis
                     ifModifiedSince:(NSDate *)sinceTimestamp {
195 be116d22 Miltiadis Vasilakis
    ASIPithosAccountRequest *request = [self listContainersRequestWithLimit:limit marker:marker shared:shared until:untilTimestamp];
196 be116d22 Miltiadis Vasilakis
    [request addRequestIfModifiedSinceHeader:sinceTimestamp];
197 be116d22 Miltiadis Vasilakis
    return request;
198 be116d22 Miltiadis Vasilakis
}
199 be116d22 Miltiadis Vasilakis
200 be116d22 Miltiadis Vasilakis
// GET storageURL?[limit=limit]&[marker=marker]&[shared=]&[until=untilTimestamp] [If-Unmodified-Since]
201 be116d22 Miltiadis Vasilakis
+ (id)listContainersRequestWithLimit:(NSUInteger)limit 
202 be116d22 Miltiadis Vasilakis
                              marker:(NSString *)marker 
203 be116d22 Miltiadis Vasilakis
                              shared:(BOOL)shared 
204 be116d22 Miltiadis Vasilakis
                               until:(NSDate *)untilTimestamp 
205 be116d22 Miltiadis Vasilakis
                     ifUnmodifiedSince:(NSDate *)sinceTimestamp {
206 be116d22 Miltiadis Vasilakis
    ASIPithosAccountRequest *request = [self listContainersRequestWithLimit:limit marker:marker shared:shared until:untilTimestamp];
207 be116d22 Miltiadis Vasilakis
    [request addRequestIfUnmodifiedSinceHeader:sinceTimestamp];
208 be116d22 Miltiadis Vasilakis
    return request;
209 be116d22 Miltiadis Vasilakis
}
210 be116d22 Miltiadis Vasilakis
211 be116d22 Miltiadis Vasilakis
212 be116d22 Miltiadis Vasilakis
- (NSArray *)containers {
213 be116d22 Miltiadis Vasilakis
    if (containers == nil) {
214 be116d22 Miltiadis Vasilakis
        containers = [[NSMutableArray alloc] init];
215 be116d22 Miltiadis Vasilakis
        
216 be116d22 Miltiadis Vasilakis
        NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease];
217 be116d22 Miltiadis Vasilakis
        [parser setDelegate:self];
218 be116d22 Miltiadis Vasilakis
        [parser setShouldProcessNamespaces:NO];
219 be116d22 Miltiadis Vasilakis
        [parser setShouldReportNamespacePrefixes:NO];
220 be116d22 Miltiadis Vasilakis
        [parser setShouldResolveExternalEntities:NO];
221 be116d22 Miltiadis Vasilakis
        [parser parse];
222 be116d22 Miltiadis Vasilakis
    }    
223 be116d22 Miltiadis Vasilakis
	return containers;
224 be116d22 Miltiadis Vasilakis
}
225 be116d22 Miltiadis Vasilakis
226 be116d22 Miltiadis Vasilakis
#pragma mark -
227 be116d22 Miltiadis Vasilakis
#pragma mark POST
228 be116d22 Miltiadis Vasilakis
229 be116d22 Miltiadis Vasilakis
230 be116d22 Miltiadis Vasilakis
// POST storageURL
231 be116d22 Miltiadis Vasilakis
+ (id)updateAccountMetadataRequest {
232 be116d22 Miltiadis Vasilakis
    return [self storageRequestWithMethod:@"POST"];
233 be116d22 Miltiadis Vasilakis
}
234 be116d22 Miltiadis Vasilakis
235 be116d22 Miltiadis Vasilakis
// POST storageURL?[update=] [X-Account-Group-*] [X-Account-Meta-*]
236 be116d22 Miltiadis Vasilakis
+ (id)updateAccountMetadataRequestWithGroups:(NSDictionary *)groups metadata:(NSDictionary *)metadata update:(BOOL)update {
237 be116d22 Miltiadis Vasilakis
    NSString *queryString = nil;
238 be116d22 Miltiadis Vasilakis
    if (update)
239 be116d22 Miltiadis Vasilakis
        queryString = @"?update=";
240 be116d22 Miltiadis Vasilakis
    ASIPithosAccountRequest *request = [self storageRequestWithMethod:@"POST" queryString:queryString];
241 be116d22 Miltiadis Vasilakis
	
242 be116d22 Miltiadis Vasilakis
    if (groups) {
243 be116d22 Miltiadis Vasilakis
        for (NSString *key in [groups keyEnumerator]) {
244 6b3a5e6a Miltiadis Vasilakis
            [request addRequestHeader:[[NSString stringWithFormat:@"X-Account-Group-%@", key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 
245 6b3a5e6a Miltiadis Vasilakis
                                value:[[groups objectForKey:key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
246 be116d22 Miltiadis Vasilakis
        }
247 be116d22 Miltiadis Vasilakis
    }
248 be116d22 Miltiadis Vasilakis
    
249 be116d22 Miltiadis Vasilakis
    if (metadata) {
250 be116d22 Miltiadis Vasilakis
        for (NSString *key in [metadata keyEnumerator]) {
251 6b3a5e6a Miltiadis Vasilakis
            [request addRequestHeader:[[NSString stringWithFormat:@"X-Account-Meta-%@", key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 
252 6b3a5e6a Miltiadis Vasilakis
                                value:[[metadata objectForKey:key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
253 be116d22 Miltiadis Vasilakis
        }
254 be116d22 Miltiadis Vasilakis
    }
255 be116d22 Miltiadis Vasilakis
    
256 be116d22 Miltiadis Vasilakis
	return request;
257 be116d22 Miltiadis Vasilakis
}
258 be116d22 Miltiadis Vasilakis
259 be116d22 Miltiadis Vasilakis
#pragma mark -
260 be116d22 Miltiadis Vasilakis
#pragma mark NSXMLParserDelegate
261 be116d22 Miltiadis Vasilakis
262 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
263 be116d22 Miltiadis Vasilakis
    self.currentElement = elementName;
264 be116d22 Miltiadis Vasilakis
	if ([elementName isEqualToString:@"container"]) {
265 be116d22 Miltiadis Vasilakis
		self.currentContainer = [ASIPithosContainer container];
266 be116d22 Miltiadis Vasilakis
	}
267 be116d22 Miltiadis Vasilakis
	self.currentContent = @"";
268 be116d22 Miltiadis Vasilakis
}
269 be116d22 Miltiadis Vasilakis
270 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
271 be116d22 Miltiadis Vasilakis
	if ([elementName isEqualToString:@"name"]) {
272 be116d22 Miltiadis Vasilakis
        currentContainer.name = currentContent;
273 be116d22 Miltiadis Vasilakis
	} else if ([elementName isEqualToString:@"count"]) {
274 be116d22 Miltiadis Vasilakis
        currentContainer.count = [currentContent intValue];
275 be116d22 Miltiadis Vasilakis
	} else if ([elementName isEqualToString:@"bytes"]) {
276 be116d22 Miltiadis Vasilakis
        currentContainer.bytes = [currentContent intValue];
277 be116d22 Miltiadis Vasilakis
    } else if ([elementName isEqualToString:@"last_modified"]) {
278 13bc2a4e Miltiadis Vasilakis
        currentContainer.lastModified = [[self dateFormatterWithFormatId:0] dateFromString:
279 13bc2a4e Miltiadis Vasilakis
                                         [currentContent stringByReplacingOccurrencesOfString:@":" 
280 13bc2a4e Miltiadis Vasilakis
                                                                                   withString:@"" 
281 13bc2a4e Miltiadis Vasilakis
                                                                                      options:NSBackwardsSearch 
282 13bc2a4e Miltiadis Vasilakis
                                                                                        range:NSMakeRange(([currentContent length] - 3), 1)]];
283 be116d22 Miltiadis Vasilakis
    } else if ([elementName isEqualToString:@"x_container_until_timestamp"]) {
284 78355da3 Miltiadis Vasilakis
        currentContainer.untilTimestamp = [NSDate dateWithTimeIntervalSince1970:[currentContent doubleValue]];
285 be116d22 Miltiadis Vasilakis
    } else if ([elementName rangeOfString:@"x_container_policy_"].location == 0) {
286 be116d22 Miltiadis Vasilakis
        if (currentContainer.policy == nil)
287 be116d22 Miltiadis Vasilakis
            currentContainer.policy = [NSMutableDictionary dictionary];
288 be116d22 Miltiadis Vasilakis
        [currentContainer.policy setObject:currentContent forKey:[elementName substringFromIndex:19]];
289 be116d22 Miltiadis Vasilakis
    } else if ([elementName rangeOfString:@"x_container_meta_"].location == 0) {    
290 be116d22 Miltiadis Vasilakis
        if (currentContainer.metadata == nil)
291 be116d22 Miltiadis Vasilakis
            currentContainer.metadata = [NSMutableDictionary dictionary];
292 be116d22 Miltiadis Vasilakis
        [currentContainer.metadata setObject:currentContent forKey:[elementName substringFromIndex:17]];
293 be116d22 Miltiadis Vasilakis
	} else if ([elementName isEqualToString:@"container"]) {
294 be116d22 Miltiadis Vasilakis
		[containers addObject:currentContainer];
295 be116d22 Miltiadis Vasilakis
        self.currentContainer = nil;
296 be116d22 Miltiadis Vasilakis
	}
297 be116d22 Miltiadis Vasilakis
}
298 be116d22 Miltiadis Vasilakis
299 be116d22 Miltiadis Vasilakis
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
300 be116d22 Miltiadis Vasilakis
    self.currentContent = [currentContent stringByAppendingString:string];
301 be116d22 Miltiadis Vasilakis
}
302 be116d22 Miltiadis Vasilakis
    
303 be116d22 Miltiadis Vasilakis
@end