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 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 119 $objectId = $this->ObjectService->createDocument($repositoryId, $properties, $folderId, $contentStream,
123 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 144 try {
155 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 164 try {
182 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 185 try {
210 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 205 try {
237 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 215 public function deleteTree($repositoryId, $objectId, $changeToken = null, $unfileNonfolderObject = 'delete', $continueOnFailure = false)
254 216 {
  217 + $failed = array();
  218 +
255 219 try {
256 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 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 252 try {
300 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 121 return null;
122 122 }
123 123  
124   - $response = $response['results'];
125   -
126 124 $folderName = $response['properties']['name']['value'];
127 125 }
128 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 138 $this->responseFeed = $feed;
141 139 return null;
142 140 }
143   -
  141 +
144 142 // we know that a folder will only have one parent, so we can assume element 0
145 143 $folderId = $response['properties']['objectId']['value'];
146 144 $folderName = $response['properties']['name']['value'];
... ... @@ -151,7 +149,7 @@ class KT_cmis_atom_service_folder extends KT_cmis_atom_service {
151 149  
152 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 153 $NavigationService = new KTNavigationService(KT_cmis_atom_service_helper::getKt());
156 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 230 {
233 231 // TODO detection and passing of optional parameters (policies, ACEs, etc...) as well as support for other object-types
234 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 241 else {
238 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 257 else {
254   - $error = $newObjectId['message'];
  258 + $error = 'Unknown Object Type';
255 259 }
256 260 }
257 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 271 // FIXME why set this? it does not appear to get used
271 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 294 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt());
303 295  
304 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 302 // Expose the responseFeed
311 303 $this->responseFeed = $feed;
312 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 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 365 // with only the depth different
377 366 $depth = 2;
378 367 }
379   -
  368 +
380 369 try {
381 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 443 $response = $NavigationService->getObjectParents($repositoryId, $objectId, false, false);
455 444 }
456 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 447 return null;
460 448 }
461 449  
... ... @@ -492,12 +480,11 @@ class KT_cmis_atom_service_document extends KT_cmis_atom_service {
492 480 $ObjectService = new KTObjectService(KT_cmis_atom_service_helper::getKt());
493 481  
494 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 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 62 self::$repositoryId = $repositoryId;
63 63  
64 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 73 $response = null;
73 74  
74 75 // POST/PWC responses only send back an entry, not a feed
... ... @@ -709,8 +710,11 @@ class KT_cmis_atom_service_helper {
709 710 */
710 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 718 return null;
715 719 }
716 720  
... ... @@ -730,15 +734,14 @@ class KT_cmis_atom_service_helper {
730 734 */
731 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 742 $service->responseFeed = $feed;
737 743 return null;
738 744 }
739   - else {
740   - $response = $response['results'];
741   - }
742 745  
743 746 // TODO also check If-Modified-Since?
744 747 // $service->headers['If-Modified-Since'] => 2009-07-24 17:16:54
... ...