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 17:26:05 UTC

svn commit: r1589768 [1/2] - in /chemistry/objectivecmis/branches/browser-binding: ObjectiveCMIS.xcodeproj/ ObjectiveCMIS/Bindings/ ObjectiveCMIS/Bindings/AtomPub/ ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/ ObjectiveCMIS/Bindings/Browser/ ObjectiveC...

Author: lgross
Date: Thu Apr 24 15:26:04 2014
New Revision: 1589768

URL: http://svn.apache.org/r1589768
Log:
CMIS-790: Browser Binding: Mergerd with trunk (repository capabilites, move object)

Added:
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.m
Modified:
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS.xcodeproj/project.pbxproj
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISRepositoryInfoParser.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserDiscoveryService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserUtil.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFolder.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISSession.m
    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.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpUploadRequest.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.h
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.m
    chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS.xcodeproj/project.pbxproj
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS.xcodeproj/project.pbxproj?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS.xcodeproj/project.pbxproj (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS.xcodeproj/project.pbxproj Thu Apr 24 15:26:04 2014
@@ -215,6 +215,12 @@
 		BD5C9715162C11E3002DDC6E /* CMISHttpResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = BD5C9712162C11E3002DDC6E /* CMISHttpResponse.m */; };
 		BD70F11B17F4649B00AE2B0C /* CMISDocumentTypeDefinition.h in Headers */ = {isa = PBXBuildFile; fileRef = BD70F11917F4649B00AE2B0C /* CMISDocumentTypeDefinition.h */; };
 		BD70F11C17F4649B00AE2B0C /* CMISDocumentTypeDefinition.m in Sources */ = {isa = PBXBuildFile; fileRef = BD70F11A17F4649B00AE2B0C /* CMISDocumentTypeDefinition.m */; };
+		C945D35819092183008B01D1 /* CMISRepositoryCapabilities.h in Headers */ = {isa = PBXBuildFile; fileRef = C945D35619092183008B01D1 /* CMISRepositoryCapabilities.h */; };
+		C945D35919092183008B01D1 /* CMISRepositoryCapabilities.m in Sources */ = {isa = PBXBuildFile; fileRef = C945D35719092183008B01D1 /* CMISRepositoryCapabilities.m */; };
+		C945D35E1909219C008B01D1 /* CMISCreatablePropertyTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = C945D35A1909219C008B01D1 /* CMISCreatablePropertyTypes.h */; };
+		C945D35F1909219C008B01D1 /* CMISCreatablePropertyTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = C945D35B1909219C008B01D1 /* CMISCreatablePropertyTypes.m */; };
+		C945D3601909219C008B01D1 /* CMISNewTypeSettableAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = C945D35C1909219C008B01D1 /* CMISNewTypeSettableAttributes.h */; };
+		C945D3611909219C008B01D1 /* CMISNewTypeSettableAttributes.m in Sources */ = {isa = PBXBuildFile; fileRef = C945D35D1909219C008B01D1 /* CMISNewTypeSettableAttributes.m */; };
 		C94AB15F19003A5A00ACC3D4 /* CMISBrowserVersioningService.m in Sources */ = {isa = PBXBuildFile; fileRef = 58B9C8D518DE3379001D5C1B /* CMISBrowserVersioningService.m */; };
 		C94AB17119065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C94AB16F19065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.h */; };
 		C94AB17219065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C94AB17019065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.m */; };
@@ -455,6 +461,12 @@
 		BD5C9712162C11E3002DDC6E /* CMISHttpResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = CMISHttpResponse.m; path = Utils/CMISHttpResponse.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
 		BD70F11917F4649B00AE2B0C /* CMISDocumentTypeDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISDocumentTypeDefinition.h; path = Bindings/CMISDocumentTypeDefinition.h; sourceTree = "<group>"; };
 		BD70F11A17F4649B00AE2B0C /* CMISDocumentTypeDefinition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISDocumentTypeDefinition.m; path = Bindings/CMISDocumentTypeDefinition.m; sourceTree = "<group>"; };
+		C945D35619092183008B01D1 /* CMISRepositoryCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISRepositoryCapabilities.h; path = Common/CMISRepositoryCapabilities.h; sourceTree = "<group>"; };
+		C945D35719092183008B01D1 /* CMISRepositoryCapabilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISRepositoryCapabilities.m; path = Common/CMISRepositoryCapabilities.m; sourceTree = "<group>"; };
+		C945D35A1909219C008B01D1 /* CMISCreatablePropertyTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISCreatablePropertyTypes.h; path = Common/CMISCreatablePropertyTypes.h; sourceTree = "<group>"; };
+		C945D35B1909219C008B01D1 /* CMISCreatablePropertyTypes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISCreatablePropertyTypes.m; path = Common/CMISCreatablePropertyTypes.m; sourceTree = "<group>"; };
+		C945D35C1909219C008B01D1 /* CMISNewTypeSettableAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISNewTypeSettableAttributes.h; path = Common/CMISNewTypeSettableAttributes.h; sourceTree = "<group>"; };
+		C945D35D1909219C008B01D1 /* CMISNewTypeSettableAttributes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CMISNewTypeSettableAttributes.m; path = Common/CMISNewTypeSettableAttributes.m; sourceTree = "<group>"; };
 		C94AB16F19065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "CMISNSDictionary+CMISUtil.h"; path = "Bindings/Browser/CMISNSDictionary+CMISUtil.h"; sourceTree = "<group>"; };
 		C94AB17019065C7500ACC3D4 /* CMISNSDictionary+CMISUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "CMISNSDictionary+CMISUtil.m"; path = "Bindings/Browser/CMISNSDictionary+CMISUtil.m"; sourceTree = "<group>"; };
 		C94AB17419065D7500ACC3D4 /* CMISTypeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CMISTypeCache.h; path = Bindings/Browser/CMISTypeCache.h; sourceTree = "<group>"; };
@@ -698,6 +710,10 @@
 				752067F8156AC0FE00231A5D /* CMISExtensionElement.h */,
 				752067F9156AC0FE00231A5D /* CMISExtensionElement.m */,
 				4E3E14B116AFFB190057CE22 /* CMISNetworkProvider.h */,
+				C945D35A1909219C008B01D1 /* CMISCreatablePropertyTypes.h */,
+				C945D35B1909219C008B01D1 /* CMISCreatablePropertyTypes.m */,
+				C945D35C1909219C008B01D1 /* CMISNewTypeSettableAttributes.h */,
+				C945D35D1909219C008B01D1 /* CMISNewTypeSettableAttributes.m */,
 				828072F61515404F00EF635C /* CMISObjectData.h */,
 				828072F71515404F00EF635C /* CMISObjectData.m */,
 				258998DF18D73D900091BA96 /* CMISPrincipal.h */,
@@ -706,6 +722,8 @@
 				828072F91515404F00EF635C /* CMISProperties.m */,
 				828072FA1515404F00EF635C /* CMISPropertyData.h */,
 				828072FB1515404F00EF635C /* CMISPropertyData.m */,
+				C945D35619092183008B01D1 /* CMISRepositoryCapabilities.h */,
+				C945D35719092183008B01D1 /* CMISRepositoryCapabilities.m */,
 				828072FC1515404F00EF635C /* CMISRepositoryInfo.h */,
 				828072FD1515404F00EF635C /* CMISRepositoryInfo.m */,
 				828072FE1515404F00EF635C /* CMISSessionParameters.h */,
@@ -920,6 +938,7 @@
 				82C1C63F15358733009B7B5C /* CMISAtomEntryWriter.h in Headers */,
 				258998E518D73E1A0091BA96 /* CMISPrincipalParser.h in Headers */,
 				75C5E2F71559172B0065550A /* CMISAllowableActionsParser.h in Headers */,
