Statistics
| Branch: | Tag: | Revision:

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