Statistics
| Branch: | Tag: | Revision:

root / Classes / ObjectVersionsViewController.m @ ea3a6bba

History | View | Annotate | Download (6.8 kB)

1 64929bae Miltiadis Vasilakis
//
2 64929bae Miltiadis Vasilakis
//  ObjectVersionsViewController.m
3 64929bae Miltiadis Vasilakis
//  pithos-ios
4 64929bae Miltiadis Vasilakis
//
5 ea3a6bba Miltiadis Vasilakis
// Copyright 2011-2012 GRNET S.A. All rights reserved.
6 64929bae Miltiadis Vasilakis
//
7 64929bae Miltiadis Vasilakis
// Redistribution and use in source and binary forms, with or
8 64929bae Miltiadis Vasilakis
// without modification, are permitted provided that the following
9 64929bae Miltiadis Vasilakis
// conditions are met:
10 64929bae Miltiadis Vasilakis
// 
11 64929bae Miltiadis Vasilakis
//   1. Redistributions of source code must retain the above
12 64929bae Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
13 64929bae Miltiadis Vasilakis
//      disclaimer.
14 64929bae Miltiadis Vasilakis
// 
15 64929bae Miltiadis Vasilakis
//   2. Redistributions in binary form must reproduce the above
16 64929bae Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
17 64929bae Miltiadis Vasilakis
//      disclaimer in the documentation and/or other materials
18 64929bae Miltiadis Vasilakis
//      provided with the distribution.
19 64929bae Miltiadis Vasilakis
// 
20 64929bae Miltiadis Vasilakis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21 64929bae Miltiadis Vasilakis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 64929bae Miltiadis Vasilakis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 64929bae Miltiadis Vasilakis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24 64929bae Miltiadis Vasilakis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 64929bae Miltiadis Vasilakis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 64929bae Miltiadis Vasilakis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 64929bae Miltiadis Vasilakis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 64929bae Miltiadis Vasilakis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 64929bae Miltiadis Vasilakis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 64929bae Miltiadis Vasilakis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 64929bae Miltiadis Vasilakis
// POSSIBILITY OF SUCH DAMAGE.
32 64929bae Miltiadis Vasilakis
// 
33 64929bae Miltiadis Vasilakis
// The views and conclusions contained in the software and
34 64929bae Miltiadis Vasilakis
// documentation are those of the authors and should not be
35 64929bae Miltiadis Vasilakis
// interpreted as representing official policies, either expressed
36 64929bae Miltiadis Vasilakis
// or implied, of GRNET S.A.
37 64929bae Miltiadis Vasilakis
38 64929bae Miltiadis Vasilakis
#import "ObjectVersionsViewController.h"
39 64929bae Miltiadis Vasilakis
#import "StorageObjectViewController.h"
40 64929bae Miltiadis Vasilakis
#import "OpenStackAccount.h"
41 64929bae Miltiadis Vasilakis
#import "OpenStackRequest.h"
42 64929bae Miltiadis Vasilakis
#import "AccountManager.h"
43 64929bae Miltiadis Vasilakis
#import "APICallback.h"
44 64929bae Miltiadis Vasilakis
#import "JSON.h"
45 64929bae Miltiadis Vasilakis
#import "ActivityIndicatorView.h"
46 64929bae Miltiadis Vasilakis
#import "UIViewController+Conveniences.h"
47 64929bae Miltiadis Vasilakis
#import "StorageObject.h"
48 64929bae Miltiadis Vasilakis
49 64929bae Miltiadis Vasilakis
@implementation ObjectVersionsViewController
50 64929bae Miltiadis Vasilakis
51 f474d3f4 Miltiadis Vasilakis
@synthesize versions, account, container, object;
52 64929bae Miltiadis Vasilakis
53 64929bae Miltiadis Vasilakis
#pragma mark - View lifecycle
54 64929bae Miltiadis Vasilakis
55 64929bae Miltiadis Vasilakis
- (void)viewDidLoad {
56 64929bae Miltiadis Vasilakis
    [super viewDidLoad];
57 64929bae Miltiadis Vasilakis
    self.navigationItem.title = @"Versions";
58 64929bae Miltiadis Vasilakis
    self.versions = [NSMutableArray array];
59 64929bae Miltiadis Vasilakis
    versionsLoaded = NO;
60 64929bae Miltiadis Vasilakis
61 60731366 Miltiadis Vasilakis
    __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading..."
62 60731366 Miltiadis Vasilakis
                                                                                                   andAddToView:self.view];