+				C945D35E1909219C008B01D1 /* CMISCreatablePropertyTypes.h in Headers */,
 				75C8D0861559B7EA00B63D2B /* CMISAllowableActions.h in Headers */,
 				FE21296415946B94005234FE /* CMISAuthenticationProvider.h in Headers */,
 				8276E123155E34ED00344A29 /* CMISObjectId.h in Headers */,
@@ -948,10 +967,12 @@
 				58B9C8DC18DE3379001D5C1B /* CMISBrowserObjectService.h in Headers */,
 				82C1C63F15358733009B7BA7 /* CMISTypeDefinitionAtomEntryParser.h in Headers */,
 				82C1C63F15358733009B7BAB /* CMISPropertyDefinitionParser.h in Headers */,
+				C945D3601909219C008B01D1 /* CMISNewTypeSettableAttributes.h in Headers */,
 				752067F5156AC06300231A5D /* CMISExtensionData.h in Headers */,
 				752067FA156AC0FE00231A5D /* CMISExtensionElement.h in Headers */,
 				75206802156AE29900231A5D /* CMISAtomPubExtensionElementParser.h in Headers */,
 				FE417D5715761A0C009056AA /* CMISOperationContext.h in Headers */,
+				C945D35819092183008B01D1 /* CMISRepositoryCapabilities.h in Headers */,
 				FE417D5915761A0C009056AA /* CMISPagedResult.h in Headers */,
 				FE417D6315761A34009056AA /* CMISLinkCache.h in Headers */,
 				FE417D6515761A34009056AA /* CMISPropertyDefinition.h in Headers */,
@@ -1107,11 +1128,13 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				C945D35F1909219C008B01D1 /* CMISCreatablePropertyTypes.m in Sources */,
 				828072E61515403800EF635C /* CMISCollection.m in Sources */,
 				828072E81515403800EF635C /* CMISDocument.m in Sources */,
 				828072EA1515403800EF635C /* CMISFileableObject.m in Sources */,
 				828072EC1515403800EF635C /* CMISFolder.m in Sources */,
 				828072EE1515403800EF635C /* CMISObject.m in Sources */,
+				C945D35919092183008B01D1 /* CMISRepositoryCapabilities.m in Sources */,
 				828072F21515403800EF635C /* CMISSession.m in Sources */,
 				828073011515404F00EF635C /* CMISConstants.m in Sources */,
 				258998D618D73D160091BA96 /* CMISAclParser.m in Sources */,
@@ -1175,6 +1198,7 @@
 				82C1C63F15358733009B7BA9 /* CMISPropertyDefinitionParser.m in Sources */,
 				752067F6156AC06300231A5D /* CMISExtensionData.m in Sources */,
 				752067FB156AC0FE00231A5D /* CMISExtensionElement.m in Sources */,
+				C945D3611909219C008B01D1 /* CMISNewTypeSettableAttributes.m in Sources */,
 				75206803156AE29900231A5D /* CMISAtomPubExtensionElementParser.m in Sources */,
 				FE417D5815761A0C009056AA /* CMISOperationContext.m in Sources */,
 				FE417D5A15761A0C009056AA /* CMISPagedResult.m in Sources */,

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISRepositoryInfoParser.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISRepositoryInfoParser.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISRepositoryInfoParser.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISRepositoryInfoParser.m Thu Apr 24 15:26:04 2014
@@ -21,6 +21,7 @@
 #import "CMISAtomPubConstants.h"
 #import "CMISAtomCollection.h"
 #import "CMISLog.h"
+#import "CMISRepositoryCapabilities.h"
 
 @interface CMISRepositoryInfoParser ()
 
@@ -30,8 +31,7 @@
 @property (nonatomic, strong) NSMutableString *currentString;
 @property (nonatomic, strong) CMISAtomCollection *currentCollection;
 
-// TODO Temporary object, replace with CMISRepositoryCapabilities object or similar when available
-@property (nonatomic, strong) id currentCapabilities;
+@property (nonatomic, strong) CMISRepositoryCapabilities *currentCapabilities;
 
 @property (nonatomic, assign, getter = isParsingExtensionElement) BOOL parsingExtensionElement;
 @end
@@ -71,7 +71,7 @@
     
     if ([namespaceURI isEqualToString:kCMISNamespaceCmis]) {
         if ([elementName isEqualToString:kCMISCoreCapabilities]) {
-            self.currentCapabilities = [NSMutableDictionary dictionaryWithCapacity:14];
+            self.currentCapabilities = [[CMISRepositoryCapabilities alloc] init];
         }
     } else if ( ![namespaceURI isEqualToString:kCMISNamespaceCmis] && ![namespaceURI isEqualToString:kCMISNamespaceApp] 
               && ![namespaceURI isEqualToString:kCMISNamespaceAtom] && ![namespaceURI isEqualToString:kCMISNamespaceCmisRestAtom])  {
@@ -111,7 +111,7 @@
         } else if ([elementName isEqualToString:kCMISCoreCmisVersionSupported]) {
             self.currentRepositoryInfo.cmisVersionSupported = self.currentString;
         } else if ([elementName hasPrefix:_kCMISCoreCapabilityPrefix] && self.currentCapabilities) {
-            [self.currentCapabilities setValue:self.currentString forKeyPath:elementName];
+            [self.currentCapabilities setCapability:elementName value:self.currentString];
         } else if ([elementName isEqualToString:kCMISCoreCapabilities]) {
             self.currentRepositoryInfo.repositoryCapabilities = self.currentCapabilities;
             self.currentCapabilities = nil;
@@ -168,4 +168,5 @@
     [self.currentExtensions addObject:extensionElement];
 }
 
+
 @end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m Thu Apr 24 15:26:04 2014
@@ -524,6 +524,63 @@
     return request;
 }
 
+- (CMISRequest*)moveObject:(NSString *)objectId
+                fromFolder:(NSString *)sourceFolderId
+                  toFolder:(NSString *)targetFolderId
+           completionBlock:(void (^)(CMISObjectData *objectData, NSError *error))completionBlock
+{
+    // Validate params
+    if (!objectId) {
+        CMISLogError(@"Must provide an object id when moving it");
+        completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeObjectNotFound detailedDescription:nil]);
+        return nil;
+    }
+    
+    if (!sourceFolderId) {
+        CMISLogError(@"Must provide a source folder id when moving an object");
+        completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeObjectNotFound detailedDescription:nil]);
+        return nil;
+    }
+    
+    if (!targetFolderId) {
+        CMISLogError(@"Must provide a target folder id when moving an object");
+        completionBlock(nil, [CMISErrors createCMISErrorWithCode:kCMISErrorCodeObjectNotFound detailedDescription:nil]);
+        return nil;
+    }
+    
+    // Build property for objectId
+    CMISPropertyData *objectIdPropertyData = [CMISPropertyData createPropertyForId:kCMISPropertyObjectId idValue:objectId];
+    CMISProperties *properties = [[CMISProperties alloc] init];
+    [properties addProperty:objectIdPropertyData];
+    
+    
+    CMISRequest *request = [[CMISRequest alloc] init];
+    // Get Down link
+    [self loadLinkForObjectId:targetFolderId
+                     relation:kCMISLinkRelationDown
+                         type:kCMISMediaTypeChildren
+                  cmisRequest:request
+              completionBlock:^(NSString *downLink, NSError *error) {
+                  if (error) {
+                      CMISLogError(@"Could not retrieve down link: %@", error.description);
+                      if (completionBlock) {
+                          completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeObjectNotFound]);
+                      }
+                  } else {
+                      
+                      downLink = [CMISURLUtil urlStringByAppendingParameter:kCMISParameterSourceFolderId value:sourceFolderId urlString:downLink];
+                      
+                      [self sendAtomEntryXmlToLink:downLink
+                                 httpRequestMethod:HTTP_POST
+                                        properties:properties
+                                       cmisRequest:request
+                                   completionBlock:completionBlock];
+                  }
+              }];
+    return request;
+}
+
+
 - (CMISRequest*)deleteTree:(NSString *)folderObjectId
                 allVersion:(BOOL)allVersions
              unfileObjects:(CMISUnfileObject)unfileObjects

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserDiscoveryService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserDiscoveryService.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserDiscoveryService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserDiscoveryService.m Thu Apr 24 15:26:04 2014
@@ -18,6 +18,7 @@
  */
 
 #import "CMISBrowserDiscoveryService.h"
