Statistics
| Branch: | Tag: | Revision:

root / Classes / EditPermissionsViewController.m @ 4b4b833e

History | View | Annotate | Download (19.3 kB)

1 91869be8 Miltiadis Vasilakis
//
2 91869be8 Miltiadis Vasilakis
//  EditPermissionsViewController.m
3 91869be8 Miltiadis Vasilakis
//  pithos-ios
4 91869be8 Miltiadis Vasilakis
//
5 91869be8 Miltiadis Vasilakis
// Copyright 2011 GRNET S.A. All rights reserved.
6 91869be8 Miltiadis Vasilakis
//
7 91869be8 Miltiadis Vasilakis
// Redistribution and use in source and binary forms, with or
8 91869be8 Miltiadis Vasilakis
// without modification, are permitted provided that the following
9 91869be8 Miltiadis Vasilakis
// conditions are met:
10 91869be8 Miltiadis Vasilakis
// 
11 91869be8 Miltiadis Vasilakis
//   1. Redistributions of source code must retain the above
12 91869be8 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
13 91869be8 Miltiadis Vasilakis
//      disclaimer.
14 91869be8 Miltiadis Vasilakis
// 
15 91869be8 Miltiadis Vasilakis
//   2. Redistributions in binary form must reproduce the above
16 91869be8 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
17 91869be8 Miltiadis Vasilakis
//      disclaimer in the documentation and/or other materials
18 91869be8 Miltiadis Vasilakis
//      provided with the distribution.
19 91869be8 Miltiadis Vasilakis
// 
20 91869be8 Miltiadis Vasilakis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21 91869be8 Miltiadis Vasilakis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 91869be8 Miltiadis Vasilakis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 91869be8 Miltiadis Vasilakis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24 91869be8 Miltiadis Vasilakis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 91869be8 Miltiadis Vasilakis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 91869be8 Miltiadis Vasilakis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 91869be8 Miltiadis Vasilakis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 91869be8 Miltiadis Vasilakis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 91869be8 Miltiadis Vasilakis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 91869be8 Miltiadis Vasilakis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 91869be8 Miltiadis Vasilakis
// POSSIBILITY OF SUCH DAMAGE.
32 91869be8 Miltiadis Vasilakis
// 
33 91869be8 Miltiadis Vasilakis
// The views and conclusions contained in the software and
34 91869be8 Miltiadis Vasilakis
// documentation are those of the authors and should not be
35 91869be8 Miltiadis Vasilakis
// interpreted as representing official policies, either expressed
36 91869be8 Miltiadis Vasilakis
// or implied, of GRNET S.A.
37 91869be8 Miltiadis Vasilakis
38 91869be8 Miltiadis Vasilakis
#import "EditPermissionsViewController.h"
39 91869be8 Miltiadis Vasilakis
#import "AccountManager.h"
40 91869be8 Miltiadis Vasilakis
#import "UIViewController+Conveniences.h"
41 d17a05de Miltiadis Vasilakis
#import "FolderViewController.h"
42 45f2fce6 Miltiadis Vasilakis
#import "Folder.h"
43 45f2fce6 Miltiadis Vasilakis
#import "PithosUtilities.h"
44 7db1712d Miltiadis Vasilakis
#import "APICallback.h"
45 91869be8 Miltiadis Vasilakis
46 91869be8 Miltiadis Vasilakis
#define kUser 0
47 91869be8 Miltiadis Vasilakis
#define kPermissions 1
48 54cb751a Miltiadis Vasilakis
#define kSavePermissions 2
49 54cb751a Miltiadis Vasilakis
#define kRemovePermissions 3
50 91869be8 Miltiadis Vasilakis
51 91869be8 Miltiadis Vasilakis
@implementation EditPermissionsViewController
52 91869be8 Miltiadis Vasilakis
53 91869be8 Miltiadis Vasilakis
@synthesize account, container, object;
54 91869be8 Miltiadis Vasilakis
@synthesize user, readPermissionSelected, writePermissionSelected, permissions;
55 91869be8 Miltiadis Vasilakis
@synthesize oldPermissionsString;
56 54cb751a Miltiadis Vasilakis
@synthesize newPermissionsEntry, removePermissionsEnabled;
57 d17a05de Miltiadis Vasilakis
@synthesize folderViewController, objectIsFolder;
58 91869be8 Miltiadis Vasilakis
59 91869be8 Miltiadis Vasilakis
- (void)dealloc
60 91869be8 Miltiadis Vasilakis
{
61 3a8071d4 Miltiadis Vasilakis
    [account release];
62 3a8071d4 Miltiadis Vasilakis
    [container release];
63 3a8071d4 Miltiadis Vasilakis
    [object release];
64 3a8071d4 Miltiadis Vasilakis
    [user release];
65 3a8071d4 Miltiadis Vasilakis
    [permissions release];
66 3a8071d4 Miltiadis Vasilakis
    [oldPermissionsString release];
67 3a8071d4 Miltiadis Vasilakis
    [activityIndicatorView release];
68 91869be8 Miltiadis Vasilakis
    [super dealloc];
69 91869be8 Miltiadis Vasilakis
}
70 91869be8 Miltiadis Vasilakis
71 91869be8 Miltiadis Vasilakis
- (void)didReceiveMemoryWarning
72 91869be8 Miltiadis Vasilakis
{
73 91869be8 Miltiadis Vasilakis
    // Releases the view if it doesn't have a superview.
74 91869be8 Miltiadis Vasilakis
    [super didReceiveMemoryWarning];
75 91869be8 Miltiadis Vasilakis
    
76 91869be8 Miltiadis Vasilakis
    // Release any cached data, images, etc that aren't in use.
77 91869be8 Miltiadis Vasilakis
}
78 91869be8 Miltiadis Vasilakis
79 91869be8 Miltiadis Vasilakis
#pragma mark - View lifecycle
80 91869be8 Miltiadis Vasilakis
81 91869be8 Miltiadis Vasilakis
- (void)viewDidLoad
82 91869be8 Miltiadis Vasilakis
{
83 91869be8 Miltiadis Vasilakis
    [super viewDidLoad];
84 91869be8 Miltiadis Vasilakis
}
85 91869be8 Miltiadis Vasilakis
86 91869be8 Miltiadis Vasilakis
- (void)viewDidUnload
87 91869be8 Miltiadis Vasilakis
{
88 91869be8 Miltiadis Vasilakis
    [super viewDidUnload];
89 91869be8 Miltiadis Vasilakis
}
90 91869be8 Miltiadis Vasilakis
91 91869be8 Miltiadis Vasilakis
- (void)viewWillAppear:(BOOL)animated
92 91869be8 Miltiadis Vasilakis
{
93 91869be8 Miltiadis Vasilakis
    [super viewWillAppear:animated];
94 91869be8 Miltiadis Vasilakis
}
95 91869be8 Miltiadis Vasilakis
96 91869be8 Miltiadis Vasilakis
- (void)viewDidAppear:(BOOL)animated
97 91869be8 Miltiadis Vasilakis
{
98 91869be8 Miltiadis Vasilakis
    [super viewDidAppear:animated];
99 91869be8 Miltiadis Vasilakis
}
100 91869be8 Miltiadis Vasilakis
101 91869be8 Miltiadis Vasilakis
- (void)viewWillDisappear:(BOOL)animated
102 91869be8 Miltiadis Vasilakis
{
103 91869be8 Miltiadis Vasilakis
    [super viewWillDisappear:animated];
104 91869be8 Miltiadis Vasilakis
}
105 91869be8 Miltiadis Vasilakis
106 91869be8 Miltiadis Vasilakis
- (void)viewDidDisappear:(BOOL)animated
107 91869be8 Miltiadis Vasilakis
{
108 91869be8 Miltiadis Vasilakis
    [super viewDidDisappear:animated];
109 91869be8 Miltiadis Vasilakis
}
110 91869be8 Miltiadis Vasilakis
111 91869be8 Miltiadis Vasilakis
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
112 91869be8 Miltiadis Vasilakis
    return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait);
