Commit 52a9d9ac448803cf193a8fae9020af93037f1718

Authored by Paul Barrett
1 parent 5db5412c

CMIS Object Services bubbling up exceptions and applying status code mapping

Story ID:2713417. CMIS working with PHP client

Committed by: Paul Barrett
lib/api/ktcmis/ktObjectService.inc.php
@@ -93,10 +93,7 @@ class KTObjectService extends KTCMISBase { @@ -93,10 +93,7 @@ class KTObjectService extends KTCMISBase {
93 throw $e; 93 throw $e;
94 } 94 }
95 95
96 - return array(  
97 - "status_code" => 0,  
98 - "results" => $properties  
99 - ); 96 + return $properties;
100 } 97 }
101 98
102 /** 99 /**
@@ -122,18 +119,11 @@ class KTObjectService extends KTCMISBase { @@ -122,18 +119,11 @@ class KTObjectService extends KTCMISBase {
122 $objectId = $this->ObjectService->createDocument($repositoryId, $properties, $folderId, $contentStream, 119 $objectId = $this->ObjectService->createDocument($repositoryId, $properties, $folderId, $contentStream,
123 $versioningState,$policies, $addACEs, $removeACEs); 120 $versioningState,$policies, $addACEs, $removeACEs);
124 } 121 }
125 - catch (Exception $e)  
126 - {  
127 - return array(  
128 - "status_code" => 1,  
129 - "message" => $e->getMessage()  
130 - ); 122 + catch (Exception $e) {
  123 + throw $e;
131 } 124 }
132 125
133 - return array(  
134 - 'status_code' => 0,  
135 - 'results' => $objectId  
136 - ); 126 + return $objectId;
137 } 127 }
138 128
139 /** 129 /**
@@ -154,18 +144,11 @@ class KTObjectService extends KTCMISBase { @@ -154,18 +144,11 @@ class KTObjectService extends KTCMISBase {
154 try { 144 try {
155 $objectId = $this->ObjectService->createFolder($repositoryId, $properties, $folderId, $policies, $addACEs, $removeACEs); 145 $objectId = $this->ObjectService->createFolder($repositoryId, $properties, $folderId, $policies, $addACEs, $removeACEs);
156 } 146 }
157 - catch (Exception $e)  
158 - {  
159 - return array(  
160 - "status_code" => 1,  
161 - "message" => $e->getMessage()  
162 - ); 147 + catch (Exception $e) {
  148 + throw $e;
163 } 149 }
164 150
165 - return array(  
166 - 'status_code' => 0,  
167 - 'results' => $objectId  
168 - ); 151 + return $objectId;
169 } 152 }
170 153
171 /** 154 /**
@@ -181,18 +164,11 @@ class KTObjectService extends KTCMISBase { @@ -181,18 +164,11 @@ class KTObjectService extends KTCMISBase {
181 try { 164 try {
182 $contentStream = $this->ObjectService->getContentStream($repositoryId, $objectId, $streamId); 165 $contentStream = $this->ObjectService->getContentStream($repositoryId, $objectId, $streamId);
183 } 166 }
184 - catch (Exception $e)  
185 - {  
186 - return array(  
187 - "status_code" => 1,  
188 - "message" => $e->getMessage()  
189 - ); 167 + catch (Exception $e) {
  168 + throw $e;
190 } 169 }
191 170
192 - return array(  
193 - 'status_code' => 0,  
194 - 'results' => $contentStream  
195 - ); 171 + return $contentStream;
196 } 172 }
197 173
198 /** 174 /**
@@ -209,18 +185,11 @@ class KTObjectService extends KTCMISBase { @@ -209,18 +185,11 @@ class KTObjectService extends KTCMISBase {
209 try { 185 try {
210 $this->ObjectService->moveObject($repositoryId, $objectId, $targetFolderId, $sourceFolderId); 186 $this->ObjectService->moveObject($repositoryId, $objectId, $targetFolderId, $sourceFolderId);
211 } 187 }
212 - catch (Exception $e)  
213 - {  
214 - return array(  
215 - "status_code" => 1,  
216 - "message" => $e->getMessage()  
217 - ); 188 + catch (Exception $e) {
  189 + throw $e;
218 } 190 }
219 191
220 - return array(  
221 - 'status_code' => 0,  
222 - 'results' => $objectId  
223 - ); 192 + return $objectId;
224 } 193 }
225 194
226 /** 195 /**
@@ -236,46 +205,30 @@ class KTObjectService extends KTCMISBase { @@ -236,46 +205,30 @@ class KTObjectService extends KTCMISBase {
236 try { 205 try {
237 $this->ObjectService->deleteObject($repositoryId, $objectId, $allVersions); 206 $this->ObjectService->deleteObject($repositoryId, $objectId, $allVersions);
238 } 207 }
239 - catch (Exception $e)  
240 - {  
241 - return array(  
242 - "status_code" => 1,  
243 - "message" => $e->getMessage()  
244 - ); 208 + catch (Exception $e) {
  209 + throw $e;
245 } 210 }
246 211
247 - return array(  
248 - 'status_code' => 0,  
249 - 'results' => $objectId  
250 - ); 212 + return $objectId;
251 } 213 }
252 214
253 public function deleteTree($repositoryId, $objectId, $changeToken = null, $unfileNonfolderObject = 'delete', $continueOnFailure = false) 215 public function deleteTree($repositoryId, $objectId, $changeToken = null, $unfileNonfolderObject = 'delete', $continueOnFailure = false)
254 { 216 {
  217 + $failed = array();
  218 +
255 try { 219 try {
256 $result = $this->ObjectService->deleteTree($repositoryId, $objectId, $changeToken, $unfileNonfolderObject, $continueOnFailure); 220 $result = $this->ObjectService->deleteTree($repositoryId, $objectId, $changeToken, $unfileNonfolderObject, $continueOnFailure);
257 } 221 }
258 - catch (Exception $e)  
259 - {  
260 - return array(  
261 - "status_code" => 1,  
262 - "message" => $e->getMessage()  
263 - ); 222 + catch (Exception $e) {
  223 + throw $e;
264 } 224 }
265 225
266 // check whether there is a list of items which did not delete 226 // check whether there is a list of items which did not delete
267 - if (count($result) > 0)  
268 - {  
269 - return array(  
270 - "status_code" => 1,  
271 - "message" => $result  
272 - ); 227 + if (count($result) > 0) {
  228 + return $result;
273 } 229 }
274 230
275 - return array(  
276 - 'status_code' => 0,  
277 - 'results' => $objectId  
278 - ); 231 + return $failed;
279 } 232 }
280 233
281 /** 234 /**
@@ -299,18 +252,11 @@ class KTObjectService extends KTCMISBase { @@ -299,18 +252,11 @@ class KTObjectService extends KTCMISBase {
299 try { 252 try {
300 $documentId = $this->ObjectService->setContentStream($repositoryId, $documentId, $overwriteFlag, $contentStream, $changeToken); 253 $documentId = $this->ObjectService->setContentStream($repositoryId, $documentId, $overwriteFlag, $contentStream, $changeToken);
301 } 254 }
302 - catch (Exception $e)  
303 - {  
304 - return array(  
305 - "status_code" => 1,  
306 - "message" => $e->getMessage()  
307 - ); 255 + catch (Exception $e) {
  256 + throw $e;
308 } 257 }
309 258
310 - return array(  
311 - 'status_code' => 0,  
312 - 'results' => $documentId  
313 - ); 259 + return $documentId;
314 } 260 }
315 261
316 } 262 }
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 { @@ -121,8 +121,6 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
121 return null; 121 return null;
122 } 122 }
123 123
124 - $response = $response['results'];  
125 -  
126 $folderName = $response['properties']['name']['value']; 124 $folderName = $response['properties']['name']['value'];
127 } 125 }
128 // NOTE parent changes to parents in later specification 126 // NOTE parent changes to parents in later specification
@@ -140,7 +138,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { @@ -140,7 +138,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
140 $this->responseFeed = $feed; 138 $this->responseFeed = $feed;
141 return null; 139 return null;
142 } 140 }
143 - 141 +
144 // we know that a folder will only have one parent, so we can assume element 0 142 // we know that a folder will only have one parent, so we can assume element 0
145 $folderId = $response['properties']['objectId']['value']; 143 $folderId = $response['properties']['objectId']['value'];
146 $folderName = $response['properties']['name']['value']; 144 $folderName = $response['properties']['name']['value'];
@@ -151,7 +149,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { @@ -151,7 +149,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
151 149
152 if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants'))) 150 if (!empty($this->params[1]) && (($this->params[1] == 'children') || ($this->params[1] == 'descendants')))
153 { 151 {
154 - print_r($this->params);exit; 152 + print_r($this->params);exit;
155 $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt()); 153 $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt());
156 $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]); 154 $feed = $this->getFolderChildrenFeed($NavigationService, $repositoryId, $folderId, $folderName, $this->params[1]);
157 } 155 }
@@ -232,56 +230,50 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { @@ -232,56 +230,50 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
232 { 230 {
233 // TODO detection and passing of optional parameters (policies, ACEs, etc...) as well as support for other object-types 231 // TODO detection and passing of optional parameters (policies, ACEs, etc...) as well as support for other object-types
234 if ($cmisObjectProperties['cmis:objectTypeId'] == 'cmis:folder') { 232 if ($cmisObjectProperties['cmis:objectTypeId'] == 'cmis:folder') {
235 - $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId); 233 + try {
  234 + $newObjectId = $ObjectService->createFolder($repositoryId, $properties, $folderId);
  235 + }
  236 + catch (Exception $e) {
  237 + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage());
  238 + return null;
  239 + }
236 } 240 }
237 else { 241 else {
238 // NOTE for the moment only creation in minor versioning state 242 // NOTE for the moment only creation in minor versioning state
239 - $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor');  
240 - }  
241 -  
242 - if ($newObjectId['status_code'] == 0) {  
243 - $newObjectId = $newObjectId['results'];  
244 - // check if returned Object Id is a valid CMIS Object Id  
245 - CMISUtil::decodeObjectId($newObjectId, $typeId);  
246 - if ($typeId != 'unknown') {  
247 - $success = true; 243 + try {
  244 + $newObjectId = $ObjectService->createDocument($repositoryId, $properties, $folderId, $cmisContent, 'minor');
248 } 245 }
249 - else {  
250 - $error = 'Unknown Object Type'; 246 + catch (Exception $e) {
  247 + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage());
  248 + return null;
251 } 249 }
252 } 250 }
  251 +
  252 + // check if returned Object Id is a valid CMIS Object Id
  253 + CMISUtil::decodeObjectId($newObjectId, $typeId);
  254 + if ($typeId != 'unknown') {
  255 + $success = true;
  256 + }
253 else { 257 else {
254 - $error = $newObjectId['message']; 258 + $error = 'Unknown Object Type';
255 } 259 }
256 } 260 }
257 else if ($action == 'move') 261 else if ($action == 'move')
258 { 262 {
259 - $response = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId);  
260 -  
261 - if ($response['status_code'] == 0) {  
262 - $success = true; 263 + try {
  264 + $newObjectId = $ObjectService->moveObject($repositoryId, $objectId, $folderId, $sourceFolderId);
263 } 265 }
264 - else {  
265 - $error = $response['message']; 266 + catch (Exception $e) {
  267 + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($service, $this->getStatusCode($e), $e->getMessage());
  268 + return null;
266 } 269 }
267 270
268 - // same object as before  
269 - $newObjectId = $objectId;  
270 // FIXME why set this? it does not appear to get used 271 // FIXME why set this? it does not appear to get used
271 $typeId = ucwords($cmisObjectProperties['cmis:objectTypeId']); 272 $typeId = ucwords($cmisObjectProperties['cmis:objectTypeId']);
272 } 273 }
273 274
274 - if ($success)  
275 - {  
276 - $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED);  
277 - $feed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST');  
278 - }  
279 - else {  
280 - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $error);  
281 - }  
282 -  
283 - // Expose the responseFeed  
284 - $this->responseFeed = $feed; 275 + $this->setStatus(($action == 'create') ? self::STATUS_CREATED : self::STATUS_UPDATED);
  276 + $this->responseFeed = KT_cmis_atom_service_helper::getObjectFeed($this, $ObjectService, $repositoryId, $newObjectId, 'POST');
285 } 277 }
286 278
287 /** 279 /**
@@ -302,21 +294,18 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { @@ -302,21 +294,18 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
302 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); 294 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt());
303 295
304 // attempt delete - last parameter sets $deleteAllVersions true 296 // attempt delete - last parameter sets $deleteAllVersions true
305 - $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true);  
306 -  
307 - // error?  
308 - if ($response['status_code'] == 1) {  
309 - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']); 297 + try {
  298 + $response = $ObjectService->deleteTree($repositoryId, $this->params[0], 'delete', true);
  299 + }
  300 + catch (Exception $e) {
  301 + $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage());
310 // Expose the responseFeed 302 // Expose the responseFeed
311 $this->responseFeed = $feed; 303 $this->responseFeed = $feed;
312 return null; 304 return null;
313 } 305 }
314 - else {  
315 - $response = $response['results'];  
316 - }  
317 306
318 - // list of failed objects?  
319 - if (is_array($response)) 307 + // non-empty list of failed objects?
  308 + if (count($response))
320 { 309 {
321 $this->setStatus(self::STATUS_SERVER_ERROR); 310 $this->setStatus(self::STATUS_SERVER_ERROR);
322 311
@@ -376,7 +365,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service { @@ -376,7 +365,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
376 // with only the depth different 365 // with only the depth different
377 $depth = 2; 366 $depth = 2;
378 } 367 }
379 - 368 +
380 try { 369 try {
381 $entries = $NavigationService->getDescendants($repositoryId, $folderId, $depth); 370 $entries = $NavigationService->getDescendants($repositoryId, $folderId, $depth);
382 } 371 }
@@ -454,8 +443,7 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { @@ -454,8 +443,7 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service {
454 $response = $NavigationService->getObjectParents($repositoryId, $objectId, false, false); 443 $response = $NavigationService->getObjectParents($repositoryId, $objectId, false, false);
455 } 444 }
456 catch (Exception $e) { 445 catch (Exception $e) {
457 - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage());  
458 - $this->responseFeed = $feed; 446 + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage());
459 return null; 447 return null;
460 } 448 }
461 449
@@ -492,12 +480,11 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service { @@ -492,12 +480,11 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service {
492 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt()); 480 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt());
493 481
494 // attempt delete 482 // attempt delete
495 - $response = $ObjectService->deleteObject($repositoryId, $this->params[0]);  
496 -  
497 - if ($response['status_code'] == 1) {  
498 - $feed = KT_cmis_atom_service_helper::getErrorFeed($this, self::STATUS_SERVER_ERROR, $response['message']);  
499 - // Expose the responseFeed  
500 - $this->responseFeed = $feed; 483 + try {
  484 + $response = $ObjectService->deleteObject($repositoryId, $this->params[0]);
  485 + }
  486 + catch (Exception $e) {
  487 + $this->responseFeed = KT_cmis_atom_service_helper::getErrorFeed($this, $this->getStatusCode($e), $e->getMessage());
501 return null; 488 return null;
502 } 489 }
503 490
webservice/atompub/cmis/KT_cmis_atom_service_helper.inc.php
@@ -62,13 +62,14 @@ class KT_cmis_atom_service_helper { @@ -62,13 +62,14 @@ class KT_cmis_atom_service_helper {
62 self::$repositoryId = $repositoryId; 62 self::$repositoryId = $repositoryId;
63 63
64 $serviceType = $service->getServiceType(); 64 $serviceType = $service->getServiceType();
65 - $response = $ObjectService->getProperties($repositoryId, $objectId, false, false);  
66 -  
67 - if ($response['status_code'] == 1) {  
68 - return KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); 65 + try {
  66 + $response = $ObjectService->getProperties($repositoryId, $objectId, false, false);
  67 + }
  68 + catch (Exception $e) {
  69 + return KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage());
69 } 70 }
70 71
71 - $cmisEntry = $response['results']; 72 + $cmisEntry = $response;
72 $response = null; 73 $response = null;
73 74
74 // POST/PWC responses only send back an entry, not a feed 75 // POST/PWC responses only send back an entry, not a feed
@@ -709,8 +710,11 @@ class KT_cmis_atom_service_helper { @@ -709,8 +710,11 @@ class KT_cmis_atom_service_helper {
709 */ 710 */
710 static public function getContentStream(&$service, &$ObjectService, $repositoryId) 711 static public function getContentStream(&$service, &$ObjectService, $repositoryId)
711 { 712 {
712 - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false);  
713 - if ($response['status_code'] == 1) { 713 + // why do we check the properties first? is it just to determine that the object in fact exists?
  714 + try {
  715 + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false);
  716 + }
  717 + catch (Exception $e) {
714 return null; 718 return null;
715 } 719 }
716 720
@@ -730,15 +734,14 @@ class KT_cmis_atom_service_helper { @@ -730,15 +734,14 @@ class KT_cmis_atom_service_helper {
730 */ 734 */
731 static public function downloadContentStream(&$service, &$ObjectService, $repositoryId) 735 static public function downloadContentStream(&$service, &$ObjectService, $repositoryId)
732 { 736 {
733 - $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false);  
734 - if ($response['status_code'] == 1) {  
735 - $feed = KT_cmis_atom_service_helper::getErrorFeed($service, KT_cmis_atom_service::STATUS_SERVER_ERROR, $response['message']); 737 + try {
  738 + $response = $ObjectService->getProperties($repositoryId, $service->params[0], false, false);
  739 + }
  740 + catch (Exception $e) {
  741 + $feed = KT_cmis_atom_service_helper::getErrorFeed($service, $service->getStatusCode($e), $e->getMessage());
736 $service->responseFeed = $feed; 742 $service->responseFeed = $feed;
737 return null; 743 return null;
738 } 744 }
739 - else {  
740 - $response = $response['results'];  
741 - }  
742 745
743 // TODO also check If-Modified-Since? 746 // TODO also check If-Modified-Since?
744 // $service->headers['If-Modified-Since'] => 2009-07-24 17:16:54 747 // $service->headers['If-Modified-Since'] => 2009-07-24 17:16:54