+#import "CMISErrors.h"
 
 @implementation CMISBrowserDiscoveryService
 

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=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/Browser/CMISBrowserObjectService.m Thu Apr 24 15:26:04 2014
@@ -306,6 +306,16 @@
     @throw exception;
 }
 
+- (CMISRequest*)moveObject:(NSString *)objectId
+                fromFolder:(NSString *)sourceFolderId
+                  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;
+}
+
 - (CMISRequest*)deleteTree:(NSString *)folderObjectId
                 allVersion:(BOOL)allVersions
              unfileObjects:(CMISUnfileObject)unfileObjects

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=1589768&r1=1589767&r2=1589768&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 15:26:04 2014
@@ -30,6 +30,8 @@
 #import "CMISSecondaryTypeDefinition.h"
 #import "CMISErrors.h"
 #import "CMISNSDictionary+CMISUtil.h"
+#import "CMISRepositoryCapabilities.h"
+#import "CMISObjectConverter.h"
 
 @implementation CMISBrowserUtil
 
@@ -59,7 +61,7 @@
             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
+            repoInfo.repositoryCapabilities = [CMISBrowserUtil convertRepositoryCapabilities:[repo cmis_objectForKeyNotNull:kCMISBrowserJSONCapabilities]];
             //TOOD aclCapabilities
             repoInfo.latestChangeLogToken = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONLatestChangeLogToken];
             
@@ -73,7 +75,7 @@
             repoInfo.principalIdAnyone = [repo cmis_objectForKeyNotNull:kCMISBrowserJSONPrincipalIdAnyone];
             
             //handle extensions
-            repoInfo.extensions = [CMISBrowserUtil convertExtensions:repo cmisKeys:[CMISBrowserConstants repositoryInfoKeys]];
+            repoInfo.extensions = [CMISObjectConverter convertExtensions:repo cmisKeys:[CMISBrowserConstants repositoryInfoKeys]];
             
             // store the repo and root folder URLs in the session (when the repoId matches)
             if ([repoInfo.identifier isEqualToString:bindingSession.repositoryId]) {
@@ -173,7 +175,7 @@
         }
         
         // handle extensions
-        typeDef.extensions = [CMISBrowserUtil convertExtensions:jsonDictionary cmisKeys:[CMISBrowserConstants typeKeys]];
+        typeDef.extensions = [CMISObjectConverter convertExtensions:jsonDictionary cmisKeys:[CMISBrowserConstants typeKeys]];
     } else {
         if (outError != NULL) *outError = [CMISErrors cmisError:serialisationError cmisErrorCode:kCMISErrorCodeRuntime];
         return nil;
@@ -303,7 +305,7 @@
                     objectData.renditions = [self renditionsFromArray:renditionsJson];
                     
                     // handle extensions
-                    objectData.extensions = [CMISBrowserUtil convertExtensions:dictionary cmisKeys:[CMISBrowserConstants objectKeys]];
+                    objectData.extensions = [CMISObjectConverter convertExtensions:dictionary cmisKeys:[CMISBrowserConstants objectKeys]];
                     
                     completionBlock(objectData, nil);
                 }
@@ -385,7 +387,7 @@
                     completionBlock(nil, error);
                 } else {
                     if (extJson){
-                        properties.extensions = [CMISBrowserUtil convertExtensions:extJson cmisKeys:[NSSet set]];
+                        properties.extensions = [CMISObjectConverter convertExtensions:extJson cmisKeys:[NSSet set]];
                     }
                     
                     completionBlock(properties, nil);
@@ -609,6 +611,26 @@
     }
 }
 
++ (CMISRepositoryCapabilities *)convertRepositoryCapabilities:(NSDictionary *)jsonDictionary
+{
+    if (!jsonDictionary){
+        return nil;
+    }
+    
+    CMISRepositoryCapabilities *result = [[CMISRepositoryCapabilities alloc] init];
+    for (NSString *capabilityKey in jsonDictionary) {
+        id value = [jsonDictionary cmis_objectForKeyNotNull:capabilityKey];
+        
+        if([[CMISConstants repositoryCapabilityKeys] containsObject:capabilityKey]) {
+            [result setCapability:capabilityKey value:value];
+        }
+    }
+    
+    result.extensions = [CMISObjectConverter convertExtensions:jsonDictionary cmisKeys:[CMISConstants repositoryCapabilityKeys]];
+    
+    return result;
+}
+
 + (void)retrieveTypeDefinitions:(NSArray *)objectTypeIds position:(NSInteger)position typeCache:(CMISTypeCache *)typeCache completionBlock:(void (^)(NSMutableArray *typeDefinitions, NSError *error))completionBlock
 {
     [typeCache typeDefinition:[objectTypeIds objectAtIndex:position]
@@ -666,7 +688,7 @@
         renditionData.width = [NSNumber numberWithLongLong:[[renditionJson cmis_objectForKeyNotNull:kCMISBrowserJSONRenditionWidth] longLongValue]];
         
         // handle extensions
-        renditionData.extensions = [CMISBrowserUtil convertExtensions:renditionJson cmisKeys:[CMISBrowserConstants renditionKeys]];
+        renditionData.extensions = [CMISObjectConverter convertExtensions:renditionJson cmisKeys:[CMISBrowserConstants renditionKeys]];
         
         [renditions addObject:renditionData];
     }
@@ -737,83 +759,11 @@
     // TODO default value
     
     // handle extensions
-    propDef.extensions = [CMISBrowserUtil convertExtensions:propertyDictionary cmisKeys:[CMISBrowserConstants propertyTypeKeys]];
+    propDef.extensions = [CMISObjectConverter convertExtensions:propertyDictionary cmisKeys:[CMISBrowserConstants propertyTypeKeys]];
     
     return propDef;
 }
 
