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=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h
 (original)
+++ 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Common/CMISRepositoryInfo.h
 Thu Apr 24 15:26:04 2014
@@ -19,6 +19,7 @@
 
 #import <Foundation/Foundation.h>
 #import "CMISExtensionData.h"
+#import "CMISRepositoryCapabilities.h"
 
 @interface CMISRepositoryInfo : CMISExtensionData
 
@@ -56,11 +57,11 @@
  */
 @property (nonatomic, strong) NSString *principalIdAnyone;
 
-// TODO the repositoryCapabilities property is currently not types.  
-/**  CMISRepositoryCapabilities needs to be created and replace the raw 
NSDictionary object
- * that is currently being set from the CMISRepositoryInfoParser
- * Use keypaths to get values until the property is properly typed **
+/**
+ * Returns Repository Capabilities Object
+ *
+ * @return Repository Capabilities
  */
-@property (nonatomic, strong) id repositoryCapabilities;
+@property (nonatomic, strong) CMISRepositoryCapabilities 
*repositoryCapabilities;
 
 @end

Modified: 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpUploadRequest.m
URL: 
http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpUploadRequest.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpUploadRequest.m
 (original)
+++ 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISHttpUploadRequest.m
 Thu Apr 24 15:26:04 2014
@@ -328,11 +328,11 @@ totalBytesExpectedToWrite:(NSInteger)tot
             if (self.base64InputStream) {
                 NSStreamStatus inputStatus = 
self.base64InputStream.streamStatus;
                 if (inputStatus == NSStreamStatusClosed) {
-                    CMISLogDebug(@"Base64InputStream %@ is closed", 
self.base64InputStream);
+                    CMISLogTrace(@"Base64InputStream %@ is closed", 
self.base64InputStream);
                 } else if (inputStatus == NSStreamStatusAtEnd){
-                    CMISLogDebug(@"Base64InputStream %@ has reached the end", 
self.base64InputStream);
+                    CMISLogTrace(@"Base64InputStream %@ has reached the end", 
self.base64InputStream);
                 } else if (inputStatus == NSStreamStatusError){
-                    CMISLogDebug(@"Base64InputStream %@ input stream error: 
%@", self.base64InputStream, self.base64InputStream.streamError);
+                    CMISLogTrace(@"Base64InputStream %@ input stream error: 
%@", self.base64InputStream, self.base64InputStream.streamError);
                     [self stopSendWithStatus:@"Network read error"];
                 }
             }
@@ -437,6 +437,9 @@ totalBytesExpectedToWrite:(NSInteger)tot
     encodedLength += self.streamStartData.length;
     encodedLength += self.streamEndData.length;
     self.encodedLength = encodedLength;
+    
+    // update the originally provided expected bytes with encoded length
+    self.bytesExpected = encodedLength;
 }
 
 - (void)prepareStreams
@@ -480,7 +483,7 @@ totalBytesExpectedToWrite:(NSInteger)tot
 - (void)stopSendWithStatus:(NSString *)statusString
 {
     if (nil != statusString) {
-        CMISLogDebug(@"Upload request terminated: Message is %@", 
statusString);
+        CMISLogTrace(@"Upload request terminated: Message is %@", 
statusString);
     }
     self.bufferOffset = 0;
     self.bufferLimit  = 0;

Modified: 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.h
URL: 
http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.h?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.h
 (original)
+++ 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.h
 Thu Apr 24 15:26:04 2014
@@ -38,4 +38,9 @@
           forObjectTypeId:(NSString *)objectTypeId 
           completionBlock:(void (^)(CMISProperties *convertedProperties, 
NSError *error))completionBlock;
 
+/**
+ * Converts the source to an array with elements of type CMISExtensionElement. 
Elements of the source with keys that are contained in the cmisKeys set set are 
ignored.
+ */
++ (NSArray *)convertExtensions:(NSDictionary *)source cmisKeys:(NSSet 
*)cmisKeys;
+
 @end

Modified: 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.m
URL: 
http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.m
 (original)
+++ 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMIS/Utils/CMISObjectConverter.m
 Thu Apr 24 15:26:04 2014
@@ -26,6 +26,7 @@
 #import "CMISSession.h"
 #import "CMISDateUtil.h"
 #import "CMISConstants.h"
+#import "CMISNSDictionary+CMISUtil.h"
 
 @interface CMISObjectConverter ()
 @property (nonatomic, weak) CMISSession *session;
@@ -465,4 +466,77 @@
     }
 }
 
++ (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:[CMISObjectConverter convertExtension:value]]];
+        } else if ([value isKindOfClass:NSArray.class]) {
+            [extensions addObjectsFromArray:[CMISObjectConverter 
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:[CMISObjectConverter convertExtension:value]]];
+        } else if ([value isKindOfClass:NSArray.class]) {
+            [extensions addObjectsFromArray:[CMISObjectConverter 
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:[CMISObjectConverter convertExtension:element]]];
+        } else if ([element isKindOfClass:NSArray.class]) {
+            [extensions addObjectsFromArray:[CMISObjectConverter 
convertExtension: key fromArray:element]];
+        } else {
+            [extensions addObject:[[CMISExtensionElement alloc] 
initLeafWithName:key namespaceUri:nil attributes:nil value:element]];
+        }
+    }
+    
+    return extensions;
+}
+
+
 @end