63 7446ae64 Miltiadis Vasilakis
    [[self.account.manager getObjectVersionsList:container object:object]
64 64929bae Miltiadis Vasilakis
     success:^(OpenStackRequest *request) {
65 7446ae64 Miltiadis Vasilakis
         [versions addObjectsFromArray:[request versions]];
66 7446ae64 Miltiadis Vasilakis
         [activityIndicatorView stopAnimatingAndRemoveFromSuperview];
67 64929bae Miltiadis Vasilakis
         versionsLoaded = YES;
68 64929bae Miltiadis Vasilakis
         [self.tableView reloadData];
69 64929bae Miltiadis Vasilakis
     }
70 64929bae Miltiadis Vasilakis
     failure:^(OpenStackRequest *request) {
71 7446ae64 Miltiadis Vasilakis
         [activityIndicatorView stopAnimatingAndRemoveFromSuperview];
72 0767143f Miltiadis Vasilakis
         [self alert:@"Couldn't get versions from server." request:request];
73 64929bae Miltiadis Vasilakis
     }];    
74 64929bae Miltiadis Vasilakis
}
75 64929bae Miltiadis Vasilakis
76 64929bae Miltiadis Vasilakis
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
77 689de104 Miltiadis Vasilakis
    return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait);
78 64929bae Miltiadis Vasilakis
}
79 64929bae Miltiadis Vasilakis
80 60731366 Miltiadis Vasilakis
#pragma mark - Memory management
81 64929bae Miltiadis Vasilakis
82 64929bae Miltiadis Vasilakis
- (void)dealloc {
83 64929bae Miltiadis Vasilakis
    [account release];
84 64929bae Miltiadis Vasilakis
    [container release];
85 64929bae Miltiadis Vasilakis
    [object release];
86 64929bae Miltiadis Vasilakis
    [versions release];
87 64929bae Miltiadis Vasilakis
    [super dealloc];
88 64929bae Miltiadis Vasilakis
}
89 64929bae Miltiadis Vasilakis
90 64929bae Miltiadis Vasilakis
#pragma mark - Table view data source
91 64929bae Miltiadis Vasilakis
92 64929bae Miltiadis Vasilakis
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
93 64929bae Miltiadis Vasilakis
    return 1;
94 64929bae Miltiadis Vasilakis
}
95 64929bae Miltiadis Vasilakis
96 64929bae Miltiadis Vasilakis
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
97 64929bae Miltiadis Vasilakis
    if (!versionsLoaded)
98 64929bae Miltiadis Vasilakis
        return 0;
99 64929bae Miltiadis Vasilakis
    else
100 64929bae Miltiadis Vasilakis
        return MAX(1, versions.count);
101 64929bae Miltiadis Vasilakis
}
102 64929bae Miltiadis Vasilakis
103 64929bae Miltiadis Vasilakis
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
104 64929bae Miltiadis Vasilakis
    static NSString *CellIdentifier = @"Cell";
105 64929bae Miltiadis Vasilakis
    
106 64929bae Miltiadis Vasilakis
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
107 64929bae Miltiadis Vasilakis
    if (cell == nil) {
108 64929bae Miltiadis Vasilakis
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
109 64929bae Miltiadis Vasilakis
    }
110 64929bae Miltiadis Vasilakis
    cell.userInteractionEnabled = YES;
