You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by lg...@apache.org on 2014/04/28 15:39:14 UTC

svn commit: r1590634 - in /chemistry/objectivecmis/branches/browser-binding: ObjectiveCMIS/Bindings/ ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/ ObjectiveCMIS/Bindings/Browser/ ObjectiveCMIS/Common/ ObjectiveCMIS/Utils/ ObjectiveCMISTests/

Author: lgross
Date: Mon Apr 28 13:39:13 2014
New Revision: 1590634

URL: http://svn.apache.org/r1590634
Log:
CMIS-792: Browser Binding: current state of write support

Added:
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.m
Modified:
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomEntryWriter.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserNavigationService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserVersioningService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISDefaultNetworkProvider.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpRequest.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomEntryWriter.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomEntryWriter.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomEntryWriter.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomEntryWriter.m Mon Apr 28 13:39:13 2014
@@ -200,7 +200,7 @@
             }
             default:
             {
-                CMISLogDebug(@"Property type did not match: %d", propertyData.type);
+                CMISLogDebug(@"Property type did not match: %d", (int)propertyData.type);
                 break;
             }
         }

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.h?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.h Mon Apr 28 13:39:13 2014
@@ -100,6 +100,7 @@ extern NSString * const kCMISBrowserJSON
 extern NSString * const kCMISBrowserJSONMaxValue;
 extern NSString * const kCMISBrowserJSONPrecision;
 extern NSString * const kCMISBrowserJSONResolution;
+extern NSString * const kCMISBrowserJSONFailedToDeleteId;
 extern NSString * const kCMISBrowserJSONAcePrincipal;
 extern NSString * const kCMISBrowserJSONAcePrincipalId;
 extern NSString * const kCMISBrowserJSONAcePermissions;
@@ -161,6 +162,8 @@ extern NSString * const kCMISBrowserJSON
 
 // Browser binding control
 extern NSString * const kCMISBrowserJSONControlCmisAction;
+extern NSString * const kCMISBrowserJSONControlPropertyId;
+extern NSString * const kCMISBrowserJSONControlPropertyValue;
 
 // Browser binding actions
 extern NSString * const kCMISBrowserJSONActionCreateType;

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserConstants.m Mon Apr 28 13:39:13 2014
@@ -113,6 +113,7 @@ NSString * const kCMISBrowserJSONMinValu
 NSString * const kCMISBrowserJSONMaxValue = @"maxValue";
 NSString * const kCMISBrowserJSONPrecision = @"precision";
 NSString * const kCMISBrowserJSONResolution = @"resolution";
+NSString * const kCMISBrowserJSONFailedToDeleteId = @"ids";
 NSString * const kCMISBrowserJSONAcePrincipal = @"principal";
 NSString * const kCMISBrowserJSONAcePrincipalId = @"principalId";
 NSString * const kCMISBrowserJSONAcePermissions = @"permissions";
@@ -177,6 +178,8 @@ NSString * const kCMISBrowserJSONParamet
 
 // Browser binding control
 NSString * const kCMISBrowserJSONControlCmisAction = @"cmisaction";
+NSString * const kCMISBrowserJSONControlPropertyId = @"propertyId";
+NSString * const kCMISBrowserJSONControlPropertyValue = @"propertyValue";
 
 
 // Browser binding actions

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserNavigationService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserNavigationService.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserNavigationService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserNavigationService.m Mon Apr 28 13:39:13 2014
@@ -81,9 +81,35 @@
               includeRelativePathSegment:(BOOL)includeRelativePathSegment
                          completionBlock:(void (^)(NSArray *parents, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    NSString *objectUrl = [self getObjectUrlObjectId:objectId selector:kCMISBrowserJSONSelectorParents];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterFilter value:filter urlString:objectUrl];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterIncludeAllowableActions boolValue:includeAllowableActions urlString:objectUrl];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterIncludeRelationships value:[CMISEnums stringForIncludeRelationShip:relationships] urlString:objectUrl];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterRenditionFilter value:renditionFilter urlString:objectUrl];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterRelativePathSegment boolValue:includeRelativePathSegment urlString:objectUrl];
