Statistics
| Branch: | Tag: | Revision:

root / Classes / ChefSettingsViewController.m @ 9fee07a6

History | View | Annotate | Download (10.7 kB)

1 700184fb Miltiadis Vasilakis
//
2 700184fb Miltiadis Vasilakis
//  ChefSettingsViewController.m
3 700184fb Miltiadis Vasilakis
//  OpenStack
4 700184fb Miltiadis Vasilakis
//
5 700184fb Miltiadis Vasilakis
//  Created by Mike Mayo on 10/29/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 "ChefSettingsViewController.h"
10 700184fb Miltiadis Vasilakis
#import "ChefValidationKeyViewController.h"
11 700184fb Miltiadis Vasilakis
#import "UIColor+MoreColors.h"
12 700184fb Miltiadis Vasilakis
#import "SettingsViewController.h"
13 700184fb Miltiadis Vasilakis
14 700184fb Miltiadis Vasilakis
#define kChefBootstrappingEnabled 0
15 700184fb Miltiadis Vasilakis
#define kChefEndpointType 1
16 700184fb Miltiadis Vasilakis
#define kChefEndpointConfiguration 2
17 700184fb Miltiadis Vasilakis
#define kChefValidationKey 3
18 700184fb Miltiadis Vasilakis
19 700184fb Miltiadis Vasilakis
@implementation ChefSettingsViewController
20 700184fb Miltiadis Vasilakis
21 700184fb Miltiadis Vasilakis
@synthesize settingsViewController;
22 700184fb Miltiadis Vasilakis
23 700184fb Miltiadis Vasilakis
#pragma mark -
24 700184fb Miltiadis Vasilakis
#pragma mark Switch
25 700184fb Miltiadis Vasilakis
26 700184fb Miltiadis Vasilakis
- (void)chefBootstrappingSwitchChanged:(id)sender {
27 700184fb Miltiadis Vasilakis
    
28 700184fb Miltiadis Vasilakis
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
29 700184fb Miltiadis Vasilakis
    NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)];
30 700184fb Miltiadis Vasilakis
    
31 700184fb Miltiadis Vasilakis
    if (chefBootstrappingSwitch.on) {
32 700184fb Miltiadis Vasilakis
        [self.tableView insertSections:sections withRowAnimation:UITableViewRowAnimationBottom];
33 700184fb Miltiadis Vasilakis
        [defaults setValue:@"YES" forKey:@"chef_bootstrapping_on"];
34 700184fb Miltiadis Vasilakis
    } else {
35 700184fb Miltiadis Vasilakis
        [self.tableView deleteSections:sections withRowAnimation:UITableViewRowAnimationTop];
36 700184fb Miltiadis Vasilakis
        [defaults setValue:@"NO" forKey:@"chef_bootstrapping_on"];
37 700184fb Miltiadis Vasilakis
    }
38 700184fb Miltiadis Vasilakis
    [defaults synchronize];
39 700184fb Miltiadis Vasilakis
    
40 700184fb Miltiadis Vasilakis
    [self.settingsViewController.tableView reloadData];
41 700184fb Miltiadis Vasilakis
}
42 700184fb Miltiadis Vasilakis
43 700184fb Miltiadis Vasilakis
#pragma mark -
44 700184fb Miltiadis Vasilakis
#pragma mark View lifecycle
45 700184fb Miltiadis Vasilakis
46 700184fb Miltiadis Vasilakis
- (void)viewDidLoad {
47 700184fb Miltiadis Vasilakis
    [super viewDidLoad];
48 700184fb Miltiadis Vasilakis
    self.navigationItem.title = @"Chef Bootstrapping";
49 700184fb Miltiadis Vasilakis
    
50 700184fb Miltiadis Vasilakis
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
51 700184fb Miltiadis Vasilakis
    
52 700184fb Miltiadis Vasilakis
    chefBootstrappingSwitch = [[UISwitch alloc] init];
53 700184fb Miltiadis Vasilakis
    chefBootstrappingSwitch.on = [[defaults stringForKey:@"chef_bootstrapping_on"] isEqualToString:@"YES"];    
54 700184fb Miltiadis Vasilakis
    [chefBootstrappingSwitch addTarget:self action:@selector(chefBootstrappingSwitchChanged:) forControlEvents:UIControlEventValueChanged];
55 700184fb Miltiadis Vasilakis
    
56 700184fb Miltiadis Vasilakis
    chefURLTextField = [[UITextField alloc] initWithFrame:CGRectMake(30.0, 13.0, 186.0, 24.0)];    
57 700184fb Miltiadis Vasilakis
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
58 700184fb Miltiadis Vasilakis
        chefURLTextField.frame = CGRectMake(30.0, 13.0, 368.0, 24.0);
59 700184fb Miltiadis Vasilakis
    }
