5 // Created by Mike Mayo on 9/30/10.
6 // The OpenStack project is provided under the Apache 2.0 license.
13 static NSArray *providers = nil;
15 @implementation Provider
17 @synthesize name, authEndpointURL, authHelpMessage, rssFeeds, contactURLs, logoURLs, logoObjects;
20 NSString *json = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"openstack_providers" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];
22 SBJSON *parser = [[SBJSON alloc] init];
23 NSArray *jsonObjects = [[parser objectWithString:json] objectForKey:@"providers"];
24 NSMutableArray *providerObjects = [[[NSMutableArray alloc] initWithCapacity:[jsonObjects count]] autorelease];
26 for (int i = 0; i < [jsonObjects count]; i++) {
27 NSDictionary *dict = [jsonObjects objectAtIndex:i];
28 Provider *provider = [Provider fromJSON:dict];
29 [providerObjects addObject:provider];
33 providers = [[NSArray alloc] initWithArray:providerObjects]; // TODO: release
36 + (Provider *)fromJSON:(NSDictionary *)dict {
37 Provider *provider = [[[Provider alloc] init] autorelease];
38 provider.name = [dict objectForKey:@"name"];
39 provider.authEndpointURL = [NSURL URLWithString:[[dict objectForKey:@"auth_endpoint_url"] stringByAppendingString:@"/v1"]];
40 provider.authHelpMessage = [dict objectForKey:@"auth_help_message"];
41 provider.rssFeeds = [dict objectForKey:@"rss_feeds"];
42 provider.contactURLs = [dict objectForKey:@"contact_urls"];
43 provider.logoURLs = [dict objectForKey:@"logos"];
48 + (NSArray *)providers {
49 if (providers == nil) {
50 NSString *json = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"openstack_providers" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];
51 SBJSON *parser = [[SBJSON alloc] init];
52 NSArray *jsonObjects = [[parser objectWithString:json] objectForKey:@"providers"];
53 NSMutableArray *providerObjects = [[[NSMutableArray alloc] initWithCapacity:[jsonObjects count]] autorelease];
54 for (int i = 0; i < [jsonObjects count]; i++) {
55 NSDictionary *dict = [jsonObjects objectAtIndex:i];
56 Provider *provider = [Provider fromJSON:dict];
57 [providerObjects addObject:provider];
61 providers = [NSArray arrayWithArray:providerObjects];
68 #pragma mark Serialization
70 - (void)encodeWithCoder: (NSCoder *)coder {
71 [coder encodeObject:name forKey:@"name"];
72 [coder encodeObject:authEndpointURL forKey:@"authEndpointURL"];
73 [coder encodeObject:authHelpMessage forKey:@"authHelpMessage"];
74 [coder encodeObject:rssFeeds forKey:@"rssFeeds"];
75 [coder encodeObject:contactURLs forKey:@"contactURLs"];
76 [coder encodeObject:logoURLs forKey:@"logoURLs"];
79 - (id)initWithCoder:(NSCoder *)coder {
80 if ((self = [super init])) {
81 name = [[coder decodeObjectForKey:@"name"] retain];
82 authEndpointURL = [[coder decodeObjectForKey:@"authEndpointURL"] retain];
83 authHelpMessage = [[coder decodeObjectForKey:@"authHelpMessage"] retain];
84 rssFeeds = [[coder decodeObjectForKey:@"rssFeeds"] retain];
85 contactURLs = [[coder decodeObjectForKey:@"contactURLs"] retain];
86 logoURLs = [[coder decodeObjectForKey:@"logoURLs"] retain];
92 #pragma mark HTTP Logo Requests
95 NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"rackspacecloud.com" options:NSRegularExpressionCaseInsensitive error:nil];
96 NSInteger matches = [regex numberOfMatchesInString:[self.authEndpointURL host] options:0 range:NSMakeRange(0, [[self.authEndpointURL host] length])];
100 - (BOOL)isRackspaceUS {
101 return [self.authEndpointURL.host isEqualToString:@"auth.api.rackspacecloud.com"];
104 - (BOOL)isRackspaceUK {
105 return [self.authEndpointURL.host isEqualToString:@"lon.auth.api.rackspacecloud.com"];
109 return ([self.authEndpointURL.host rangeOfString:@"grnet.gr"].location != NSNotFound);
113 #pragma mark Memory Management
117 [authEndpointURL release];
118 [authHelpMessage release];
120 [contactURLs release];
122 [logoObjects release];