+    objectUrl = [CMISURLUtil urlStringByAppendingParameter:kCMISBrowserJSONParameterSuccinct value:kCMISParameterValueTrue urlString:objectUrl];
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    [self.bindingSession.networkProvider invokeGET:[NSURL URLWithString:objectUrl]
+                                           session:self.bindingSession
+                                       cmisRequest:cmisRequest
+                                   completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                       if (httpResponse.statusCode == 200 && httpResponse.data) {
+                                           CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                           [CMISBrowserUtil objectParents:httpResponse.data typeCache:typeCache completionBlock:^(NSArray *objectParents, NSError *error) {
+                                               if (error) {
+                                                   completionBlock(nil, error);
+                                               } else {
+                                                   completionBlock(objectParents, nil);
+                                               }
+                                           }];
+                                       } else {
+                                           completionBlock(nil, error);
+                                       }
+                                   }];
+    
+    return cmisRequest;
 }
 
 @end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m Mon Apr 28 13:39:13 2014
@@ -28,6 +28,7 @@
 #import "CMISErrors.h"
 #import "CMISLog.h"
 #import "CMISFormDataWriter.h"
+#import "CMISStringInOutParameter.h"
 
 @implementation CMISBrowserObjectService
 
@@ -211,9 +212,47 @@
                           changeToken:(CMISStringInOutParameter *)changeTokenParam
                       completionBlock:(void (^)(NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // we need an object id
+    if ((objectIdParam.inParameter == nil) || (objectIdParam.inParameter.length == 0)) {
+        completionBlock([CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument
+                                        detailedDescription:@"Object id must be set!"]);
+    }
+    
+    // build URL
+    NSString *objectUrl = [self getObjectUrlObjectId:objectIdParam.inParameter];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionDeleteContent];
+    [formData addParameter:kCMISParameterChangeToken value:changeTokenParam.inParameter];
+    [formData addSuccinctFlag:true];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:objectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                            [CMISBrowserUtil objectDataFromJSONData:httpResponse.data typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                                if (error) {
+                                                    completionBlock(error);
+                                                } else {
+                                                    objectIdParam.outParameter = objectData.identifier;
+                                                    changeTokenParam.outParameter = objectData.properties.propertiesDictionary[kCMISPropertyChangeToken];
+                                                    
+                                                    completionBlock(nil);
+                                                }
+                                            }];
+                                        } else {
+                                            completionBlock(error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 - (CMISRequest*)changeContentOfObject:(CMISStringInOutParameter *)objectIdParam
@@ -224,9 +263,30 @@
                       completionBlock:(void (^)(NSError *error))completionBlock
                         progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:filePath];
+    if (inputStream == nil) {
+        CMISLogError(@"Could not find file %@", filePath);
+        if (completionBlock) {
+            completionBlock([CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument detailedDescription:nil]);
+        }
+        return nil;
+    }
+    
+    NSError *fileError = nil;
+    unsigned long long fileSize = [CMISFileUtil fileSizeForFileAtPath:filePath error:&fileError];
+    if (fileError) {
+        CMISLogError(@"Could not determine size of file %@: %@", filePath, [fileError description]);
+    }
+    
+    return [self changeContentOfObject:objectIdParam
+                toContentOfInputStream:inputStream
+                         bytesExpected:fileSize
+                              filename:[filePath lastPathComponent]
+                              mimeType:mimeType
+                     overwriteExisting:overwrite
+                           changeToken:changeTokenParam
+                       completionBlock:completionBlock
+                         progressBlock:progressBlock];
 }
 
 - (CMISRequest*)changeContentOfObject:(CMISStringInOutParameter *)objectId
@@ -322,9 +382,41 @@
                                 properties:(CMISProperties *)properties
                            completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // build URL
