Statistics
| Branch: | Tag: | Revision:

root / pithos-macos / PithosNode.m @ d4433f6f

History | View | Annotate | Download (5.5 kB)

1 d8d08dc1 Miltiadis Vasilakis
//
2 d8d08dc1 Miltiadis Vasilakis
//  PithosNode.m
3 d8d08dc1 Miltiadis Vasilakis
//  pithos-macos
4 d8d08dc1 Miltiadis Vasilakis
//
5 e5fdf4d9 Miltiadis Vasilakis
// Copyright 2011 GRNET S.A. All rights reserved.
6 d8d08dc1 Miltiadis Vasilakis
//
7 e5fdf4d9 Miltiadis Vasilakis
// Redistribution and use in source and binary forms, with or
8 e5fdf4d9 Miltiadis Vasilakis
// without modification, are permitted provided that the following
9 e5fdf4d9 Miltiadis Vasilakis
// conditions are met:
10 e5fdf4d9 Miltiadis Vasilakis
// 
11 e5fdf4d9 Miltiadis Vasilakis
//   1. Redistributions of source code must retain the above
12 e5fdf4d9 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
13 e5fdf4d9 Miltiadis Vasilakis
//      disclaimer.
14 e5fdf4d9 Miltiadis Vasilakis
// 
15 e5fdf4d9 Miltiadis Vasilakis
//   2. Redistributions in binary form must reproduce the above
16 e5fdf4d9 Miltiadis Vasilakis
//      copyright notice, this list of conditions and the following
17 e5fdf4d9 Miltiadis Vasilakis
//      disclaimer in the documentation and/or other materials
18 e5fdf4d9 Miltiadis Vasilakis
//      provided with the distribution.
19 e5fdf4d9 Miltiadis Vasilakis
// 
20 e5fdf4d9 Miltiadis Vasilakis
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21 e5fdf4d9 Miltiadis Vasilakis
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 e5fdf4d9 Miltiadis Vasilakis
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 e5fdf4d9 Miltiadis Vasilakis
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24 e5fdf4d9 Miltiadis Vasilakis
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 e5fdf4d9 Miltiadis Vasilakis
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 e5fdf4d9 Miltiadis Vasilakis
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 e5fdf4d9 Miltiadis Vasilakis
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 e5fdf4d9 Miltiadis Vasilakis
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 e5fdf4d9 Miltiadis Vasilakis
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 e5fdf4d9 Miltiadis Vasilakis
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 e5fdf4d9 Miltiadis Vasilakis
// POSSIBILITY OF SUCH DAMAGE.
32 e5fdf4d9 Miltiadis Vasilakis
// 
33 e5fdf4d9 Miltiadis Vasilakis
// The views and conclusions contained in the software and
34 e5fdf4d9 Miltiadis Vasilakis
// documentation are those of the authors and should not be
35 e5fdf4d9 Miltiadis Vasilakis
// interpreted as representing official policies, either expressed
36 e5fdf4d9 Miltiadis Vasilakis
// or implied, of GRNET S.A.
37 d8d08dc1 Miltiadis Vasilakis
38 d8d08dc1 Miltiadis Vasilakis
#import "PithosNode.h"
39 2d9996a2 Miltiadis Vasilakis
#import "PithosNodeInfoController.h"
40 90fadc45 Miltiadis Vasilakis
#import "ASIDownloadCache.h"
41 5f54c6be Miltiadis Vasilakis
#import "ASIPithosRequest.h"
42 d8d08dc1 Miltiadis Vasilakis
43 d8d08dc1 Miltiadis Vasilakis
@implementation PithosNode
44 d4433f6f Miltiadis Vasilakis
@synthesize forcedRefresh, parent, shared, sharingAccount, childrenUpdatedNotificationName, 
45 d4433f6f Miltiadis Vasilakis
            inheritChildrenUpdatedNotificationName, displayName, isLeafItem, icon;