60 700184fb Miltiadis Vasilakis
    chefURLTextField.delegate = self;
61 700184fb Miltiadis Vasilakis
    chefURLTextField.placeholder = @"Ex: http://mynode/chef";
62 700184fb Miltiadis Vasilakis
    chefURLTextField.font = [UIFont systemFontOfSize:17.0];
63 700184fb Miltiadis Vasilakis
    chefURLTextField.textColor = [UIColor value1DetailTextLabelColor];
64 700184fb Miltiadis Vasilakis
    chefURLTextField.backgroundColor = [UIColor clearColor];
65 700184fb Miltiadis Vasilakis
    chefURLTextField.textAlignment = UITextAlignmentRight;
66 700184fb Miltiadis Vasilakis
    chefURLTextField.returnKeyType = UIReturnKeyDone;
67 700184fb Miltiadis Vasilakis
    chefURLTextField.autocorrectionType = UITextAutocorrectionTypeNo;
68 700184fb Miltiadis Vasilakis
    chefURLTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
69 700184fb Miltiadis Vasilakis
    chefURLTextField.text = [defaults valueForKey:@"chef_bootstrapping_chef_server_url"];
70 700184fb Miltiadis Vasilakis
71 700184fb Miltiadis Vasilakis
    opscodeOrgTextField = [[UITextField alloc] initWithFrame:CGRectMake(60.0, 13.0, 156.0, 24.0)];
72 700184fb Miltiadis Vasilakis
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
73 700184fb Miltiadis Vasilakis
        opscodeOrgTextField.frame = CGRectMake(60.0, 13.0, 338.0, 24.0);
74 700184fb Miltiadis Vasilakis
    }
75 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.delegate = self;
76 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.placeholder = @"Ex: greenisus";
77 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.font = [UIFont systemFontOfSize:17.0];
78 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.textColor = [UIColor value1DetailTextLabelColor];
79 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.backgroundColor = [UIColor clearColor];
80 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.textAlignment = UITextAlignmentRight;
81 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.returnKeyType = UIReturnKeyDone;
82 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.autocorrectionType = UITextAutocorrectionTypeNo;
83 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.autocapitalizationType = UITextAutocapitalizationTypeNone;
84 700184fb Miltiadis Vasilakis
    opscodeOrgTextField.text = [defaults valueForKey:@"chef_bootstrapping_opscode_organization"];
85 700184fb Miltiadis Vasilakis
}
86 700184fb Miltiadis Vasilakis
87 700184fb Miltiadis Vasilakis
- (void)viewWillAppear:(BOOL)animated {
88 700184fb Miltiadis Vasilakis
    [super viewWillAppear:animated];
89 700184fb Miltiadis Vasilakis
}
90 700184fb Miltiadis Vasilakis
91 700184fb Miltiadis Vasilakis
92 700184fb Miltiadis Vasilakis
93 700184fb Miltiadis Vasilakis
#pragma mark -
94 700184fb Miltiadis Vasilakis
#pragma mark Table view data source
95 700184fb Miltiadis Vasilakis
96 700184fb Miltiadis Vasilakis
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
97 700184fb Miltiadis Vasilakis
    // Return the number of sections.
98 700184fb Miltiadis Vasilakis
    return chefBootstrappingSwitch.on ? 4 : 1;
99 700184fb Miltiadis Vasilakis
}
100 700184fb Miltiadis Vasilakis
101 700184fb Miltiadis Vasilakis
102 700184fb Miltiadis Vasilakis
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
103 700184fb Miltiadis Vasilakis
    // Return the number of rows in the section.
