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 [2/2] - in
/chemistry/objectivecmis/branches/browser-binding: ObjectiveCMIS.xcodeproj/
ObjectiveCMIS/Bindings/ ObjectiveCMIS/Bindings/AtomPub/
ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/
ObjectiveCMIS/Bindings/Browser/ ObjectiveC...
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:^ {