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/24 11:19:47 UTC

svn commit: r1589644 - in /chemistry/objectivecmis/branches/browser-binding: ObjectiveCMIS/Bindings/Browser/ ObjectiveCMIS/Common/ ObjectiveCMISTests/

Author: lgross
Date: Thu Apr 24 09:19:47 2014
New Revision: 1589644

URL: http://svn.apache.org/r1589644
Log:
CMIS-789: Browser Binding: improve error handling in CMISBrowserUtil

Modified:
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserRepositoryService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserRepositoryService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserRepositoryService.m?rev=1589644&r1=1589643&r2=1589644&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserRepositoryService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserRepositoryService.m Thu Apr 24 09:19:47 2014
@@ -69,18 +69,15 @@
                                            session:self.bindingSession
                                        cmisRequest:cmisRequest
                                    completionBlock:^(CMISHttpResponse *httpResponse, NSError *error) {
-                                       if (httpResponse) {
-                                           NSData *data = httpResponse.data;
-                                           if (data) {
-                                               NSError *parsingError = nil;
-                                               self.repositories = [CMISBrowserUtil repositoryInfoDictionaryFromJSONData:data
-                                                                                                          bindingSession:self.bindingSession
-                                                                                                                   error:&parsingError];
-                                               if (parsingError) {
-                                                   completionBlock(parsingError);
-                                               } else {
-                                                   completionBlock(nil);
-                                               }
+                                       if (httpResponse.statusCode == 200 && httpResponse.data) {
+                                           NSError *parsingError = nil;
+                                           self.repositories = [CMISBrowserUtil repositoryInfoDictionaryFromJSONData:httpResponse.data
+                                                                                                      bindingSession:self.bindingSession
+                                                                                                               error:&parsingError];
+                                           if (parsingError) {
+                                               completionBlock(parsingError);
+                                           } else {
+                                               completionBlock(nil);
                                            }
                                        } else {
                                            completionBlock(error);

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=1589644&r1=1589643&r2=1589644&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m Thu Apr 24 09:19:47 2014
@@ -56,8 +56,8 @@
             repoInfo.productName = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONProductName];
             repoInfo.productVersion = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONProductVersion];
             repoInfo.rootFolderId = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONRootFolderId];
-            repoInfo.repositoryUrl = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONRepositoryUrl];
-            repoInfo.rootFolderUrl = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONRootFolderUrl];
+            NSString *repositoryUrl = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONRepositoryUrl];
+            NSString *rootFolderUrl = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONRootFolderUrl];
             
             repoInfo.repositoryCapabilities = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONCapabilities]; //TODO should be own type instead of dictionary
             //TOOD aclCapabilities
@@ -77,8 +77,8 @@
             
             // store the repo and root folder URLs in the session (when the repoId matches)
             if ([repoInfo.identifier isEqualToString:bindingSession.repositoryId]) {
-                [bindingSession setObject:repoInfo.rootFolderUrl forKey:kCMISBrowserBindingSessionKeyRootFolderUrl];
-                [bindingSession setObject:repoInfo.repositoryUrl forKey:kCMISBrowserBindingSessionKeyRepositoryUrl];
+                [bindingSession setObject:rootFolderUrl forKey:kCMISBrowserBindingSessionKeyRootFolderUrl];
+                [bindingSession setObject:repositoryUrl forKey:kCMISBrowserBindingSessionKeyRepositoryUrl];
             }
             
             [repositories setObject:repoInfo forKey:repoInfo.identifier];
@@ -174,6 +174,9 @@
         
         // handle extensions
         typeDef.extensions = [CMISBrowserUtil convertExtensions:jsonDictionary cmisKeys:[CMISBrowserConstants typeKeys]];
+    } else {
+        if (outError != NULL) *outError = [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime];
+        return nil;
     }
     
     return typeDef;
