This project has retired. For details please refer to its
Attic page.
ObjectService xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.impl.browser;
20
21 import static org.apache.chemistry.opencmis.commons.impl.Constants.MEDIATYPE_OCTETSTREAM;
22 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ACL;
23 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ALLOWABLE_ACTIONS;
24 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
25 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_POLICY_IDS;
26 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RELATIONSHIPS;
27 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RENDITION_FILTER;
28 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_RETURN_VERSION;
29 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SOURCE_FOLDER_ID;
30 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_SOURCE_ID;
31 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_STREAM_ID;
32 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TARGET_FOLDER_ID;
33 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_TRANSACTION;
34 import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_VERSIONIG_STATE;
35 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.RESOURCE_CONTENT;
36 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.compileBaseUrl;
37 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.compileUrl;
38 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.CONTEXT_OBJECT_ID;
39 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.CONTEXT_OBJECT_TYPE_ID;
40 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createAddAcl;
41 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createContentStream;
42 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createCookieValue;
43 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createPolicies;
44 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createProperties;
45 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.createRemoveAcl;
46 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.getSimpleObject;
47 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.setCookie;
48 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.setStatus;
49 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.writeEmpty;
50 import static org.apache.chemistry.opencmis.server.impl.browser.BrowserBindingUtils.writeJSON;
51 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getBigIntegerParameter;
52 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getBooleanParameter;
53 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getEnumParameter;
54 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getStringParameter;
55
56 import java.io.BufferedInputStream;
57 import java.io.BufferedOutputStream;
58 import java.io.InputStream;
59 import java.io.OutputStream;
60 import java.math.BigInteger;
61 import java.util.List;
62
63 import javax.servlet.http.HttpServletRequest;
64 import javax.servlet.http.HttpServletResponse;
65
66 import org.apache.chemistry.opencmis.commons.PropertyIds;
67 import org.apache.chemistry.opencmis.commons.data.AllowableActions;
68 import org.apache.chemistry.opencmis.commons.data.ContentStream;
69 import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
70 import org.apache.chemistry.opencmis.commons.data.ObjectData;
71 import org.apache.chemistry.opencmis.commons.data.Properties;
72 import org.apache.chemistry.opencmis.commons.data.PropertyData;
73 import org.apache.chemistry.opencmis.commons.data.RenditionData;
74 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
75 import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
76 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
77 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
78 import org.apache.chemistry.opencmis.commons.impl.Constants;
79 import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
80 import org.apache.chemistry.opencmis.commons.impl.MimeHelper;
81 import org.apache.chemistry.opencmis.commons.impl.ReturnVersion;
82 import org.apache.chemistry.opencmis.commons.impl.TypeCache;
83 import org.apache.chemistry.opencmis.commons.impl.json.JSONArray;
84 import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
85 import org.apache.chemistry.opencmis.commons.impl.server.TypeCacheImpl;
86 import org.apache.chemistry.opencmis.commons.server.CallContext;
87 import org.apache.chemistry.opencmis.commons.server.CmisService;
88 import org.apache.chemistry.opencmis.commons.spi.Holder;
89
90
91
92
93 public final class ObjectService {
94
95 private static final int BUFFER_SIZE = 64 * 1024;
96
97 private ObjectService() {
98 }
99
100
101
102
103 public static void createDocument(CallContext context, CmisService service, String repositoryId,
104 HttpServletRequest request, HttpServletResponse response) throws Exception {
105
106 String folderId = (String) context.get(CONTEXT_OBJECT_ID);
107 VersioningState versioningState = getEnumParameter(request, PARAM_VERSIONIG_STATE, VersioningState.class);
108 String transaction = getStringParameter(request, PARAM_TRANSACTION);
109
110
111 ControlParser cp = new ControlParser(request);
112 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
113
114 String newObjectId = service.createDocument(repositoryId, createProperties(cp, null, typeCache), folderId,
115 createContentStream(request), versioningState, createPolicies(cp), createAddAcl(cp),
116 createRemoveAcl(cp), null);
117
118 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
119 if (object == null) {
120 throw new CmisRuntimeException("New document is null!");
121 }
122
123
124 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
125
126 setStatus(request, response, HttpServletResponse.SC_CREATED);
127 setCookie(request, response, repositoryId, transaction,
128 createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
129
130 writeJSON(jsonObject, request, response);
131 }
132
133
134
135
136 public static void createDocumentFromSource(CallContext context, CmisService service, String repositoryId,
137 HttpServletRequest request, HttpServletResponse response) throws Exception {
138
139 String folderId = (String) context.get(CONTEXT_OBJECT_ID);
140 String sourceId = getStringParameter(request, PARAM_SOURCE_ID);
141 VersioningState versioningState = getEnumParameter(request, PARAM_VERSIONIG_STATE, VersioningState.class);
142 String transaction = getStringParameter(request, PARAM_TRANSACTION);
143
144
145 ControlParser cp = new ControlParser(request);
146 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
147
148 ObjectData sourceDoc = getSimpleObject(service, repositoryId, sourceId);
149 PropertyData<?> sourceTypeId = sourceDoc.getProperties().getProperties().get(PropertyIds.OBJECT_TYPE_ID);
150 if (sourceTypeId == null || sourceTypeId.getFirstValue() == null) {
151 throw new CmisRuntimeException("Source object has no type!?!");
152 }
153
154 String newObjectId = service.createDocumentFromSource(repositoryId, sourceId,
155 createProperties(cp, sourceTypeId.getFirstValue().toString(), typeCache), folderId, versioningState,
156 createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
157
158 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
159 if (object == null) {
160 throw new CmisRuntimeException("New document is null!");
161 }
162
163
164 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
165
166 setStatus(request, response, HttpServletResponse.SC_CREATED);
167 setCookie(request, response, repositoryId, transaction,
168 createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
169
170 writeJSON(jsonObject, request, response);
171 }
172
173
174
175
176 public static void createFolder(CallContext context, CmisService service, String repositoryId,
177 HttpServletRequest request, HttpServletResponse response) throws Exception {
178
179 String folderId = (String) context.get(CONTEXT_OBJECT_ID);
180 String transaction = getStringParameter(request, PARAM_TRANSACTION);
181
182
183 ControlParser cp = new ControlParser(request);
184 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
185
186 String newObjectId = service.createFolder(repositoryId, createProperties(cp, null, typeCache), folderId,
187 createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
188
189 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
190 if (object == null) {
191 throw new CmisRuntimeException("New folder is null!");
192 }
193
194
195 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
196
197 setStatus(request, response, HttpServletResponse.SC_CREATED);
198 setCookie(request, response, repositoryId, transaction,
199 createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
200
201 writeJSON(jsonObject, request, response);
202 }
203
204
205
206
207 public static void createPolicy(CallContext context, CmisService service, String repositoryId,
208 HttpServletRequest request, HttpServletResponse response) throws Exception {
209
210 String folderId = (String) context.get(CONTEXT_OBJECT_ID);
211 String transaction = getStringParameter(request, PARAM_TRANSACTION);
212
213
214 ControlParser cp = new ControlParser(request);
215 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
216
217 String newObjectId = service.createPolicy(repositoryId, createProperties(cp, null, typeCache), folderId,
218 createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
219
220 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
221 if (object == null) {
222 throw new CmisRuntimeException("New policy is null!");
223 }
224
225
226 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
227
228 setStatus(request, response, HttpServletResponse.SC_CREATED);
229 setCookie(request, response, repositoryId, transaction,
230 createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
231
232 writeJSON(jsonObject, request, response);
233 }
234
235
236
237
238 public static void createRelationship(CallContext context, CmisService service, String repositoryId,
239 HttpServletRequest request, HttpServletResponse response) throws Exception {
240
241 String transaction = getStringParameter(request, PARAM_TRANSACTION);
242
243
244 ControlParser cp = new ControlParser(request);
245 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
246
247 String newObjectId = service.createRelationship(repositoryId, createProperties(cp, null, typeCache),
248 createPolicies(cp), createAddAcl(cp), createRemoveAcl(cp), null);
249
250 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
251 if (object == null) {
252 throw new CmisRuntimeException("New relationship is null!");
253 }
254
255
256 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
257
258 setStatus(request, response, HttpServletResponse.SC_CREATED);
259 setCookie(request, response, repositoryId, transaction,
260 createCookieValue(HttpServletResponse.SC_CREATED, object.getId(), null, null));
261
262 writeJSON(jsonObject, request, response);
263 }
264
265
266
267
268 public static void updateProperties(CallContext context, CmisService service, String repositoryId,
269 HttpServletRequest request, HttpServletResponse response) throws Exception {
270
271 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
272 String typeId = (String) context.get(CONTEXT_OBJECT_TYPE_ID);
273 String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
274 String transaction = getStringParameter(request, PARAM_TRANSACTION);
275
276
277 ControlParser cp = new ControlParser(request);
278 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
279 Holder<String> objectIdHolder = new Holder<String>(objectId);
280 Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
281
282 service.updateProperties(repositoryId, objectIdHolder, changeTokenHolder,
283 createProperties(cp, typeId, typeCache), null);
284
285 String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
286
287 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
288 if (object == null) {
289 throw new CmisRuntimeException("Object is null!");
290 }
291
292
293 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
294
295 int status = HttpServletResponse.SC_OK;
296 if (!objectId.equals(newObjectId)) {
297 status = HttpServletResponse.SC_CREATED;
298 }
299
300 setStatus(request, response, status);
301 setCookie(request, response, repositoryId, transaction, createCookieValue(status, object.getId(), null, null));
302
303 writeJSON(jsonObject, request, response);
304 }
305
306
307
308
309 public static void getProperties(CallContext context, CmisService service, String repositoryId,
310 HttpServletRequest request, HttpServletResponse response) throws Exception {
311
312 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
313 ReturnVersion returnVersion = getEnumParameter(request, PARAM_RETURN_VERSION, ReturnVersion.class);
314 String filter = getStringParameter(request, PARAM_FILTER);
315
316
317 Properties properties;
318
319 if (returnVersion == ReturnVersion.LATEST || returnVersion == ReturnVersion.LASTESTMAJOR) {
320 properties = service.getPropertiesOfLatestVersion(repositoryId, objectId, null,
321 returnVersion == ReturnVersion.LASTESTMAJOR, filter, null);
322 } else {
323 properties = service.getProperties(repositoryId, objectId, filter, null);
324 }
325
326 if (properties == null) {
327 throw new CmisRuntimeException("Properties are null!");
328 }
329
330
331 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
332 JSONObject jsonObject = JSONConverter.convert(properties, objectId, typeCache, false);
333
334 response.setStatus(HttpServletResponse.SC_OK);
335 writeJSON(jsonObject, request, response);
336 }
337
338
339
340
341 public static void getObject(CallContext context, CmisService service, String repositoryId,
342 HttpServletRequest request, HttpServletResponse response) throws Exception {
343
344 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
345 ReturnVersion returnVersion = getEnumParameter(request, PARAM_RETURN_VERSION, ReturnVersion.class);
346 String filter = getStringParameter(request, PARAM_FILTER);
347 Boolean includeAllowableActions = getBooleanParameter(request, PARAM_ALLOWABLE_ACTIONS);
348 IncludeRelationships includeRelationships = getEnumParameter(request, PARAM_RELATIONSHIPS,
349 IncludeRelationships.class);
350 String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
351 Boolean includePolicyIds = getBooleanParameter(request, PARAM_POLICY_IDS);
352 Boolean includeAcl = getBooleanParameter(request, PARAM_ACL);
353
354
355 ObjectData object;
356
357 if (returnVersion == ReturnVersion.LATEST || returnVersion == ReturnVersion.LASTESTMAJOR) {
358 object = service.getObjectOfLatestVersion(repositoryId, objectId, null,
359 returnVersion == ReturnVersion.LASTESTMAJOR, filter, includeAllowableActions, includeRelationships,
360 renditionFilter, includePolicyIds, includeAcl, null);
361 } else {
362 object = service.getObject(repositoryId, objectId, filter, includeAllowableActions, includeRelationships,
363 renditionFilter, includePolicyIds, includeAcl, null);
364 }
365
366 if (object == null) {
367 throw new CmisRuntimeException("Object is null!");
368 }
369
370
371 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
372 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
373
374 response.setStatus(HttpServletResponse.SC_OK);
375 writeJSON(jsonObject, request, response);
376 }
377
378
379
380
381 public static void getAllowableActions(CallContext context, CmisService service, String repositoryId,
382 HttpServletRequest request, HttpServletResponse response) throws Exception {
383
384 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
385
386 AllowableActions allowableActions = service.getAllowableActions(repositoryId, objectId, null);
387
388 JSONObject jsonAllowableActions = JSONConverter.convert(allowableActions);
389
390 response.setStatus(HttpServletResponse.SC_OK);
391 writeJSON(jsonAllowableActions, request, response);
392 }
393
394
395
396
397 public static void getRenditions(CallContext context, CmisService service, String repositoryId,
398 HttpServletRequest request, HttpServletResponse response) throws Exception {
399
400 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
401 String renditionFilter = getStringParameter(request, PARAM_RENDITION_FILTER);
402 BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
403 BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
404
405
406 List<RenditionData> renditions = service.getRenditions(repositoryId, objectId, renditionFilter, maxItems,
407 skipCount, null);
408
409 JSONArray jsonRenditions = new JSONArray();
410 if (renditions != null) {
411 for (RenditionData rendition : renditions) {
412 jsonRenditions.add(JSONConverter.convert(rendition));
413 }
414 }
415
416 response.setStatus(HttpServletResponse.SC_OK);
417 writeJSON(jsonRenditions, request, response);
418 }
419
420
421
422
423 public static void getContentStream(CallContext context, CmisService service, String repositoryId,
424 HttpServletRequest request, HttpServletResponse response) throws Exception {
425
426 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
427 String streamId = getStringParameter(request, PARAM_STREAM_ID);
428
429 BigInteger offset = context.getOffset();
430 BigInteger length = context.getLength();
431
432
433 ContentStream content = service.getContentStream(repositoryId, objectId, streamId, offset, length, null);
434
435 if (content == null || content.getStream() == null) {
436 throw new CmisRuntimeException("Content stream is null!");
437 }
438
439 String contentType = content.getMimeType();
440 if (contentType == null) {
441 contentType = MEDIATYPE_OCTETSTREAM;
442 }
443
444
445 if (offset == null && length == null) {
446 response.setStatus(HttpServletResponse.SC_OK);
447 } else {
448 setStatus(request, response, HttpServletResponse.SC_PARTIAL_CONTENT);
449 }
450 response.setContentType(contentType);
451 if (content.getFileName() != null) {
452 response.setHeader(MimeHelper.CONTENT_DISPOSITION,
453 MimeHelper.encodeContentDisposition(MimeHelper.DISPOSITION_INLINE, content.getFileName()));
454 }
455
456
457 InputStream in = new BufferedInputStream(content.getStream(), BUFFER_SIZE);
458 OutputStream out = new BufferedOutputStream(response.getOutputStream());
459
460 byte[] buffer = new byte[BUFFER_SIZE];
461 int b;
462 while ((b = in.read(buffer)) > -1) {
463 out.write(buffer, 0, b);
464 }
465
466 in.close();
467 out.flush();
468 }
469
470
471
472
473 public static void deleteObject(CallContext context, CmisService service, String repositoryId,
474 HttpServletRequest request, HttpServletResponse response) throws Exception {
475
476 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
477 Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
478
479 service.deleteObject(repositoryId, objectId, allVersions, null);
480
481 response.setStatus(HttpServletResponse.SC_OK);
482 writeEmpty(request, response);
483 }
484
485
486
487
488 public static void deleteTree(CallContext context, CmisService service, String repositoryId,
489 HttpServletRequest request, HttpServletResponse response) throws Exception {
490
491 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
492 Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
493 UnfileObject unfileObjects = getEnumParameter(request, Constants.PARAM_UNFILE_OBJECTS, UnfileObject.class);
494 Boolean continueOnFailure = getBooleanParameter(request, Constants.PARAM_CONTINUE_ON_FAILURE);
495
496
497 FailedToDeleteData ftd = service.deleteTree(repositoryId, objectId, allVersions, unfileObjects,
498 continueOnFailure, null);
499
500 response.setStatus(HttpServletResponse.SC_OK);
501
502 if ((ftd != null) && (ftd.getIds() != null) && (ftd.getIds().size() > 0)) {
503 JSONObject jsonObject = JSONConverter.convert(ftd);
504 writeJSON(jsonObject, request, response);
505 return;
506 }
507
508 writeEmpty(request, response);
509 }
510
511
512
513
514 public static void deleteContentStream(CallContext context, CmisService service, String repositoryId,
515 HttpServletRequest request, HttpServletResponse response) throws Exception {
516
517 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
518 String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
519
520
521 Holder<String> objectIdHolder = new Holder<String>(objectId);
522 Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
523 service.deleteContentStream(repositoryId, objectIdHolder, changeTokenHolder, null);
524
525 String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
526
527 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
528 if (object == null) {
529 throw new CmisRuntimeException("Object is null!");
530 }
531
532 response.setStatus(HttpServletResponse.SC_OK);
533
534
535 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
536 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
537
538 writeJSON(jsonObject, request, response);
539 }
540
541
542
543
544 public static void setContentStream(CallContext context, CmisService service, String repositoryId,
545 HttpServletRequest request, HttpServletResponse response) throws Exception {
546
547 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
548 String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
549 Boolean overwriteFlag = getBooleanParameter(request, Constants.PARAM_OVERWRITE_FLAG);
550
551
552 Holder<String> objectIdHolder = new Holder<String>(objectId);
553 Holder<String> changeTokenHolder = (changeToken == null ? null : new Holder<String>(changeToken));
554 service.setContentStream(repositoryId, objectIdHolder, overwriteFlag, changeTokenHolder,
555 createContentStream(request), null);
556
557 String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
558
559 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
560 if (object == null) {
561 throw new CmisRuntimeException("Object is null!");
562 }
563
564
565 String location = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_CONTENT, newObjectId);
566
567 setStatus(request, response, HttpServletResponse.SC_CREATED);
568 response.setHeader("Location", location);
569
570
571 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
572 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
573
574 writeJSON(jsonObject, request, response);
575 }
576
577
578
579
580 public static void moveObject(CallContext context, CmisService service, String repositoryId,
581 HttpServletRequest request, HttpServletResponse response) throws Exception {
582
583 String objectId = (String) context.get(CONTEXT_OBJECT_ID);
584 String targetFolderId = getStringParameter(request, PARAM_TARGET_FOLDER_ID);
585 String sourceFolderId = getStringParameter(request, PARAM_SOURCE_FOLDER_ID);
586
587
588 Holder<String> objectIdHolder = new Holder<String>(objectId);
589 service.moveObject(repositoryId, objectIdHolder, targetFolderId, sourceFolderId, null);
590
591 String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
592
593 ObjectData object = getSimpleObject(service, repositoryId, newObjectId);
594 if (object == null) {
595 throw new CmisRuntimeException("Object is null!");
596 }
597
598
599 String location = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_CONTENT, newObjectId);
600
601 setStatus(request, response, HttpServletResponse.SC_CREATED);
602 response.setHeader("Location", location);
603
604
605 TypeCache typeCache = new TypeCacheImpl(repositoryId, service);
606 JSONObject jsonObject = JSONConverter.convert(object, typeCache, false);
607
608 writeJSON(jsonObject, request, response);
609 }
610 }