+    NSString *folderObjectUrl = [self getObjectUrlObjectId:folderObjectId];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionCreateFolder];
+    [formData addPropertiesParameters:properties];
+    // TODO [formData addPoliciesParameters:policies];
+    // TODO [formData addAddAcesParameters:addAces];
+    // TODO [formData addRemoveAcesParameters:removeAces];
+    [formData addSuccinctFlag:true];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:folderObjectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                            [CMISBrowserUtil objectDataFromJSONData:httpResponse.data typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                                if (error) {
+                                                    completionBlock(nil, error);
+                                                } else {
+                                                    completionBlock(objectData.identifier, nil);
+                                                }
+                                            }];
+                                        } else {
+                                            completionBlock(nil, error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 - (CMISRequest*)moveObject:(NSString *)objectId
@@ -332,9 +424,45 @@
                   toFolder:(NSString *)targetFolderId
            completionBlock:(void (^)(CMISObjectData *objectData, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // we need an object id
+    if ((objectId == nil) || (objectId.length == 0)) {
+        completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument
+                                        detailedDescription:@"Object id must be set!"]);
+    }
+    
+    // build URL
+    NSString *objectUrl = [self getObjectUrlObjectId:objectId];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionMove];
+    [formData addParameter:kCMISParameterTargetFolderId value:targetFolderId];
+    [formData addParameter:kCMISParameterSourceFolderId value:sourceFolderId];
+    [formData addSuccinctFlag:true];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:objectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                            [CMISBrowserUtil objectDataFromJSONData:httpResponse.data typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                                if (error) {
+                                                    completionBlock(nil, error);
+                                                } else {
+                                                    completionBlock(objectData, nil);
+                                                }
+                                            }];
+                                        } else {
+                                            completionBlock(nil, error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 - (CMISRequest*)deleteTree:(NSString *)folderObjectId
@@ -343,9 +471,41 @@
          continueOnFailure:(BOOL)continueOnFailure
            completionBlock:(void (^)(NSArray *failedObjects, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // build URL
+    NSString *folderObjectUrl = [self getObjectUrlObjectId:folderObjectId];
+    
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionDeleteTree];
+    [formData addParameter:kCMISParameterAllVersions boolValue:allVersions];
+    [formData addParameter:kCMISParameterUnfileObjects value:[CMISEnums stringForUnfileObject:unfileObjects]];
+    [formData addParameter:kCMISParameterContinueOnFailure boolValue:continueOnFailure];
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:folderObjectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            NSError *error = nil;
+                                            if(httpResponse.data.length > 0) {
+                                                NSArray *failedToDeleteIds = [CMISBrowserUtil failedToDeleteObjectsFromJSONData:httpResponse.data error:&error];
+                                                if (error) {
+                                                    completionBlock(nil, error);
+                                                } else {
+                                                    completionBlock(failedToDeleteIds, nil);
+                                                }
+                                            } else {
+                                                completionBlock([NSArray array], nil);
+                                            }
+                                        } else {
+                                            completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeConnection]);
+                                        }
+                                    }];
+    
+    return cmisRequest;
 }
 
 - (CMISRequest*)updatePropertiesForObject:(CMISStringInOutParameter *)objectIdParam
@@ -353,9 +513,48 @@
                               changeToken:(CMISStringInOutParameter *)changeTokenParam
                           completionBlock:(void (^)(NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // we need an object id
+    if ((objectIdParam.inParameter == nil) || (objectIdParam.inParameter.length == 0)) {
+        completionBlock([CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument
+                                        detailedDescription:@"Object id must be set!"]);
+    }
+    
+    // build URL
+    NSString *objectUrl = [self getObjectUrlObjectId:objectIdParam.inParameter];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionUpdateProperties];
+    [formData addPropertiesParameters:properties];
+    [formData addParameter:kCMISParameterChangeToken value:changeTokenParam.inParameter];
+    [formData addSuccinctFlag:true];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:objectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                            [CMISBrowserUtil objectDataFromJSONData:httpResponse.data typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                                if (error) {
+                                                    completionBlock(error);
+                                                } else {
+                                                    objectIdParam.outParameter = objectData.identifier;
+                                                    changeTokenParam.outParameter = objectData.properties.propertiesDictionary[kCMISPropertyChangeToken];
+                                                    
+                                                    completionBlock(nil);
+                                                }
+                                            }];
+                                        } else {
+                                            completionBlock(error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 - (CMISRequest*)retrieveRenditions:(NSString *)objectId

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.h?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.h Mon Apr 28 13:39:13 2014
@@ -51,4 +51,14 @@
  */
 + (NSArray *)renditionsFromJSONData:(NSData *)jsonData error:(NSError **)outError;
 
+/**
+ Returns an array of NSString objects that failed to be deleted, parsed from the given JSON data.
+ */
++ (NSArray *)failedToDeleteObjectsFromJSONData:(NSData *)jsonData error:(NSError **)outError;
+
+/**
+ Returns all object parents as an array of CMISObjectData objects, parsed from the given JSON data.
+ */
++ (void)objectParents:(NSData *)jsonData typeCache:(CMISTypeCache *)typeCache completionBlock:(void(^)(NSArray *objectParents, NSError *error))completionBlock;
+
 @end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m Mon Apr 28 13:39:13 2014
@@ -89,6 +89,9 @@
             
             [repositories setObject:repoInfo forKey:repoInfo.identifier];
         }
+    } else {
+        if (outError != NULL) *outError = [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime];
+        return nil;
     }
 
     return repositories;
