From 52a9d9ac448803cf193a8fae9020af93037f1718 Mon Sep 17 00:00:00 2001 From: Paul Barrett Date: Wed, 10 Mar 2010 10:43:56 +0200 Subject: [PATCH] CMIS Object Services bubbling up exceptions and applying status code mapping --- lib/api/ktcmis/ktObjectService.inc.php | 106 ++++++++++++++++++++++++++-------------------------------------------------------------------------------- webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php | 97 ++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------- webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php | 29 ++++++++++++++++------------- 3 files changed, 84 insertions(+), 148 deletions(-) diff --git a/lib/api/ktcmis/ktObjectService.inc.php b/lib/api/ktcmis/ktObjectService.inc.php index 7b55e7d..b293f2b 100644 --- a/lib/api/ktcmis/ktObjectService.inc.php +++ b/lib/api/ktcmis/ktObjectService.inc.php @@ -93,10 +93,7 @@ class KTObjectService extends KTCMISBase { throw $e; } - return array( - "status_code" => 0, - "results" => $properties - ); + return $properties; } /** @@ -122,18 +119,11 @@ class KTObjectService extends KTCMISBase { $objectId = $this->ObjectService->createDocument($repositoryId, $properties, $folderId, $contentStream, $versioningState,$policies, $addACEs, $removeACEs); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $objectId - ); + return $objectId; } /** @@ -154,18 +144,11 @@ class KTObjectService extends KTCMISBase { try { $objectId = $this->ObjectService->createFolder($repositoryId, $properties, $folderId, $policies, $addACEs, $removeACEs); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $objectId - ); + return $objectId; } /** @@ -181,18 +164,11 @@ class KTObjectService extends KTCMISBase { try { $contentStream = $this->ObjectService->getContentStream($repositoryId, $objectId, $streamId); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $contentStream - ); + return $contentStream; } /** @@ -209,18 +185,11 @@ class KTObjectService extends KTCMISBase { try { $this->ObjectService->moveObject($repositoryId, $objectId, $targetFolderId, $sourceFolderId); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $objectId - ); + return $objectId; } /** @@ -236,46 +205,30 @@ class KTObjectService extends KTCMISBase { try { $this->ObjectService->deleteObject($repositoryId, $objectId, $allVersions); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $objectId - ); + return $objectId; } public function deleteTree($repositoryId, $objectId, $changeToken = null, $unfileNonfolderObject = 'delete', $continueOnFailure = false) { + $failed = array(); + try { $result = $this->ObjectService->deleteTree($repositoryId, $objectId, $changeToken, $unfileNonfolderObject, $continueOnFailure); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } // check whether there is a list of items which did not delete - if (count($result) > 0) - { - return array( - "status_code" => 1, - "message" => $result - ); + if (count($result) > 0) { + return $result; } - return array( - 'status_code' => 0, - 'results' => $objectId - ); + return $failed; } /** @@ -299,18 +252,11 @@ class KTObjectService extends KTCMISBase { try { $documentId = $this->ObjectService->setContentStream($repositoryId, $documentId, $overwriteFlag, $contentStream, $changeToken); } - catch (Exception $e) - { - return array( - "status_code" => 1, - "message" => $e->getMessage() - ); + catch (Exception $e) { + throw $e; } - return array( - 'status_code' => 0, - 'results' => $documentId - ); + return $documentId; } } diff --git a/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php b/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php index e2a7c67..ef8bbf4 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_server.services.inc.php @@ -121,8 +121,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { return null; } - $response = $response['results']; - $folderName = $response['properties']['name']['value']; } // NOTE parent changes to parents in later specification @@ -140,7 +138,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { $this->responseFeed = $feed; return null; } - + // we know that a folder will only have one parent, so we can assume element 0 $folderId = $response['properties']['objectId']['value']; $folderName = $response['properties']['name']['value']; @@ -151,7 +149,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants'))) { - print_r($this->params);exit; + print_r($this->params);exit; $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt()); $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]); } @@ -232,56 +230,50 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { { // TODO detection and passing of optional parameters (policies, ACEs, etc...) as well as support for other object-types if ($cmisObjectProperties['cmis:objectTypeId'] == 'cmis:folder') { - $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId); + try { + $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId); + } + catch (Exception $e) { + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); + return null; + } } else { // NOTE for the moment only creation in minor versioning state - $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor'); - } - - if ($newObjectId['status_code'] == 0) { - $newObjectId = $newObjectId['results']; - // check if returned Object Id is a valid CMIS Object Id - CMISUtil::decodeObjectId($newObjectId, $typeId); - if ($typeId != 'unknown') { - $success = true; + try { + $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor'); } - else { - $error = 'Unknown Object Type'; + catch (Exception $e) { + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); + return null; } } + + // check if returned Object Id is a valid CMIS Object Id + CMISUtil::decodeObjectId($newObjectId, $typeId); + if ($typeId != 'unknown') { + $success = true; + } else { - $error = $newObjectId['message']; + $error = 'Unknown Object Type'; } } else if ($action == 'move') { - $response = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId); - - if ($response['status_code'] == 0) { - $success = true; + try { + $newObjectId = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId); } - else { - $error = $response['message']; + catch (Exception $e) { + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage()); + return null; } - // same object as before - $newObjectId = $objectId; // FIXME why set this? it does not appear to get used $typeId = ucwords($cmisObjectProperties['cmis:objectTypeId']); } - if ($success) - { - $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED); - $feed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST'); - } - else { - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $error); - } - - // Expose the responseFeed - $this->responseFeed = $feed; + $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED); + $this->responseFeed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST'); } /** @@ -302,21 +294,18 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); // attempt delete - last parameter sets $deleteAllVersions true - $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true); - - // error? - if ($response['status_code'] == 1) { - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); + try { + $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true); + } + catch (Exception $e) { + $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); // Expose the responseFeed $this->responseFeed = $feed; return null; } - else { - $response = $response['results']; - } - // list of failed objects? - if (is_array($response)) + // non-empty list of failed objects? + if (count($response)) { $this->setStatus(self::STATUS_SERVER_ERROR); @@ -376,7 +365,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { // with only the depth different $depth = 2; } - + try { $entries = $NavigationService->getDescendants($repositoryId, $folderId, $depth); } @@ -454,8 +443,7 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { $response = $NavigationService->getObjectParents($repositoryId, $objectId, false, false); } catch (Exception $e) { - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); - $this->responseFeed = $feed; + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); return null; } @@ -492,12 +480,11 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); // attempt delete - $response = $ObjectService->deleteObject($repositoryId, $this->params[0]); - - if ($response['status_code'] == 1) { - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); - // Expose the responseFeed - $this->responseFeed = $feed; + try { + $response = $ObjectService->deleteObject($repositoryId, $this->params[0]); + } + catch (Exception $e) { + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage()); return null; } diff --git a/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php b/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php index 7ae89a4..f72d310 100644 --- a/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php +++ b/webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php @@ -62,13 +62,14 @@ class KT_cmis_atom_service_helper { self::$repositoryId = $repositoryId; $serviceType = $service->getServiceType(); - $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); - - if ($response['status_code'] == 1) { - return KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); + try { + $response = $ObjectService->getProperties($repositoryId, $objectId, false, false); + } + catch (Exception $e) { + return KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage()); } - $cmisEntry = $response['results']; + $cmisEntry = $response; $response = null; // POST/PWC responses only send back an entry, not a feed @@ -709,8 +710,11 @@ class KT_cmis_atom_service_helper { */ static public function getContentStream(&$service, &$ObjectService, $repositoryId) { - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); - if ($response['status_code'] == 1) { + // why do we check the properties first? is it just to determine that the object in fact exists? + try { + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); + } + catch (Exception $e) { return null; } @@ -730,15 +734,14 @@ class KT_cmis_atom_service_helper { */ static public function downloadContentStream(&$service, &$ObjectService, $repositoryId) { - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); - if ($response['status_code'] == 1) { - $feed = KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); + try { + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false); + } + catch (Exception $e) { + $feed = KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage()); $service->responseFeed = $feed; return null; } - else { - $response = $response['results']; - } // TODO also check If-Modified-Since? // $service->headers['If-Modified-Since'] => 2009-07-24 17:16:54 -- libgit2 0.21.4