001/*
002 * This library is part of OpenCms -
003 * the Open Source Content Management System
004 *
005 * Copyright (C) Alkacon Software (https://www.alkacon.com)
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * For further information about Alkacon Software, please see the
018 * company website: https://www.alkacon.com
019 *
020 * For further information about OpenCms, please see the
021 * project website: https://www.opencms.org
022 *
023 * You should have received a copy of the GNU Lesser General Public
024 * License along with this library; if not, write to the Free Software
025 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
026 */
027
028package org.opencms.cmis;
029
030import org.opencms.main.OpenCms;
031
032import java.math.BigInteger;
033import java.util.ArrayList;
034import java.util.List;
035
036import org.apache.chemistry.opencmis.commons.data.Acl;
037import org.apache.chemistry.opencmis.commons.data.AllowableActions;
038import org.apache.chemistry.opencmis.commons.data.ContentStream;
039import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
040import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
041import org.apache.chemistry.opencmis.commons.data.ObjectData;
042import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
043import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
044import org.apache.chemistry.opencmis.commons.data.ObjectList;
045import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
046import org.apache.chemistry.opencmis.commons.data.Properties;
047import org.apache.chemistry.opencmis.commons.data.RenditionData;
048import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
049import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
050import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
051import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
052import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
053import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
054import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
055import org.apache.chemistry.opencmis.commons.enums.VersioningState;
056import org.apache.chemistry.opencmis.commons.exceptions.CmisConnectionException;
057import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
058import org.apache.chemistry.opencmis.commons.server.CallContext;
059import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
060import org.apache.chemistry.opencmis.commons.spi.Holder;
061
062/**
063 * The CMIS service class for OpenCms repositories.<p>
064 *
065 * Typically, a new instance of this class will be created for every CMIS service request. This class delegates the
066 * actual work to an implementation of the {@link I_CmsCmisRepository} class.<p>
067 */
068public class CmsCmisService extends AbstractCmisService {
069
070    /** The call context. */
071    protected CallContext m_callContext;
072
073    /**
074     * Creates a new CMIS service instance.<p>
075     *
076     * @param context the CMIS call context
077     */
078    public CmsCmisService(CallContext context) {
079
080        m_callContext = context;
081    }
082
083    /**
084     * @param repositoryId
085     * @param objectId
086     * @param folderId
087     * @param allVersions
088     * @param extension
089     * @see org.apache.chemistry.opencmis.commons.spi.MultiFilingService#addObjectToFolder(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
090     */
091    @Override
092    public void addObjectToFolder(
093        String repositoryId,
094        String objectId,
095        String folderId,
096        Boolean allVersions,
097        ExtensionsData extension) {
098
099        getRepository(repositoryId).addObjectToFolder(makeContext(), objectId, folderId, allVersions.booleanValue());
100    }
101
102    /**
103     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#applyPolicy(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
104     */
105    @Override
106    public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
107
108        getRepository(repositoryId).applyPolicy(makeContext(), policyId, objectId);
109    }
110
111    /**
112     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#createDocument(java.lang.String, org.apache.chemistry.opencmis.commons.data.Properties, java.lang.String, org.apache.chemistry.opencmis.commons.data.ContentStream, org.apache.chemistry.opencmis.commons.enums.VersioningState, java.util.List, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
113     */
114    @Override
115    public String createDocument(
116        String repositoryId,
117        Properties properties,
118        String folderId,
119        ContentStream contentStream,
120        VersioningState versioningState,
121        List<String> policies,
122        Acl addAces,
123        Acl removeAces,
124        ExtensionsData extension) {
125
126        return getRepository(repositoryId).createDocument(
127            makeContext(),
128            properties,
129            folderId,
130            contentStream,
131            versioningState,
132            policies,
133            addAces,
134            removeAces);
135    }
136
137    /**
138     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#createDocumentFromSource(java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.Properties, java.lang.String, org.apache.chemistry.opencmis.commons.enums.VersioningState, java.util.List, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
139     */
140    @Override
141    public String createDocumentFromSource(
142        String repositoryId,
143        String sourceId,
144        Properties properties,
145        String folderId,
146        VersioningState versioningState,
147        List<String> policies,
148        Acl addAces,
149        Acl removeAces,
150        ExtensionsData extension) {
151
152        return getRepository(repositoryId).createDocumentFromSource(
153            makeContext(),
154            sourceId,
155            properties,
156            folderId,
157            versioningState,
158            policies,
159            addAces,
160            removeAces);
161    }
162
163    /**
164     * @see org.apache.chemistry.opencmis.commons.spi.ObjectService#createFolder(java.lang.String, org.apache.chemistry.opencmis.commons.data.Properties, java.lang.String, java.util.List, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
165     */
166    @Override
167    public String createFolder(
168        String repositoryId,
169        Properties properties,
170        String folderId,
171        List<String> policies,
172        Acl addAces,
173        Acl removeAces,
174        ExtensionsData extension) {
175
176        return getRepository(
177            repositoryId).createFolder(makeContext(), properties, folderId, policies, addAces, removeAces);
178    }
179
180    /**
181     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#createPolicy(java.lang.String, org.apache.chemistry.opencmis.commons.data.Properties, java.lang.String, java.util.List, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
182     */
183    @Override
184    public String createPolicy(
185        String repositoryId,
186        Properties properties,
187        String folderId,
188        List<String> policies,
189        Acl addAces,
190        Acl removeAces,
191        ExtensionsData extension) {
192
193        return getRepository(
194            repositoryId).createPolicy(makeContext(), properties, folderId, policies, addAces, removeAces);
195    }
196
197    /**
198     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#createRelationship(java.lang.String, org.apache.chemistry.opencmis.commons.data.Properties, java.util.List, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.Acl, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
199     */
200    @Override
201    public String createRelationship(
202        String repositoryId,
203        Properties properties,
204        List<String> policies,
205        Acl addAces,
206        Acl removeAces,
207        ExtensionsData extension) {
208
209        return getRepository(repositoryId).createRelationship(makeContext(), properties, policies, addAces, removeAces);
210    }
211
212    /**
213     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#deleteContentStream(java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder, org.apache.chemistry.opencmis.commons.spi.Holder, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
214     */
215    @Override
216    public void deleteContentStream(
217        String repositoryId,
218        Holder<String> objectId,
219        Holder<String> changeToken,
220        ExtensionsData extension) {
221
222        getRepository(repositoryId).deleteContentStream(makeContext(), objectId, changeToken);
223    }
224
225    /**
226     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#deleteObject(java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
227     */
228    @Override
229    public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
230
231        getRepository(repositoryId).deleteObject(makeContext(), objectId, allVersions.booleanValue());
232    }
233
234    /**
235     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#deleteObjectOrCancelCheckOut(java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
236     */
237    @Override
238    public void deleteObjectOrCancelCheckOut(
239        String repositoryId,
240        String objectId,
241        Boolean allVersions,
242        ExtensionsData extension) {
243
244        getRepository(repositoryId).deleteObject(makeContext(), objectId, allVersions.booleanValue());
245    }
246
247    /**
248     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#deleteTree(java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.UnfileObject, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
249     */
250    @Override
251    public FailedToDeleteData deleteTree(
252        String repositoryId,
253        String folderId,
254        Boolean allVersions,
255        UnfileObject unfileObjects,
256        Boolean continueOnFailure,
257        ExtensionsData extension) {
258
259        return getRepository(repositoryId).deleteTree(
260            makeContext(),
261            folderId,
262            allVersions.booleanValue(),
263            unfileObjects,
264            continueOnFailure.booleanValue());
265    }
266
267    /**
268     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getAcl(java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
269     */
270    @Override
271    public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
272
273        return getRepository(repositoryId).getAcl(makeContext(), objectId, onlyBasicPermissions.booleanValue());
274    }
275
276    /**
277     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getAllowableActions(java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
278     */
279    @Override
280    public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
281
282        return getRepository(repositoryId).getAllowableActions(makeContext(), objectId);
283    }
284
285    /**
286     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getAppliedPolicies(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
287     */
288    @Override
289    public List<ObjectData> getAppliedPolicies(
290        String repositoryId,
291        String objectId,
292        String filter,
293        ExtensionsData extension) {
294
295        return getRepository(repositoryId).getAppliedPolicies(makeContext(), objectId, filter);
296    }
297
298    /**
299     *
300     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getCheckedOutDocs(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
301     */
302    @Override
303    public ObjectList getCheckedOutDocs(
304        String repositoryId,
305        String folderId,
306        String filter,
307        String orderBy,
308        Boolean includeAllowableActions,
309        IncludeRelationships includeRelationships,
310        String renditionFilter,
311        BigInteger maxItems,
312        BigInteger skipCount,
313        ExtensionsData extension) {
314
315        return getRepository(repositoryId).getCheckedOutDocs(
316            makeContext(),
317            folderId,
318            filter,
319            orderBy,
320            includeAllowableActions.booleanValue(),
321            includeRelationships,
322            renditionFilter,
323            maxItems,
324            skipCount);
325    }
326
327    /**
328     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getChildren(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
329     */
330    @Override
331    public ObjectInFolderList getChildren(
332        String repositoryId,
333        String folderId,
334        String filter,
335        String orderBy,
336        Boolean includeAllowableActions,
337        IncludeRelationships includeRelationships,
338        String renditionFilter,
339        Boolean includePathSegment,
340        BigInteger maxItems,
341        BigInteger skipCount,
342        ExtensionsData extension) {
343
344        return getRepository(repositoryId).getChildren(
345            makeContext(),
346            folderId,
347            filter,
348            orderBy,
349            includeAllowableActions.booleanValue(),
350            includeRelationships,
351            renditionFilter,
352            includePathSegment.booleanValue(),
353            maxItems,
354            skipCount);
355    }
356
357    /**
358     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getContentChanges(java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder, java.lang.Boolean, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
359     */
360    @Override
361    public ObjectList getContentChanges(
362        String repositoryId,
363        Holder<String> changeLogToken,
364        Boolean includeProperties,
365        String filter,
366        Boolean includePolicyIds,
367        Boolean includeAcl,
368        BigInteger maxItems,
369        ExtensionsData extension) {
370
371        return getRepository(repositoryId).getContentChanges(
372            makeContext(),
373            changeLogToken,
374            includeProperties.booleanValue(),
375            filter,
376            includePolicyIds.booleanValue(),
377            includeAcl.booleanValue(),
378            maxItems);
379    }
380
381    /**
382     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getContentStream(java.lang.String, java.lang.String, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
383     */
384    @Override
385    public ContentStream getContentStream(
386        String repositoryId,
387        String objectId,
388        String streamId,
389        BigInteger offset,
390        BigInteger length,
391        ExtensionsData extension) {
392
393        return getRepository(repositoryId).getContentStream(makeContext(), objectId, streamId, offset, length);
394    }
395
396    /**
397     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getDescendants(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
398     */
399    @Override
400    public List<ObjectInFolderContainer> getDescendants(
401        String repositoryId,
402        String folderId,
403        BigInteger depth,
404        String filter,
405        Boolean includeAllowableActions,
406        IncludeRelationships includeRelationships,
407        String renditionFilter,
408        Boolean includePathSegment,
409        ExtensionsData extension) {
410
411        return getRepository(repositoryId).getDescendants(
412            makeContext(),
413            folderId,
414            depth,
415            filter,
416            includeAllowableActions.booleanValue(),
417            includePathSegment.booleanValue(),
418            false);
419    }
420
421    /**
422     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getFolderParent(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
423     */
424    @Override
425    public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
426
427        return getRepository(repositoryId).getFolderParent(makeContext(), folderId, filter);
428    }
429
430    /**
431     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getFolderTree(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
432     */
433    @Override
434    public List<ObjectInFolderContainer> getFolderTree(
435        String repositoryId,
436        String folderId,
437        BigInteger depth,
438        String filter,
439        Boolean includeAllowableActions,
440        IncludeRelationships includeRelationships,
441        String renditionFilter,
442        Boolean includePathSegment,
443        ExtensionsData extension) {
444
445        return getRepository(repositoryId).getDescendants(
446            makeContext(),
447            folderId,
448            depth,
449            filter,
450            includeAllowableActions.booleanValue(),
451            includePathSegment.booleanValue(),
452            true);
453    }
454
455    /**
456     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getObject(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
457     */
458    @Override
459    public ObjectData getObject(
460        String repositoryId,
461        String objectId,
462        String filter,
463        Boolean includeAllowableActions,
464        IncludeRelationships includeRelationships,
465        String renditionFilter,
466        Boolean includePolicyIds,
467        Boolean includeAcl,
468        ExtensionsData extension) {
469
470        return getRepository(repositoryId).getObject(
471            makeContext(),
472            objectId,
473            filter,
474            includeAllowableActions.booleanValue(),
475            includeRelationships,
476            renditionFilter,
477            includePolicyIds.booleanValue(),
478            includeAcl.booleanValue());
479    }
480
481    /**
482     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getObjectByPath(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
483     */
484    @Override
485    public ObjectData getObjectByPath(
486        String repositoryId,
487        String path,
488        String filter,
489        Boolean includeAllowableActions,
490        IncludeRelationships includeRelationships,
491        String renditionFilter,
492        Boolean includePolicyIds,
493        Boolean includeAcl,
494        ExtensionsData extension) {
495
496        return getRepository(repositoryId).getObjectByPath(
497            makeContext(),
498            path,
499            filter,
500            includeAllowableActions.booleanValue(),
501            includeRelationships,
502            renditionFilter,
503            includePolicyIds.booleanValue(),
504            includeAcl.booleanValue());
505    }
506
507    /**
508     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getObjectInfo(java.lang.String, java.lang.String)
509     */
510    @Override
511    public ObjectInfo getObjectInfo(String repositoryId, String objectId) {
512
513        ObjectInfo result = super.getObjectInfo(repositoryId, objectId);
514        return result;
515    }
516
517    /**
518     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getObjectParents(java.lang.String, java.lang.String, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
519     */
520    @Override
521    public List<ObjectParentData> getObjectParents(
522        String repositoryId,
523        String objectId,
524        String filter,
525        Boolean includeAllowableActions,
526        IncludeRelationships includeRelationships,
527        String renditionFilter,
528        Boolean includeRelativePathSegment,
529        ExtensionsData extension) {
530
531        return getRepository(repositoryId).getObjectParents(
532            makeContext(),
533            objectId,
534            filter,
535            includeAllowableActions.booleanValue(),
536            includeRelativePathSegment.booleanValue());
537    }
538
539    /**
540     * Gets all or a subset of relationships associated with an independent
541     * object.
542     */
543    @Override
544    public ObjectList getObjectRelationships(
545        String repositoryId,
546        String objectId,
547        Boolean includeSubRelationshipTypes,
548        RelationshipDirection relationshipDirection,
549        String typeId,
550        String filter,
551        Boolean includeAllowableActions,
552        BigInteger maxItems,
553        BigInteger skipCount,
554        ExtensionsData extension) {
555
556        return getRepository(repositoryId).getObjectRelationships(
557            makeContext(),
558            objectId,
559            includeSubRelationshipTypes.booleanValue(),
560            relationshipDirection,
561            typeId,
562            filter,
563            includeAllowableActions.booleanValue(),
564            maxItems,
565            skipCount);
566    }
567
568    /**
569     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getProperties(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
570     */
571    @Override
572    public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
573
574        return getRepository(repositoryId).getProperties(makeContext(), objectId, filter);
575    }
576
577    /**
578     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getRenditions(java.lang.String, java.lang.String, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
579     */
580    @Override
581    public List<RenditionData> getRenditions(
582        String repositoryId,
583        String objectId,
584        String renditionFilter,
585        BigInteger maxItems,
586        BigInteger skipCount,
587        ExtensionsData extension) {
588
589        return getRepository(repositoryId).getRenditions(makeContext(), objectId, renditionFilter, maxItems, skipCount);
590    }
591
592    /**
593     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getRepositoryInfo(java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
594     */
595    @Override
596    public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
597
598        return getRepository(repositoryId).getRepositoryInfo();
599    }
600
601    /**
602     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getRepositoryInfos(org.apache.chemistry.opencmis.commons.data.ExtensionsData)
603     */
604    @Override
605    public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
606
607        List<RepositoryInfo> result = new ArrayList<RepositoryInfo>();
608        for (I_CmsCmisRepository repository : OpenCms.getRepositoryManager().getRepositories(
609            I_CmsCmisRepository.class)) {
610            result.add(repository.getRepositoryInfo());
611        }
612        return result;
613    }
614
615    /**
616     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getTypeChildren(java.lang.String, java.lang.String, java.lang.Boolean, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
617     */
618    @Override
619    public TypeDefinitionList getTypeChildren(
620        String repositoryId,
621        String typeId,
622        Boolean includePropertyDefinitions,
623        BigInteger maxItems,
624        BigInteger skipCount,
625        ExtensionsData extension) {
626
627        return getRepository(repositoryId).getTypeChildren(
628            makeContext(),
629            typeId,
630            includePropertyDefinitions.booleanValue(),
631            maxItems,
632            skipCount);
633    }
634
635    /**
636     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getTypeDefinition(java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
637     */
638    @Override
639    public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
640
641        return getRepository(repositoryId).getTypeDefinition(makeContext(), typeId);
642    }
643
644    /**
645     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#getTypeDescendants(java.lang.String, java.lang.String, java.math.BigInteger, java.lang.Boolean, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
646     */
647    @Override
648    public List<TypeDefinitionContainer> getTypeDescendants(
649        String repositoryId,
650        String typeId,
651        BigInteger depth,
652        Boolean includePropertyDefinitions,
653        ExtensionsData extension) {
654
655        return getRepository(
656            repositoryId).getTypeDescendants(makeContext(), typeId, depth, includePropertyDefinitions.booleanValue());
657    }
658
659    /**
660     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#moveObject(java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
661     */
662    @Override
663    public void moveObject(
664        String repositoryId,
665        Holder<String> objectId,
666        String targetFolderId,
667        String sourceFolderId,
668        ExtensionsData extension) {
669
670        getRepository(repositoryId).moveObject(makeContext(), objectId, targetFolderId, sourceFolderId);
671    }
672
673    /**
674     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#query(java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, org.apache.chemistry.opencmis.commons.enums.IncludeRelationships, java.lang.String, java.math.BigInteger, java.math.BigInteger, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
675     */
676    @Override
677    public ObjectList query(
678        String repositoryId,
679        String statement,
680        Boolean searchAllVersions,
681        Boolean includeAllowableActions,
682        IncludeRelationships includeRelationships,
683        String renditionFilter,
684        BigInteger maxItems,
685        BigInteger skipCount,
686        ExtensionsData extension) {
687
688        return getRepository(repositoryId).query(
689            makeContext(),
690            statement,
691            searchAllVersions.booleanValue(),
692            includeAllowableActions.booleanValue(),
693            includeRelationships,
694            renditionFilter,
695            maxItems,
696            skipCount);
697    }
698
699    /**
700     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#removeObjectFromFolder(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
701     */
702    @Override
703    public void removeObjectFromFolder(
704        String repositoryId,
705        String objectId,
706        String folderId,
707        ExtensionsData extension) {
708
709        getRepository(repositoryId).removeObjectFromFolder(makeContext(), objectId, folderId);
710    }
711
712    /**
713     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#removePolicy(java.lang.String, java.lang.String, java.lang.String, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
714     */
715    @Override
716    public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
717
718        getRepository(repositoryId).removePolicy(makeContext(), policyId, objectId);
719    }
720
721    /**
722     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#setContentStream(java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder, java.lang.Boolean, org.apache.chemistry.opencmis.commons.spi.Holder, org.apache.chemistry.opencmis.commons.data.ContentStream, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
723     */
724    @Override
725    public void setContentStream(
726        String repositoryId,
727        Holder<String> objectId,
728        Boolean overwriteFlag,
729        Holder<String> changeToken,
730        ContentStream contentStream,
731        ExtensionsData extension) {
732
733        getRepository(repositoryId).setContentStream(
734            makeContext(),
735            objectId,
736            overwriteFlag.booleanValue(),
737            changeToken,
738            contentStream);
739    }
740
741    /**
742     * @see org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService#updateProperties(java.lang.String, org.apache.chemistry.opencmis.commons.spi.Holder, org.apache.chemistry.opencmis.commons.spi.Holder, org.apache.chemistry.opencmis.commons.data.Properties, org.apache.chemistry.opencmis.commons.data.ExtensionsData)
743     */
744    @Override
745    public void updateProperties(
746        String repositoryId,
747        Holder<String> objectId,
748        Holder<String> changeToken,
749        Properties properties,
750        ExtensionsData extension) {
751
752        getRepository(repositoryId).updateProperties(makeContext(), objectId, changeToken, properties);
753    }
754
755    /**
756     * Gets the repository for a given repository id.<p>
757     *
758     * @param repositoryId the repository id
759     *
760     * @return the repository with the given id
761     */
762    protected I_CmsCmisRepository getRepository(String repositoryId) {
763
764        I_CmsCmisRepository result = OpenCms.getRepositoryManager().getRepository(
765            repositoryId,
766            I_CmsCmisRepository.class);
767        if (result == null) {
768            throw new CmisConnectionException("missing repository: " + repositoryId);
769        }
770        return result;
771    }
772
773    /**
774     * Creates a call context wrapper.<p>
775     *
776     * @return the created wrapper
777     */
778    private CmsCmisCallContext makeContext() {
779
780        return new CmsCmisCallContext(m_callContext, this);
781    }
782}