113 91869be8 Miltiadis Vasilakis
}
114 91869be8 Miltiadis Vasilakis
115 91869be8 Miltiadis Vasilakis
#pragma mark - Table view data source
116 91869be8 Miltiadis Vasilakis
117 91869be8 Miltiadis Vasilakis
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
118 91869be8 Miltiadis Vasilakis
{
119 54cb751a Miltiadis Vasilakis
    if (removePermissionsEnabled)
120 54cb751a Miltiadis Vasilakis
        return 4;
121 91869be8 Miltiadis Vasilakis
    else 
122 91869be8 Miltiadis Vasilakis
        return 3;
123 91869be8 Miltiadis Vasilakis
}
124 91869be8 Miltiadis Vasilakis
125 91869be8 Miltiadis Vasilakis
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
126 91869be8 Miltiadis Vasilakis
{
127 91869be8 Miltiadis Vasilakis
    if (section == kPermissions)
128 91869be8 Miltiadis Vasilakis
        return 2;
129 91869be8 Miltiadis Vasilakis
    else
130 91869be8 Miltiadis Vasilakis
        return 1;
131 91869be8 Miltiadis Vasilakis
}
132 91869be8 Miltiadis Vasilakis
133 91869be8 Miltiadis Vasilakis
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
134 91869be8 Miltiadis Vasilakis
{
135 91869be8 Miltiadis Vasilakis
    static NSString *CellIdentifier = @"Cell";
136 91869be8 Miltiadis Vasilakis
    
137 91869be8 Miltiadis Vasilakis
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
138 91869be8 Miltiadis Vasilakis
    if (cell == nil) {
139 91869be8 Miltiadis Vasilakis
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
140 91869be8 Miltiadis Vasilakis
    }
141 45f2fce6 Miltiadis Vasilakis
    
142 91869be8 Miltiadis Vasilakis
    if (indexPath.section == kUser) {
143 54cb751a Miltiadis Vasilakis
        UITextField *textField = nil;
144 54cb751a Miltiadis Vasilakis
        for (id subView in cell.contentView.subviews) {
145 54cb751a Miltiadis Vasilakis
            if ([subView isKindOfClass:[UITextField class]]) {
146 54cb751a Miltiadis Vasilakis
                textField = (UITextField *)subView;
147 54cb751a Miltiadis Vasilakis
            }
148 54cb751a Miltiadis Vasilakis
        }
149 54cb751a Miltiadis Vasilakis
        
150 54cb751a Miltiadis Vasilakis
        if (textField == nil) {
151 91869be8 Miltiadis Vasilakis
            CGRect bounds = [cell.contentView bounds];
152 07592312 Miltiadis Vasilakis
            CGRect rect = CGRectInset(bounds, 10.0, 10.0);                        
153 54cb751a Miltiadis Vasilakis
            textField = [[UITextField alloc] initWithFrame:rect];
154 91869be8 Miltiadis Vasilakis
            [textField setFrame:rect];
155 91869be8 Miltiadis Vasilakis
        }
156 54cb751a Miltiadis Vasilakis
        
157 54cb751a Miltiadis Vasilakis
        [textField setClearButtonMode:UITextFieldViewModeWhileEditing];
158 54cb751a Miltiadis Vasilakis
        [textField setBackgroundColor:[UIColor clearColor]];
159 54cb751a Miltiadis Vasilakis
        [textField setOpaque:YES];
160 54cb751a Miltiadis Vasilakis
        [textField setAutocorrectionType:UITextAutocorrectionTypeNo];
161 54cb751a Miltiadis Vasilakis
        [textField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
162 54cb751a Miltiadis Vasilakis
        [textField setDelegate:self];
163 4b4b833e Miltiadis Vasilakis
        textField.placeholder = @"User or User:Group";
164 54cb751a Miltiadis Vasilakis
        textField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
165 54cb751a Miltiadis Vasilakis
        textField.text = self.user;
166 54cb751a Miltiadis Vasilakis
        
167 54cb751a Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
168 54cb751a Miltiadis Vasilakis
        [cell.contentView addSubview:textField];
169 ba01f5a7 Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
170 91869be8 Miltiadis Vasilakis
    }
171 91869be8 Miltiadis Vasilakis
    else if (indexPath.section == kPermissions) {
172 91869be8 Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
173 91869be8 Miltiadis Vasilakis
        if (indexPath.row == 0) {
174 4b4b833e Miltiadis Vasilakis
            cell.textLabel.text = @"Read Only";
175 91869be8 Miltiadis Vasilakis
            if (readPermissionSelected)
176 91869be8 Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryCheckmark;
177 91869be8 Miltiadis Vasilakis
            else
178 91869be8 Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryNone;
179 91869be8 Miltiadis Vasilakis
        }
180 91869be8 Miltiadis Vasilakis
        else {
181 4b4b833e Miltiadis Vasilakis
            cell.textLabel.text = @"Read/Write";
182 91869be8 Miltiadis Vasilakis
            if (writePermissionSelected)
183 91869be8 Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryCheckmark;
184 91869be8 Miltiadis Vasilakis
            else
185 91869be8 Miltiadis Vasilakis
                cell.accessoryType = UITableViewCellAccessoryNone;
186 91869be8 Miltiadis Vasilakis
        }
187 91869be8 Miltiadis Vasilakis
    } 
188 54cb751a Miltiadis Vasilakis
    else if (indexPath.section == kSavePermissions) {
189 54cb751a Miltiadis Vasilakis
        cell.textLabel.text = @"Save";
190 54cb751a Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryNone;
191 54cb751a Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
192 54cb751a Miltiadis Vasilakis
    }
193 91869be8 Miltiadis Vasilakis
    else if (indexPath.section == kRemovePermissions) {
194 91869be8 Miltiadis Vasilakis
        cell.textLabel.text = @"Remove";
195 91869be8 Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryNone;
196 54cb751a Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
197 91869be8 Miltiadis Vasilakis
    }
198 91869be8 Miltiadis Vasilakis
    
199 91869be8 Miltiadis Vasilakis
    return cell;
200 91869be8 Miltiadis Vasilakis
}
201 91869be8 Miltiadis Vasilakis
202 91869be8 Miltiadis Vasilakis
#pragma mark - Table view delegate
203 91869be8 Miltiadis Vasilakis
204 91869be8 Miltiadis Vasilakis
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
205 91869be8 Miltiadis Vasilakis
{    
206 ba01f5a7 Miltiadis Vasilakis
    
207 54cb751a Miltiadis Vasilakis
    if (indexPath.section != kUser)
208 54cb751a Miltiadis Vasilakis
        [self.view endEditing:YES];
209 ba01f5a7 Miltiadis Vasilakis
    
210 ba01f5a7 Miltiadis Vasilakis
    NSString *newUserName;
211 54cb751a Miltiadis Vasilakis
    NSIndexPath *userCellIndexPath = [NSIndexPath indexPathForRow:0 inSection:kUser];
212 54cb751a Miltiadis Vasilakis
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:userCellIndexPath];
213 54cb751a Miltiadis Vasilakis
    UITextField *textField = [[cell.contentView subviews] objectAtIndex:0];
214 54cb751a Miltiadis Vasilakis
    newUserName = textField.text;
215 54cb751a Miltiadis Vasilakis
    if (![self userInputIsValid:newUserName]) {
216 54cb751a Miltiadis Vasilakis
        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
217 54cb751a Miltiadis Vasilakis
        return;
218 91869be8 Miltiadis Vasilakis
    }
219 54cb751a Miltiadis Vasilakis
    
220 91869be8 Miltiadis Vasilakis
    if (indexPath.section == kPermissions) {
221 54cb751a Miltiadis Vasilakis
        UITableViewCell *readPermissionsCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:kPermissions]];
