This project has retired. For details please refer to its Attic page.
ObjectService xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.commons.spi;
20  
21  import java.math.BigInteger;
22  import java.util.List;
23  
24  import org.apache.chemistry.opencmis.commons.data.Acl;
25  import org.apache.chemistry.opencmis.commons.data.AllowableActions;
26  import org.apache.chemistry.opencmis.commons.data.ContentStream;
27  import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
28  import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
29  import org.apache.chemistry.opencmis.commons.data.ObjectData;
30  import org.apache.chemistry.opencmis.commons.data.Properties;
31  import org.apache.chemistry.opencmis.commons.data.RenditionData;
32  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
33  import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
34  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
35  
36  /**
37   * Object Service interface.
38   * 
39   * <p>
40   * <em>
41   * See CMIS 1.0 specification for details on the operations, parameters,
42   * exceptions and the domain model.
43   * </em>
44   * </p>
45   */
46  public interface ObjectService {
47  
48      /**
49       * Creates a document object of the specified type (given by the
50       * cmis:objectTypeId property) in the (optionally) specified location.
51       * 
52       * @param repositoryId
53       *            the identifier for the repository
54       * @param properties
55       *            the property values that must be applied to the newly created
56       *            document object
57       * @param folderId
58       *            <em>(optional)</em> if specified, the identifier for the
59       *            folder that must be the parent folder for the newly created
60       *            document object
61       * @param contentStream
62       *            <em>(optional)</em> the content stream that must be stored for
63       *            the newly created document object
64       * @param versioningState
65       *            <em>(optional)</em> specifies what the versioning state of the
66       *            newly created object must be (default is
67       *            {@link VersioningState#MAJOR})
68       * @param policies
69       *            <em>(optional)</em> a list of policy IDs that must be applied
70       *            to the newly created document object
71       * @param addAces
72       *            <em>(optional)</em> a list of ACEs that must be added to the
73       *            newly created document object, either using the ACL from
74       *            <code>folderId</code> if specified, or being applied if no
75       *            <code>folderId</code> is specified
76       * @param removeAces
77       *            <em>(optional)</em> a list of ACEs that must be removed from
78       *            the newly created document object, either using the ACL from
79       *            <code>folderId</code> if specified, or being ignored if no
80       *            <code>folderId</code> is specified
81       */
82      String createDocument(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
83              VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
84              ExtensionsData extension);
85  
86      /**
87       * Creates a document object as a copy of the given source document in the
88       * (optionally) specified location.
89       * 
90       * @param repositoryId
91       *            the identifier for the repository
92       * @param sourceId
93       *            the identifier for the source document
94       * @param properties
95       *            the property values that must be applied to the newly created
96       *            document object
97       * @param folderId
98       *            <em>(optional)</em> if specified, the identifier for the
99       *            folder that must be the parent folder for the newly created
100      *            document object
101      * @param versioningState
102      *            <em>(optional)</em> specifies what the versioning state of the
103      *            newly created object must be (default is
104      *            {@link VersioningState#MAJOR})
105      * @param policies
106      *            <em>(optional)</em> a list of policy IDs that must be applied
107      *            to the newly created document object
108      * @param addAces
109      *            <em>(optional)</em> a list of ACEs that must be added to the
110      *            newly created document object, either using the ACL from
111      *            <code>folderId</code> if specified, or being applied if no
112      *            <code>folderId</code> is specified
113      * @param removeAces
114      *            <em>(optional)</em> a list of ACEs that must be removed from
115      *            the newly created document object, either using the ACL from
116      *            <code>folderId</code> if specified, or being ignored if no
117      *            <code>folderId</code> is specified
118      */
119     String createDocumentFromSource(String repositoryId, String sourceId, Properties properties, String folderId,
120             VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
121             ExtensionsData extension);
122 
123     /**
124      * Creates a folder object of the specified type (given by the
125      * cmis:objectTypeId property) in the specified location.
126      * 
127      * @param repositoryId
128      *            the identifier for the repository
129      * @param properties
130      *            the property values that must be applied to the newly created
131      *            folder object
132      * @param folderId
133      *            the identifier for the parent folder
134      * @param policies
135      *            <em>(optional)</em> a list of policy IDs that must be applied
136      *            to the newly created folder object
137      * @param addAces
138      *            <em>(optional)</em> a list of ACEs that must be added to the
139      *            newly created folder object, either using the ACL from
140      *            <code>folderId</code> if specified, or being applied if no
141      *            <code>folderId</code> is specified
142      * @param removeAces
143      *            <em>(optional)</em> a list of ACEs that must be removed from
144      *            the newly created folder object, either using the ACL from
145      *            <code>folderId</code> if specified, or being ignored if no
146      *            <code>folderId</code> is specified
147      */
148     String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
149             Acl addAces, Acl removeAces, ExtensionsData extension);
150 
151     /**
152      * Creates a relationship object of the specified type (given by the
153      * cmis:objectTypeId property).
154      * 
155      * @param repositoryId
156      *            the identifier for the repository
157      * @param properties
158      *            the property values that must be applied to the newly created
159      *            relationship object
160      * @param policies
161      *            <em>(optional)</em> a list of policy IDs that must be applied
162      *            to the newly created relationship object
163      * @param addAces
164      *            <em>(optional)</em> a list of ACEs that must be added to the
165      *            newly created relationship object, either using the ACL from
166      *            <code>folderId</code> if specified, or being applied if no
167      *            <code>folderId</code> is specified
168      * @param removeAces
169      *            <em>(optional)</em> a list of ACEs that must be removed from
170      *            the newly created relationship object, either using the ACL
171      *            from <code>folderId</code> if specified, or being ignored if
172      *            no <code>folderId</code> is specified
173      */
174     String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
175             Acl removeAces, ExtensionsData extension);
176 
177     /**
178      * Creates a policy object of the specified type (given by the
179      * cmis:objectTypeId property).
180      * 
181      * @param repositoryId
182      *            the identifier for the repository
183      * @param properties
184      *            the property values that must be applied to the newly created
185      *            policy object
186      * @param folderId
187      *            <em>(optional)</em> if specified, the identifier for the
188      *            folder that must be the parent folder for the newly created
189      *            policy object
190      * @param policies
191      *            <em>(optional)</em> a list of policy IDs that must be applied
192      *            to the newly created policy object
193      * @param addAces
194      *            <em>(optional)</em> a list of ACEs that must be added to the
195      *            newly created policy object, either using the ACL from
196      *            <code>folderId</code> if specified, or being applied if no
197      *            <code>folderId</code> is specified
198      * @param removeAces
199      *            <em>(optional)</em> a list of ACEs that must be removed from
200      *            the newly created policy object, either using the ACL from
201      *            <code>folderId</code> if specified, or being ignored if no
202      *            <code>folderId</code> is specified
203      */
204     String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
205             Acl addAces, Acl removeAces, ExtensionsData extension);
206 
207     /**
208      * Gets the list of allowable actions for an object.
209      * 
210      * @param repositoryId
211      *            the identifier for the repository
212      * @param objectId
213      *            the identifier for the object
214      */
215     AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension);
216 
217     /**
218      * Gets the specified information for the object specified by id.
219      * 
220      * @param repositoryId
221      *            the identifier for the repository
222      * @param objectId
223      *            the identifier for the object
224      * @param filter
225      *            <em>(optional)</em> a comma-separated list of query names that
226      *            defines which properties must be returned by the repository
227      *            (default is repository specific)
228      * @param includeAllowableActions
229      *            <em>(optional)</em> if <code>true</code>, then the repository
230      *            must return the available actions for the object (default is
231      *            <code>false</code>)
232      * @param includeRelationships
233      *            <em>(optional)</em> indicates what relationships in which the
234      *            object participates must be returned (default is
235      *            {@link IncludeRelationships#NONE})
236      * @param renditionFilter
237      *            <em>(optional)</em> indicates what set of renditions the
238      *            repository must return whose kind matches this filter (default
239      *            is <code>"cmis:none"</code>)
240      * @param includePolicyIds
241      *            <em>(optional)</em> if <code>true</code>, then the repository
242      *            must return the policy ids for the object (default is
243      *            <code>false</code>)
244      * @param includeAcl
245      *            <em>(optional)</em> if <code>true</code>, then the repository
246      *            must return the ACL for the object (default is
247      *            <code>false</code>)
248      */
249     ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
250             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
251             Boolean includeAcl, ExtensionsData extension);
252 
253     /**
254      * Gets the list of properties for an object.
255      * 
256      * @param repositoryId
257      *            the identifier for the repository
258      * @param objectId
259      *            the identifier for the object
260      * @param filter
261      *            <em>(optional)</em> a comma-separated list of query names that
262      *            defines which properties must be returned by the repository
263      *            (default is repository specific)
264      */
265     Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension);
266 
267     /**
268      * Gets the list of associated renditions for the specified object. Only
269      * rendition attributes are returned, not rendition stream.
270      * 
271      * @param repositoryId
272      *            the identifier for the repository
273      * @param objectId
274      *            the identifier for the object
275      * @param renditionFilter
276      *            <em>(optional)</em> indicates what set of renditions the
277      *            repository must return whose kind matches this filter (default
278      *            is <code>"cmis:none"</code>)
279      * @param maxItems
280      *            <em>(optional)</em> the maximum number of items to return in a
281      *            response (default is repository specific)
282      * @param skipCount
283      *            <em>(optional)</em> number of potential results that the
284      *            repository must skip/page over before returning any results
285      *            (default is 0)
286      */
287     List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
288             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension);
289 
290     /**
291      * Gets the specified information for the object specified by path.
292      * 
293      * @param repositoryId
294      *            the identifier for the repository
295      * @param path
296      *            the path to the object
297      * @param filter
298      *            <em>(optional)</em> a comma-separated list of query names that
299      *            defines which properties must be returned by the repository
300      *            (default is repository specific)
301      * @param includeAllowableActions
302      *            <em>(optional)</em> if <code>true</code>, then the repository
303      *            must return the available actions for the object (default is
304      *            <code>false</code>)
305      * @param includeRelationships
306      *            <em>(optional)</em> indicates what relationships in which the
307      *            object participates must be returned (default is
308      *            {@link IncludeRelationships#NONE})
309      * @param renditionFilter
310      *            <em>(optional)</em> indicates what set of renditions the
311      *            repository must return whose kind matches this filter (default
312      *            is <code>"cmis:none"</code>)
313      * @param includePolicyIds
314      *            <em>(optional)</em> if <code>true</code>, then the repository
315      *            must return the policy ids for the object (default is
316      *            <code>false</code>)
317      * @param includeAcl
318      *            <em>(optional)</em> if <code>true</code>, then the repository
319      *            must return the ACL for the object (default is
320      *            <code>false</code>)
321      */
322     ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
323             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
324             Boolean includeAcl, ExtensionsData extension);
325 
326     /**
327      * Gets the content stream for the specified document object, or gets a
328      * rendition stream for a specified rendition of a document or folder
329      * object.
330      * 
331      * @param repositoryId
332      *            the identifier for the repository
333      * @param objectId
334      *            the identifier for the object
335      */
336     ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
337             BigInteger length, ExtensionsData extension);
338 
339     /**
340      * Updates properties of the specified object.
341      * 
342      * @param repositoryId
343      *            the identifier for the repository
344      * @param objectId
345      *            the identifier for the object. The repository might return a
346      *            different/new object id
347      * @param changeToken
348      *            <em>(optional)</em> the last change token of this object that
349      *            the client received. The repository might return a new change
350      *            token (default is <code>null</code>)
351      * @param properties
352      *            the updated property values that must be applied to the object
353      */
354     void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
355             Properties properties, ExtensionsData extension);
356 
357     /**
358      * Moves the specified file-able object from one folder to another.
359      * 
360      * @param repositoryId
361      *            the identifier for the repository
362      * @param objectId
363      *            the identifier for the object. The repository might return a
364      *            different/new object id
365      * @param targetFolderId
366      *            the identifier for the target folder
367      * @param sourceFolderId
368      *            the identifier for the source folder
369      */
370     void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
371             ExtensionsData extension);
372 
373     /**
374      * Deletes the specified object.
375      * 
376      * @param repositoryId
377      *            the identifier for the repository
378      * @param objectId
379      *            the identifier for the object
380      * @param allVersions
381      *            <em>(optional)</em> If <code>true</code> then delete all
382      *            versions of the document, otherwise delete only the document
383      *            object specified (default is <code>true</code>)
384      */
385     void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension);
386 
387     /**
388      * Deletes the specified folder object and all of its child- and
389      * descendant-objects.
390      * 
391      * @param repositoryId
392      *            the identifier for the repository
393      * @param folderId
394      *            the identifier for the folder
395      * @param allVersions
396      *            <em>(optional)</em> If <code>true</code> then delete all
397      *            versions of the document, otherwise delete only the document
398      *            object specified (default is <code>true</code>)
399      * @param unfileObjects
400      *            <em>(optional)</em> defines how the repository must process
401      *            file-able child- or descendant-objects (default is
402      *            {@link UnfileObject#DELETE})
403      * @param continueOnFailure
404      *            <em>(optional)</em> If <code>true</code>, then the repository
405      *            should continue attempting to perform this operation even if
406      *            deletion of a child- or descendant-object in the specified
407      *            folder cannot be deleted (default is <code>false</code>)
408      */
409     FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
410             UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension);
411 
412     /**
413      * Sets the content stream for the specified document object.
414      * 
415      * @param repositoryId
416      *            the identifier for the repository
417      * @param objectId
418      *            the identifier for the object. The repository might return a
419      *            different/new object id
420      * @param overwriteFlag
421      *            <em>(optional)</em> If <code>true</code>, then the repository
422      *            must replace the existing content stream for the object (if
423      *            any) with the input content stream. If If <code>false</code>,
424      *            then the repository must only set the input content stream for
425      *            the object if the object currently does not have a content
426      *            stream (default is <code>true</code>)
427      * @param changeToken
428      *            <em>(optional)</em> the last change token of this object that
429      *            the client received. The repository might return a new change
430      *            token (default is <code>null</code>)
431      * @param contentStream
432      *            the content stream
433      */
434     void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
435             Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension);
436 
437     /**
438      * Deletes the content stream for the specified document object.
439      * 
440      * @param repositoryId
441      *            the identifier for the repository
442      * @param objectId
443      *            the identifier for the object. The repository might return a
444      *            different/new object id
445      * @param changeToken
446      *            <em>(optional)</em> the last change token of this object that
447      *            the client received. The repository might return a new change
448      *            token (default is <code>null</code>)
449      */
450     void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
451             ExtensionsData extension);
452 }