-+ (NSArray *)convertExtensions:(NSDictionary *)source cmisKeys:(NSSet *)cmisKeys
-{
-    if (!source) {
-        return nil;
-    }
-    
-    NSMutableArray *extensions = nil; // array of CMISExtensionElement's
-    
-    for (NSString *key in source.keyEnumerator) {
-        if ([cmisKeys containsObject:key]) {
-            continue;
-        }
-        
-        if (!extensions) {
-            extensions = [[NSMutableArray alloc] init];
-        }
-        
-        id value = [source cmis_objectForKeyNotNull:key];
-        if ([value isKindOfClass:NSDictionary.class]) {
-            [extensions addObject:[[CMISExtensionElement alloc] initNodeWithName:key namespaceUri:nil attributes:nil children:[CMISBrowserUtil convertExtension:value]]];
-        } else if ([value isKindOfClass:NSArray.class]) {
-            [extensions addObjectsFromArray:[CMISBrowserUtil convertExtension: key fromArray:value]];
-        } else {
-            [extensions addObject:[[CMISExtensionElement alloc] initLeafWithName:key namespaceUri:nil attributes:nil value:value]];
-        }
-    }
-    return extensions;
-}
-
-+ (NSArray *)convertExtension:(NSDictionary *)dictionary
-{
-    if (!dictionary) {
-        return nil;
-    }
-    
-    NSMutableArray *extensions = [[NSMutableArray alloc] init]; // array of CMISExtensionElement's
-    
-    for (NSString *key in dictionary.keyEnumerator) {
-        id value = [dictionary cmis_objectForKeyNotNull:key];
-        if ([value isKindOfClass:NSDictionary.class]) {
-            [extensions addObject:[[CMISExtensionElement alloc] initNodeWithName:key namespaceUri:nil attributes:nil children:[CMISBrowserUtil convertExtension:value]]];
-        } else if ([value isKindOfClass:NSArray.class]) {
-            [extensions addObjectsFromArray:[CMISBrowserUtil convertExtension: key fromArray:value]];
-        } else {
-            [extensions addObject:[[CMISExtensionElement alloc] initLeafWithName:key namespaceUri:nil attributes:nil value:value]];
-        }
-    }
-    
-    return extensions;
-}
-
-+ (NSArray *)convertExtension:(NSString *)key fromArray:(NSArray *)array
-{
-    if (!array) {
-        return nil;
-    }
-    
-    NSMutableArray *extensions = [[NSMutableArray alloc] init]; // array of CMISExtensionElement's
-    
-    for (id element in array) {
-        if ([element isKindOfClass:NSDictionary.class]) {
-            [extensions addObject:[[CMISExtensionElement alloc] initNodeWithName:key namespaceUri:nil attributes:nil children:[CMISBrowserUtil convertExtension:element]]];
-        } else if ([element isKindOfClass:NSArray.class]) {
-            [extensions addObjectsFromArray:[CMISBrowserUtil convertExtension: key fromArray:element]];
-        } else {
-            [extensions addObject:[[CMISExtensionElement alloc] initLeafWithName:key namespaceUri:nil attributes:nil value:element]];
-        }
-    }
-    
-    return extensions;
-}
-
 // TODO could be moved to category
 + (void)performBlock:(void (^)(void))block
 {

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=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Bindings/CMISObjectService.h Thu Apr 24 15:26:04 2014
@@ -163,7 +163,7 @@
  * uploads the file from the given path to the given folder.
  *
  * completionBlock - returns NSError nil if successful
-*/
+ */
 - (CMISRequest*)createDocumentFromFilePath:(NSString *)filePath
                                   mimeType:(NSString *)mimeType
                                 properties:(CMISProperties *)properties
@@ -185,6 +185,16 @@
                                 progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock;
 
 /**
+ * Moves the given object from the source folder to the target folder.
+ *
+ * completionBlock - returns NSError nil if successful
+ */
+- (CMISRequest*)moveObject:(NSString *)objectId
+                fromFolder:(NSString *)sourceFolderId
+                  toFolder:(NSString *)targetFolderId
+           completionBlock:(void (^)(CMISObjectData *objectData, NSError *error))completionBlock;
+
+/**
  * Deletes the given object.
  *
  * The allVersions parameter is currently ignored.

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.h?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.h Thu Apr 24 15:26:04 2014
@@ -38,5 +38,15 @@
 - (CMISRequest*)retrieveParentsWithOperationContext:(CMISOperationContext *)operationContext 
                             completionBlock:(void (^)(NSArray *parentFolders, NSError *error))completionBlock;
 
+/**
+ * Returns all the parents of this object as an array of CMISFolder objects with paging options
+ * CompletionBlock will return array or nil if unsuccessful
+ * CompletionBlock will return nil for root folder and non-fileable objects.
+ */
+- (CMISRequest*)moveFromFolderWithId:(NSString *)sourceFolderId
+                      toFolderWithId:(NSString *)targetFolderId
+                     completionBlock:(void (^)(CMISObject *object, NSError *error))completionBlock;
+
+
 
 @end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFileableObject.m Thu Apr 24 15:26:04 2014
@@ -47,4 +47,18 @@
                                              }];
 }
 
+- (CMISRequest *)moveFromFolderWithId:(NSString *)sourceFolderId
+                       toFolderWithId:(NSString *)targetFolderId
+                      completionBlock:(void (^)(CMISObject *, NSError *))completionBlock
+{
+    return [self.binding.objectService moveObject:self.identifier
+                                       fromFolder:sourceFolderId
+                                         toFolder:targetFolderId
+                                  completionBlock:^(CMISObjectData *objectData, NSError *error) {
+                                      
+                                      [self.session.objectConverter convertObject:objectData completionBlock:completionBlock];
+                                  }];
+}
+
+
 @end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFolder.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFolder.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFolder.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISFolder.m Thu Apr 24 15:26:04 2014
@@ -75,11 +75,11 @@
 
 - (CMISRequest*)retrieveChildrenWithOperationContext:(CMISOperationContext *)operationContext completionBlock:(void (^)(CMISPagedResult *result, NSError *error))completionBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     CMISFetchNextPageBlock fetchNextPageBlock = ^(int skipCount, int maxItems, CMISFetchNextPageBlockCompletionBlock pageBlockCompletionBlock)
     {
         // Fetch results through navigationService
-        request = [self.binding.navigationService retrieveChildren:self.identifier
+        CMISRequest * childrenRequest = [self.binding.navigationService retrieveChildren:self.identifier
                                                  orderBy:operationContext.orderBy
                                                   filter:operationContext.filterString
                                            relationships:operationContext.relationships
@@ -103,6 +103,9 @@
                                                  }];
                                              }
                                          }];
+        
+        // set the underlying request object on the object returned to the original caller
+        request.httpRequest = childrenRequest.httpRequest;
     };
 
     [CMISPagedResult pagedResultUsingFetchBlock:fetchNextPageBlock
@@ -120,18 +123,21 @@
 
 - (CMISRequest*)createFolder:(NSDictionary *)properties completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.session.objectConverter convertProperties:properties
                                     forObjectTypeId:[properties objectForKey:kCMISPropertyObjectTypeId]
                                     completionBlock:^(CMISProperties *properties, NSError *error) {
                      if (error) {
                          completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
                      } else {
-                         request = [self.binding.objectService createFolderInParentFolder:self.identifier
+                         CMISRequest *createRequest = [self.binding.objectService createFolderInParentFolder:self.identifier
                                                                      properties:properties
                                                                 completionBlock:^(NSString *objectId, NSError *error) {
                                                                     completionBlock(objectId, error);
                                                                 }];
+                         
+                         // set the underlying request object on the object returned to the original caller
+                         request.httpRequest = createRequest.httpRequest;
                      }
                  }];
     return request;
@@ -143,7 +149,7 @@
                            completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
                              progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.session.objectConverter convertProperties:properties
                                     forObjectTypeId:[properties objectForKey:kCMISPropertyObjectTypeId]
                                     completionBlock:^(CMISProperties *convertedProperties, NSError *error) {
@@ -153,12 +159,15 @@
                 completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
             }
         } else {
-            request = [self.binding.objectService createDocumentFromFilePath:filePath
+            CMISRequest *createRequest = [self.binding.objectService createDocumentFromFilePath:filePath
                                                           mimeType:mimeType
                                                         properties:convertedProperties
                                                           inFolder:self.identifier
                                                    completionBlock:completionBlock
                                                      progressBlock:progressBlock];
+            
+            // set the underlying request object on the object returned to the original caller
+            request.httpRequest = createRequest.httpRequest;
         }
     }];
     return request;
@@ -171,7 +180,7 @@
                               completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
                                 progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.session.objectConverter convertProperties:properties forObjectTypeId:kCMISPropertyObjectTypeIdValueDocument completionBlock:^(CMISProperties *convertedProperties, NSError *error){
         if (nil == convertedProperties){
             CMISLogError(@"Could not convert properties: %@", error.description);
@@ -179,13 +188,16 @@
                 completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
             }
         } else {
-            request = [self.binding.objectService createDocumentFromInputStream:inputStream
+            CMISRequest *createRequest = [self.binding.objectService createDocumentFromInputStream:inputStream
                                                              mimeType:mimeType
                                                            properties:convertedProperties
                                                              inFolder:self.identifier
                                                         bytesExpected:bytesExpected
                                                       completionBlock:completionBlock
                                                         progressBlock:progressBlock];
+            
+            // set the underlying request object on the object returned to the original caller
+            request.httpRequest = createRequest.httpRequest;
         }
     }];
     return request;

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISSession.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISSession.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISSession.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Client/CMISSession.m Thu Apr 24 15:26:04 2014
@@ -283,10 +283,10 @@
                                      operationContext:(CMISOperationContext *)operationContext
                                       completionBlock:(void (^)(CMISPagedResult *pagedResult, NSError *error))completionBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     CMISFetchNextPageBlock fetchNextPageBlock = ^(int skipCount, int maxItems, CMISFetchNextPageBlockCompletionBlock pageBlockCompletionBlock){
         // Fetch results through discovery service
-       request = [self.binding.discoveryService query:statement
+       CMISRequest *queryRequest = [self.binding.discoveryService query:statement
                                                   searchAllVersions:searchAllVersion
                                                   relationships:operationContext.relationships
                                                   renditionFilter:operationContext.renditionFilterString
@@ -310,6 +310,9 @@
                                                           pageBlockCompletionBlock(result, nil);
                                                       }
                                                   }];