111 64929bae Miltiadis Vasilakis
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
112 64929bae Miltiadis Vasilakis
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
113 64929bae Miltiadis Vasilakis
    if (versions.count == 0 || !versions) {
114 64929bae Miltiadis Vasilakis
        cell.textLabel.text = @"No previous versions available";
115 64929bae Miltiadis Vasilakis
        cell.userInteractionEnabled = NO;
116 64929bae Miltiadis Vasilakis
        cell.accessoryType = UITableViewCellAccessoryNone;
117 64929bae Miltiadis Vasilakis
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
118 64929bae Miltiadis Vasilakis
    } else {
119 64929bae Miltiadis Vasilakis
        NSDictionary *versionDetails = [versions objectAtIndex:indexPath.row];
120 64929bae Miltiadis Vasilakis
        cell.textLabel.text = [[versionDetails objectForKey:@"versionID"] description];
121 64929bae Miltiadis Vasilakis
        NSString *dateString = [NSDateFormatter localizedStringFromDate:[versionDetails objectForKey:@"versionDate"]
122 64929bae Miltiadis Vasilakis
                                                              dateStyle:NSDateFormatterMediumStyle
123 64929bae Miltiadis Vasilakis
                                                              timeStyle:NSDateFormatterMediumStyle];
124 64929bae Miltiadis Vasilakis
        cell.detailTextLabel.text = dateString;
125 64929bae Miltiadis Vasilakis
    }
126 64929bae Miltiadis Vasilakis
    
127 64929bae Miltiadis Vasilakis
    return cell;
128 64929bae Miltiadis Vasilakis
}
129 64929bae Miltiadis Vasilakis
130 64929bae Miltiadis Vasilakis
#pragma mark - Table view delegate
131 64929bae Miltiadis Vasilakis
132 64929bae Miltiadis Vasilakis
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
133 60731366 Miltiadis Vasilakis
    __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading..."
134 60731366 Miltiadis Vasilakis
                                                                                                   andAddToView:self.view];
135 64929bae Miltiadis Vasilakis
    NSDictionary *versionDetails = [versions objectAtIndex:indexPath.row];
136 64929bae Miltiadis Vasilakis
    NSString *versionID = [[versionDetails objectForKey:@"versionID"] description];
137 64929bae Miltiadis Vasilakis
    [[self.account.manager getObjectInfo:container object:object version:versionID]
138 64929bae Miltiadis Vasilakis
     success:^(OpenStackRequest *request) {
139 7446ae64 Miltiadis Vasilakis
         [activityIndicatorView stopAnimatingAndRemoveFromSuperview];
140 64929bae Miltiadis Vasilakis
         StorageObject *versionedObject = [[[StorageObject alloc] init] autorelease];
141 64929bae Miltiadis Vasilakis
         versionedObject.name = object.name;
142 64929bae Miltiadis Vasilakis
         versionedObject.fullPath = object.fullPath;
143 64929bae Miltiadis Vasilakis
         [versionedObject setPropertiesfromResponseHeaders:request.responseHeaders];
144 64929bae Miltiadis Vasilakis
         StorageObjectViewController *vc = [[StorageObjectViewController alloc] initWithNibName:@"StorageObjectViewController" bundle:nil];
145 64929bae Miltiadis Vasilakis
         vc.objectIsReadOnly = YES;
146 64929bae Miltiadis Vasilakis
         vc.account = account;
147 64929bae Miltiadis Vasilakis
         vc.container = container;
148 64929bae Miltiadis Vasilakis
         vc.object = versionedObject;
149 64929bae Miltiadis Vasilakis
         vc.versionID = versionID;
150 64929bae Miltiadis Vasilakis
         [self.navigationController pushViewController:vc animated:YES];
151 64929bae Miltiadis Vasilakis
         [vc release];
152 64929bae Miltiadis Vasilakis
         [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
153 64929bae Miltiadis Vasilakis
     } 
154 64929bae Miltiadis Vasilakis
     failure:^(OpenStackRequest *request) {
155 7446ae64 Miltiadis Vasilakis
         [activityIndicatorView stopAnimatingAndRemoveFromSuperview];
156 64929bae Miltiadis Vasilakis
         [self alert:[NSString stringWithFormat:@"Failed to get file info for version: %@", versionID] request:request];
157 64929bae Miltiadis Vasilakis
     }];
158 64929bae Miltiadis Vasilakis
}
159 64929bae Miltiadis Vasilakis
160 64929bae Miltiadis Vasilakis
@end