root / Classes / LBProtocolViewController.m @ 9fee07a6
History | View | Annotate | Download (5.1 kB)
1 | 700184fb | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 700184fb | Miltiadis Vasilakis | // LBProtocolViewController.m |
3 | 700184fb | Miltiadis Vasilakis | // OpenStack |
4 | 700184fb | Miltiadis Vasilakis | // |
5 | 700184fb | Miltiadis Vasilakis | // Created by Michael Mayo on 4/29/11. |
6 | 700184fb | Miltiadis Vasilakis | // Copyright 2011 __MyCompanyName__. All rights reserved. |
7 | 700184fb | Miltiadis Vasilakis | // |
8 | 700184fb | Miltiadis Vasilakis | |
9 | 700184fb | Miltiadis Vasilakis | #import "LBProtocolViewController.h" |
10 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
11 | 700184fb | Miltiadis Vasilakis | #import "AccountManager.h" |
12 | 700184fb | Miltiadis Vasilakis | #import "LoadBalancer.h" |
13 | 700184fb | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
14 | 700184fb | Miltiadis Vasilakis | #import "APICallback.h" |
15 | 700184fb | Miltiadis Vasilakis | #import "RSTextFieldCell.h" |
16 | 700184fb | Miltiadis Vasilakis | #import "LoadBalancerProtocol.h" |
17 | 700184fb | Miltiadis Vasilakis | #import "ActivityIndicatorView.h" |
18 | 700184fb | Miltiadis Vasilakis | |
19 | 700184fb | Miltiadis Vasilakis | #define kPort 0 |
20 | 700184fb | Miltiadis Vasilakis | #define kProtocols 1 |
21 | 700184fb | Miltiadis Vasilakis | |
22 | 700184fb | Miltiadis Vasilakis | @implementation LBProtocolViewController |
23 | 700184fb | Miltiadis Vasilakis | |
24 | 700184fb | Miltiadis Vasilakis | @synthesize account, loadBalancer; |
25 | 700184fb | Miltiadis Vasilakis | |
26 | 700184fb | Miltiadis Vasilakis | - (id)initWithAccount:(OpenStackAccount *)a loadBalancer:(LoadBalancer *)lb { |
27 | 700184fb | Miltiadis Vasilakis | self = [self initWithNibName:@"LBProtocolViewController" bundle:nil]; |
28 | 700184fb | Miltiadis Vasilakis | if (self) { |
29 | 700184fb | Miltiadis Vasilakis | self.account = a; |
30 | 700184fb | Miltiadis Vasilakis | self.loadBalancer = lb; |
31 | 700184fb | Miltiadis Vasilakis | } |
32 | 700184fb | Miltiadis Vasilakis | return self; |
33 | 700184fb | Miltiadis Vasilakis | } |
34 | 700184fb | Miltiadis Vasilakis | |
35 | 700184fb | Miltiadis Vasilakis | - (void)dealloc { |
36 | 700184fb | Miltiadis Vasilakis | [account release]; |
37 | 700184fb | Miltiadis Vasilakis | [loadBalancer release]; |
38 | 700184fb | Miltiadis Vasilakis | [super dealloc]; |
39 | 700184fb | Miltiadis Vasilakis | } |
40 | 700184fb | Miltiadis Vasilakis | |
41 | 700184fb | Miltiadis Vasilakis | #pragma mark - View lifecycle |
42 | 700184fb | Miltiadis Vasilakis | |
43 | 700184fb | Miltiadis Vasilakis | - (void)viewDidLoad { |
44 | 700184fb | Miltiadis Vasilakis | [super viewDidLoad]; |
45 | 700184fb | Miltiadis Vasilakis | //[self addDoneButton]; |
46 | 700184fb | Miltiadis Vasilakis | self.navigationItem.title = @"Protocol"; |
47 | 700184fb | Miltiadis Vasilakis | |
48 | 700184fb | Miltiadis Vasilakis | // default is HTTP on port 80 |
49 | 700184fb | Miltiadis Vasilakis | if (!self.loadBalancer.protocol) { |
50 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol = [[[LoadBalancerProtocol alloc] init] autorelease]; |
51 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol.name = @"HTTP"; |
52 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol.port = 80; |
53 | 700184fb | Miltiadis Vasilakis | } |
54 | 700184fb | Miltiadis Vasilakis | |
55 | 700184fb | Miltiadis Vasilakis | ActivityIndicatorView *activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:@"Loading..."] text:@"Loading..."]; |
56 | 700184fb | Miltiadis Vasilakis | |
57 | 700184fb | Miltiadis Vasilakis | [activityIndicatorView addToView:self.view]; |
58 | 700184fb | Miltiadis Vasilakis | |
59 | 700184fb | Miltiadis Vasilakis | NSString *endpoint = [account.loadBalancerURLs objectAtIndex:0]; |
60 | 700184fb | Miltiadis Vasilakis | [[self.account.manager getLoadBalancerProtocols:endpoint] success:^(OpenStackRequest *request) { |
61 | 700184fb | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperviewAndRelease]; |
62 | 700184fb | Miltiadis Vasilakis | [self.tableView reloadData]; |
63 | 700184fb | Miltiadis Vasilakis | } failure:^(OpenStackRequest *request){ |
64 | 700184fb | Miltiadis Vasilakis | [activityIndicatorView removeFromSuperviewAndRelease]; |
65 | 700184fb | Miltiadis Vasilakis | [self alert:@"Could not load Load Balancer protocols." request:request]; |
66 | 700184fb | Miltiadis Vasilakis | }]; |
67 | 700184fb | Miltiadis Vasilakis | } |
68 | 700184fb | Miltiadis Vasilakis | |
69 | 700184fb | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
70 | 700184fb | Miltiadis Vasilakis | return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
71 | 700184fb | Miltiadis Vasilakis | } |
72 | 700184fb | Miltiadis Vasilakis | |
73 | 700184fb | Miltiadis Vasilakis | #pragma mark - Table view data source |
74 | 700184fb | Miltiadis Vasilakis | |
75 | 700184fb | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
76 | 700184fb | Miltiadis Vasilakis | return 2; |
77 | 700184fb | Miltiadis Vasilakis | } |
78 | 700184fb | Miltiadis Vasilakis | |
79 | 700184fb | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
80 | 700184fb | Miltiadis Vasilakis | switch (section) { |
81 | 700184fb | Miltiadis Vasilakis | case kPort: |
82 | 700184fb | Miltiadis Vasilakis | return 1; |
83 | 700184fb | Miltiadis Vasilakis | case kProtocols: |
84 | 700184fb | Miltiadis Vasilakis | return [self.account.lbProtocols count]; |
85 | 700184fb | Miltiadis Vasilakis | default: |
86 | 700184fb | Miltiadis Vasilakis | return 0; |
87 | 700184fb | Miltiadis Vasilakis | } |
88 | 700184fb | Miltiadis Vasilakis | } |
89 | 700184fb | Miltiadis Vasilakis | |
90 | 700184fb | Miltiadis Vasilakis | - (RSTextFieldCell *)portCell { |
91 | 700184fb | Miltiadis Vasilakis | static NSString *CellIdentifier = @"PortCell"; |
92 | 700184fb | Miltiadis Vasilakis | |
93 | 700184fb | Miltiadis Vasilakis | RSTextFieldCell *cell = (RSTextFieldCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
94 | 700184fb | Miltiadis Vasilakis | if (cell == nil) { |
95 | 700184fb | Miltiadis Vasilakis | cell = [[[RSTextFieldCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; |
96 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Port"; |
97 | 700184fb | Miltiadis Vasilakis | cell.textField.delegate = self; |
98 | 700184fb | Miltiadis Vasilakis | textField = cell.textField; |
99 | 700184fb | Miltiadis Vasilakis | } |
100 | 700184fb | Miltiadis Vasilakis | cell.textField.text = [NSString stringWithFormat:@"%i", self.loadBalancer.protocol.port]; |
101 | 700184fb | Miltiadis Vasilakis | |
102 | 700184fb | Miltiadis Vasilakis | return cell; |
103 | 700184fb | Miltiadis Vasilakis | } |
104 | 700184fb | Miltiadis Vasilakis | |
105 | 700184fb | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
106 | 700184fb | Miltiadis Vasilakis | if (indexPath.section == kPort) { |
107 | 700184fb | Miltiadis Vasilakis | return [self portCell]; |
108 | 700184fb | Miltiadis Vasilakis | } else { |
109 | 700184fb | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
110 | 700184fb | Miltiadis Vasilakis | |
111 | 700184fb | Miltiadis Vasilakis | UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
112 | 700184fb | Miltiadis Vasilakis | if (cell == nil) { |
113 | 700184fb | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; |
114 | 700184fb | Miltiadis Vasilakis | } |
115 | 700184fb | Miltiadis Vasilakis | |
116 | 700184fb | Miltiadis Vasilakis | // Configure the cell... |
117 | 700184fb | Miltiadis Vasilakis | LoadBalancerProtocol *p = [self.account.lbProtocols objectAtIndex:indexPath.row]; |
118 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = p.name; |
119 | 700184fb | Miltiadis Vasilakis | |
120 | 700184fb | Miltiadis Vasilakis | if ([p.name isEqualToString:self.loadBalancer.protocol.name]) { |
121 | 700184fb | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryCheckmark; |
122 | 700184fb | Miltiadis Vasilakis | } else { |
123 | 700184fb | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
124 | 700184fb | Miltiadis Vasilakis | } |
125 | 700184fb | Miltiadis Vasilakis | |
126 | 700184fb | Miltiadis Vasilakis | return cell; |
127 | 700184fb | Miltiadis Vasilakis | } |
128 | 700184fb | Miltiadis Vasilakis | } |
129 | 700184fb | Miltiadis Vasilakis | |
130 | 700184fb | Miltiadis Vasilakis | #pragma mark - Table view delegate |
131 | 700184fb | Miltiadis Vasilakis | |
132 | 700184fb | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
133 | 700184fb | Miltiadis Vasilakis | LoadBalancerProtocol *p = [self.account.lbProtocols objectAtIndex:indexPath.row]; |
134 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol = p; |
135 | 700184fb | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
136 | 700184fb | Miltiadis Vasilakis | [NSTimer scheduledTimerWithTimeInterval:0.35 target:self.tableView selector:@selector(reloadData) userInfo:nil repeats:NO]; |
137 | 700184fb | Miltiadis Vasilakis | } |
138 | 700184fb | Miltiadis Vasilakis | |
139 | 700184fb | Miltiadis Vasilakis | #pragma mark - Text Field Delegate |
140 | 700184fb | Miltiadis Vasilakis | |
141 | 700184fb | Miltiadis Vasilakis | - (BOOL)textFieldShouldReturn:(UITextField *)tf { |
142 | 700184fb | Miltiadis Vasilakis | [textField resignFirstResponder]; |
143 | 700184fb | Miltiadis Vasilakis | return NO; |
144 | 700184fb | Miltiadis Vasilakis | } |
145 | 700184fb | Miltiadis Vasilakis | |
146 | 700184fb | Miltiadis Vasilakis | - (BOOL)textField:(UITextField *)tf shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { |
147 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol.port = [[textField.text stringByReplacingCharactersInRange:range withString:string] intValue]; |
148 | 700184fb | Miltiadis Vasilakis | return YES; |
149 | 700184fb | Miltiadis Vasilakis | } |
150 | 700184fb | Miltiadis Vasilakis | |
151 | 700184fb | Miltiadis Vasilakis | #pragma mark - Button Handler |
152 | 700184fb | Miltiadis Vasilakis | |
153 | 700184fb | Miltiadis Vasilakis | - (void)doneButtonPressed:(id)sender { |
154 | 700184fb | Miltiadis Vasilakis | self.loadBalancer.protocol.port = [textField.text intValue]; |
155 | 700184fb | Miltiadis Vasilakis | [self.navigationController popViewControllerAnimated:YES]; |
156 | 700184fb | Miltiadis Vasilakis | } |
157 | 700184fb | Miltiadis Vasilakis | |
158 | 700184fb | Miltiadis Vasilakis | @end |