+        
+        // set the underlying request object on the object returned to the original caller
+        request.httpRequest = queryRequest.httpRequest;
     };
 
     [CMISPagedResult pagedResultUsingFetchBlock:fetchNextPageBlock
@@ -351,13 +354,13 @@
         [statement appendFormat:@" ORDER BY %@", operationContext.orderBy];
     }
     
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     
     // Fetch block for paged results
     CMISFetchNextPageBlock fetchNextPageBlock = ^(int skipCount, int maxItems, CMISFetchNextPageBlockCompletionBlock pageBlockCompletionBlock)
     {
         // Fetch results through discovery service
-        request = [self.binding.discoveryService query:statement
+        CMISRequest *queryRequest = [self.binding.discoveryService query:statement
                                      searchAllVersions:searchAllVersion
                                          relationships:operationContext.relationships
                                        renditionFilter:operationContext.renditionFilterString
@@ -380,6 +383,9 @@
                                                           }];
                                  }
                              }];
+        
+        // set the underlying request object on the object returned to the original caller
+        request.httpRequest = queryRequest.httpRequest;
     };
     
     [CMISPagedResult pagedResultUsingFetchBlock:fetchNextPageBlock
@@ -421,18 +427,20 @@
             inFolder:(NSString *)folderObjectId
      completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.objectConverter convertProperties:properties
                             forObjectTypeId:[properties objectForKey:kCMISPropertyObjectTypeId]
                             completionBlock:^(CMISProperties *convertedProperties, NSError *error) {
                                if (error) {
                                    completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
                                } else {
-                                  request = [self.binding.objectService createFolderInParentFolder:folderObjectId
+                                  CMISRequest *createRequest = [self.binding.objectService createFolderInParentFolder:folderObjectId
                                                                                properties:convertedProperties
                                                                           completionBlock:^(NSString *objectId, NSError *error) {
                                                                               completionBlock(objectId, error);
                                                                           }];
+                                   // set the underlying request object on the object returned to the original caller
+                                   request.httpRequest = createRequest.httpRequest;
                                }
                            }];
     return request;
@@ -503,7 +511,7 @@
                    completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
                      progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.objectConverter convertProperties:properties
                             forObjectTypeId:[properties objectForKey:kCMISPropertyObjectTypeId]
                             completionBlock:^(CMISProperties *convertedProperties, NSError *error) {
@@ -513,12 +521,14 @@
                 completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
             }
         } else {
-            request = [self.binding.objectService createDocumentFromFilePath:filePath
+            CMISRequest *createRequest = [self.binding.objectService createDocumentFromFilePath:filePath
                                                                     mimeType:mimeType
                                                                   properties:convertedProperties
                                                                     inFolder:folderObjectId
                                                              completionBlock:completionBlock
                                                                progressBlock:progressBlock];
+            // set the underlying request object on the object returned to the original caller
+            request.httpRequest = createRequest.httpRequest;
         }
     }];
     return request;
@@ -532,7 +542,7 @@
                       completionBlock:(void (^)(NSString *objectId, NSError *error))completionBlock
                         progressBlock:(void (^)(unsigned long long bytesUploaded, unsigned long long bytesTotal))progressBlock
 {
-    __block CMISRequest *request = [[CMISRequest alloc] init];
+    CMISRequest *request = [[CMISRequest alloc] init];
     [self.objectConverter convertProperties:properties
                             forObjectTypeId:[properties objectForKey:kCMISPropertyObjectTypeId]
                             completionBlock:^(CMISProperties *convertedProperties, NSError *error) {
@@ -542,13 +552,15 @@
                 completionBlock(nil, [CMISErrors cmisError:error cmisErrorCode:kCMISErrorCodeRuntime]);
             }
         } else {
-            request = [self.binding.objectService createDocumentFromInputStream:inputStream
+            CMISRequest *createRequest = [self.binding.objectService createDocumentFromInputStream:inputStream
                                                              mimeType:mimeType
                                                            properties:convertedProperties
                                                              inFolder:folderObjectId
                                                         bytesExpected:bytesExpected
                                                       completionBlock:completionBlock
                                                         progressBlock:progressBlock];
+            // set the underlying request object on the object returned to the original caller
+            request.httpRequest = createRequest.httpRequest;
         }
     }];
     return request;

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=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.h Thu Apr 24 15:26:04 2014
@@ -19,6 +19,8 @@
 
 #import <Foundation/Foundation.h>
 
+@interface CMISConstants : NSObject
+
 // Properties
 extern NSString * const kCMISPropertyObjectId;
 extern NSString * const kCMISPropertyName;
@@ -42,6 +44,7 @@ extern NSString * const kCMISPropertyBas
 extern NSString * const kCMISPropertyCheckinComment;
 extern NSString * const kCMISPropertySecondaryObjectTypeIds;
 extern NSString * const kCMISPropertyDescription;
+
 // Property values
 extern NSString * const kCMISPropertyObjectTypeIdValueDocument;
 extern NSString * const kCMISPropertyObjectTypeIdValueFolder;
@@ -51,9 +54,45 @@ extern NSString * const kCMISPropertyObj
 extern NSString * const kCMISPropertyObjectTypeIdValueSecondary;
 
 // Session cache keys
-
 extern NSString * const kCMISSessionKeyWorkspaces;
 
+// Repository capability keys
+extern NSString * const kCMISRepositoryCapabilityACL;
+extern NSString * const kCMISRepositoryAllVersionsSearchable;
+extern NSString * const kCMISRepositoryCapabilityChanges;
+extern NSString * const kCMISRepositoryCapabilityContentStreamUpdatability;
+extern NSString * const kCMISRepositoryCapabilityJoin;
+extern NSString * const kCMISRepositoryCapabilityQuery;
+extern NSString * const kCMISRepositoryCapabilityRenditions;
+extern NSString * const kCMISRepositoryCapabilityPWCSearchable;
+extern NSString * const kCMISRepositoryCapabilityPWCUpdatable;
+extern NSString * const kCMISRepositoryCapabilityGetDescendants;
+extern NSString * const kCMISRepositoryCapabilityGetFolderTree;
+extern NSString * const kCMISRepositoryCapabilityOrderBy;
+extern NSString * const kCMISRepositoryCapabilityMultifiling;
+extern NSString * const kCMISRepositoryCapabilityUnfiling;
+extern NSString * const kCMISRepositoryCapabilityVersionSpecificFiling;
+extern NSString * const kCMISRepositoryCapabilityPropertyTypes;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributes;
+
+// Repository capability new type settable attributes keys
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesId;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesLocalName;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesLocalNamespace;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesDisplayName;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesQueryName;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesDescription;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesCreateable;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesFileable;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesQueryable;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesFullTextIndexed;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesIncludedInSuperTypeQuery;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesControllablePolicy;
+extern NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesControllableAcl;
+
+// Repository capability createable property types key
+extern NSString * const kCMISRepositoryCapabilityCreateablePropertyTypesCanCreate;
+
 // URL parameters
 extern NSString * const kCMISParameterChangeToken;
 extern NSString * const kCMISParameterOverwriteFlag;
@@ -76,6 +115,7 @@ extern NSString * const kCMISParameterRe
 extern NSString * const kCMISParameterMajor;
 extern NSString * const kCMISParameterCheckin;
 extern NSString * const kCMISParameterCheckinComment;