104 700184fb Miltiadis Vasilakis
    if (section == kChefBootstrappingEnabled) {
105 700184fb Miltiadis Vasilakis
        return 1;
106 700184fb Miltiadis Vasilakis
    } else if (section == kChefEndpointType) {
107 700184fb Miltiadis Vasilakis
        return 2;
108 700184fb Miltiadis Vasilakis
    } else {
109 700184fb Miltiadis Vasilakis
        return 1;
110 700184fb Miltiadis Vasilakis
    }
111 700184fb Miltiadis Vasilakis
}
112 700184fb Miltiadis Vasilakis
113 700184fb Miltiadis Vasilakis
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
114 700184fb Miltiadis Vasilakis
    if (section == kChefEndpointType) {
115 700184fb Miltiadis Vasilakis
        return @"How are you using Chef?";
116 700184fb Miltiadis Vasilakis
    } else if (section == kChefEndpointConfiguration) {
117 700184fb Miltiadis Vasilakis
        //return @"Chef Server URL";
118 700184fb Miltiadis Vasilakis
        //return @"Opscode Organization";
119 700184fb Miltiadis Vasilakis
        return @"";
120 700184fb Miltiadis Vasilakis
    } else {
121 700184fb Miltiadis Vasilakis
        return @"";
122 700184fb Miltiadis Vasilakis
    }
123 700184fb Miltiadis Vasilakis
}
124 700184fb Miltiadis Vasilakis
125 700184fb Miltiadis Vasilakis
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
126 700184fb Miltiadis Vasilakis
    if (section == kChefValidationKey) {
127 700184fb Miltiadis Vasilakis
        return @"Enter a validator key or choose a .pem file synced from iTunes.";
128 700184fb Miltiadis Vasilakis
    } else {
129 700184fb Miltiadis Vasilakis
        return @"";
130 700184fb Miltiadis Vasilakis
    }
131 700184fb Miltiadis Vasilakis
}
132 700184fb Miltiadis Vasilakis
133 700184fb Miltiadis Vasilakis
// Customize the appearance of table view cells.
134 700184fb Miltiadis Vasilakis
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
135 700184fb Miltiadis Vasilakis
    
136 700184fb Miltiadis Vasilakis
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
137 700184fb Miltiadis Vasilakis
    
138 700184fb Miltiadis Vasilakis
    static NSString *CellIdentifier = @"Cell";
139 700184fb Miltiadis Vasilakis
    
140 700184fb Miltiadis Vasilakis
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
141 700184fb Miltiadis Vasilakis
    if (cell == nil) {
142 700184fb Miltiadis Vasilakis
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
143 700184fb Miltiadis Vasilakis
        cell.textLabel.backgroundColor = [UIColor clearColor];
144 700184fb Miltiadis Vasilakis
    }
145 700184fb Miltiadis Vasilakis
    
146 700184fb Miltiadis Vasilakis
    // Configure the cell...
