Statistics
| Branch: | Tag: | Revision:

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