@@ -271,11 +274,55 @@
     if (!serialisationError) {
         // parse the json into a CMISObjectData object
         renditions = [CMISBrowserUtil renditionsFromArray:jsonDictionary];
+    } else {
+        if (outError != NULL) *outError = [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime];
+        return nil;
     }
     
     return renditions;
 }
 
++ (NSArray *)failedToDeleteObjectsFromJSONData:(NSData *)jsonData error:(NSError **)outError
+{
+    // TODO: error handling i.e. if jsonData is nil, also handle outError being nil
+    
+    // parse the JSON response
+    NSError *serialisationError = nil;
+    id jsonDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&serialisationError];
+    
+    if (!serialisationError) {
+        NSMutableArray *ids = [[NSMutableArray alloc] init];
+        NSArray *jsonIds = [jsonDictionary cmis_objectForKeyNotNull:kCMISBrowserJSONFailedToDeleteId];
+        
+        if (jsonIds) {
+            for (NSObject *obj in jsonIds) {
+                [ids addObject:obj.description]; //obj can't be nil as it came out of an array
+            }
+        }
+        
+        return ids;
+    } else {
+        if (outError != NULL) *outError = [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime];
+        return nil;
+    }
+}
+
++ (void)objectParents:(NSData *)jsonData typeCache:(CMISTypeCache *)typeCache completionBlock:(void(^)(NSArray *objectParents, NSError *error))completionBlock
+{
+    // TODO: error handling i.e. if jsonData is nil, also handle outError being nil
+    
+    // parse the JSON response
+    NSError *serialisationError = nil;
+    id jsonDictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&serialisationError];
+    
+    if (!serialisationError) {
+        [self convertObjects:jsonDictionary typeCache:typeCache completionBlock:completionBlock];
+    } else {
+        completionBlock(nil, [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime]);
+        return;
+    }
+}
+
 #pragma mark -
 #pragma mark Private helper methods
 

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserVersioningService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserVersioningService.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserVersioningService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserVersioningService.m Mon Apr 28 13:39:13 2014
@@ -24,6 +24,10 @@
 #import "CMISBrowserUtil.h"
 #import "CMISURLUtil.h"
 #import "CMISConstants.h"
+#import "CMISErrors.h"
+#import "CMISFormDataWriter.h"
+#import "CMISFileUtil.h"
+#import "CMISLog.h"
 
 @implementation CMISBrowserVersioningService
 