Modified: 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m
URL: 
http://svn.apache.org/viewvc/chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m?rev=1589768&r1=1589767&r2=1589768&view=diff
==============================================================================
--- 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m
 (original)
+++ 
chemistry/objectivecmis/branches/browser-binding/ObjectiveCMISTests/ObjectiveCMISTests.m
 Thu Apr 24 15:26:04 2014
@@ -713,6 +713,159 @@
     }];
 }
 
+- (void)testMoveDocument
+{
+    [self runTest:^ {
+        
+        [self setupMoveTestFoldersAndDocumentWithCompletionBlock:^(NSString 
*containerFolderId, CMISFolder *folder1, CMISFolder *folder2, CMISDocument 
*document) {
+            
+            [document moveFromFolderWithId:folder1.identifier 
toFolderWithId:folder2.identifier completionBlock:^(CMISObject *object, NSError 
*error) {
+                XCTAssertNil(error, @"Error while moving document: %@", [error 
description]);
+                XCTAssertNotNil(object, @"Moved document is nil but should 
not");
+                
+                [folder2 retrieveChildrenWithCompletionBlock:^(CMISPagedResult 
*result, NSError *error) {
+                    XCTAssertNil(error, @"Got error while retrieving children: 
%@", [error description]);
+                    XCTAssertNotNil(result, @"Return result should not be 
nil");
+                    
+                    NSArray *children = result.resultArray;
+                    XCTAssertNotNil(children, @"children should not be nil");
+                    CMISLogDebug(@"There are %d children", [children count]);
+                    XCTAssertTrue([children count] == 1, @"There should be at 
least 3 children");
+                    
+                    CMISObject *child = children[0];
+                    XCTAssertTrue([child isKindOfClass:[CMISDocument class]], 
@"The child of folder2 is not a CMISDocument but should be");
+                    CMISDocument *retrievedDocument = (CMISDocument *)child;
+                    XCTAssertTrue([retrievedDocument.name 
isEqualToString:document.name], @"Moved document's name is not equal to 
original");
+                    
+                    [self.session.binding.objectService 
deleteTree:containerFolderId
+                                                        allVersion:YES
+                                                     unfileObjects:CMISDelete
+                                                 continueOnFailure:YES
+                                                   completionBlock:^(NSArray 
*failedObjects, NSError *error) {
+                                                       XCTAssertNil(error, 
@"Error while move test folders and document: %@", [error description]);
+                                                       
+                                                       self.testCompleted = 
YES;
+                                                   }];
+                }];
+            }];
+        }];
+    }];
+}
+
+- (void)testMoveFolder
+{
+    [self runTest:^ {
+        
+        [self setupMoveTestFoldersAndDocumentWithCompletionBlock:^(NSString 
*containerFolderId, CMISFolder *folder1, CMISFolder *folder2, CMISDocument 
*document) {
+            
+            [folder1 moveFromFolderWithId:containerFolderId 
toFolderWithId:folder2.identifier completionBlock:^(CMISObject *object, NSError 
*error) {
+                XCTAssertNil(error, @"Error while moving document: %@", [error 
description]);
+                XCTAssertNotNil(object, @"Moved document is nil but should 
not");
+                
+                [folder2 retrieveChildrenWithCompletionBlock:^(CMISPagedResult 
*result, NSError *error) {
+                    XCTAssertNil(error, @"Got error while retrieving children: 
%@", [error description]);
+                    XCTAssertNotNil(result, @"Return result should not be 
nil");
+                    
+                    NSArray *children = result.resultArray;
+                    XCTAssertNotNil(children, @"children should not be nil");
+                    CMISLogDebug(@"There are %d children", [children count]);
+                    XCTAssertTrue([children count] == 1, @"There should be at 
least 3 children");
+                    
+                    CMISObject *child = children[0];
+                    XCTAssertTrue([child isKindOfClass:[CMISFolder class]], 
@"The child of folder2 is not a CMISFolder but should be");
+                    CMISFolder *retrievedFolder = (CMISFolder *)child;
+                    XCTAssertTrue([retrievedFolder.name 
isEqualToString:folder1.name], @"Moved folder's name is not equal to original");
+                    
+                    [self.session.binding.objectService 
deleteTree:containerFolderId
+                                                        allVersion:YES
+                                                     unfileObjects:CMISDelete
+                                                 continueOnFailure:YES
+                                                   completionBlock:^(NSArray 
*failedObjects, NSError *error) {
+                                                       XCTAssertNil(error, 
@"Error while move test folders and document: %@", [error description]);
+                                                       
+                                                       self.testCompleted = 
YES;
+                                                   }];
+                }];
+            }];
+        }];
+    }];
+}
+
+- (void)setupMoveTestFoldersAndDocumentWithCompletionBlock:(void (^)(NSString 
*containerFolderId, CMISFolder *folder1, CMISFolder *folder2, CMISDocument 
*document))completionBlock
+{
+    // Setup test folder container
+    NSMutableDictionary *containerFolderProperties = [NSMutableDictionary 
dictionary];
+    NSString *containerFolderName = [NSString 
stringWithFormat:@"test-moveObject-%@", [self stringFromCurrentDate]];
+    [containerFolderProperties setObject:containerFolderName 
forKey:kCMISPropertyName];
+    [containerFolderProperties setObject:kCMISPropertyObjectTypeIdValueFolder 
forKey:kCMISPropertyObjectTypeId];
+    
+    NSMutableDictionary *propertiesFolder1 = [NSMutableDictionary dictionary];
+    NSString *folder1Name = [NSString stringWithFormat:@"folder1"];
+    [propertiesFolder1 setObject:folder1Name forKey:kCMISPropertyName];
+    [propertiesFolder1 setObject:kCMISPropertyObjectTypeIdValueFolder 
forKey:kCMISPropertyObjectTypeId];
+    
+    NSMutableDictionary *propertiesFolder2 = [NSMutableDictionary dictionary];
+    NSString *folder2Name = [NSString stringWithFormat:@"folder2"];
+    [propertiesFolder2 setObject:folder2Name forKey:kCMISPropertyName];
+    [propertiesFolder2 setObject:kCMISPropertyObjectTypeIdValueFolder 
forKey:kCMISPropertyObjectTypeId];
+    
+    // Setup test file
+    // Check if test file exists
+    NSString *filePath = [[NSBundle bundleForClass:[self class]] 
pathForResource:@"test_file.txt" ofType:nil];
+    XCTAssertTrue([[NSFileManager defaultManager] fileExistsAtPath:filePath],
+                  @"Test file 'test_file.txt' cannot be found as resource for 
the test");
+    
+    // Upload test file
+    NSString *documentName = [NSString stringWithFormat:@"test_file_%@.txt", 
[self stringFromCurrentDate]];
+    NSMutableDictionary *documentProperties = [NSMutableDictionary dictionary];
+    [documentProperties setObject:documentName forKey:kCMISPropertyName];
+    [documentProperties setObject:kCMISPropertyObjectTypeIdValueDocument 
forKey:kCMISPropertyObjectTypeId];
+    
+    // Create container folder
+    [self.rootFolder createFolder:containerFolderProperties 
completionBlock:^(NSString *containerFolderId, NSError *error) {
+        XCTAssertNil(error, @"Error while creating containerFolder in root 
folder: %@", [error description]);
+        
+        // Create folder 1
+        [self.session createFolder:propertiesFolder1 
inFolder:containerFolderId completionBlock:^(NSString *folder1Id, NSError 
*error) {
+            XCTAssertNil(error, @"Error while creating folder1 in container 
folder: %@", [error description]);
+            
+            [self.session retrieveObject:folder1Id 
completionBlock:^(CMISObject *object, NSError *error) {
+                CMISFolder *folder1 = (CMISFolder *)object;
+                XCTAssertNil(error, @"Error while retrieving newly created 
folder: %@", [error description]);
+                XCTAssertNotNil(folder1, @"New folder should not be nil");
+                
+                // Create folder 2
+                [self.session createFolder:propertiesFolder2 
inFolder:containerFolderId completionBlock:^(NSString *folder2Id, NSError 
*error) {
+                    XCTAssertNil(error, @"Error while creating folder2 in 
container folder: %@", [error description]);
+                    
+                    [self.session retrieveObject:folder2Id 
completionBlock:^(CMISObject *object, NSError *error) {
+                        CMISFolder *folder2 = (CMISFolder *)object;
+                        XCTAssertNil(error, @"Error while retrieving newly 
created folder: %@", [error description]);
+                        XCTAssertNotNil(folder2, @"New folder should not be 
nil");
+                        
+                        
+                        [self.session createDocumentFromFilePath:filePath 
mimeType:@"text/plain"
+                                                      
properties:documentProperties
+                                                        inFolder:folder1Id
+                                                 completionBlock:^(NSString 
*objectId, NSError *error) {
+                                                     XCTAssertNil(error, 
@"Error while creating document in folder1 folder: %@", [error description]);
+                                                     
+                                                     [self.session 
retrieveObject:objectId completionBlock:^(CMISObject *object, NSError *error) {
+                                                         CMISDocument 
*document = (CMISDocument *)object;
+                                                         XCTAssertNil(error, 
@"Error while retrieving newly created document: %@", [error description]);
+                                                         
XCTAssertNotNil(document, @"New document should not be nil");
+                                                         
+                                                         
completionBlock(containerFolderId, folder1, folder2, document);
+                                                     }];
+                                                 } progressBlock:nil];
+                    }];
+                }];
+                
+            }];
+        }];
+    }];
+}
+
 - (void)testRetrieveAllVersionsOfDocument
 {
     [self runTest:^ {


Reply via email to