@@ -322,22 +325,30 @@
         completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeInvalidArgument detailedDescription:[NSString stringWithFormat:@"expected a dictionary but was %@", objectDictionary.class]]);
     }
     [CMISBrowserUtil convertObject:objectDictionary typeCache:typeCache completionBlock:^(CMISObjectData *objectData, NSError *error) {
-        if (position == 0) {
-            [convertedObjects addObject:objectData];
-            completionBlock(convertedObjects, error);
+        if (error){
+            completionBlock(nil, error);
         } else {
-            // TODO check if there is a better way on how to avoid a large call stack
-            // We need to do this workaround or else we would end up with a very large call stack
-            [CMISBrowserUtil performBlock:^{
-                [self convertObjects:objectsArray
-                            position:(position -1)
-                    convertedObjects:convertedObjects
-                           typeCache:typeCache
-                     completionBlock:^(NSArray *objects, NSError *error) {
-                         [convertedObjects addObject:objectData];
-                         completionBlock(objects, error);
-                     }];
-            }];
+            if (position == 0) {
+                [convertedObjects addObject:objectData];
+                completionBlock(convertedObjects, nil);
+            } else {
+                // TODO check if there is a better way on how to avoid a large call stack
+                // We need to do this workaround or else we would end up with a very large call stack
+                [CMISBrowserUtil performBlock:^{
+                    [self convertObjects:objectsArray
+                                position:(position -1)
+                        convertedObjects:convertedObjects
+                               typeCache:typeCache
+                         completionBlock:^(NSArray *objects, NSError *error) {
+                             if (error){
+                                 completionBlock(nil, error);
+                             } else {
+                                 [convertedObjects addObject:objectData];
+                                 completionBlock(objects, nil);
+                             }
+                         }];
+                }];
+            }
         }
     }];
 
@@ -370,11 +381,15 @@
         void (^continueConvertSuccinctPropertiesSecondaryObjectTypeDefinitions)(NSArray*) = ^(NSArray *secTypeDefs) {
             
             [self convertProperties:propertiesJson typeCache:typeCache typeDefinition:typeDef secondaryTypeDefinitions:secTypeDefs completionBlock:^(CMISProperties *properties, NSError *error){
-                if (extJson){
-                    properties.extensions = [CMISBrowserUtil convertExtensions:extJson cmisKeys:[NSSet set]];
+                if(error){
+                    completionBlock(nil, error);
+                } else {
+                    if (extJson){
+                        properties.extensions = [CMISBrowserUtil convertExtensions:extJson cmisKeys:[NSSet set]];
+                    }
+                    
+                    completionBlock(properties, nil);
                 }
-                
-                completionBlock(properties, nil);
             }];
         };
         
@@ -382,7 +397,11 @@
         NSArray *secTypeIds = [propertiesJson cmis_objectForKeyNotNull:kCMISPropertySecondaryObjectTypeIds];
         if (secTypeIds != nil && secTypeIds.count > 0) {
             [CMISBrowserUtil retrieveTypeDefinitions:secTypeIds typeCache:typeCache completionBlock:^(NSArray *typeDefinitions, NSError *error) {
-                continueConvertSuccinctPropertiesSecondaryObjectTypeDefinitions(typeDefinitions);
+                if(error){
+                    completionBlock(nil, error);
+                } else {
+                    continueConvertSuccinctPropertiesSecondaryObjectTypeDefinitions(typeDefinitions);
+                }
             }];
         } else {
             continueConvertSuccinctPropertiesSecondaryObjectTypeDefinitions(nil);
@@ -393,7 +412,11 @@
     CMISTypeDefinition *typeDef = nil;
     if ([[propertiesJson cmis_objectForKeyNotNull:kCMISPropertyObjectTypeId] isKindOfClass:NSString.class]){
         [typeCache typeDefinition:[propertiesJson cmis_objectForKeyNotNull:kCMISPropertyObjectTypeId] completionBlock:^(CMISTypeDefinition *typeDef, NSError *error){
-            continueConvertSuccinctPropertiesAndGetSecondaryObjectTypeDefinitions(typeDef);
+            if(error){
+                completionBlock(nil, error);
+            } else {
+                continueConvertSuccinctPropertiesAndGetSecondaryObjectTypeDefinitions(typeDef);
+            }
         }];
     } else {
         continueConvertSuccinctPropertiesAndGetSecondaryObjectTypeDefinitions(typeDef);
@@ -482,8 +505,12 @@
         
         if (!propDef) { //try to find property definition on folder
             [typeCache typeDefinition:kCMISPropertyObjectTypeIdValueFolder completionBlock:^(CMISTypeDefinition *typeDefinition, NSError *error) {
-                CMISPropertyDefinition *propertyDefinition = typeDefinition.propertyDefinitions[propName];
-                continueConvertSuccinctPropertiesTypeDefinitionFolder(propertyDefinition);
+                if (error){
+                    completionBlock(nil, error);
+                } else {
+                    CMISPropertyDefinition *propertyDefinition = typeDefinition.propertyDefinitions[propName];
+                    continueConvertSuccinctPropertiesTypeDefinitionFolder(propertyDefinition);
+                }
             }];
         } else {
             continueConvertSuccinctPropertiesTypeDefinitionFolder(propDef);
@@ -493,8 +520,12 @@
     
     if (!propDef) { //try to find property definition on document
         [typeCache typeDefinition:kCMISPropertyObjectTypeIdValueDocument completionBlock:^(CMISTypeDefinition *typeDefinition, NSError *error) {
-            CMISPropertyDefinition *propertyDefinition = typeDefinition.propertyDefinitions[propName];
-            continueConvertSuccinctPropertiesTypeDefinitionDocument(propertyDefinition);
+            if (error){
+                completionBlock(nil, error);
+            } else {
+                CMISPropertyDefinition *propertyDefinition = typeDefinition.propertyDefinitions[propName];
+                continueConvertSuccinctPropertiesTypeDefinitionDocument(propertyDefinition);
+            }
         }];
     } else {
         continueConvertSuccinctPropertiesTypeDefinitionDocument(propDef);
@@ -525,27 +556,33 @@
            typeDefinition:typeDef
  secondaryTypeDefinitions:secTypeDefs
           completionBlock:^(CMISPropertyData *propertyData, NSError *error) {
-              
-              if (position == 0) {
-                  [properties addProperty:propertyData];
-                  completionBlock(properties, error);
+              if (error){
+                  completionBlock(nil, error);
               } else {
-                  // TODO check if there is a better way on how to avoid a large call stack
-                  // We need to do this workaround or else we would end up with a very large call stack
-                  [CMISBrowserUtil performBlock:^{
-                      [self convertProperties:propNames
-                                     position:(position -1)
-                                   properties:properties
-                               propertiesJson:propertiesJson
-                                    typeCache:typeCache
-                               typeDefinition:typeDef
-                     secondaryTypeDefinitions:secTypeDefs
-                              completionBlock:^(CMISProperties *properties, NSError *error) {
-                                  [properties addProperty:propertyData];
-                                  completionBlock(properties, error);
-                                  
-                              }];
-                  }];
+                  if (position == 0) {
+                      [properties addProperty:propertyData];
+                      completionBlock(properties, nil);
+                  } else {
+                      // TODO check if there is a better way on how to avoid a large call stack
+                      // We need to do this workaround or else we would end up with a very large call stack
+                      [CMISBrowserUtil performBlock:^{
+                          [self convertProperties:propNames
+                                         position:(position -1)
+                                       properties:properties
+                                   propertiesJson:propertiesJson
+                                        typeCache:typeCache
+                                   typeDefinition:typeDef
+                         secondaryTypeDefinitions:secTypeDefs
+                                  completionBlock:^(CMISProperties *properties, NSError *error) {
+                                      if (error){
+                                          completionBlock(nil, error);
+                                      } else {
+                                          [properties addProperty:propertyData];
+                                          completionBlock(properties, nil);
+                                      }
+                                  }];
+                      }];
+                  }
               }
           }];
 }
@@ -585,8 +622,12 @@
                                      completionBlock(typeDefinitions, error);
                                  } else {
                                      [self retrieveTypeDefinitions:objectTypeIds position:(position - 1) typeCache:typeCache completionBlock:^(NSMutableArray *typeDefinitions, NSError *error) {
-                                         [typeDefinitions addObject:typeDefinition];
-                                         completionBlock(typeDefinitions, error);
+                                         if(error) {
+                                             completionBlock(nil, error);
+                                         } else {
+                                             [typeDefinitions addObject:typeDefinition];
+                                             completionBlock(typeDefinitions, nil);
+                                         }
                                      }];
                                  }
                              }

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h?rev=1589644&r1=1589643&r2=1589644&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h Thu Apr 24 09:19:47 2014
@@ -26,8 +26,6 @@
 @property (nonatomic, strong) NSString *name;
 @property (nonatomic, strong) NSString *desc;
 @property (nonatomic, strong) NSString *rootFolderId;
-@property (nonatomic, strong) NSString *rootFolderUrl;
-@property (nonatomic, strong) NSString *repositoryUrl;
 
 @property (nonatomic, strong) NSString *cmisVersionSupported;
 @property (nonatomic, strong) NSString *productName;

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m?rev=1589644&r1=1589643&r2=1589644&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m Thu Apr 24 09:19:47 2014
@@ -392,7 +392,11 @@
                     }
                 }
                 
-                XCTAssertNotNil(randomDoc, @"Can only continue test if test folder contains at least one document");
+                if(!randomDoc) { // stopping test here or else it would run until the test timeout is reached
+                    XCTAssertNotNil(randomDoc, @"Can only continue test if test folder contains at least one document");
+                    self.testCompleted = YES;
+                    return;
+                }
                 CMISLogDebug(@"Fetching content stream for document %@", randomDoc.name);
                 
                 // Writing content of CMIS document to local file