+extern NSString * const kCMISParameterSourceFolderId;
 extern NSString * const kCMISParameterReturnVersion;
 extern NSString * const kCMISParameterTypeId;
 
@@ -89,4 +129,10 @@ extern NSString * const kCMISParameterVa
 //ContentStreamAllowed enum values
 extern NSString * const kCMISContentStreamAllowedValueRequired;
 extern NSString * const kCMISContentStreamAllowedValueAllowed;
-extern NSString * const kCMISContentStreamAllowedValueNotAllowed;
\ No newline at end of file
+extern NSString * const kCMISContentStreamAllowedValueNotAllowed;
+
++ (NSSet *)repositoryCapabilityKeys;
++ (NSSet *)repositoryCapabilityNewTypeSettableAttributesKeys;
++ (NSSet *)repositoryCapabilityCreateablePropertyTypesKeys;
+
+@end
\ No newline at end of file

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=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISConstants.m Thu Apr 24 15:26:04 2014
@@ -19,6 +19,12 @@
 
 #import "CMISConstants.h"
 
+static NSSet *_repositoryCapabilityKeys;
+static NSSet *_repositoryCapabilityNewTypeSettableAttributesKeys;
+static NSSet *_repositoryCapabilityCreateablePropertyTypesKeys;
+
+@implementation CMISConstants
+
 // Properties
 
 NSString * const kCMISPropertyObjectId = @"cmis:objectId";
@@ -58,6 +64,43 @@ NSString * const kCMISPropertyObjectType
 
 NSString * const kCMISSessionKeyWorkspaces = @"cmis_session_key_workspaces";
 
+// Repository capability keys
+NSString * const kCMISRepositoryCapabilityACL = @"capabilityACL";
+NSString * const kCMISRepositoryAllVersionsSearchable = @"capabilityAllVersionsSearchable";
+NSString * const kCMISRepositoryCapabilityChanges = @"capabilityChanges";
+NSString * const kCMISRepositoryCapabilityContentStreamUpdatability = @"capabilityContentStreamUpdatability";
+NSString * const kCMISRepositoryCapabilityJoin = @"capabilityJoin";
+NSString * const kCMISRepositoryCapabilityQuery = @"capabilityQuery";
+NSString * const kCMISRepositoryCapabilityRenditions = @"capabilityRenditions";
+NSString * const kCMISRepositoryCapabilityPWCSearchable = @"capabilityPWCSearchable";
+NSString * const kCMISRepositoryCapabilityPWCUpdatable = @"capabilityPWCUpdatable";
+NSString * const kCMISRepositoryCapabilityGetDescendants = @"capabilityGetDescendants";
+NSString * const kCMISRepositoryCapabilityGetFolderTree = @"capabilityGetFolderTree";
+NSString * const kCMISRepositoryCapabilityOrderBy = @"capabilityOrderBy";
+NSString * const kCMISRepositoryCapabilityMultifiling = @"capabilityMultifiling";
+NSString * const kCMISRepositoryCapabilityUnfiling = @"capabilityUnfiling";
+NSString * const kCMISRepositoryCapabilityVersionSpecificFiling = @"capabilityVersionSpecificFiling";
+NSString * const kCMISRepositoryCapabilityPropertyTypes = @"capabilityCreatablePropertyTypes";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributes = @"capabilityNewTypeSettableAttributes";
+
+// Repository capability new type settable attributes keys
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesId = @"id";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesLocalName = @"localName";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesLocalNamespace = @"localNamespace";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesDisplayName = @"displayName";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesQueryName = @"queryName";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesDescription = @"description";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesCreateable = @"creatable";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesFileable = @"fileable";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesQueryable = @"queryable";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesFullTextIndexed = @"fulltextIndexed";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesIncludedInSuperTypeQuery = @"includedInSupertypeQuery";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesControllablePolicy = @"controllablePolicy";
+NSString * const kCMISRepositoryCapabilityNewTypeSettableAttributesControllableAcl = @"controllableACL";
+
+// Repository capability createable property types key
+NSString * const kCMISRepositoryCapabilityCreateablePropertyTypesCanCreate = @"canCreate";
+
 // Parameters
 NSString * const kCMISParameterChangeToken = @"changeToken";
 NSString * const kCMISParameterOverwriteFlag = @"overwriteFlag";
@@ -80,6 +123,7 @@ NSString * const kCMISParameterRelativeP
 NSString * const kCMISParameterMajor = @"major";
 NSString * const kCMISParameterCheckin = @"checkin";
 NSString * const kCMISParameterCheckinComment = @"checkinComment";
+NSString * const kCMISParameterSourceFolderId = @"sourceFolderId";
 NSString * const kCMISParameterReturnVersion = @"returnVersion";
 NSString * const kCMISParameterTypeId = @"typeId";
 
@@ -94,3 +138,63 @@ NSString * const kCMISParameterValueRetu
 NSString * const kCMISContentStreamAllowedValueRequired = @"required";
 NSString * const kCMISContentStreamAllowedValueAllowed = @"allowed";
 NSString * const kCMISContentStreamAllowedValueNotAllowed = @"notallowed";