222 54cb751a Miltiadis Vasilakis
        UITableViewCell *writePermissionsCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:kPermissions]];
223 54cb751a Miltiadis Vasilakis
224 91869be8 Miltiadis Vasilakis
        if (indexPath.row == 0) {
225 91869be8 Miltiadis Vasilakis
            if (!readPermissionSelected) {
226 91869be8 Miltiadis Vasilakis
                readPermissionSelected = YES;
227 54cb751a Miltiadis Vasilakis
                if (writePermissionSelected) {
228 91869be8 Miltiadis Vasilakis
                    writePermissionSelected = FALSE;
229 54cb751a Miltiadis Vasilakis
                    writePermissionsCell.accessoryType = UITableViewCellAccessoryNone;
230 54cb751a Miltiadis Vasilakis
                }
231 54cb751a Miltiadis Vasilakis
                readPermissionsCell.accessoryType = UITableViewCellAccessoryCheckmark;
232 91869be8 Miltiadis Vasilakis
            }
233 91869be8 Miltiadis Vasilakis
        }
234 91869be8 Miltiadis Vasilakis
        else if (indexPath.row == 1) {
235 91869be8 Miltiadis Vasilakis
            if (!writePermissionSelected) {
236 91869be8 Miltiadis Vasilakis
                writePermissionSelected = YES;
237 54cb751a Miltiadis Vasilakis
                if (readPermissionSelected) {
238 91869be8 Miltiadis Vasilakis
                    readPermissionSelected = FALSE;
239 54cb751a Miltiadis Vasilakis
                    readPermissionsCell.accessoryType = UITableViewCellAccessoryNone;
240 54cb751a Miltiadis Vasilakis
                }
241 54cb751a Miltiadis Vasilakis
                writePermissionsCell.accessoryType = UITableViewCellAccessoryCheckmark;
242 91869be8 Miltiadis Vasilakis
            }
243 54cb751a Miltiadis Vasilakis
        }
