#import "UIViewController+Conveniences.h"
#import "AccountManager.h"
#import "OpenStackRequest.h"
+#import "APICallback.h"
#define kGroupDetails 0
#define kSave 1
[account release];
[metadata release];
[groups release];
-
+ [activityIndicatorView release];
[super dealloc];
}
UITextField *textField = [[cell.contentView subviews] objectAtIndex:0];
NSString *newGroupName = textField.text;
- if ([newGroupName length] == 0
- || [[newGroupName stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
+ if (![self userInputIsValid:newGroupName fieldName:@"Group name"]) {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
- [self alert:@"Invalid input" message:@"Group name cannot be empty"];
return;
}
-
+
valueCellIndexPath = [NSIndexPath indexPathForRow:1 inSection:kGroupDetails];
cell = [self.tableView cellForRowAtIndexPath:valueCellIndexPath];
textField = [[cell.contentView subviews] objectAtIndex:0];
NSString *newGroupUsers = textField.text;
+
+ if (![self userInputIsValid:newGroupUsers fieldName:@"Group users"]) {
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ return;
+ }
activityMessage = @"Saving group";
-
+ [activityIndicatorView release];
activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage]text:activityMessage];
[activityIndicatorView addToView:self.view];
metadata, @"metadata",
nil
];
- [self.account.manager writeAccountMetadata:accountInfo];
- successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestSucceeded"
- object:self.account
- queue:[NSOperationQueue mainQueue]
- usingBlock:^(NSNotification *notification)
- {
- [activityIndicatorView removeFromSuperviewAndRelease];
- self.groupName = newGroupName;
- self.groupUsers = newGroupUsers;
- self.removeGroupEnabled = YES;
- self.navigationItem.title = @"Edit Group";
- [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
- [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
- }];
-
- failureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestFailed"
- object:self.account
- queue:[NSOperationQueue mainQueue]
- usingBlock:^(NSNotification *notification)
- {
- [activityIndicatorView removeFromSuperviewAndRelease];
- [groups removeObjectForKey:newGroupName];
- [groups setObject:self.groupUsers forKey:self.groupName];
- [self.tableView reloadData];
- [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
- [self alert:@"There was a problem saving the group information." request:[notification.userInfo objectForKey:@"request"]];
-
- [[NSNotificationCenter defaultCenter] removeObserver:failureObserver];
- }];
+ [[self.account.manager writeAccountMetadata:accountInfo]
+ success:^(OpenStackRequest *request) {
+ [activityIndicatorView removeFromSuperview];
+ self.groupName = newGroupName;
+ self.groupUsers = newGroupUsers;
+ self.removeGroupEnabled = YES;
+ self.navigationItem.title = @"Edit Group";
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ [self.tableView reloadData];
+ }
+ failure:^(OpenStackRequest *request) {
+ [activityIndicatorView removeFromSuperview];
+ [groups removeObjectForKey:newGroupName];
+ [groups setObject:self.groupUsers forKey:self.groupName];
+ [self.tableView reloadData];
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ [self alert:@"There was a problem saving the group information." request:request];
+ }];
} else if (indexPath.section == kRemove) {
activityMessage = @"Removing group";
+ [activityIndicatorView release];
activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
[activityIndicatorView addToView:self.view];
nil
];
- [self.account.manager writeAccountMetadata:accountInfo];
- successObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestSucceeded"
- object:self.account
- queue:[NSOperationQueue mainQueue]
- usingBlock:^(NSNotification *notification)
- {
- [activityIndicatorView removeFromSuperviewAndRelease];
- self.groupName = @"";
- self.groupUsers = @"";
- [self.tableView reloadData];
- [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
- [[NSNotificationCenter defaultCenter] removeObserver:successObserver];
- }];
-
- failureObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"writeAccountMetadataRequestFailed"
- object:self.account
- queue:[NSOperationQueue mainQueue]
- usingBlock:^(NSNotification *notification)
- {
- [activityIndicatorView removeFromSuperviewAndRelease];
- [groups setObject:groupUsers forKey:groupName];
- [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
- [self alert:@"There was a problem removing the group information." request:[notification.userInfo objectForKey:@"request"]];
-
- [[NSNotificationCenter defaultCenter] removeObserver:failureObserver];
- }];
+ [[self.account.manager writeAccountMetadata:accountInfo]
+ success:^(OpenStackRequest *request) {
+ [activityIndicatorView removeFromSuperview];
+ self.groupName = @"";
+ self.groupUsers = @"";
+ self.removeGroupEnabled = NO;
+ [self.tableView reloadData];
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ }
+ failure:^(OpenStackRequest *request) {
+ [activityIndicatorView removeFromSuperview];
+ [groups setObject:groupUsers forKey:groupName];
+ [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
+ [self alert:@"There was a problem removing the group information." request:request];
+ }];
}
-
}
#pragma mark - Textfield delegate
if ([textField returnKeyType] == UIReturnKeyNext)
{
- if ([textField.text length] == 0
- || [[textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
- [self alert:@"Invalid input" message:@"Group name cannot be empty"];
- }
+ [self userInputIsValid:textField.text fieldName:@"Group name"];
NSInteger nextTag = [textField tag] + 1;
UIView *nextTextField = [self.tableView viewWithTag:nextTag];
}
else
{
+ [self userInputIsValid:textField.text fieldName:@"Group users"];
[textField resignFirstResponder];
}
return YES;
}
+#pragma mark - Helper methods
+
+- (BOOL)userInputIsValid:(NSString *)input fieldName:(NSString *)fieldName {
+ if (![input length] || ![[input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]) {
+ [self alert:@"Invalid input" message:[NSString stringWithFormat:@"%@ field cannot be empty", fieldName]];
+ return NO;
+ }
+ NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"= "];
+ if ([input rangeOfCharacterFromSet:set].location != NSNotFound) {
+ [self alert:@"Invalid input" message:[NSString stringWithFormat:@"%@ field cannot contain '=' or whitespace characters", fieldName]];
+ return NO;
+ }
+
+ return YES;
+}
+
+
@end