blob: 018ca6531aa97ae596961e56e974e0605c970dfd [file]
//
// WebDriverPreferences.m
// iWebDriver
//
// Created by Yu Chen on 5/11/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "WebDriverPreferences.h"
static NSString * const PREF_MODE = @"preference_mode";
static NSString * const PREF_DISK_CACHE_CAPACITY = @"preference_disk_cache_capacity";
static NSString * const PREF_MEMORY_CACHE_CAPACITY = @"preference_memory_cache_capacity";
static NSString * const PREF_CACHE_POLICY = @"preference_cache_policy";
static NSString * const PREF_SERVER_MODE_PORT_NUMBER = @"preference_server_mode_port_number";
static NSString * const PREF_GRID_HOST = @"preference_grid_mode_host";
static NSString * const PREF_GRID_PORT = @"preference_grid_mode_port";
static NSString * const PREF_CLIENT_MODE_CONNECTOR_ADDRESS = @"preference_client_mode_connector_address";
static NSString * const PREF_CLIENT_MODE_REQUESTER_ID = @"preference_client_mode_requester_id";
@implementation WebDriverPreferences
@synthesize mode = mode_;
@synthesize diskCacheCapacity = diskCacheCapacity_;
@synthesize memoryCacheCapacity = memoryCacheCapacity_;
@synthesize cache_policy = cachePolicy_;
@synthesize serverPortNumber = serverPortNumber_;
@synthesize gridLocation = gridLocation_;
@synthesize gridPort = gridPort_;
@synthesize connectorAddr = connectorAddr_;
@synthesize requesterId = requesterId_;
static WebDriverPreferences *singleton = nil;
+ (WebDriverPreferences*) sharedInstance {
if (singleton == nil) {
singleton = [[WebDriverPreferences alloc] init];
}
return singleton;
}
+ (void) validateConnectorAddr:(NSString*) connAddr{
// e.g., http://the.addr.of.connector:8801/ll
if (connAddr == nil ||
[connAddr isEqualToString:@""] ||
[NSURL URLWithString: connAddr] == nil){
@throw [NSException exceptionWithName:NSInvalidArgumentException
reason:@"Invalide Connector Address."
userInfo:nil];
}
}
+ (void) validateRequesterId:(NSString*) reqId {
// e.g., 171.23.11.11, mytestID
if (reqId == nil ||[reqId isEqualToString:@""]) {
@throw [NSException exceptionWithName:NSInvalidArgumentException
reason:@"Invalide Requester Id."
userInfo:nil];
}
}
+ (void) initPreferences {
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
id mode = [userDefaults objectForKey:PREF_MODE];
id port = [userDefaults objectForKey:PREF_SERVER_MODE_PORT_NUMBER];
if (mode == nil || port == nil) {
NSLog(@"Initializing app settings to default values.");
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
NSString* settingsPath = [bundlePath stringByAppendingPathComponent:
@"Settings.bundle"];
NSString* rootPlist = [settingsPath stringByAppendingPathComponent:
@"Root.plist"];
NSDictionary* settings = [NSDictionary dictionaryWithContentsOfFile:
rootPlist];
NSArray* preferences = [settings objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary* defaultPrefs =
[NSMutableDictionary dictionaryWithCapacity:[preferences count]];
for (NSDictionary* item in preferences) {
id key = [item objectForKey:@"Key"];
if (key != nil) {
[defaultPrefs setObject:[item objectForKey:@"DefaultValue"]
forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPrefs];
[[NSUserDefaults standardUserDefaults] synchronize];
} else {
NSLog(@"App settings already initialized. Mode is %@", mode);
}
}
- (id)init {
[WebDriverPreferences initPreferences];
// Fetching paramters from [NSUserDefaults standardUserDefaults].
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// mode can be "Server" or "Client"
mode_ = [defaults stringForKey:PREF_MODE];
if (!mode_) {
mode_ = @"Server";
[defaults setObject:mode_ forKey:PREF_MODE];
}
diskCacheCapacity_ = [defaults integerForKey:PREF_DISK_CACHE_CAPACITY];
if (!diskCacheCapacity_) {
diskCacheCapacity_ = 0;
[defaults setObject:@"0" forKey:PREF_DISK_CACHE_CAPACITY];
}
memoryCacheCapacity_ = [defaults integerForKey:PREF_MEMORY_CACHE_CAPACITY];
if (!memoryCacheCapacity_) {
memoryCacheCapacity_ = 0;
[defaults setObject:@"0" forKey:PREF_MEMORY_CACHE_CAPACITY];
}
cachePolicy_ = [defaults integerForKey:PREF_CACHE_POLICY];
if ([mode_ isEqualToString:@"Client"]) {
connectorAddr_ = [defaults stringForKey:PREF_CLIENT_MODE_CONNECTOR_ADDRESS];
if (!connectorAddr_) {
connectorAddr_ = @"www.connector.addr";
[defaults setObject:connectorAddr_ forKey:PREF_CLIENT_MODE_CONNECTOR_ADDRESS];
}
[WebDriverPreferences validateConnectorAddr:connectorAddr_];
requesterId_ = [defaults stringForKey:PREF_CLIENT_MODE_REQUESTER_ID];
if (!requesterId_) {
requesterId_ = @"requesterId";
[defaults setObject:requesterId_ forKey:PREF_CLIENT_MODE_REQUESTER_ID];
}
[WebDriverPreferences validateRequesterId:requesterId_];
} else if ([mode_ isEqualToString:@"Server"]) {
serverPortNumber_ =
(UInt16) [defaults integerForKey:PREF_SERVER_MODE_PORT_NUMBER];
} else {
@throw [NSException exceptionWithName:NSInvalidArgumentException
reason:@"Invalid mode."
userInfo:nil];
}
NSString *gridHost = [defaults stringForKey:PREF_GRID_HOST];
gridPort_ = [defaults stringForKey:PREF_GRID_PORT];
if ([gridHost length] > 0 && [gridPort_ length] > 0) {
gridLocation_ = [NSString stringWithFormat: @"%@", gridHost];
}
[defaults synchronize];
return self;
}
- (void)dealloc {
[mode_ release];
[connectorAddr_ release];
[requesterId_ release];
[super dealloc];
}
@end