+
++ (NSSet *)repositoryCapabilityKeys
+{
+    if(!_repositoryCapabilityKeys) {
+        _repositoryCapabilityKeys = [NSSet setWithObjects:
+                                     kCMISRepositoryCapabilityContentStreamUpdatability,
+                                     kCMISRepositoryCapabilityChanges,
+                                     kCMISRepositoryCapabilityRenditions,
+                                     kCMISRepositoryCapabilityGetDescendants,
+                                     kCMISRepositoryCapabilityGetFolderTree,
+                                     kCMISRepositoryCapabilityMultifiling,
+                                     kCMISRepositoryCapabilityUnfiling,
+                                     kCMISRepositoryCapabilityVersionSpecificFiling,
+                                     kCMISRepositoryCapabilityPWCSearchable,
+                                     kCMISRepositoryCapabilityPWCUpdatable,
+                                     kCMISRepositoryAllVersionsSearchable,
+                                     kCMISRepositoryCapabilityOrderBy,
+                                     kCMISRepositoryCapabilityQuery,
+                                     kCMISRepositoryCapabilityJoin,
+                                     kCMISRepositoryCapabilityACL,
+                                     kCMISRepositoryCapabilityPropertyTypes,
+                                     kCMISRepositoryCapabilityNewTypeSettableAttributes,
+                                     nil];
+    }
+    return _repositoryCapabilityKeys;
+}
+
++ (NSSet *)repositoryCapabilityNewTypeSettableAttributesKeys
+{
+    if(!_repositoryCapabilityNewTypeSettableAttributesKeys) {
+        _repositoryCapabilityNewTypeSettableAttributesKeys = [NSSet setWithObjects:
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesId,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesLocalName,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesLocalNamespace,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesDisplayName,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesQueryName,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesDescription,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesCreateable,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesFileable,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesQueryable,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesFullTextIndexed,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesIncludedInSuperTypeQuery,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesControllablePolicy,
+                                                              kCMISRepositoryCapabilityNewTypeSettableAttributesControllableAcl,
+                                                              nil];
+    }
+    return _repositoryCapabilityNewTypeSettableAttributesKeys;
+}
+
++ (NSSet *)repositoryCapabilityCreateablePropertyTypesKeys
+{
+    if(!_repositoryCapabilityCreateablePropertyTypesKeys) {
+        _repositoryCapabilityCreateablePropertyTypesKeys = [NSSet setWithObjects:
+                                                              kCMISRepositoryCapabilityCreateablePropertyTypesCanCreate,
+                                                              nil];
+    }
+    return _repositoryCapabilityCreateablePropertyTypesKeys;
+}
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.h?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.h (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.h Thu Apr 24 15:26:04 2014
@@ -0,0 +1,41 @@
+/*
+ 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 "CMISExtensionData.h"
+
+/**
+ * Holds the set of property data types for type creation and update.
+ *
+ * @cmis 1.1
+ */
+@interface CMISCreatablePropertyTypes : CMISExtensionData
+
+/**
+ * Returns the set of property data types that can used to create or update
+ * a type definition.
+ *
+ * @return the available set of property data types.
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, strong) NSSet *canCreate;
+
+- (void)setCreateablePropertyTypeFromDictionary:(NSDictionary *)dictionary;
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISCreatablePropertyTypes.m Thu Apr 24 15:26:04 2014
@@ -0,0 +1,55 @@
+/*
+ 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 "CMISCreatablePropertyTypes.h"
+#import "CMISLog.h"
+#import "CMISObjectConverter.h"
+#import "CMISConstants.h"
+#import "CMISNSDictionary+CMISUtil.h"
+
+@implementation CMISCreatablePropertyTypes
+
+- (void)setCreateablePropertyTypeFromDictionary:(NSDictionary *)dictionary
+{
+    if([dictionary isKindOfClass:NSDictionary.class]){
+        
+        NSArray *canCreateJson = [dictionary cmis_objectForKeyNotNull:kCMISRepositoryCapabilityCreateablePropertyTypesCanCreate];
+        if(canCreateJson){
+            if([canCreateJson isKindOfClass:NSArray.class]){
+                NSMutableSet *canCreate = [[NSMutableSet alloc] init];
+                
+                for (id o in canCreateJson) {
+                    if(o){
+                        [canCreate addObject:o];
+                    }
+                }
+                
+                self.canCreate = canCreate;
+            } else {
+                CMISLogWarning(@"expected an array but was %@", canCreateJson.class);
+            }
+        }
+
+        self.extensions = [CMISObjectConverter convertExtensions:dictionary cmisKeys:[CMISConstants repositoryCapabilityCreateablePropertyTypesKeys]];
+    } else {
+        CMISLogWarning(@"expected a dictionary but was %@", dictionary.class);
+    }
+}
+
+@end

Modified: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.h?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.h (original)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISEnums.h Thu Apr 24 15:26:04 2014
@@ -148,6 +148,64 @@ typedef NS_ENUM(NSInteger, CMISContentSt
     CMISContentStreamUnknown
 };
 
+// Repository Capability ACL
+typedef NS_ENUM(NSInteger, CMISCapabilityAcl)
+{
+    CMISCapabilityAclNone,
+    CMISCapabilityAclDiscover,
+    CMISCapabilityAclManage
+};
+
+// Repository Capability Changes
+typedef NS_ENUM(NSInteger, CMISCapabilityChanges)
+{
+    CMISCapabilityChangesNone,
+    CMISCapabilityChangesObjectIdsOnly,
+    CMISCapabilityChangesProperties,
+    CMISCapabilityChangesAll
+};
+
+// Repository Capability Content Stream Updates
+typedef NS_ENUM(NSInteger, CMISCapabilityContentStreamUpdates)
+{
+    CMISCapabilityContentStreamUpdatesNone,
+    CMISCapabilityContentStreamUpdatesPwcOnly,
+    CMISCapabilityContentStreamUpdatesAnytime
+};
+
+// Repository Capability Join
+typedef NS_ENUM(NSInteger, CMISCapabilityJoin)
+{
+    CMISCapabilityJoinNone,
+    CMISCapabilityJoinInnerOnly,
+    CMISCapabilityJoinInnerAndOuter
+};
+
+// Repository Capability Query
+typedef NS_ENUM(NSInteger, CMISCapabilityQuery)
+{
+    CMISCapabilityQueryNone,
+    CMISCapabilityQueryMetaDataOnly,
+    CMISCapabilityQueryFullTextOnly,
+    CMISCapabilityQueryBothSeparate,
+    CMISCapabilityQueryBothCombined
+};
+
+// Repository Capability Renditions
+typedef NS_ENUM(NSInteger, CMISCapabilityRenditions)
+{
+    CMISCapabilityRenditionsNone,
+    CMISCapabilityRenditionsRead
+};
+
+// Repository Capability Order By
+typedef NS_ENUM(NSInteger, CMISCapabilityOrderBy)
+{
+    CMISCapabilityOrderByNone,
+    CMISCapabilityOrderByCommon,
+    CMISCapabilityOrderByCustom
+};
+
 // ReturnVersion
 typedef NS_ENUM(NSInteger, CMISReturnVersion)
 {
@@ -165,4 +223,4 @@ typedef NS_ENUM(NSInteger, CMISReturnVer
 + (CMISBaseType)enumForBaseId:(NSString *)baseId;
 + (CMISContentStreamAllowedType)enumForContentStreamAllowed:(NSString *)contentStreamAllowed;
 
-@end
\ No newline at end of file
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.h?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.h (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.h Thu Apr 24 15:26:04 2014
@@ -0,0 +1,153 @@
+/*
+ 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 "CMISExtensionData.h"
+
+@interface CMISNewTypeSettableAttributes : CMISExtensionData
+
+/**
+ * Indicates if the "id" attribute can be set.
+ *
+ * @return <code>true</code> if the "id" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetId;
+
+/**
+ * Indicates if the "localName" attribute can be set.
+ *
+ * @return <code>true</code> if the "localName" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetLocalName;
+
+/**
+ * Indicates if the "localNamespace" attribute can be set.
+ *
+ * @return <code>true</code> if the "localNamespace" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetLocalNamespace;
+
+/**
+ * Indicates if the "displayName" attribute can be set.
+ *
+ * @return <code>true</code> if the "displayName" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetDisplayName;
+
+/**
+ * Indicates if the "queryName" attribute can be set.
+ *
+ * @return <code>true</code> if the "queryName" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetQueryName;
+
+/**
+ * Indicates if the "description" attribute can be set.
+ *
+ * @return <code>true</code> if the "description" attribute can be set,
+ *         <code>false</code> otherwise
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetDescription;
+
+/**
+ * Indicates if the "creatable" attribute can be set.
+ *
+ * @return <code>true</code> if the "creatable" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetCreatable;
+
+/**
+ * Indicates if the "fileable" attribute can be set.
+ *
+ * @return <code>true</code> if the "fileable" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetFileable;
+
+/**
+ * Indicates if the "queryable" attribute can be set.
+ *
+ * @return <code>true</code> if the "queryable" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetQueryable;
+
+/**
+ * Indicates if the "fulltextIndexed" attribute can be set.
+ *
+ * @return <code>true</code> if the "fulltextIndexed" attribute can be set,
+ *         <code>false</code> otherwise
+ */
+@property(nonatomic, assign) BOOL canSetFulltextIndexed;
+
+/**
+ * Indicates if the "includedInSupertypeQuery" attribute can be set.
+ *
+ * @return <code>true</code> if the "includedInSupertypeQuery" attribute can
+ *         be set, <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetIncludedInSupertypeQuery;
+
+/**
+ * Indicates if the "controllablePolicy" attribute can be set.
+ *
+ * @return <code>true</code> if the "controllablePolicy" attribute can be
+ *         set, <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetControllablePolicy;
+
+/**
+ * Indicates if the "controllableACL" attribute can be set.
+ *
+ * @return <code>true</code> if the "controllableACL" attribute can be set,
+ *         <code>false</code> otherwise
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, assign) BOOL canSetControllableAcl;
+
+- (void)setNewTypeSettableAttributesFromDictionary:(NSDictionary *)dictionary;
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISNewTypeSettableAttributes.m Thu Apr 24 15:26:04 2014
@@ -0,0 +1,51 @@
+/*
+ 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 "CMISNewTypeSettableAttributes.h"
+#import "CMISNSDictionary+CMISUtil.h"
+#import "CMISLog.h"
+#import "CMISConstants.h"
+#import "CMISObjectConverter.h"
+
+@implementation CMISNewTypeSettableAttributes
+
+- (void)setNewTypeSettableAttributesFromDictionary:(NSDictionary *)dictionary
+{
+    if([dictionary isKindOfClass:NSDictionary.class]){
+        self.canSetId = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesId];
+        self.canSetLocalName = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesLocalName];
+        self.canSetLocalNamespace = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesLocalNamespace];
+        self.canSetDisplayName = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesDisplayName];
+        self.canSetQueryName = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesQueryName];
+        self.canSetDescription = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesDescription];
+        self.canSetCreatable = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesCreateable];
+        self.canSetFileable = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesFileable];
+        self.canSetQueryable = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesQueryable];
+        self.canSetFulltextIndexed = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesFullTextIndexed];
+        self.canSetIncludedInSupertypeQuery = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesIncludedInSuperTypeQuery];
+        self.canSetControllablePolicy = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesControllablePolicy];
+        self.canSetControllableAcl = [dictionary cmis_boolForKey:kCMISRepositoryCapabilityNewTypeSettableAttributesControllableAcl];
+        
+        self.extensions = [CMISObjectConverter convertExtensions:dictionary cmisKeys:[CMISConstants repositoryCapabilityNewTypeSettableAttributesKeys]];
+    } else {
+        CMISLogWarning(@"expected a dictionary but was %@", dictionary.class);
+    }
+}
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.h?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.h (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.h Thu Apr 24 15:26:04 2014
@@ -0,0 +1,132 @@
+/*
+ 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 "CMISEnums.h"
+#import "CMISExtensionData.h"
+#import "CMISCreatablePropertyTypes.h"
+#import "CMISNewTypeSettableAttributes.h"
+
+@interface CMISRepositoryCapabilities : CMISExtensionData
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL allVersionsSearchable;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityAcl capabilityAcl;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityChanges capabilityChanges;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityContentStreamUpdates capabilityContentStreamUpdates;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityJoin capabilityJoin;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityQuery capabilityQuery;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityRenditions capabilityRendition;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign, getter = isPwcSearchable) BOOL pwcSearchable;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign, getter = isPwcUpdatable) BOOL pwcUpdatable;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL supportsGetDescendants;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL supportsGetFolderTree;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) CMISCapabilityOrderBy capabilityOrderBy;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL supportsMultifiling;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL supportsUnfiling;
+
+/**
+ *
+ * @cmis 1.0
+ */
+@property(nonatomic, assign) BOOL supportsVersionSpecificFiling;
+
+/**
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, strong) CMISCreatablePropertyTypes *creatablePropertyTypes;
+
+/**
+ *
+ * @cmis 1.1
+ */
+@property(nonatomic, strong) CMISNewTypeSettableAttributes *typeSettableAttributes;
+
+-(void) setCapability:(NSString*)capabilityKey value:(id)capabilityValue;
+
+@end

Added: chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.m?rev=1589768&view=auto
==============================================================================
--- chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.m (added)
+++ chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryCapabilities.m Thu Apr 24 15:26:04 2014
@@ -0,0 +1,132 @@
+/*
+ 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 "CMISRepositoryCapabilities.h"
+#import "CMISConstants.h"
+#import "CMISLog.h"
+
+@implementation CMISRepositoryCapabilities
+
+-(void) setCapability:(NSString*)capabilityKey value:(id)capabilityValue {
+    if ([capabilityKey isEqualToString:kCMISRepositoryAllVersionsSearchable]) {
+        self.allVersionsSearchable = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityACL]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityAcl = CMISCapabilityAclNone;
+        } else if ([capabilityValue isEqualToString:@"discover"]) {
+            self.capabilityAcl = CMISCapabilityAclDiscover;
+        } else if ([capabilityValue isEqualToString:@"manage"]) {
+            self.capabilityAcl = CMISCapabilityAclManage;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability ACL Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityChanges]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityChanges = CMISCapabilityChangesNone;
+        } else if ([capabilityValue isEqualToString:@"objectidsonly"]) {
+            self.capabilityChanges = CMISCapabilityChangesObjectIdsOnly;
+        } else if ([capabilityValue isEqualToString:@"properties"]) {
+            self.capabilityChanges = CMISCapabilityChangesProperties;
+        } else if ([capabilityValue isEqualToString:@"all"]) {
+            self.capabilityChanges = CMISCapabilityChangesAll;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability Changes Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityContentStreamUpdatability]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityContentStreamUpdates = CMISCapabilityContentStreamUpdatesNone;
+        } else if ([capabilityValue isEqualToString:@"anytime"]) {
+            self.capabilityContentStreamUpdates = CMISCapabilityContentStreamUpdatesAnytime;
+        } else if ([capabilityValue isEqualToString:@"pwconly"]) {
+            self.capabilityContentStreamUpdates = CMISCapabilityContentStreamUpdatesPwcOnly;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability Updatability Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityGetDescendants]) {
+        self.supportsGetDescendants = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityGetFolderTree]) {
+        self.supportsGetFolderTree = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityJoin]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityJoin = CMISCapabilityJoinNone;
+        } else if ([capabilityValue isEqualToString:@"inneronly"]) {
+            self.capabilityJoin = CMISCapabilityJoinInnerOnly;
+        } else if ([capabilityValue isEqualToString:@"innerandouter"]) {
+            self.capabilityJoin = CMISCapabilityJoinInnerAndOuter;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability Join Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityQuery]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityQuery = CMISCapabilityQueryNone;
+        } else if ([capabilityValue isEqualToString:@"metadataonly"]) {
+            self.capabilityQuery = CMISCapabilityQueryMetaDataOnly;
+        } else if ([capabilityValue isEqualToString:@"fulltextonly"]) {
+            self.capabilityQuery = CMISCapabilityQueryFullTextOnly;
+        } else if ([capabilityValue isEqualToString:@"bothseparate"]) {
+            self.capabilityQuery = CMISCapabilityQueryBothSeparate;
+        } else if ([capabilityValue isEqualToString:@"bothcombined"]) {
+            self.capabilityQuery = CMISCapabilityQueryBothCombined;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability Query Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityMultifiling]) {
+        self.supportsMultifiling = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityOrderBy]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityOrderBy = CMISCapabilityOrderByNone;
+        } else if ([capabilityValue isEqualToString:@"common"]) {
+            self.capabilityOrderBy = CMISCapabilityOrderByCommon;
+        } else if ([capabilityValue isEqualToString:@"custom"]) {
+            self.capabilityOrderBy = CMISCapabilityOrderByCustom;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Capability Order By Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityPropertyTypes]) {
+        if(capabilityValue) {
+            self.creatablePropertyTypes = [[CMISCreatablePropertyTypes alloc] init];
+            [self.creatablePropertyTypes setCreateablePropertyTypeFromDictionary:capabilityValue];
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityPWCSearchable]) {
+        self.pwcSearchable = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityPWCUpdatable]) {
+        self.pwcUpdatable = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityRenditions]) {
+        if ([capabilityValue isEqualToString:@"none"]) {
+            self.capabilityRendition = CMISCapabilityOrderByNone;
+        } else if ([capabilityValue isEqualToString:@"read"]) {
+            self.capabilityRendition = CMISCapabilityOrderByCommon;
+        } else {
+            CMISLogWarning(@"WARNING: Unknown Repository Renditions Value");
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityVersionSpecificFiling]) {
+        self.supportsVersionSpecificFiling = [capabilityValue boolValue];
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityNewTypeSettableAttributes]) {
+        if(capabilityValue) {
+            self.typeSettableAttributes = [[CMISNewTypeSettableAttributes alloc] init];
+            [self.typeSettableAttributes setNewTypeSettableAttributesFromDictionary:capabilityValue];
+        }
+    } else if ([capabilityKey isEqualToString:kCMISRepositoryCapabilityUnfiling]) {
+        self.supportsUnfiling = [capabilityValue boolValue];
+    } else {
+        CMISLogWarning(@"WARNING: Unknown Repository Capability Key");
+    }
+}
+
+@end