@@ -114,9 +118,43 @@
 - (CMISRequest*)checkOut:(NSString *)objectId
          completionBlock:(void (^)(CMISObjectData *objectData, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // we need an object id
+    if ((objectId == nil) || (objectId.length == 0)) {
+        completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument
+                                        detailedDescription:@"Object id must be set!"]);
+    }
+    
+    // build URL
+    NSString *objectUrl = [self getObjectUrlObjectId:objectId];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionCheckOut];
+    [formData addSuccinctFlag:true];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:objectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            CMISTypeCache *typeCache = [[CMISTypeCache alloc] initWithRepositoryId:self.bindingSession.repositoryId bindingService:self];
+                                            [CMISBrowserUtil objectDataFromJSONData:httpResponse.data typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                                if (error) {
+                                                    completionBlock(nil, error);
+                                                } else {
+                                                    completionBlock(objectData, nil);
+                                                }
+                                            }];
+                                        } else {
+                                            completionBlock(nil, error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 /**
@@ -128,9 +166,35 @@
 - (CMISRequest*)cancelCheckOut:(NSString *)objectId
                completionBlock:(void (^)(BOOL checkOutCancelled, NSError *error))completionBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    // we need an object id
+    if ((objectId == nil) || (objectId.length == 0)) {
+        completionBlock(NO, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument
+                                             detailedDescription:@"Object id must be set!"]);
+    }
+    
+    // build URL
+    NSString *objectUrl = [self getObjectUrlObjectId:objectId];
+    
+    // prepare form data
+    CMISFormDataWriter *formData = [[CMISFormDataWriter alloc] initWithAction:kCMISBrowserJSONActionCancelCheckOut];
+    
+    
+    CMISRequest *cmisRequest = [[CMISRequest alloc] init];
+    
+    // send
+    [self.bindingSession.networkProvider invokePOST:[NSURL URLWithString:objectUrl]
+                                            session:self.bindingSession
+                                               body:formData.body
+                                            headers:formData.headers
+                                        cmisRequest:cmisRequest
+                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
+                                        if ((httpResponse.statusCode == 200 || httpResponse.statusCode == 201) && httpResponse.data) {
+                                            completionBlock(YES, nil);
+                                        } else {
+                                            completionBlock(NO, error);
+                                        }
+                                    }];
+    return cmisRequest;
 }
 
 /**
@@ -154,9 +218,30 @@
         completionBlock:(void (^)(CMISObjectData *objectData, NSError *error))completionBlock
           progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    NSString * message = [NSString stringWithFormat:@"%s is not implemented yet", __PRETTY_FUNCTION__];
-    NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException reason:message userInfo:nil];
-    @throw exception;
+    NSInputStream *inputStream = [NSInputStream inputStreamWithFileAtPath:filePath];
+    if (inputStream == nil) {
+        CMISLogError(@"Could not find file %@", filePath);
+        if (completionBlock) {
+            completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument detailedDescription:nil]);
+        }
+        return nil;
+    }
+    
+    NSError *fileError = nil;
+    unsigned long long fileSize = [CMISFileUtil fileSizeForFileAtPath:filePath error:&fileError];
+    if (fileError) {
+        CMISLogError(@"Could not determine size of file %@: %@", filePath, [fileError description]);
+    }
+    
+    return [self checkIn:objectId
+          asMajorVersion:asMajorVersion
+             inputStream:inputStream
+           bytesExpected:fileSize
+                mimeType:mimeType
+              properties:properties
+          checkinComment:checkinComment
+         completionBlock:completionBlock
+           progressBlock:progressBlock];
 }
 
 /**

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.h?rev=1590634&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.h (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.h Mon Apr 28 13:39:13 2014
@@ -0,0 +1,39 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you 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.
+ */
+
+#import <Foundation/Foundation.h>
+#import "CMISProperties.h"
+
+@interface CMISFormDataWriter : NSObject
+
+- (id)initWithAction:(NSString *)action;
+
+- (void)addParameter:(NSString *)name value:(id)value;
+
+- (void)addParameter:(NSString *)name boolValue:(BOOL)value;
+
+- (void)addPropertiesParameters:(CMISProperties *)properties;
+
+- (void)addSuccinctFlag:(BOOL)succinct;
+
+- (NSDictionary *)headers;
+
+- (NSData *)body;
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.m?rev=1590634&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.m (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISFormDataWriter.m Mon Apr 28 13:39:13 2014
@@ -0,0 +1,152 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you 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.
+ */
+
+#import "CMISFormDataWriter.h"
+#import "CMISConstants.h"
+#import "CMISBrowserConstants.h"
+#import "CMISEnums.h"
+#import "CMISLog.h"
+
+NSString * const kCMISFormDataContentTypeUrlEncoded = @"application/x-www-form-urlencoded;charset=utf-8";
+
+@interface CMISFormDataWriter ()
+
+@property (nonatomic, strong) NSMutableDictionary *parameters;
+@property (nonatomic, strong) NSString *boundary;
+
+@end
+
+@implementation CMISFormDataWriter
+
+
+
+- (id)initWithAction:(NSString *)action
+{
+    self = [super init];
+    if (self) {
+        self.parameters = [[NSMutableDictionary alloc] init];
+        
+        [self addParameter:kCMISBrowserJSONControlCmisAction value:action];
+        //self.contentStream = contentStream;
+        self.boundary = [NSString stringWithFormat:@"aPacHeCheMIStryoBjECtivEcmiS%x%a%x", (unsigned int) action.hash, CFAbsoluteTimeGetCurrent(), (unsigned int) self.hash];
+        
+    }
+    return self;
+}
+
+- (void)addParameter:(NSString *)name value:(id)value
+{
+    if(!name || !value) {
+        return;
+    }
+    
+    [self.parameters setValue:[value description] forKey:name];
+}
+
+- (void)addParameter:(NSString *)name boolValue:(BOOL)value
+{
+    [self addParameter:name value:(value? kCMISParameterValueTrue : kCMISParameterValueFalse)];
+}
+
+- (void)addSuccinctFlag:(BOOL)succinct
+{
+    if (succinct) {
+        [self addParameter:kCMISBrowserJSONParameterSuccinct value:kCMISParameterValueTrue];
+    }
+}
+
+- (void)addPropertiesParameters:(CMISProperties *)properties
+{
+    if (!properties) {
+        return;
+    }
+    
+    int idx = 0;
+    
+    for (CMISPropertyData *prop in properties.propertyList) {
+        
+        NSString *idxStr = [NSString stringWithFormat:@"[%d]", idx];
+        
+        
+        [self addParameter:[NSString stringWithFormat:@"%@%@", kCMISBrowserJSONControlPropertyId, idxStr] value:prop.identifier];
+        
+        if (prop.values && prop.values.count > 0) {
+            if (prop.values.count == 1) {
+                NSString *value = [self convertPropertyValue:prop.firstValue forPropertyType:prop.type];
+                [self addParameter:[NSString stringWithFormat:@"%@%@", kCMISBrowserJSONControlPropertyValue, idxStr] value:value];
+            } else {
+                int vidx = 0;
+                for (id obj in prop.values) {
+                    NSString *vidxStr = [NSString stringWithFormat:@"[%d]", vidx];
+                    NSString *value = [self convertPropertyValue:obj forPropertyType:prop.type];
+                    [self addParameter:[NSString stringWithFormat:@"%@%@%@", kCMISBrowserJSONControlPropertyValue, idxStr, vidxStr] value:value];
+                    vidx++;
+                }
+            }
+        }
+        
+        idx++;
+    }
+}
+
+// TODO should this method be part of CMISPropertyData class (as class method?)
+- (NSString *)convertPropertyValue:(id)value forPropertyType:(CMISPropertyType)type
+{
+    if (!value) {
+        return nil;
+    }
+    
+    if (type == CMISPropertyTypeBoolean) {
+        return [value boolValue] ? kCMISParameterValueTrue : kCMISParameterValueFalse;
+    } else if (type == CMISPropertyTypeDateTime) {
+        if ([value isKindOfClass:NSDate.class]) {
+            return [NSNumber numberWithDouble:[(NSDate *)value timeIntervalSinceReferenceDate]].description;
+        } else {
+            CMISLogWarning(@"value is not a date!");
+        }
+    }
+    return value;
+}
+
+- (NSDictionary *)headers
+{
+    return @{@"Content-Type" : kCMISFormDataContentTypeUrlEncoded};
+}
+
+- (NSData *)body
+{
+    BOOL first = YES;
+    NSData *amp = [@"&" dataUsingEncoding:NSUTF8StringEncoding];
+    NSMutableData *data = [[NSMutableData alloc] init];
+    
+    for (NSString *parameterKey in self.parameters) {
+        if (first) {
+            first = NO;
+        } else {
+            [data appendData:amp];
+        }
+        NSString *parameterValue = [self.parameters[parameterKey] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+        NSString *parameter = [NSString stringWithFormat:@"%@=%@", parameterKey, parameterValue];
+        [data appendData:[parameter dataUsingEncoding:NSUTF8StringEncoding]];
+    }
+
+    return data;
+}
+
+@end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h Mon Apr 28 13:39:13 2014
@@ -215,7 +215,7 @@
 /**
  * Deletes the given folder and all of its subfolder and files
  *
- * Returns a list of objects which failed to be deleted.
+ * Returns a list of object ids which failed to be deleted.
  * completionBlock returns array of failed objects if any. NSError will be nil if successful
  */
 - (CMISRequest*)deleteTree:(NSString *)folderObjectId

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h Mon Apr 28 13:39:13 2014
@@ -116,6 +116,7 @@ extern NSString * const kCMISParameterMa
 extern NSString * const kCMISParameterCheckin;
 extern NSString * const kCMISParameterCheckinComment;
 extern NSString * const kCMISParameterSourceFolderId;
+extern NSString * const kCMISParameterTargetFolderId;
 extern NSString * const kCMISParameterReturnVersion;
 extern NSString * const kCMISParameterTypeId;
 extern NSString * const kCMISParameterStatement;

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m Mon Apr 28 13:39:13 2014
@@ -124,6 +124,7 @@ NSString * const kCMISParameterMajor = @
 NSString * const kCMISParameterCheckin = @"checkin";
 NSString * const kCMISParameterCheckinComment = @"checkinComment";
 NSString * const kCMISParameterSourceFolderId = @"sourceFolderId";
+NSString * const kCMISParameterTargetFolderId = @"targetFolderId";
 NSString * const kCMISParameterReturnVersion = @"returnVersion";
 NSString * const kCMISParameterTypeId = @"typeId";
 NSString * const kCMISParameterStatement = @"statement";

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.m Mon Apr 28 13:39:13 2014
@@ -41,7 +41,7 @@
             includeRelationShipString = @"both";
             break;
         default:
-            CMISLogError(@"Invalid enum type %d", includeRelationship);
+            CMISLogError(@"Invalid enum type %d", (int)includeRelationship);
             break;
     }
     return includeRelationShipString;
@@ -61,7 +61,7 @@
             unfileObjectString = @"delete";
             break;
         default:
-            CMISLogError(@"Inavlid enum type %d", unfileObject);
+            CMISLogError(@"Inavlid enum type %d", (int)unfileObject);
             break;
     }
     return unfileObjectString;

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISDefaultNetworkProvider.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISDefaultNetworkProvider.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISDefaultNetworkProvider.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISDefaultNetworkProvider.m Mon Apr 28 13:39:13 2014
@@ -302,7 +302,7 @@ completionBlock:(void (^)(CMISHttpRespon
             httpMethod = @"PUT";
             break;
         default:
-            CMISLogError(@"Invalid http request method: %d", httpRequestMethod);
+            CMISLogError(@"Invalid http request method: %d", (int)httpRequestMethod);
             return nil;
     }
     

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpRequest.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpRequest.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpRequest.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpRequest.m Mon Apr 28 13:39:13 2014
@@ -194,7 +194,7 @@ NSString * const kCMISExceptionVersionin
 - (BOOL)checkStatusCodeForResponse:(CMISHttpResponse *)response httpRequestMethod:(CMISHttpRequestMethod)httpRequestMethod error:(NSError **)error
 {
     if ([CMISLog sharedInstance].logLevel == CMISLogLevelTrace) {
-        CMISLogTrace(@"Response status code: %d", response.statusCode);
+        CMISLogTrace(@"Response status code: %ld", (long)response.statusCode);
         CMISLogTrace(@"Response body: %@", [[NSString alloc] initWithData:response.data encoding:NSUTF8StringEncoding]);
     }
     

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m?rev=1590634&r1=1590633&r2=1590634&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m Mon Apr 28 13:39:13 2014
@@ -743,6 +743,7 @@
                                                  continueOnFailure:YES
                                                    completionBlock:^(NSArray *failedObjects, NSError *error) {
                                                        XCTAssertNil(error, @"Error while move test folders and document: %@", [error description]);
+                                                       XCTAssertTrue(failedObjects.count == 0, @"some objects could not be deleted");
                                                        
                                                        self.testCompleted = YES;
                                                    }];