diff --git a/src/main/resources/objc/NIKApiInvoker.h b/src/main/resources/objc/NIKApiInvoker.h index 4737e92b590..2d6977eadcc 100644 --- a/src/main/resources/objc/NIKApiInvoker.h +++ b/src/main/resources/objc/NIKApiInvoker.h @@ -21,18 +21,20 @@ -(NSString*) escapeString:(NSString*) string; --(void) dictionary:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id)body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock; +-(void) dictionary: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id)body + headerParams: (NSDictionary*) headerParams + contentType: contentType + completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock; --(void) stringWithCompletionBlock:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id)body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSString*, NSError *))completionBlock; +-(void) stringWithCompletionBlock: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id)body + headerParams: (NSDictionary*) headerParams + contentType: contentType + completionBlock: (void (^)(NSString*, NSError *))completionBlock; @end diff --git a/src/main/resources/objc/NIKApiInvoker.m b/src/main/resources/objc/NIKApiInvoker.m index 1873ef724d3..819930ef66f 100644 --- a/src/main/resources/objc/NIKApiInvoker.m +++ b/src/main/resources/objc/NIKApiInvoker.m @@ -1,4 +1,5 @@ #import "NIKApiInvoker.h" +#import "NIKFile.h" @implementation NIKApiInvoker @@ -58,12 +59,13 @@ static NSInteger __LoadingObjectsCount = 0; kCFStringEncodingUTF8)); } --(void) dictionary:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id) body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSDictionary*, NSError *))completionBlock +-(void) dictionary: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id) body + headerParams: (NSDictionary*) headerParams + contentType: (NSString*) contentType + completionBlock: (void (^)(NSDictionary*, NSError *))completionBlock { NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSString * separator = nil; @@ -111,6 +113,21 @@ static NSInteger __LoadingObjectsCount = 0; data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; } + else if ([body isKindOfClass:[NIKFile class]]){ + NIKFile * file = (NIKFile*) body; + + NSString *boundary = @"Fo0+BAr"; + contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; + + // add the body + NSMutableData *postBody = [NSMutableData data]; + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData: file.data]; + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + } else if ([body isKindOfClass:[NSArray class]]){ data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; @@ -122,7 +139,7 @@ static NSInteger __LoadingObjectsCount = 0; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:data]; - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; } // Handle caching on GET requests @@ -174,12 +191,13 @@ static NSInteger __LoadingObjectsCount = 0; }]; } --(void) stringWithCompletionBlock:(NSString*) path - method:(NSString*) method - queryParams:(NSDictionary*) queryParams - body:(id) body - headerParams:(NSDictionary*) headerParams - completionBlock:(void (^)(NSString*, NSError *))completionBlock +-(void) stringWithCompletionBlock: (NSString*) path + method: (NSString*) method + queryParams: (NSDictionary*) queryParams + body: (id) body + headerParams: (NSDictionary*) headerParams + contentType: (NSString*) contentType + completionBlock: (void (^)(NSString*, NSError *))completionBlock { NSMutableString * requestUrl = [NSMutableString stringWithFormat:@"%@", path]; NSString * separator = nil; @@ -227,6 +245,21 @@ static NSInteger __LoadingObjectsCount = 0; data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; } + else if ([body isKindOfClass:[NIKFile class]]){ + NIKFile * file = (NIKFile*) body; + + NSString *boundary = @"Fo0+BAr"; + contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; + + // add the body + NSMutableData *postBody = [NSMutableData data]; + [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[@"Content-Disposition: form-data; name= \"some_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image_file\"; filename=\"%@\"\r\n", file] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", file.mimeType] dataUsingEncoding:NSUTF8StringEncoding]]; + [postBody appendData: file.data]; + [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; + } else if ([body isKindOfClass:[NSArray class]]){ data = [NSJSONSerialization dataWithJSONObject:body options:kNilOptions error:&error]; @@ -238,7 +271,7 @@ static NSInteger __LoadingObjectsCount = 0; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:data]; - [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; } diff --git a/src/main/resources/objc/NIKDate.h b/src/main/resources/objc/NIKDate.h index b72c7dc5479..3af47f7e4fc 100644 --- a/src/main/resources/objc/NIKDate.h +++ b/src/main/resources/objc/NIKDate.h @@ -9,5 +9,4 @@ - (id) initWithValues: (NSString*)input; -(NSString*) toString; -@end - +@end \ No newline at end of file diff --git a/src/main/resources/objc/api-body.mustache b/src/main/resources/objc/api-body.mustache index a5820adfc5d..249cd5947f1 100644 --- a/src/main/resources/objc/api-body.mustache +++ b/src/main/resources/objc/api-body.mustache @@ -1,5 +1,6 @@ {{#operations}} #import "{{classname}}.h" +#import "NIKFile.h" {{#imports}}#import "{{import}}.h" {{/imports}} {{newline}} @@ -48,6 +49,9 @@ static NSString * basePath = @"{{basePath}}"; {{#pathParams}}[requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"{{baseName}}", @"}"]] withString: [_api escapeString:{{paramName}}]]; {{/pathParams}} + NSString* contentType = @"application/json"; + + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; {{#queryParams}}if({{paramName}} != nil) queryParams[@"{{baseName}}"] = {{paramName}}; @@ -77,6 +81,10 @@ static NSString * basePath = @"{{basePath}}"; else if([body isKindOfClass:[NSString class]]) { bodyDictionary = body; } + else if([body isKindOfClass: [NIKFile class]]) { + contentType = @"form-data"; + bodyDictionary = body; + } else{ NSLog(@"don't know what to do with %@", body); } @@ -97,6 +105,7 @@ static NSString * basePath = @"{{basePath}}"; queryParams: queryParams body: bodyDictionary headerParams: headerParams + contentType: contentType completionBlock: ^(NSDictionary *data, NSError *error) { if (error) { {{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}} @@ -138,6 +147,7 @@ static NSString * basePath = @"{{basePath}}"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(nil, error); @@ -153,6 +163,7 @@ static NSString * basePath = @"{{basePath}}"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSString *data, NSError *error) { if (error) { completionBlock(error); @@ -169,6 +180,7 @@ static NSString * basePath = @"{{basePath}}"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { {{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}} @@ -202,6 +214,8 @@ static NSString * basePath = @"{{basePath}}"; {{#pathParams}}[requestUrl replaceCharactersInRange: [requestUrl rangeOfString:[NSString stringWithFormat:@"%@%@%@", @"{", @"{{baseName}}", @"}"]] withString: [_api escapeString:{{paramName}}]]; {{/pathParams}} + NSString* contentType = @"application/json"; + NSMutableDictionary* queryParams = [[NSMutableDictionary alloc] init]; {{#queryParams}}if({{paramName}} != nil) queryParams[@"{{baseName}}"] = {{paramName}}; @@ -250,6 +264,7 @@ static NSString * basePath = @"{{basePath}}"; queryParams:queryParams body:bodyDictionary headerParams:headerParams + contentType:contentType completionBlock:^(NSDictionary *data, NSError *error) { if (error) { {{#returnBaseType}}completionBlock(nil, error);{{/returnBaseType}}