147 700184fb Miltiadis Vasilakis
    if (indexPath.section == kChefBootstrappingEnabled) {
148 700184fb Miltiadis Vasilakis
        cell.textLabel.text = @"Chef Bootstrapping";
149 700184fb Miltiadis Vasilakis
        cell.detailTextLabel.text = @"";
150 700184fb Miltiadis Vasilakis
        cell.accessoryView = chefBootstrappingSwitch;
151 700184fb Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
152 700184fb Miltiadis Vasilakis
    } else if (indexPath.section == kChefEndpointType) {
153 700184fb Miltiadis Vasilakis
        cell.detailTextLabel.text = @"";
154 700184fb Miltiadis Vasilakis
        cell.accessoryView = nil;
155 700184fb Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
156 700184fb Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryNone;
157 700184fb Miltiadis Vasilakis
        if (indexPath.row == 0) {
158 700184fb Miltiadis Vasilakis
            cell.textLabel.text = @"I use the Opscode Platform.";
159 700184fb Miltiadis Vasilakis
            if ([[defaults stringForKey:@"chef_bootstrapping_endpoint_type"] isEqualToString:@"opscode"]) {
160 700184fb Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryCheckmark;
161 700184fb Miltiadis Vasilakis
            } else {
162 700184fb Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryNone;
163 700184fb Miltiadis Vasilakis
            }
164 700184fb Miltiadis Vasilakis
        } else {
165 700184fb Miltiadis Vasilakis
            cell.textLabel.text = @"I run my own Chef server.";
166 700184fb Miltiadis Vasilakis
            if ([[defaults stringForKey:@"chef_bootstrapping_endpoint_type"] isEqualToString:@"chef_server"]) {
167 700184fb Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryCheckmark;
168 700184fb Miltiadis Vasilakis
            } else {
169 700184fb Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryNone;
170 700184fb Miltiadis Vasilakis
            }
171 700184fb Miltiadis Vasilakis
        }
172 700184fb Miltiadis Vasilakis
    } else if (indexPath.section == kChefEndpointConfiguration) {
173 700184fb Miltiadis Vasilakis
        cell.detailTextLabel.text = @"";
174 700184fb Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryNone;
175 700184fb Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
176 700184fb Miltiadis Vasilakis
        if ([[defaults stringForKey:@"chef_bootstrapping_endpoint_type"] isEqualToString:@"opscode"]) {
177 700184fb Miltiadis Vasilakis
            cell.textLabel.text = @"Organization";
178 700184fb Miltiadis Vasilakis
            cell.accessoryView = opscodeOrgTextField;
179 700184fb Miltiadis Vasilakis
        } else {
180 700184fb Miltiadis Vasilakis
            cell.textLabel.text = @"Chef URL";
181 700184fb Miltiadis Vasilakis
            cell.accessoryView = chefURLTextField;
182 700184fb Miltiadis Vasilakis
        }
183 700184fb Miltiadis Vasilakis
    } else if (indexPath.section == kChefValidationKey) {
184 700184fb Miltiadis Vasilakis
        cell.detailTextLabel.text = @"";
185 700184fb Miltiadis Vasilakis
        cell.accessoryView = nil;
186 700184fb Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
187 700184fb Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
188 700184fb Miltiadis Vasilakis
        cell.textLabel.text = @"Chef Validator Key";
189 700184fb Miltiadis Vasilakis
    }
190 700184fb Miltiadis Vasilakis
    
191 700184fb Miltiadis Vasilakis
    return cell;
192 700184fb Miltiadis Vasilakis
}
193 700184fb Miltiadis Vasilakis
194 700184fb Miltiadis Vasilakis
#pragma mark -
195 700184fb Miltiadis Vasilakis
#pragma mark Table view delegate
196 700184fb Miltiadis Vasilakis
197 700184fb Miltiadis Vasilakis
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
198 700184fb Miltiadis Vasilakis
    if (indexPath.section == kChefValidationKey) {
199 700184fb Miltiadis Vasilakis
        ChefValidationKeyViewController *vc = [[ChefValidationKeyViewController alloc] initWithNibName:@"ChefValidationKeyViewController" bundle:nil];
200 700184fb Miltiadis Vasilakis
        [self.navigationController pushViewController:vc animated:YES];
201 700184fb Miltiadis Vasilakis
        [vc release];
202 700184fb Miltiadis Vasilakis
    } else if (indexPath.section == kChefEndpointType) {
203 700184fb Miltiadis Vasilakis
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
204 700184fb Miltiadis Vasilakis
        NSString *endpointType = [defaults stringForKey:@"chef_bootstrapping_endpoint_type"];
205 700184fb Miltiadis Vasilakis
        
206 700184fb Miltiadis Vasilakis
        if (indexPath.row == 0 && ![endpointType isEqualToString:@"opscode"]) {
207 700184fb Miltiadis Vasilakis
            [defaults setValue:@"opscode" forKey:@"chef_bootstrapping_endpoint_type"];
208 700184fb Miltiadis Vasilakis
            [defaults synchronize];        
209 700184fb Miltiadis Vasilakis
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:kChefEndpointConfiguration]] withRowAnimation:UITableViewRowAnimationLeft];
210 700184fb Miltiadis Vasilakis
            [NSTimer scheduledTimerWithTimeInterval:0.3 target:self.tableView selector:@selector(reloadData) userInfo:nil repeats:NO];
