Fix compile errors
[pithos-ios] / Classes / Provider.m
1 //
2 //  Provider.m
3 //  OpenStack
4 //
5 //  Created by Mike Mayo on 9/30/10.
6 //  The OpenStack project is provided under the Apache 2.0 license.
7 //
8
9 #import "Provider.h"
10 #import "JSON.h"
11
12
13 static NSArray *providers = nil;
14
15 @implementation Provider
16
17 @synthesize name, authEndpointURL, authHelpMessage, rssFeeds, contactURLs, logoURLs, logoObjects;
18
19 + (void)initialize {
20     NSString *json = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"openstack_providers" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];
21
22     SBJSON *parser = [[SBJSON alloc] init];
23     NSArray *jsonObjects = [[parser objectWithString:json] objectForKey:@"providers"];
24     NSMutableArray *providerObjects = [[[NSMutableArray alloc] initWithCapacity:[jsonObjects count]] autorelease];
25     
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];   
30     }
31     [parser release];
32     
33     providers = [[NSArray alloc] initWithArray:providerObjects]; // TODO: release
34 }
35
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"];
44     
45     return provider;
46 }
47
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];   
58         }
59         [parser release];
60         
61         providers = [NSArray arrayWithArray:providerObjects];
62     } 
63     
64     return providers;
65 }
66
67 #pragma mark -
68 #pragma mark Serialization
69
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"];
77 }
78
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];        
87     }
88     return self;
89 }
90
91 #pragma mark -
92 #pragma mark HTTP Logo Requests
93
94 - (BOOL)isRackspace {
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])];    
97     return matches > 0;
98 }
99
100 - (BOOL)isRackspaceUS {
101     return [self.authEndpointURL.host isEqualToString:@"auth.api.rackspacecloud.com"];
102 }
103
104 - (BOOL)isRackspaceUK {
105     return [self.authEndpointURL.host isEqualToString:@"lon.auth.api.rackspacecloud.com"];
106 }
107
108 - (BOOL)isGRNet {
109     return ([self.authEndpointURL.host rangeOfString:@"grnet.gr"].location != NSNotFound);
110 }
111
112 #pragma mark -
113 #pragma mark Memory Management
114
115 - (void)dealloc {
116     [name release];
117     [authEndpointURL release];
118     [authHelpMessage release];    
119     [rssFeeds release];
120     [contactURLs release];
121     [logoURLs release];
122     [logoObjects release];
123     [super dealloc];
124 }
125
126 @end