244 54cb751a Miltiadis Vasilakis
    }
245 54cb751a Miltiadis Vasilakis
    else if (indexPath.section == kSavePermissions) {
246 54cb751a Miltiadis Vasilakis
        if (!readPermissionSelected && !writePermissionSelected) {
247 54cb751a Miltiadis Vasilakis
            [self alert:@"Cannot save permissions"  message:@"Please select permissions type"];
248 54cb751a Miltiadis Vasilakis
            [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
249 54cb751a Miltiadis Vasilakis
            return;
250 91869be8 Miltiadis Vasilakis
        }
251 91869be8 Miltiadis Vasilakis
        
252 54cb751a Miltiadis Vasilakis
        [self.permissions removeObjectForKey:self.user];
253 54cb751a Miltiadis Vasilakis
        if (readPermissionSelected) 
254 54cb751a Miltiadis Vasilakis
            [self.permissions setObject:@"read" forKey:newUserName];
255 54cb751a Miltiadis Vasilakis
        else if (writePermissionSelected)
256 54cb751a Miltiadis Vasilakis
            [self.permissions setObject:@"write" forKey:newUserName];
257 54cb751a Miltiadis Vasilakis
        
258 54cb751a Miltiadis Vasilakis
        self.user = newUserName;
259 45f2fce6 Miltiadis Vasilakis
        self.oldPermissionsString = object.sharing;
260 45f2fce6 Miltiadis Vasilakis
        object.sharing = [self buildPermissionsString];
261 45f2fce6 Miltiadis Vasilakis
        
262 45f2fce6 Miltiadis Vasilakis
        if (objectIsFolder && ![PithosUtilities isContentTypeDirectory:object.contentType]) {
263 c7ddd1f3 Miltiadis Vasilakis
            if (((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) &&
264 c7ddd1f3 Miltiadis Vasilakis
                [folderViewController.parentFolderViewController.folder.objects objectForKey:object.name]) || 
265 c7ddd1f3 Miltiadis Vasilakis
                ((UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) &&
266 c7ddd1f3 Miltiadis Vasilakis
                 [folderViewController.folder.objects objectForKey:object.name])) {
267 45f2fce6 Miltiadis Vasilakis
                NSString *alertMessage = [NSString stringWithFormat:@"In order to apply the changes in '%@', the object at the same path must be replaced. Continue?",object.name];
268 45f2fce6 Miltiadis Vasilakis
                NSString *alertTitle = @"Apply changes";
269 45f2fce6 Miltiadis Vasilakis
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:alertTitle
270 45f2fce6 Miltiadis Vasilakis
                                                                message:alertMessage
271 45f2fce6 Miltiadis Vasilakis
                                                               delegate:self
272 45f2fce6 Miltiadis Vasilakis
                                                      cancelButtonTitle:@"Cancel"
273 45f2fce6 Miltiadis Vasilakis
                                                      otherButtonTitles:@"OK", nil];
274 45f2fce6 Miltiadis Vasilakis
                [alert show];
275 e06c24cf Miltiadis Vasilakis
                [alert release];
276 45f2fce6 Miltiadis Vasilakis
                return;
277 45f2fce6 Miltiadis Vasilakis
            } else {
278 45f2fce6 Miltiadis Vasilakis
                NSString *activityMessage = @"Applying permissions...";
279 3a8071d4 Miltiadis Vasilakis
                [activityIndicatorView release];
280 45f2fce6 Miltiadis Vasilakis
                activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
281 45f2fce6 Miltiadis Vasilakis
                [activityIndicatorView addToView:self.view];
282 45f2fce6 Miltiadis Vasilakis
                
283 45f2fce6 Miltiadis Vasilakis
                object.name = object.fullPath;
284 45f2fce6 Miltiadis Vasilakis
                object.contentType = @"application/directory";
285 45f2fce6 Miltiadis Vasilakis
                object.data = [NSData data];
286 7db1712d Miltiadis Vasilakis
                [self createNewFolder];  
287 45f2fce6 Miltiadis Vasilakis
                return;
288 45f2fce6 Miltiadis Vasilakis
            }
289 45f2fce6 Miltiadis Vasilakis
        }
290 54cb751a Miltiadis Vasilakis
        
291 54cb751a Miltiadis Vasilakis
        NSString *activityMessage = @"Applying permissions...";
292 3a8071d4 Miltiadis Vasilakis
        [activityIndicatorView release];
293 54cb751a Miltiadis Vasilakis
        activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
294 54cb751a Miltiadis Vasilakis
        
295 54cb751a Miltiadis Vasilakis
        [activityIndicatorView addToView:self.view];
296 7db1712d Miltiadis Vasilakis
        [[self.account.manager writeObjectMetadata:container object:object] 
297 7db1712d Miltiadis Vasilakis
         success:^(OpenStackRequest *request) {
298 3a8071d4 Miltiadis Vasilakis
             [activityIndicatorView removeFromSuperview];
299 7db1712d Miltiadis Vasilakis
             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
300 7db1712d Miltiadis Vasilakis
             removePermissionsEnabled = YES;
301 7db1712d Miltiadis Vasilakis
             [self.tableView reloadData];
302 7db1712d Miltiadis Vasilakis
             if (objectIsFolder || (account.shared && ![oldPermissionsString isEqualToString:object.sharing])) {
303 7db1712d Miltiadis Vasilakis
                 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
304 7db1712d Miltiadis Vasilakis
                     [self.folderViewController refreshButtonPressed:nil];
305 7db1712d Miltiadis Vasilakis
                 }
306 7db1712d Miltiadis Vasilakis
                 else {
307 7db1712d Miltiadis Vasilakis
                     self.folderViewController.needsRefreshing = YES;
308 7db1712d Miltiadis Vasilakis
                 }
309 7db1712d Miltiadis Vasilakis
             } 
310 7db1712d Miltiadis Vasilakis
         }
311 7db1712d Miltiadis Vasilakis
         failure:^(OpenStackRequest *request) {
312 7db1712d Miltiadis Vasilakis
             object.sharing = self.oldPermissionsString;
313 7db1712d Miltiadis Vasilakis
             readPermissionSelected = !readPermissionSelected;
314 7db1712d Miltiadis Vasilakis
             writePermissionSelected = !writePermissionSelected;
315 7db1712d Miltiadis Vasilakis
             
316 7db1712d Miltiadis Vasilakis
             if (readPermissionSelected)
317 7db1712d Miltiadis Vasilakis
                 [self.permissions setObject:@"read" forKey:user];
318 7db1712d Miltiadis Vasilakis
             else if (writePermissionSelected) 
319 7db1712d Miltiadis Vasilakis
                 [self.permissions setObject:@"write" forKey:user];
320 7db1712d Miltiadis Vasilakis
             
321 3a8071d4 Miltiadis Vasilakis
             [activityIndicatorView removeFromSuperview];
322 7db1712d Miltiadis Vasilakis
             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
323 7db1712d Miltiadis Vasilakis
             [self.tableView reloadData];
324 7db1712d Miltiadis Vasilakis
             [self alert:@"There was a problem applying the permissions." request:request];
325 7db1712d Miltiadis Vasilakis
         }];
