134 lines
3.6 KiB
Mathematica
134 lines
3.6 KiB
Mathematica
|
/* 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_;
|
||
|
|
||
|
+ (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];
|
||
|
[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
|