Skip to content

Commit

Permalink
Downmerge from "develop" branch
Browse files Browse the repository at this point in the history
  • Loading branch information
Vlad Zavadskii committed Dec 10, 2013
2 parents 47e2945 + 71eca37 commit ac42442
Show file tree
Hide file tree
Showing 24 changed files with 717 additions and 60 deletions.
1 change: 1 addition & 0 deletions Classes/Core/JSConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@
*/
@property (nonatomic, readonly) NSInteger VERSION_CODE_UNKNOWN;
@property (nonatomic, readonly) NSInteger VERSION_CODE_EMERALD;
@property (nonatomic, readonly) NSInteger VERSION_CODE_EMERALD_TWO;
/** @} */

/**
Expand Down
3 changes: 3 additions & 0 deletions Classes/Core/JSConstants.m
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ @implementation JSConstants
@synthesize REST_SERVER_INFO_URI;
@synthesize VERSION_CODE_UNKNOWN;
@synthesize VERSION_CODE_EMERALD;
@synthesize VERSION_CODE_EMERALD_TWO;
@synthesize ICD_TYPE_BOOL;
@synthesize ICD_TYPE_SINGLE_VALUE_TEXT;
@synthesize ICD_TYPE_SINGLE_VALUE_NUMBER;
Expand Down Expand Up @@ -371,6 +372,8 @@ - (void)setRESTURIPrefixes {
- (void)setUPVersionCodes {
VERSION_CODE_UNKNOWN = 0;
VERSION_CODE_EMERALD = 50000;
VERSION_CODE_EMERALD_TWO = 50500;

}

- (void)setUPInputControlDescriptorTypes {
Expand Down
8 changes: 8 additions & 0 deletions Classes/Core/JSRESTBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,14 @@
*/
- (JSServerInfo *)serverInfo;

/**
Gets server information details asynchronously
@param delegate The delegate object
@since 1.7
*/
- (void)serverInfo:(id<JSRequestDelegate>)delegate;

/**
Cancels all requests for specified delegate object
Expand Down
50 changes: 40 additions & 10 deletions Classes/Core/JSRESTBase.m
Original file line number Diff line number Diff line change
Expand Up @@ -271,20 +271,25 @@ - (void)sendRequest:(JSRequest *)request {

- (JSServerInfo *)serverInfo {
if (!self.serverProfile.serverInfo) {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[JSConstants sharedInstance].REST_SERVER_INFO_URI
method:JSRequestMethodGET] restVersion:JSRESTVersion_2];
[self sendRequest:[[[builder timeoutInterval:2] asynchronous:NO].request usingBlock:^(JSRequest *request) {
request.finishedBlock = ^(JSOperationResult *result) {
if (!result.error && result.objects.count) {
self.serverProfile.serverInfo = [result.objects objectAtIndex:0];
}
};
}]];
JSRequest *request = [self serverInfoRequest:NO];
request.finishedBlock = ^(JSOperationResult *result) {
[self setServerInfo:result];
};
[self sendRequest:request];
}

return self.serverProfile.serverInfo;
}

- (void)serverInfo:(id<JSRequestDelegate>)delegate {
JSRequest *request = [self serverInfoRequest:YES];
request.finishedBlock = ^(JSOperationResult *result) {
result = [self setServerInfo:result];
[delegate requestFinished:result];
};
[self sendRequest:request];
}

- (void)cancelRequestsWithDelegate:(id<JSRequestDelegate>)delegate {
NSMutableIndexSet *indexesOfRemovingCallBacks = [[NSMutableIndexSet alloc] init];
JSCallBack *callBack = nil;
Expand Down Expand Up @@ -388,6 +393,31 @@ - (void)deleteCookiesForServer:(JSProfile *)serverProfile {
}
}

- (JSRequest *)serverInfoRequest:(BOOL)isAsynchronous {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[JSConstants sharedInstance].REST_SERVER_INFO_URI
method:JSRequestMethodGET] restVersion:JSRESTVersion_2];
[builder asynchronous:isAsynchronous];

return builder.request;
}

- (JSOperationResult *)setServerInfo:(JSOperationResult *)result {
if (result.isError && result.statusCode != 404) return result;

if (result.objects.count) {
self.serverProfile.serverInfo = [result.objects objectAtIndex:0];
} else {
self.serverProfile.serverInfo = [[JSServerInfo alloc] init];

result = [[JSOperationResult alloc] initWithStatusCode:203
allHeaderFields:result.allHeaderFields
MIMEType:result.MIMEType
error:nil];
}

return result;
}

#pragma mark -
#pragma mark RKObjectLoaderDelegate protocol callbacks

Expand Down
45 changes: 44 additions & 1 deletion Classes/Core/JSRESTResource.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
@param uri The repository URI (i.e. /reports/samples/)
@param query Match only resources having the specified text in the name or
description (can be <code>nil</code>)
@param types Match only resources of the given type (can be <code>nil</code>)
@param types Match only resources of the given types (can be <code>nil</code>)
@param recursive Get the resources recursively and not only in the specified URI.
Used only when a search criteria is specified, either query or type
(can be <code>nil</code>)
Expand Down Expand Up @@ -206,4 +206,47 @@
*/
- (void)deleteResource:(NSString *)uri usingBlock:(void (^)(JSRequest *request))block;