326 91869be8 Miltiadis Vasilakis
    } 
327 91869be8 Miltiadis Vasilakis
    else if (indexPath.section == kRemovePermissions) {
328 3a8071d4 Miltiadis Vasilakis
        NSString *activityMessage = @"Removing permissions...";   
329 3a8071d4 Miltiadis Vasilakis
        [activityIndicatorView release];
330 91869be8 Miltiadis Vasilakis
        activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
331 91869be8 Miltiadis Vasilakis
        [activityIndicatorView addToView:self.view];
332 91869be8 Miltiadis Vasilakis
        
333 91869be8 Miltiadis Vasilakis
        [permissions removeObjectForKey:user];
334 91869be8 Miltiadis Vasilakis
        self.oldPermissionsString = object.sharing;
335 91869be8 Miltiadis Vasilakis
        object.sharing = [self buildPermissionsString];
336 7db1712d Miltiadis Vasilakis
        [[self.account.manager writeObjectMetadata:container object:object] 
337 7db1712d Miltiadis Vasilakis
         success:^(OpenStackRequest *request) {
338 7db1712d Miltiadis Vasilakis
             self.user = @"";
339 7db1712d Miltiadis Vasilakis
             self.readPermissionSelected = FALSE;
340 7db1712d Miltiadis Vasilakis
             self.writePermissionSelected = FALSE;
341 7db1712d Miltiadis Vasilakis
             removePermissionsEnabled = NO;
342 7db1712d Miltiadis Vasilakis
             [self.tableView reloadData];
343 3a8071d4 Miltiadis Vasilakis
             [activityIndicatorView removeFromSuperview];
344 7db1712d Miltiadis Vasilakis
             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
345 7db1712d Miltiadis Vasilakis
             if (objectIsFolder || (account.shared && ![oldPermissionsString isEqualToString:object.sharing])) {
346 7db1712d Miltiadis Vasilakis
                 self.folderViewController.needsRefreshing = YES;
347 7db1712d Miltiadis Vasilakis
                 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
348 7db1712d Miltiadis Vasilakis
                     [self.folderViewController refreshButtonPressed:nil];
349 7db1712d Miltiadis Vasilakis
                 else
350 7db1712d Miltiadis Vasilakis
                     self.folderViewController.refreshWhenAppeared = YES;
351 7db1712d Miltiadis Vasilakis
             }
352 7db1712d Miltiadis Vasilakis
         }
353 7db1712d Miltiadis Vasilakis
         failure:^(OpenStackRequest *request) {
354 7db1712d Miltiadis Vasilakis
             object.sharing = self.oldPermissionsString;
355 7db1712d Miltiadis Vasilakis
             if (readPermissionSelected)
356 7db1712d Miltiadis Vasilakis
                 [self.permissions setObject:@"read" forKey:user];
357 7db1712d Miltiadis Vasilakis
             else if (writePermissionSelected) 
358 7db1712d Miltiadis Vasilakis
                 [self.permissions setObject:@"write" forKey:user];
359 7db1712d Miltiadis Vasilakis
             
360 3a8071d4 Miltiadis Vasilakis
             [activityIndicatorView removeFromSuperview];
361 7db1712d Miltiadis Vasilakis
             [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
362 7db1712d Miltiadis Vasilakis
             [self.tableView reloadData];
363 7db1712d Miltiadis Vasilakis
             [self alert:@"There was a problem removing the permissions." request:request];
364 7db1712d Miltiadis Vasilakis
         }];
365 91869be8 Miltiadis Vasilakis
    }
366 91869be8 Miltiadis Vasilakis
}
367 91869be8 Miltiadis Vasilakis
368 91869be8 Miltiadis Vasilakis
#pragma mark - Textfield delegate
369 91869be8 Miltiadis Vasilakis
370 91869be8 Miltiadis Vasilakis
371 91869be8 Miltiadis Vasilakis
- (BOOL)textFieldShouldReturn:(UITextField *)textField
372 91869be8 Miltiadis Vasilakis
{
373 54cb751a Miltiadis Vasilakis
    [self userInputIsValid:textField.text];
374 91869be8 Miltiadis Vasilakis
    [textField resignFirstResponder];
375 45f2fce6 Miltiadis Vasilakis
    
376 91869be8 Miltiadis Vasilakis
    return YES;
377 91869be8 Miltiadis Vasilakis
}
378 91869be8 Miltiadis Vasilakis
379 45f2fce6 Miltiadis Vasilakis
#pragma mark - Alertview delegate
380 45f2fce6 Miltiadis Vasilakis
381 45f2fce6 Miltiadis Vasilakis
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
382 45f2fce6 Miltiadis Vasilakis
{
383 45f2fce6 Miltiadis Vasilakis
    if (buttonIndex == 1) {
384 45f2fce6 Miltiadis Vasilakis
        NSString *activityMessage = @"Applying permissions...";
385 3a8071d4 Miltiadis Vasilakis
        [activityIndicatorView release];
386 45f2fce6 Miltiadis Vasilakis
        activityIndicatorView = [[ActivityIndicatorView alloc] initWithFrame:[ActivityIndicatorView frameForText:activityMessage] text:activityMessage];
387 45f2fce6 Miltiadis Vasilakis
        [activityIndicatorView addToView:self.view];
388 45f2fce6 Miltiadis Vasilakis
        
389 45f2fce6 Miltiadis Vasilakis
        object.name = object.fullPath;
390 45f2fce6 Miltiadis Vasilakis
        object.contentType = @"application/directory";
391 45f2fce6 Miltiadis Vasilakis
        object.data = [NSData data];
392 7db1712d Miltiadis Vasilakis
        [self createNewFolder];
393 45f2fce6 Miltiadis Vasilakis
    } else {
394 45f2fce6 Miltiadis Vasilakis
        [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
395 45f2fce6 Miltiadis Vasilakis
    }
396 45f2fce6 Miltiadis Vasilakis
}
397 45f2fce6 Miltiadis Vasilakis
398 7db1712d Miltiadis Vasilakis
- (void)createNewFolder {
399 7db1712d Miltiadis Vasilakis
    [[self.account.manager writeObject:self.container object:object downloadProgressDelegate:nil]
400 7db1712d Miltiadis Vasilakis
     success:^(OpenStackRequest *request) {
401 7db1712d Miltiadis Vasilakis
         Folder *newFolder = [[Folder alloc] init];
402 7db1712d Miltiadis Vasilakis
         newFolder.name = [[object.name componentsSeparatedByString:@"/"] lastObject];
403 7db1712d Miltiadis Vasilakis
         newFolder.parent = folderViewController.folder;
404 7db1712d Miltiadis Vasilakis
         newFolder.sharing = folderViewController.folder.sharing;
405 7db1712d Miltiadis Vasilakis
         [folderViewController.folder.folders setObject:newFolder forKey:newFolder.name];
406 3a8071d4 Miltiadis Vasilakis
         [activityIndicatorView removeFromSuperview];
407 7db1712d Miltiadis Vasilakis
         [newFolder release];
408 7db1712d Miltiadis Vasilakis
         [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
409 7db1712d Miltiadis Vasilakis
         removePermissionsEnabled = YES;
410 7db1712d Miltiadis Vasilakis
         [self.tableView reloadData];
411 7db1712d Miltiadis Vasilakis
         if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
412 7db1712d Miltiadis Vasilakis
             [self.folderViewController refreshButtonPressed:nil];
413 7db1712d Miltiadis Vasilakis
         }
414 7db1712d Miltiadis Vasilakis
         else {
415 7db1712d Miltiadis Vasilakis
             self.folderViewController.needsRefreshing = YES;
416 7db1712d Miltiadis Vasilakis
             self.folderViewController.refreshWhenAppeared = YES;
417 7db1712d Miltiadis Vasilakis
         }            
418 7db1712d Miltiadis Vasilakis
     }
419 7db1712d Miltiadis Vasilakis
     failure:^(OpenStackRequest *request) {
420 7db1712d Miltiadis Vasilakis
         object.sharing = self.oldPermissionsString;
421 7db1712d Miltiadis Vasilakis
         readPermissionSelected = !readPermissionSelected;
422 7db1712d Miltiadis Vasilakis
         writePermissionSelected = !writePermissionSelected;
423 7db1712d Miltiadis Vasilakis
         
424 7db1712d Miltiadis Vasilakis
         if (readPermissionSelected)
425 7db1712d Miltiadis Vasilakis
             [self.permissions setObject:@"read" forKey:user];
426 7db1712d Miltiadis Vasilakis
         else if (writePermissionSelected) 
427 7db1712d Miltiadis Vasilakis
             [self.permissions setObject:@"write" forKey:user];
428 7db1712d Miltiadis Vasilakis
         
429 3a8071d4 Miltiadis Vasilakis
         [activityIndicatorView removeFromSuperview];
430 7db1712d Miltiadis Vasilakis
         [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
431 7db1712d Miltiadis Vasilakis
         [self.tableView reloadData];
432 7db1712d Miltiadis Vasilakis
         [self alert:@"There was a problem applying the permissions." request:request];                                    
433 7db1712d Miltiadis Vasilakis
     }];
434 7db1712d Miltiadis Vasilakis
}
435 7db1712d Miltiadis Vasilakis
436 91869be8 Miltiadis Vasilakis
#pragma mark - helper methods
437 91869be8 Miltiadis Vasilakis
438 91869be8 Miltiadis Vasilakis
- (NSString *)buildPermissionsString
439 91869be8 Miltiadis Vasilakis
{
440 91869be8 Miltiadis Vasilakis
    NSString *readPermissionsString = @"";
441 91869be8 Miltiadis Vasilakis
    NSString *writePermissionsString = @"";
442 45f2fce6 Miltiadis Vasilakis
    
443 91869be8 Miltiadis Vasilakis
    for (NSString *aUser in [permissions allKeys]) {
444 91869be8 Miltiadis Vasilakis
        if ([[permissions objectForKey:aUser] isEqual:@"read"]) {
445 91869be8 Miltiadis Vasilakis
            if ([readPermissionsString length] == 0)
446 91869be8 Miltiadis Vasilakis
                readPermissionsString = [NSString stringWithFormat:@"read=%@", aUser];
447 91869be8 Miltiadis Vasilakis
            else
448 91869be8 Miltiadis Vasilakis
                readPermissionsString = [NSString stringWithFormat:@"%@,%@", readPermissionsString ,aUser];
449 91869be8 Miltiadis Vasilakis
        }
450 91869be8 Miltiadis Vasilakis
        else if ([[permissions objectForKey:aUser] isEqual:@"write"]) {
451 91869be8 Miltiadis Vasilakis
            if ([writePermissionsString length] == 0)
452 91869be8 Miltiadis Vasilakis
                writePermissionsString = [NSString stringWithFormat:@"write=%@", aUser];
453 91869be8 Miltiadis Vasilakis
            else
454 91869be8 Miltiadis Vasilakis
                writePermissionsString = [NSString stringWithFormat:@"%@,%@", writePermissionsString, aUser];
455 91869be8 Miltiadis Vasilakis
        }
456 91869be8 Miltiadis Vasilakis
    }
457 91869be8 Miltiadis Vasilakis
    
458 91869be8 Miltiadis Vasilakis
    if ([writePermissionsString length] == 0)
459 91869be8 Miltiadis Vasilakis
        return readPermissionsString;
460 91869be8 Miltiadis Vasilakis
    else if ([readPermissionsString length] == 0)
461 91869be8 Miltiadis Vasilakis
        return writePermissionsString;
462 91869be8 Miltiadis Vasilakis
    else return [NSString stringWithFormat:@"%@;%@", readPermissionsString, writePermissionsString];
463 91869be8 Miltiadis Vasilakis
}
464 91869be8 Miltiadis Vasilakis
465 54cb751a Miltiadis Vasilakis
- (BOOL) userInputIsValid: (NSString *) input
466 54cb751a Miltiadis Vasilakis
{
467 d6b38316 Miltiadis Vasilakis
    if ([input length] == 0
468 d6b38316 Miltiadis Vasilakis
        || [[input stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
469 d6b38316 Miltiadis Vasilakis
        ) {
470 54cb751a Miltiadis Vasilakis
        [self alert:@"Invalid input" message:@"User name cannot be empty"];
471 d6b38316 Miltiadis Vasilakis
        return NO;
472 d6b38316 Miltiadis Vasilakis
    }
473 d6b38316 Miltiadis Vasilakis
    else {
474 d6b38316 Miltiadis Vasilakis
        NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"=,;"];
475 d6b38316 Miltiadis Vasilakis
        if ([input rangeOfCharacterFromSet:set].location != NSNotFound) {
476 d6b38316 Miltiadis Vasilakis
            [self alert:@"Invalid input" message:@"User name cannot contain '=', ',' or ';'"];
477 d6b38316 Miltiadis Vasilakis
            return NO;
478 d6b38316 Miltiadis Vasilakis
        }
479 d6b38316 Miltiadis Vasilakis
        else {
480 d6b38316 Miltiadis Vasilakis
            return YES;
481 d6b38316 Miltiadis Vasilakis
        }
482 d6b38316 Miltiadis Vasilakis
    }
483 d6b38316 Miltiadis Vasilakis
    
484 d6b38316 Miltiadis Vasilakis
    return YES;
485 d6b38316 Miltiadis Vasilakis
}
486 91869be8 Miltiadis Vasilakis
487 45f2fce6 Miltiadis Vasilakis
488 91869be8 Miltiadis Vasilakis
@end