211 700184fb Miltiadis Vasilakis
        } else if (indexPath.row == 1 && ![endpointType isEqualToString:@"chef_server"]) {
212 700184fb Miltiadis Vasilakis
            [defaults setValue:@"chef_server" forKey:@"chef_bootstrapping_endpoint_type"];
213 700184fb Miltiadis Vasilakis
            [defaults synchronize];        
214 700184fb Miltiadis Vasilakis
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:kChefEndpointConfiguration]] withRowAnimation:UITableViewRowAnimationLeft];
215 700184fb Miltiadis Vasilakis
            [NSTimer scheduledTimerWithTimeInterval:0.3 target:self.tableView selector:@selector(reloadData) userInfo:nil repeats:NO];
216 700184fb Miltiadis Vasilakis
        }
217 700184fb Miltiadis Vasilakis
//        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
218 700184fb Miltiadis Vasilakis
        
219 700184fb Miltiadis Vasilakis
    }
220 700184fb Miltiadis Vasilakis
}
221 700184fb Miltiadis Vasilakis
222 700184fb Miltiadis Vasilakis
#pragma mark -
223 700184fb Miltiadis Vasilakis
#pragma mark Text Field delegate
224 700184fb Miltiadis Vasilakis
225 700184fb Miltiadis Vasilakis
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
226 700184fb Miltiadis Vasilakis
    [textField resignFirstResponder];
227 700184fb Miltiadis Vasilakis
    return NO;
228 700184fb Miltiadis Vasilakis
}
229 700184fb Miltiadis Vasilakis
230 700184fb Miltiadis Vasilakis
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
231 700184fb Miltiadis Vasilakis
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
232 700184fb Miltiadis Vasilakis
    NSString *result = [textField.text stringByReplacingCharactersInRange:range withString:string];
233 700184fb Miltiadis Vasilakis
    if ([textField isEqual:opscodeOrgTextField]) {
234 700184fb Miltiadis Vasilakis
        [defaults setValue:result forKey:@"chef_bootstrapping_opscode_organization"];
235 700184fb Miltiadis Vasilakis
    } else if ([textField isEqual:chefURLTextField]) {
236 700184fb Miltiadis Vasilakis
        [defaults setValue:result forKey:@"chef_bootstrapping_chef_server_url"];
237 700184fb Miltiadis Vasilakis
    }
238 700184fb Miltiadis Vasilakis
    [defaults synchronize];
239 700184fb Miltiadis Vasilakis
    return YES;
240 700184fb Miltiadis Vasilakis
}
241 700184fb Miltiadis Vasilakis
242 700184fb Miltiadis Vasilakis
#pragma mark -
243 700184fb Miltiadis Vasilakis
#pragma mark Memory management
244 700184fb Miltiadis Vasilakis
245 700184fb Miltiadis Vasilakis
- (void)didReceiveMemoryWarning {
246 700184fb Miltiadis Vasilakis
    // Releases the view if it doesn't have a superview.
247 700184fb Miltiadis Vasilakis
    [super didReceiveMemoryWarning];
248 700184fb Miltiadis Vasilakis
    
249 700184fb Miltiadis Vasilakis
    // Relinquish ownership any cached data, images, etc that aren't in use.
250 700184fb Miltiadis Vasilakis
}
251 700184fb Miltiadis Vasilakis
252 700184fb Miltiadis Vasilakis
- (void)viewDidUnload {
253 700184fb Miltiadis Vasilakis
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
254 700184fb Miltiadis Vasilakis
    // For example: self.myOutlet = nil;
255 700184fb Miltiadis Vasilakis
}
256 700184fb Miltiadis Vasilakis
257 700184fb Miltiadis Vasilakis
258 700184fb Miltiadis Vasilakis
- (void)dealloc {
259 700184fb Miltiadis Vasilakis
    [settingsViewController release];
260 700184fb Miltiadis Vasilakis
    [chefBootstrappingSwitch release];
261 700184fb Miltiadis Vasilakis
    [opscodeOrgTextField release];
262 700184fb Miltiadis Vasilakis
    [chefURLTextField release];
263 700184fb Miltiadis Vasilakis
    [super dealloc];
264 700184fb Miltiadis Vasilakis
}
265 700184fb Miltiadis Vasilakis
266 700184fb Miltiadis Vasilakis
267 700184fb Miltiadis Vasilakis
@end