2
0
MasterPassword/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m
2013-08-11 00:08:25 -04:00

136 lines
3.7 KiB
Objective-C

/* Copyright (c) 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//
// GTLBatchQuery.m
//
#import "GTLBatchQuery.h"
@implementation GTLBatchQuery
@synthesize shouldSkipAuthorization = skipAuthorization_,
additionalHTTPHeaders = additionalHTTPHeaders_,
urlQueryParameters = urlQueryParameters_;
+ (id)batchQuery {
GTLBatchQuery *obj = [[[self alloc] init] autorelease];
return obj;
}
+ (id)batchQueryWithQueries:(NSArray *)queries {
GTLBatchQuery *obj = [self batchQuery];
obj.queries = queries;
return obj;
}
- (id)copyWithZone:(NSZone *)zone {
// Deep copy the list of queries
NSArray *copiesOfQueries = [[[NSArray alloc] initWithArray:self.queries
copyItems:YES] autorelease];
GTLBatchQuery *newBatch = [[[self class] allocWithZone:zone] init];
newBatch.queries = copiesOfQueries;
newBatch.shouldSkipAuthorization = self.shouldSkipAuthorization;
newBatch.additionalHTTPHeaders = self.additionalHTTPHeaders;
return newBatch;
}
- (void)dealloc {
[queries_ release];
[additionalHTTPHeaders_ release];
[urlQueryParameters_ release];
[requestIDMap_ release];
[super dealloc];
}
- (NSString *)description {
NSArray *queries = self.queries;
NSArray *methodNames = [queries valueForKey:@"methodName"];
NSArray *dedupedNames = [[NSSet setWithArray:methodNames] allObjects];
NSString *namesStr = [dedupedNames componentsJoinedByString:@","];
return [NSString stringWithFormat:@"%@ %p (queries:%lu methods:%@)",
[self class], self, (unsigned long) [queries count], namesStr];
}
#pragma mark -
- (BOOL)isBatchQuery {
return YES;
}
- (GTLUploadParameters *)uploadParameters {
// File upload is not supported for batches
return nil;
}
- (void)executionDidStop {
NSArray *queries = self.queries;
[queries makeObjectsPerformSelector:@selector(executionDidStop)];
}
- (GTLQuery *)queryForRequestID:(NSString *)requestID {
GTLQuery *result = [requestIDMap_ objectForKey:requestID];
if (result) return result;
// We've not before tried to look up a query, or the map is stale
[requestIDMap_ release];
requestIDMap_ = [[NSMutableDictionary alloc] init];
for (GTLQuery *query in queries_) {
[requestIDMap_ setObject:query forKey:query.requestID];
}
result = [requestIDMap_ objectForKey:requestID];
return result;
}
#pragma mark -
- (void)setQueries:(NSArray *)array {
#if DEBUG
for (id obj in array) {
GTLQuery *query = obj;
GTL_DEBUG_ASSERT([query isKindOfClass:[GTLQuery class]],
@"unexpected query class: %@", [obj class]);
GTL_DEBUG_ASSERT(query.uploadParameters == nil,
@"batch may not contain upload: %@", query);
}
#endif
[queries_ autorelease];
queries_ = [array mutableCopy];
}
- (NSArray *)queries {
return queries_;
}
- (void)addQuery:(GTLQuery *)query {
GTL_DEBUG_ASSERT([query isKindOfClass:[GTLQuery class]],
@"unexpected query class: %@", [query class]);
GTL_DEBUG_ASSERT(query.uploadParameters == nil,
@"batch may not contain upload: %@", query);
if (queries_ == nil) {
queries_ = [[NSMutableArray alloc] init];
}
[queries_ addObject:query];
}
@end