46 7da4ebcc Miltiadis Vasilakis
@dynamic url, children, pithos, pithosAccount, pithosContainer, pithosObject;
47 e5fdf4d9 Miltiadis Vasilakis
48 e5fdf4d9 Miltiadis Vasilakis
#pragma mark -
49 e5fdf4d9 Miltiadis Vasilakis
#pragma mark Object Lifecycle
50 d8d08dc1 Miltiadis Vasilakis
51 e5fdf4d9 Miltiadis Vasilakis
- (id)init {
52 f059e0e6 Miltiadis Vasilakis
    if ((self = [super init])) {
53 605c8932 Miltiadis Vasilakis
        freshness = PithosNodeStateRefreshNeeded;
54 90fadc45 Miltiadis Vasilakis
        forcedRefresh = NO;
55 4ae10a2b Miltiadis Vasilakis
        shared = NO;
56 e5fdf4d9 Miltiadis Vasilakis
        isLeafItem = NO;
57 d4433f6f Miltiadis Vasilakis
        self.childrenUpdatedNotificationName = @"PithosNodeChildrenUpdated";
58 d4433f6f Miltiadis Vasilakis
        inheritChildrenUpdatedNotificationName = NO;
59 d8d08dc1 Miltiadis Vasilakis
    }
60 d8d08dc1 Miltiadis Vasilakis
    return self;
61 d8d08dc1 Miltiadis Vasilakis
}
62 d8d08dc1 Miltiadis Vasilakis
63 e5fdf4d9 Miltiadis Vasilakis
- (void)dealloc {
64 2d9996a2 Miltiadis Vasilakis
    [pithosNodeInfoController release];
65 af3b9f06 Miltiadis Vasilakis
    [sharingAccount release];
66 155f0dfd Miltiadis Vasilakis
    [icon release];
67 e5fdf4d9 Miltiadis Vasilakis
    [displayName release];
68 7da4ebcc Miltiadis Vasilakis
    [childrenUpdatedNotificationName release];
69 605c8932 Miltiadis Vasilakis
    [newChildren release];
70 e5fdf4d9 Miltiadis Vasilakis
    [children release];
71 e5fdf4d9 Miltiadis Vasilakis
    [url release];
72 d8d08dc1 Miltiadis Vasilakis
    [super dealloc];
73 d8d08dc1 Miltiadis Vasilakis
}
74 d8d08dc1 Miltiadis Vasilakis
75 e5fdf4d9 Miltiadis Vasilakis
- (BOOL)isEqual:(id)anObject {
76 605c8932 Miltiadis Vasilakis
    return ([anObject isKindOfClass:[self class]] && [((PithosNode *)anObject).url isEqual:self.url]);
77 e5fdf4d9 Miltiadis Vasilakis
}
78 e5fdf4d9 Miltiadis Vasilakis
79 e5fdf4d9 Miltiadis Vasilakis
- (NSUInteger)hash {
80 e5fdf4d9 Miltiadis Vasilakis
    return self.url.hash;
81 e5fdf4d9 Miltiadis Vasilakis
}
82 e5fdf4d9 Miltiadis Vasilakis
83 2d9996a2 Miltiadis Vasilakis
#pragma mark -
84 af3b9f06 Miltiadis Vasilakis
#pragma mark Properties
85 af3b9f06 Miltiadis Vasilakis
86 af3b9f06 Miltiadis Vasilakis
- (void)setShared:(BOOL)aShared {
87 af3b9f06 Miltiadis Vasilakis
    if (shared != aShared) {
88 af3b9f06 Miltiadis Vasilakis
        shared = aShared;
89 af3b9f06 Miltiadis Vasilakis
        [url release];
90 af3b9f06 Miltiadis Vasilakis
        url = nil;
91 af3b9f06 Miltiadis Vasilakis
    }
92 af3b9f06 Miltiadis Vasilakis
}
93 af3b9f06 Miltiadis Vasilakis
94 af3b9f06 Miltiadis Vasilakis
- (void)setSharingAccount:(NSString *)aSharingAccount {
95 af3b9f06 Miltiadis Vasilakis
    if (![sharingAccount isEqualToString:aSharingAccount]) {
96 af3b9f06 Miltiadis Vasilakis
        [sharingAccount release];
97 af3b9f06 Miltiadis Vasilakis
        sharingAccount = [aSharingAccount retain];
98 af3b9f06 Miltiadis Vasilakis
        [url release];
99 af3b9f06 Miltiadis Vasilakis
        url = nil;
100 af3b9f06 Miltiadis Vasilakis
    }
101 af3b9f06 Miltiadis Vasilakis
}
102 af3b9f06 Miltiadis Vasilakis
103 af3b9f06 Miltiadis Vasilakis
#pragma mark -
104 2d9996a2 Miltiadis Vasilakis
#pragma mark Actions
105 2d9996a2 Miltiadis Vasilakis
106 e5fdf4d9 Miltiadis Vasilakis
- (void)invalidateChildren {
107 605c8932 Miltiadis Vasilakis
    if (freshness == PithosNodeStateFresh)
108 605c8932 Miltiadis Vasilakis
        freshness = PithosNodeStateRefreshNeeded;
109 605c8932 Miltiadis Vasilakis
}
110 605c8932 Miltiadis Vasilakis
111 605c8932 Miltiadis Vasilakis
- (void)invalidateChildrenRecursive {    
112 605c8932 Miltiadis Vasilakis
    if (freshness == PithosNodeStateFresh) {
113 605c8932 Miltiadis Vasilakis
        for (PithosNode *child in children) {
114 605c8932 Miltiadis Vasilakis
            [child invalidateChildrenRecursive];
115 605c8932 Miltiadis Vasilakis
        }
116 605c8932 Miltiadis Vasilakis
        freshness = PithosNodeStateRefreshNeeded;
117 e5fdf4d9 Miltiadis Vasilakis
    }
118 e5fdf4d9 Miltiadis Vasilakis
}
119 e5fdf4d9 Miltiadis Vasilakis
120 4ae10a2b Miltiadis Vasilakis
- (void)refresh {
121 4ae10a2b Miltiadis Vasilakis
    [self invalidateChildren];
122 4ae10a2b Miltiadis Vasilakis
    self.children;
123 4ae10a2b Miltiadis Vasilakis
}
124 4ae10a2b Miltiadis Vasilakis
125 90fadc45 Miltiadis Vasilakis
- (void)forceRefresh {
126 90fadc45 Miltiadis Vasilakis
    forcedRefresh = YES;
127 90fadc45 Miltiadis Vasilakis
    [self refresh];
128 90fadc45 Miltiadis Vasilakis
}
129 90fadc45 Miltiadis Vasilakis
130 d4433f6f Miltiadis Vasilakis
- (void)postChildrenUpdatedNotificationName {
131 d4433f6f Miltiadis Vasilakis
    // Notify observers that children are updated
132 d4433f6f Miltiadis Vasilakis
    if (inheritChildrenUpdatedNotificationName) {
133 d4433f6f Miltiadis Vasilakis
        PithosNode *ancestor = self;
134 d4433f6f Miltiadis Vasilakis
        while (ancestor && ancestor.parent) {
135 d4433f6f Miltiadis Vasilakis
            ancestor = ancestor.parent;
136 d4433f6f Miltiadis Vasilakis
        }
137 d4433f6f Miltiadis Vasilakis
        if (ancestor && ancestor.childrenUpdatedNotificationName) {
138 d4433f6f Miltiadis Vasilakis
            [[NSNotificationCenter defaultCenter] postNotificationName:ancestor.childrenUpdatedNotificationName object:self];
139 d4433f6f Miltiadis Vasilakis
        }
140 d4433f6f Miltiadis Vasilakis
    } else if (childrenUpdatedNotificationName) {
141 d4433f6f Miltiadis Vasilakis
        [[NSNotificationCenter defaultCenter] postNotificationName:childrenUpdatedNotificationName object:self];
142 d4433f6f Miltiadis Vasilakis
    }
143 d4433f6f Miltiadis Vasilakis
}
144 d4433f6f Miltiadis Vasilakis
145 2d9996a2 Miltiadis Vasilakis
- (void)showPithosNodeInfo:(id)sender {
146 515cd8db Miltiadis Vasilakis
    // Abstract method
147 2d9996a2 Miltiadis Vasilakis
}
148 2d9996a2 Miltiadis Vasilakis
149 2d9996a2 Miltiadis Vasilakis
- (void)pithosNodeInfoWillClose:(id)sender {
150 2d9996a2 Miltiadis Vasilakis
    if (pithosNodeInfoController) {
151 2d9996a2 Miltiadis Vasilakis
        [pithosNodeInfoController release];
152 2d9996a2 Miltiadis Vasilakis
        pithosNodeInfoController = nil;
153 2d9996a2 Miltiadis Vasilakis
    }
154 2d9996a2 Miltiadis Vasilakis
}
155 2d9996a2 Miltiadis Vasilakis
156 6a9b9f40 Miltiadis Vasilakis
- (void)pithosNodeWillBeRemoved {
157 6a9b9f40 Miltiadis Vasilakis
    if (pithosNodeInfoController) {
158 6a9b9f40 Miltiadis Vasilakis
        pithosNodeInfoController.node = nil;
159 6a9b9f40 Miltiadis Vasilakis
        [[pithosNodeInfoController window] close];
160 6a9b9f40 Miltiadis Vasilakis
    }
161 6a9b9f40 Miltiadis Vasilakis
    for (PithosNode *child in children) {
162 6a9b9f40 Miltiadis Vasilakis
        [child pithosNodeWillBeRemoved];
163 6a9b9f40 Miltiadis Vasilakis
    }
164 6a9b9f40 Miltiadis Vasilakis
}
165 6a9b9f40 Miltiadis Vasilakis
166 5f54c6be Miltiadis Vasilakis
#pragma mark -
167 5f54c6be Miltiadis Vasilakis
#pragma mark ASIHTTPRequestDelegate
168 5f54c6be Miltiadis Vasilakis
169 5f54c6be Miltiadis Vasilakis
- (void)performRequestFinishedDelegateInBackground:(ASIPithosRequest *)request {
170 5f54c6be Miltiadis Vasilakis
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
171 5f54c6be Miltiadis Vasilakis
        [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFinishSelector"]) withObject:request];
172 5f54c6be Miltiadis Vasilakis
    });
173 5f54c6be Miltiadis Vasilakis
}
174 5f54c6be Miltiadis Vasilakis
175 5f54c6be Miltiadis Vasilakis
- (void)performRequestFailedDelegateInBackground:(ASIPithosRequest *)request {
176 5f54c6be Miltiadis Vasilakis
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
177 5f54c6be Miltiadis Vasilakis
        [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFailSelector"]) withObject:request];
178 5f54c6be Miltiadis Vasilakis
    });
179 5f54c6be Miltiadis Vasilakis
}
180 5f54c6be Miltiadis Vasilakis
181 e5fdf4d9 Miltiadis Vasilakis
@end