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/15 10:29:08 UTC
svn commit: r1587473 - in /chemistry/objectivecmis/trunk:
ObjectiveCMIS/Bindings/ ObjectiveCMIS/Bindings/AtomPub/
ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/ ObjectiveCMIS/Client/
ObjectiveCMISTests/
Author: lgross
Date: Tue Apr 15 08:29:08 2014
New Revision: 1587473
URL: http://svn.apache.org/r1587473
Log:
CMIS-778: Implementation of moveObject in object services of the atomPub binding
Modified:
chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.h
chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.m
chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m
chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/CMISObjectService.h
chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.h
chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.m
chemistry/objectivecmis/trunk/ObjectiveCMISTests/ObjectiveCMISTests.m
Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.h?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.h (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.h Tue Apr 15 08:29:08 2014
@@ -88,6 +88,7 @@ extern NSString * const kCMISParameterRe
extern NSString * const kCMISParameterMajor;
extern NSString * const kCMISParameterCheckin;
extern NSString * const kCMISParameterCheckinComment;
+extern NSString * const kCMISParameterSourceFolderId;
// Parameter Values
extern NSString * const kCMISParameterValueTrue;
Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.m?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/AtomPubParser/CMISAtomPubConstants.m Tue Apr 15 08:29:08 2014
@@ -88,6 +88,7 @@ NSString * const kCMISParameterRelativeP
NSString * const kCMISParameterMajor = @"major";
NSString * const kCMISParameterCheckin = @"checkin";
NSString * const kCMISParameterCheckinComment = @"checkinComment";
+NSString * const kCMISParameterSourceFolderId = @"sourceFolderId";
// Parameter Values
NSString * const kCMISParameterValueTrue = @"true";
Modified: chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/AtomPub/CMISAtomPubObjectService.m Tue Apr 15 08:29:08 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/trunk/ObjectiveCMIS/Bindings/CMISObjectService.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/CMISObjectService.h?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/CMISObjectService.h (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Bindings/CMISObjectService.h Tue Apr 15 08:29:08 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/trunk/ObjectiveCMIS/Client/CMISFileableObject.h
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.h?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.h (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.h Tue Apr 15 08:29:08 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/trunk/ObjectiveCMIS/Client/CMISFileableObject.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.m?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMIS/Client/CMISFileableObject.m Tue Apr 15 08:29:08 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/trunk/ObjectiveCMISTests/ObjectiveCMISTests.m
URL: http://svn.apache.org/viewvc/chemistry/objectivecmis/trunk/ObjectiveCMISTests/ObjectiveCMISTests.m?rev=1587473&r1=1587472&r2=1587473&view=diff
==============================================================================
--- chemistry/objectivecmis/trunk/ObjectiveCMISTests/ObjectiveCMISTests.m (original)
+++ chemistry/objectivecmis/trunk/ObjectiveCMISTests/ObjectiveCMISTests.m Tue Apr 15 08:29:08 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:^ {