//---------------------------------------------------------------------
// The Resources Service v2
//---------------------------------------------------------------------

/**
Gets the list of resource lookups for the resources available in the specified
folder and matching the specified parameters
@param uri The repository URI (i.e. /reports/samples/)
@param query Match only resources having the specified text in the name or
description (can be <code>nil</code>)
@param types Match only resources of the given types (can be <code>nil</code>)
@param recursive Get the resources recursively (can be <code>nil</code>)
@param offset Start index for requested page
@param limit The maximum number of items returned to the client. The default
is 0 (can be <code>nil</code>), meaning no limit
@param delegate A delegate object to inform of the results
@since 1.7
*/
- (void)resourceLookups:(NSString *)folderUri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive offset:(NSInteger)offset limit:(NSInteger)limit delegate:(id<JSRequestDelegate>)delegate;

/**
Gets the list of resource lookups for the resources available in the specified
folder and matching the specified parameters
@param uri The repository URI (i.e. /reports/samples/)
@param query Match only resources having the specified text in the name or
description (can be <code>nil</code>)
@param types Match only resources of the given types (can be <code>nil</code>)
@param recursive Get the resources recursively (can be <code>nil</code>)
@param offset Start index for requested page
@param limit The maximum number of items returned to the client. The default
is 0 (can be <code>nil</code>), meaning no limit
@param block The block to execute with the request before sending it for processing
@since 1.7
*/
- (void)resourceLookups:(NSString *)folderUri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive offset:(NSInteger)offset limit:(NSInteger)limit usingBlock:(void (^)(JSRequest *request))block;


@end
98 changes: 76 additions & 22 deletions Classes/Core/JSRESTResource.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,31 @@

#import "JSConstants.h"
#import "JSRequestBuilder.h"
#import "JSResourceLookup.h"
#import "JSResourceDescriptor.h"
#import "JSResourceParameter.h"
#import "JSRESTResource.h"
#import "JSParamsBuilder.h"

// Shared (1-st initialized) resource instance
static JSRESTResource *_sharedInstance;

// HTTP parameters
static NSString * const _parameterQuery = @"q";
static NSString * const _parameterFolderUri = @"folderUri";
static NSString * const _parameterType = @"type";
static NSString * const _parameterLimit = @"limit";
static NSString * const _parameterOffset = @"offset";
static NSString * const _parameterRecursive = @"recursive";

@implementation JSRESTResource

+ (JSRESTResource *)sharedInstance {
return _sharedInstance;
}

- (id)initWithProfile:(JSProfile *)profile {
NSArray *classesForMappings = [[NSArray alloc] initWithObjects:[JSResourceDescriptor class], nil];
NSArray *classesForMappings = [[NSArray alloc] initWithObjects:[JSResourceDescriptor class], [JSResourceLookup class], nil];

if ((self = [super initWithProfile:profile classesForMappings:classesForMappings]) && !_sharedInstance) {
_sharedInstance = self;
Expand Down Expand Up @@ -73,15 +83,27 @@ - (void)resources:(NSString *)uri usingBlock:(void (^)(JSRequest *request))block
- (void)resources:(NSString *)uri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive limit:(NSInteger)limit delegate:(id<JSRequestDelegate>)delegate {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[self fullResourcesUri:uri] method:JSRequestMethodGET] delegate:delegate];
[builder params:[self createParamsForResources:query types:types recursive:recursive limit:limit]];
[self sendRequest:builder.request];

JSParamsBuilder *paramsBuilder = [[JSParamsBuilder alloc] init];
[[[paramsBuilder addParameter:_parameterQuery withStringValue:query]
addParameter:_parameterType withArrayValue:types]
addParameter:_parameterLimit withIntegerValue:limit];
if (recursive) [paramsBuilder addParameter:_parameterRecursive withStringValue:[JSConstants stringFromBOOL:recursive]];

[self sendRequest:[builder params:paramsBuilder.params].request];
}

- (void)resources:(NSString *)uri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive limit:(NSInteger)limit usingBlock:(void (^)(JSRequest *request))block {
JSRequestBuilder *builder = [JSRequestBuilder requestWithUri:[self fullResourcesUri:uri] method:JSRequestMethodGET];
[builder params:[self createParamsForResources:query types:types recursive:recursive limit:limit]];
[self sendRequest:[builder.request usingBlock:block]];

JSParamsBuilder *paramsBuilder = [[JSParamsBuilder alloc] init];
[[[paramsBuilder addParameter:_parameterQuery withStringValue:query]
addParameter:_parameterType withArrayValue:types]
addParameter:_parameterLimit withIntegerValue:limit];
if (recursive) [paramsBuilder addParameter:_parameterRecursive withStringValue:[JSConstants stringFromBOOL:recursive]];

[self sendRequest:[[builder params:paramsBuilder.params].request usingBlock:block]];
}

