root / Classes / GetImagesRequest.m @ 45f2fce6
History | View | Annotate | Download (3.1 kB)
1 | 700184fb | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 700184fb | Miltiadis Vasilakis | // GetImagesRequest.m |
3 | 700184fb | Miltiadis Vasilakis | // OpenStack |
4 | 700184fb | Miltiadis Vasilakis | // |
5 | 700184fb | Miltiadis Vasilakis | // Created by Mike Mayo on 12/31/10. |
6 | 700184fb | Miltiadis Vasilakis | // The OpenStack project is provided under the Apache 2.0 license. |
7 | 700184fb | Miltiadis Vasilakis | // |
8 | 700184fb | Miltiadis Vasilakis | |
9 | 700184fb | Miltiadis Vasilakis | #import "GetImagesRequest.h" |
10 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
11 | 700184fb | Miltiadis Vasilakis | #import "AccountManager.h" |
12 | 700184fb | Miltiadis Vasilakis | #import "Image.h" |
13 | 700184fb | Miltiadis Vasilakis | |
14 | 700184fb | Miltiadis Vasilakis | |
15 | 700184fb | Miltiadis Vasilakis | @implementation GetImagesRequest |
16 | 700184fb | Miltiadis Vasilakis | |
17 | 700184fb | Miltiadis Vasilakis | + (id)request:(OpenStackAccount *)account method:(NSString *)method url:(NSURL *)url { |
18 | 700184fb | Miltiadis Vasilakis | GetImagesRequest *request = [[[GetImagesRequest alloc] initWithURL:url] autorelease]; |
19 | 700184fb | Miltiadis Vasilakis | request.account = account; |
20 | 700184fb | Miltiadis Vasilakis | [request setRequestMethod:method]; |
21 | 700184fb | Miltiadis Vasilakis | [request addRequestHeader:@"X-Auth-Token" value:[account authToken]]; |
22 | 700184fb | Miltiadis Vasilakis | [request addRequestHeader:@"Content-Type" value:@"application/json"]; |
23 | 700184fb | Miltiadis Vasilakis | [request setTimeOutSeconds:40]; |
24 | 700184fb | Miltiadis Vasilakis | return request; |
25 | 700184fb | Miltiadis Vasilakis | } |
26 | 700184fb | Miltiadis Vasilakis | |
27 | 700184fb | Miltiadis Vasilakis | + (id)serversRequest:(OpenStackAccount *)account method:(NSString *)method path:(NSString *)path { |
28 | 700184fb | Miltiadis Vasilakis | NSString *now = [[[NSDate date] description] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; |
29 | 45f2fce6 | Miltiadis Vasilakis | NSLog(@"account servers url: %@", account.serversURL); |
30 | 700184fb | Miltiadis Vasilakis | NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@?now=%@", account.serversURL, path, now]]; |
31 | 700184fb | Miltiadis Vasilakis | return [GetImagesRequest request:account method:method url:url]; |
32 | 700184fb | Miltiadis Vasilakis | } |
33 | 700184fb | Miltiadis Vasilakis | |
34 | 700184fb | Miltiadis Vasilakis | + (GetImagesRequest *)request:(OpenStackAccount *)account { |
35 | 700184fb | Miltiadis Vasilakis | GetImagesRequest *request = [GetImagesRequest serversRequest:account method:@"GET" path:@"/images/detail"]; |
36 | 700184fb | Miltiadis Vasilakis | request.account = account; |
37 | 700184fb | Miltiadis Vasilakis | return request; |
38 | 700184fb | Miltiadis Vasilakis | } |
39 | 700184fb | Miltiadis Vasilakis | |
40 | 700184fb | Miltiadis Vasilakis | - (void)requestFinished { |
41 | 700184fb | Miltiadis Vasilakis | |
42 | 700184fb | Miltiadis Vasilakis | if ([self isSuccess]) { |
43 | 700184fb | Miltiadis Vasilakis | // go through results and add, rather than full replace. this way we'll keep correct OS logos |
44 | 700184fb | Miltiadis Vasilakis | // for servers with deprecated images |
45 | 700184fb | Miltiadis Vasilakis | NSMutableDictionary *newImages = [[NSMutableDictionary alloc] initWithDictionary:[self images]]; |
46 | 700184fb | Miltiadis Vasilakis | if (!self.account.images) { |
47 | 700184fb | Miltiadis Vasilakis | self.account.images = [NSMutableDictionary dictionaryWithCapacity:[newImages count]]; |
48 | 700184fb | Miltiadis Vasilakis | } |
49 | 700184fb | Miltiadis Vasilakis | // set them all to unlaunchable, then we'll update them |
50 | 700184fb | Miltiadis Vasilakis | for (Image *image in [self.account.images allValues]) { |
51 | 700184fb | Miltiadis Vasilakis | if ([image isKindOfClass:[Image class]]) { |
52 | 700184fb | Miltiadis Vasilakis | image.canBeLaunched = NO; |
53 | 700184fb | Miltiadis Vasilakis | } |
54 | 700184fb | Miltiadis Vasilakis | } |
55 | 700184fb | Miltiadis Vasilakis | for (Image *image in [newImages allValues]) { |
56 | 700184fb | Miltiadis Vasilakis | Image *newImage = [self.account.images objectForKey:image.identifier]; |
57 | 700184fb | Miltiadis Vasilakis | if (newImage) { |
58 | 700184fb | Miltiadis Vasilakis | if ([newImage isKindOfClass:[Image class]]) { |
59 | 700184fb | Miltiadis Vasilakis | newImage.canBeLaunched = YES; |
60 | 700184fb | Miltiadis Vasilakis | } |
61 | 700184fb | Miltiadis Vasilakis | } else { |
62 | 700184fb | Miltiadis Vasilakis | if ([image isKindOfClass:[Image class]]) { |
63 | 700184fb | Miltiadis Vasilakis | image.canBeLaunched = YES; |
64 | 700184fb | Miltiadis Vasilakis | [self.account.images setObject:image forKey:image.identifier]; |
65 | 700184fb | Miltiadis Vasilakis | } |
66 | 700184fb | Miltiadis Vasilakis | } |
67 | 700184fb | Miltiadis Vasilakis | } |
68 | 700184fb | Miltiadis Vasilakis | [newImages release]; |
69 | 700184fb | Miltiadis Vasilakis | [self.account persist]; |
70 | 700184fb | Miltiadis Vasilakis | [self.account.manager notify:@"getImagesSucceeded" request:self object:self.account]; |
71 | 700184fb | Miltiadis Vasilakis | } else { |
72 | 700184fb | Miltiadis Vasilakis | [self.account.manager notify:@"getImagesFailed" request:self object:self.account]; |
73 | 700184fb | Miltiadis Vasilakis | } |
74 | 700184fb | Miltiadis Vasilakis | |
75 | 700184fb | Miltiadis Vasilakis | [super requestFinished]; |
76 | 700184fb | Miltiadis Vasilakis | } |
77 | 700184fb | Miltiadis Vasilakis | |
78 | 700184fb | Miltiadis Vasilakis | - (void)failWithError:(NSError *)theError { |
79 | 700184fb | Miltiadis Vasilakis | [self.account.manager notify:@"getImagesFailed" request:self object:self.account]; |
80 | 700184fb | Miltiadis Vasilakis | [super failWithError:theError]; |
81 | 700184fb | Miltiadis Vasilakis | } |
82 | 700184fb | Miltiadis Vasilakis | |
83 | 700184fb | Miltiadis Vasilakis | |
84 | 700184fb | Miltiadis Vasilakis | @end |