View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   *
20   */
21  package org.apache.chemistry.opencmis.client.bindings.spi.local;
22  
23  import java.math.BigInteger;
24  import java.util.List;
25  
26  import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
27  import org.apache.chemistry.opencmis.commons.data.Acl;
28  import org.apache.chemistry.opencmis.commons.data.AllowableActions;
29  import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken;
30  import org.apache.chemistry.opencmis.commons.data.ContentStream;
31  import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
32  import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
33  import org.apache.chemistry.opencmis.commons.data.ObjectData;
34  import org.apache.chemistry.opencmis.commons.data.Properties;
35  import org.apache.chemistry.opencmis.commons.data.RenditionData;
36  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
37  import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
38  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
39  import org.apache.chemistry.opencmis.commons.server.CmisService;
40  import org.apache.chemistry.opencmis.commons.server.CmisServiceFactory;
41  import org.apache.chemistry.opencmis.commons.spi.Holder;
42  import org.apache.chemistry.opencmis.commons.spi.ObjectService;
43  
44  public class ObjectServiceImpl extends AbstractLocalService implements ObjectService {
45  
46      /**
47       * Constructor.
48       */
49      public ObjectServiceImpl(BindingSession session, CmisServiceFactory factory) {
50          setSession(session);
51          setServiceFactory(factory);
52      }
53  
54      @Override
55      public String createDocument(String repositoryId, Properties properties, String folderId,
56              ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
57              Acl removeAces, ExtensionsData extension) {
58          CmisService service = getService(repositoryId);
59  
60          try {
61              if (stopBeforeService(service)) {
62                  return null;
63              }
64  
65              String serviceResult = service.createDocument(repositoryId, properties, folderId, contentStream,
66                      versioningState, policies, addAces, removeAces, extension);
67  
68              if (stopAfterService(service)) {
69                  return null;
70              }
71  
72              return serviceResult;
73          } finally {
74              service.close();
75          }
76      }
77  
78      @Override
79      public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
80              String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
81              ExtensionsData extension) {
82          CmisService service = getService(repositoryId);
83  
84          try {
85              if (stopBeforeService(service)) {
86                  return null;
87              }
88  
89              String serviceResult = service.createDocumentFromSource(repositoryId, sourceId, properties, folderId,
90                      versioningState, policies, addAces, removeAces, extension);
91  
92              if (stopAfterService(service)) {
93                  return null;
94              }
95  
96              return serviceResult;
97          } finally {
98              service.close();
99          }
100     }
101 
102     @Override
103     public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
104             Acl addAces, Acl removeAces, ExtensionsData extension) {
105         CmisService service = getService(repositoryId);
106 
107         try {
108             if (stopBeforeService(service)) {
109                 return null;
110             }
111 
112             String serviceResult = service.createFolder(repositoryId, properties, folderId, policies, addAces,
113                     removeAces, extension);
114 
115             if (stopAfterService(service)) {
116                 return null;
117             }
118 
119             return serviceResult;
120         } finally {
121             service.close();
122         }
123     }
124 
125     @Override
126     public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
127             Acl addAces, Acl removeAces, ExtensionsData extension) {
128         CmisService service = getService(repositoryId);
129 
130         try {
131             if (stopBeforeService(service)) {
132                 return null;
133             }
134 
135             String serviceResult = service.createPolicy(repositoryId, properties, folderId, policies, addAces,
136                     removeAces, extension);
137 
138             if (stopAfterService(service)) {
139                 return null;
140             }
141 
142             return serviceResult;
143         } finally {
144             service.close();
145         }
146     }
147 
148     @Override
149     public String createItem(String repositoryId, Properties properties, String folderId, List<String> policies,
150             Acl addAces, Acl removeAces, ExtensionsData extension) {
151         CmisService service = getService(repositoryId);
152 
153         try {
154             if (stopBeforeService(service)) {
155                 return null;
156             }
157             String serviceResult = service.createItem(repositoryId, properties, folderId, policies, addAces,
158                     removeAces, extension);
159 
160             if (stopAfterService(service)) {
161                 return null;
162             }
163 
164             return serviceResult;
165         } finally {
166             service.close();
167         }
168     }
169 
170     @Override
171     public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
172             Acl removeAces, ExtensionsData extension) {
173         CmisService service = getService(repositoryId);
174 
175         try {
176             if (stopBeforeService(service)) {
177                 return null;
178             }
179 
180             String serviceResult = service.createRelationship(repositoryId, properties, policies, addAces, removeAces,
181                     extension);
182 
183             if (stopAfterService(service)) {
184                 return null;
185             }
186 
187             return serviceResult;
188         } finally {
189             service.close();
190         }
191     }
192 
193     @Override
194     public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
195             ExtensionsData extension) {
196         CmisService service = getService(repositoryId);
197 
198         try {
199             if (stopBeforeService(service)) {
200                 return;
201             }
202 
203             service.deleteContentStream(repositoryId, objectId, changeToken, extension);
204 
205             if (stopAfterService(service)) {
206                 return;
207             }
208 
209         } finally {
210             service.close();
211         }
212     }
213 
214     @Override
215     public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
216         CmisService service = getService(repositoryId);
217 
218         try {
219             if (stopBeforeService(service)) {
220                 return;
221             }
222 
223             service.deleteObject(repositoryId, objectId, allVersions, extension);
224 
225             if (stopAfterService(service)) {
226                 return;
227             }
228 
229         } finally {
230             service.close();
231         }
232     }
233 
234     @Override
235     public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
236             UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
237         CmisService service = getService(repositoryId);
238 
239         try {
240             if (stopBeforeService(service)) {
241                 return null;
242             }
243 
244             FailedToDeleteData serviceResult = service.deleteTree(repositoryId, folderId, allVersions, unfileObjects,
245                     continueOnFailure, extension);
246 
247             if (stopAfterService(service)) {
248                 return null;
249             }
250 
251             return serviceResult;
252         } finally {
253             service.close();
254         }
255     }
256 
257     @Override
258     public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
259         CmisService service = getService(repositoryId);
260 
261         try {
262             if (stopBeforeService(service)) {
263                 return null;
264             }
265 
266             AllowableActions serviceResult = service.getAllowableActions(repositoryId, objectId, extension);
267 
268             if (stopAfterService(service)) {
269                 return null;
270             }
271 
272             return serviceResult;
273         } finally {
274             service.close();
275         }
276     }
277 
278     @Override
279     public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
280             BigInteger length, ExtensionsData extension) {
281         CmisService service = getService(repositoryId);
282 
283         try {
284             if (stopBeforeService(service)) {
285                 return null;
286             }
287 
288             ContentStream serviceResult = service.getContentStream(repositoryId, objectId, streamId, offset, length,
289                     extension);
290 
291             if (stopAfterService(service)) {
292                 return null;
293             }
294 
295             return serviceResult;
296         } finally {
297             service.close();
298         }
299     }
300 
301     @Override
302     public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
303             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
304             Boolean includeAcl, ExtensionsData extension) {
305         CmisService service = getService(repositoryId);
306 
307         try {
308             if (stopBeforeService(service)) {
309                 return null;
310             }
311 
312             ObjectData serviceResult = service.getObject(repositoryId, objectId, filter, includeAllowableActions,
313                     includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
314 
315             if (stopAfterService(service)) {
316                 return null;
317             }
318 
319             return serviceResult;
320         } finally {
321             service.close();
322         }
323     }
324 
325     @Override
326     public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
327             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
328             Boolean includeAcl, ExtensionsData extension) {
329         CmisService service = getService(repositoryId);
330 
331         try {
332             if (stopBeforeService(service)) {
333                 return null;
334             }
335 
336             ObjectData serviceResult = service.getObjectByPath(repositoryId, path, filter, includeAllowableActions,
337                     includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension);
338 
339             if (stopAfterService(service)) {
340                 return null;
341             }
342 
343             return serviceResult;
344         } finally {
345             service.close();
346         }
347     }
348 
349     @Override
350     public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
351         CmisService service = getService(repositoryId);
352 
353         try {
354             if (stopBeforeService(service)) {
355                 return null;
356             }
357 
358             Properties serviceResult = service.getProperties(repositoryId, objectId, filter, extension);
359 
360             if (stopAfterService(service)) {
361                 return null;
362             }
363 
364             return serviceResult;
365         } finally {
366             service.close();
367         }
368     }
369 
370     @Override
371     public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
372             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
373         CmisService service = getService(repositoryId);
374 
375         try {
376             if (stopBeforeService(service)) {
377                 return null;
378             }
379 
380             List<RenditionData> serviceResult = service.getRenditions(repositoryId, objectId, renditionFilter,
381                     maxItems, skipCount, extension);
382 
383             if (stopAfterService(service)) {
384                 return null;
385             }
386 
387             return serviceResult;
388         } finally {
389             service.close();
390         }
391     }
392 
393     @Override
394     public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
395             ExtensionsData extension) {
396         CmisService service = getService(repositoryId);
397 
398         try {
399             if (stopBeforeService(service)) {
400                 return;
401             }
402 
403             service.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId, extension);
404 
405             if (stopAfterService(service)) {
406                 return;
407             }
408         } finally {
409             service.close();
410         }
411     }
412 
413     @Override
414     public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
415             Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
416         CmisService service = getService(repositoryId);
417 
418         try {
419             if (stopBeforeService(service)) {
420                 return;
421             }
422 
423             service.setContentStream(repositoryId, objectId, overwriteFlag, changeToken, contentStream, extension);
424 
425             if (stopAfterService(service)) {
426                 return;
427             }
428         } finally {
429             service.close();
430         }
431     }
432 
433     @Override
434     public void appendContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
435             ContentStream contentStream, boolean isLastChunk, ExtensionsData extension) {
436         CmisService service = getService(repositoryId);
437 
438         try {
439             if (stopBeforeService(service)) {
440                 return;
441             }
442 
443             service.appendContentStream(repositoryId, objectId, changeToken, contentStream, isLastChunk, extension);
444 
445             if (stopAfterService(service)) {
446                 return;
447             }
448         } finally {
449             service.close();
450         }
451     }
452 
453     @Override
454     public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
455             Properties properties, ExtensionsData extension) {
456         CmisService service = getService(repositoryId);
457 
458         try {
459             if (stopBeforeService(service)) {
460                 return;
461             }
462 
463             service.updateProperties(repositoryId, objectId, changeToken, properties, extension);
464 
465             if (stopAfterService(service)) {
466                 return;
467             }
468         } finally {
469             service.close();
470         }
471     }
472 
473     @Override
474     public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId,
475             List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties,
476             List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) {
477         CmisService service = getService(repositoryId);
478 
479         try {
480             if (stopBeforeService(service)) {
481                 return null;
482             }
483 
484             List<BulkUpdateObjectIdAndChangeToken> serviceResult = service.bulkUpdateProperties(repositoryId,
485                     objectIdAndChangeToken, properties, addSecondaryTypeIds, removeSecondaryTypeIds, extension);
486 
487             if (stopAfterService(service)) {
488                 return null;
489             }
490 
491             return serviceResult;
492         } finally {
493             service.close();
494         }
495     }
496 }