- (void)resourceWithQueryData:(NSString *)uri datasourceUri:(NSString *)datasourceUri
Expand All @@ -98,6 +120,45 @@ - (void)resourceWithQueryData:(NSString *)uri datasourceUri:(NSString *)datasour
[self sendRequest:[builder.request usingBlock:block]];
}

#pragma mark -
#pragma mark Public methods for REST V2 resources API

- (void)resourceLookups:(NSString *)folderUri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive offset:(NSInteger)offset limit:(NSInteger)limit delegate:(id<JSRequestDelegate>)delegate {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[JSConstants sharedInstance].REST_RESOURCES_URI method:JSRequestMethodGET]
restVersion:JSRESTVersion_2];

JSParamsBuilder *paramsBuilder = [[JSParamsBuilder alloc] init];
[[[[[[[paramsBuilder addParameter:_parameterFolderUri withStringValue:folderUri]
addParameter:_parameterQuery withStringValue:query]
addParameter:_parameterType withArrayValue:types]
addParameter:_parameterLimit withIntegerValue:limit]
addParameter:_parameterRecursive withStringValue:[JSConstants stringFromBOOL:recursive]]
addParameter:_parameterOffset withIntegerValue:offset]
addParameter:_parameterLimit withIntegerValue:limit];

[[builder params:paramsBuilder.params] delegate:delegate];
[self sendRequest:builder.request];
}

- (void)resourceLookups:(NSString *)folderUri query:(NSString *)query types:(NSArray *)types
recursive:(BOOL)recursive offset:(NSInteger)offset limit:(NSInteger)limit usingBlock:(void (^)(JSRequest *request))block {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[JSConstants sharedInstance].REST_RESOURCES_URI method:JSRequestMethodGET]
restVersion:JSRESTVersion_2];

JSParamsBuilder *paramsBuilder = [[JSParamsBuilder alloc] init];
[[[[[[[paramsBuilder addParameter:_parameterFolderUri withStringValue:folderUri]
addParameter:_parameterQuery withStringValue:query]
addParameter:_parameterType withArrayValue:types]
addParameter:_parameterLimit withIntegerValue:limit]
addParameter:_parameterRecursive withStringValue:[JSConstants stringFromBOOL:recursive]]
addParameter:_parameterOffset withIntegerValue:offset]
addParameter:_parameterLimit withIntegerValue:limit];

[builder params:paramsBuilder.params];
[self sendRequest:[builder.request usingBlock:block]];
}

#pragma mark -
#pragma mark Public methods for resource API

Expand Down Expand Up @@ -138,7 +199,6 @@ - (void)modifyResource:(JSResourceDescriptor *)resource usingBlock:(void (^)(JSR
- (void)deleteResource:(NSString *)uri delegate:(id<JSRequestDelegate>)delegate {
JSRequestBuilder *builder = [[JSRequestBuilder requestWithUri:[self fullResourceUri:uri] method:JSRequestMethodDELETE] delegate:delegate];
[self sendRequest:builder.request];

}

- (void)deleteResource:(NSString *)uri usingBlock:(void (^)(JSRequest *request))block {
Expand All @@ -149,24 +209,18 @@ - (void)deleteResource:(NSString *)uri usingBlock:(void (^)(JSRequest *request))
#pragma mark -
#pragma mark Private methods

// Creates NSMutableDictionary params for resources by query, type, recursive, limit arguments
- (NSMutableDictionary *)createParamsForResources:(NSString *)query types:(NSArray *)types recursive:(BOOL)recursive limit:(NSInteger)limit {
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

if (query && query.length) {
[params setObject:query forKey:@"q"];
}
if (types && types.count) {
[params setObject:types forKey:@"type"];
}
if (recursive) {
[params setObject:@"true" forKey:@"recursive"];
- (void)addParameter:(NSString *)parameter withStringValue:(NSString *)value toDictionary:(NSMutableDictionary *)params
{
if (value && value.length) {
[params setObject:value forKey:parameter];
}
if (limit && limit > 0) {
[params setObject:[NSNumber numberWithInteger:limit] forKey:@"limit"];
}

- (void)addParameter:(NSString *)parameter withIntegerValue:(NSInteger)value toDictionary:(NSMutableDictionary *)params
{
if (value) {
[params setObject:[NSNumber numberWithInteger:value] forKey:parameter];
}

return params;
}

- (NSDictionary *)paramsForICQueryDataByDatasourceUri:(NSString *)datasourceUri resourceParameters:(NSArray *)resourceParameters {
Expand Down
2 changes: 1 addition & 1 deletion Classes/Core/JSRequest.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ typedef enum {
typedef enum {
JSRESTVersion_1,
JSRESTVersion_2
} JSRESTVersion;
} JSRESTVersion;

/**
This protocol must be implemented by objects used to retrieve request result asynchronously
Expand Down
Loading

0 comments on commit ac42442

Please sign in to comment.