This project has retired. For details please refer to its Attic page.
Session 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.client.api;
20  
21  import java.io.Serializable;
22  import java.util.List;
23  import java.util.Locale;
24  import java.util.Map;
25  import java.util.Set;
26  
27  import org.apache.chemistry.opencmis.commons.data.Ace;
28  import org.apache.chemistry.opencmis.commons.data.Acl;
29  import org.apache.chemistry.opencmis.commons.data.ContentStream;
30  import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
31  import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
32  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
33  import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
34  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
35  import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
36  import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
37  
38  /**
39   * A session is a connection to a CMIS repository with a specific user.
40   * 
41   * <p>
42   * Not all operations might be supported the connected repository. Either
43   * OpenCMIS or the repository will throw an exception if an unsupported
44   * operation is called. The capabilities of the repository can be discovered by
45   * evaluating the repository info (see {@link #getRepositoryInfo()}).
46   * </p>
47   * 
48   * <p>
49   * Almost all methods might throw exceptions derived from
50   * {@link CmisBaseException} which is a runtime exception!
51   * </p>
52   * 
53   * <p>
54   * (Please refer to the <a
55   * href="http://docs.oasis-open.org/cmis/CMIS/v1.0/os/">CMIS specification</a>
56   * for details about the domain model, terms, concepts, base types, properties,
57   * ids and query names, query language, etc.)
58   * </p>
59   */
60  public interface Session extends Serializable {
61  
62      /**
63       * Clears all cached data. This implies that all data will be reloaded from
64       * the repository (depending on the implementation, reloading might be done
65       * immediately or be deferred).
66       */
67      void clear();
68  
69      // session context
70  
71      /**
72       * Returns the underlying binding object.
73       */
74      CmisBinding getBinding();
75  
76      /**
77       * Returns the current default operation parameters for filtering, paging
78       * and caching.
79       * 
80       * <p>
81       * <em>Please note:</em> The returned object is not thread-safe and should
82       * only be modified right after the session has been created and before the
83       * session object has been used. In order to change the default context in
84       * thread-safe manner, create a new {@link OperationContext} object and use
85       * {@link #setDefaultContext(OperationContext)} to apply it.
86       * </p>
87       */
88      OperationContext getDefaultContext();
89  
90      /**
91       * Sets the current session parameters for filtering, paging and caching.
92       * 
93       * @param context
94       *            the <code>OperationContext</code> to be used for the session;
95       *            if <code>null</code>, a default context is used
96       */
97      void setDefaultContext(OperationContext context);
98  
99      /**
100      * Creates a new operation context object.
101      */
102     OperationContext createOperationContext();
103 
104     /**
105      * Creates a new operation context object with the given properties.
106      * 
107      * @see OperationContext
108      */
109     OperationContext createOperationContext(Set<String> filter, boolean includeAcls, boolean includeAllowableActions,
110             boolean includePolicies, IncludeRelationships includeRelationships, Set<String> renditionFilter,
111             boolean includePathSegments, String orderBy, boolean cacheEnabled, int maxItemsPerPage);
112 
113     /**
114      * Creates an object id from a String.
115      */
116     ObjectId createObjectId(String id);
117 
118     // localization
119 
120     /**
121      * Get the current locale to be used for this session.
122      */
123     Locale getLocale();
124 
125     // services
126 
127     /**
128      * Returns the repository info of the repository associated with this
129      * session.
130      */
131     RepositoryInfo getRepositoryInfo();
132 
133     /**
134      * Gets a factory object that provides methods to create the objects used by
135      * this API.
136      */
137     ObjectFactory getObjectFactory();
138 
139     // types
140 
141     /**
142      * Returns the type definition of the given type id.
143      */
144     ObjectType getTypeDefinition(String typeId);
145 
146     /**
147      * Returns the type children of the given type id.
148      */
149     ItemIterable<ObjectType> getTypeChildren(String typeId, boolean includePropertyDefinitions);
150 
151     /**
152      * Returns the type descendants of the given type id.
153      */
154     List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions);
155 
156     // navigation
157 
158     /**
159      * Gets the root folder of the repository.
160      */
161     Folder getRootFolder();
162 
163     /**
164      * Gets the root folder of the repository with the given
165      * {@link OperationContext}.
166      */
167     Folder getRootFolder(OperationContext context);
168 
169     /**
170      * Returns all checked out documents.
171      * 
172      * @see Folder#getCheckedOutDocs()
173      */
174     ItemIterable<Document> getCheckedOutDocs();
175 
176     /**
177      * Returns all checked out documents with the given {@link OperationContext}
178      * .
179      * 
180      * @see Folder#getCheckedOutDocs(OperationContext)
181      */
182     ItemIterable<Document> getCheckedOutDocs(OperationContext context);
183 
184     /**
185      * Returns a CMIS object from the session cache. If the object is not in the
186      * cache or the cache is turned off per default {@link OperationContext}, it
187      * will load the object from the repository and puts it into the cache.
188      * 
189      * @param objectId
190      *            the object id
191      * 
192      * @see #getObject(String)
193      */
194     CmisObject getObject(ObjectId objectId);
195 
196     /**
197      * Returns a CMIS object from the session cache. If the object is not in the
198      * cache or the given {@link OperationContext} has caching turned off, it
199      * will load the object from the repository and puts it into the cache.
200      * 
201      * @param objectId
202      *            the object id
203      * @param context
204      *            the {@link OperationContext} to use
205      * 
206      * @see #getObject(String, OperationContext)
207      */
208     CmisObject getObject(ObjectId objectId, OperationContext context);
209 
210     /**
211      * Returns a CMIS object from the session cache. If the object is not in the
212      * cache or the cache is turned off per default {@link OperationContext}, it
213      * will load the object from the repository and puts it into the cache.
214      * 
215      * @param objectId
216      *            the object id
217      * 
218      * @see #getObject(ObjectId)
219      */
220     CmisObject getObject(String objectId);
221 
222     /**
223      * Returns a CMIS object from the session cache. If the object is not in the
224      * cache or the given {@link OperationContext} has caching turned off, it
225      * will load the object from the repository and puts it into the cache.
226      * 
227      * @param objectId
228      *            the object id
229      * @param context
230      *            the {@link OperationContext} to use
231      * 
232      * @see #getObject(ObjectId, OperationContext)
233      */
234     CmisObject getObject(String objectId, OperationContext context);
235 
236     /**
237      * Returns a CMIS object from the session cache. If the object is not in the
238      * cache or the cache is turned off per default {@link OperationContext}, it
239      * will load the object from the repository and puts it into the cache.
240      * 
241      * @param path
242      *            the object path
243      */
244     CmisObject getObjectByPath(String path);
245 
246     /**
247      * Returns a CMIS object from the session cache. If the object is not in the
248      * cache or the given {@link OperationContext} has caching turned off, it
249      * will load the object from the repository and puts it into the cache.
250      * 
251      * @param path
252      *            the object path
253      * @param context
254      *            the {@link OperationContext} to use
255      */
256     CmisObject getObjectByPath(String path, OperationContext context);
257 
258     /**
259      * Removes the given object from the cache.
260      * 
261      * @param objectId
262      *            object id
263      */
264     void removeObjectFromCache(ObjectId objectId);
265 
266     /**
267      * Removes the given object from the cache.
268      * 
269      * @param objectId
270      *            object id
271      */
272     void removeObjectFromCache(String objectId);
273 
274     // discovery
275 
276     /**
277      * Sends a query to the repository. (See CMIS spec "2.1.10 Query".)
278      * 
279      * @param statement
280      *            the query statement (CMIS query language)
281      * @param searchAllVersions
282      *            specifies if the latest and non-latest versions of document
283      *            objects should be included
284      */
285     ItemIterable<QueryResult> query(String statement, boolean searchAllVersions);
286 
287     /**
288      * Sends a query to the repository using the given {@link OperationContext}.
289      * (See CMIS spec "2.1.10 Query".)
290      * 
291      * @param statement
292      *            the query statement (CMIS query language)
293      * @param searchAllVersions
294      *            specifies if the latest and non-latest versions of document
295      *            objects should be included
296      * @param context
297      *            the OperationContext
298      */
299     ItemIterable<QueryResult> query(String statement, boolean searchAllVersions, OperationContext context);
300 
301     /**
302      * 
303      * @param type
304      *            the id of the object type
305      * @param where
306      *            the WHERE part of the query
307      * @param searchAllVersions
308      *            specifies if the latest and non-latest versions of document
309      *            objects should be included
310      * @param context
311      *            the OperationContext
312      */
313     ItemIterable<CmisObject> queryObjects(String typeId, String where, boolean searchAllVersions,
314             OperationContext context);
315 
316     /**
317      * Creates a query statement.
318      * 
319      * @param statement
320      *            the query statement with placeholders ('?').
321      * 
322      * @see QueryStatement
323      */
324     QueryStatement createQueryStatement(String statement);
325 
326     /**
327      * Returns the content changes.
328      * 
329      * @param changeLogToken
330      *            the change log token to start from or <code>null</code>
331      * @param includeProperties
332      *            indicates if changed properties should be included in the
333      *            result
334      * @param maxNumItems
335      *            maximum numbers of events
336      */
337     ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems);
338 
339     /**
340      * Returns the content changes.
341      * 
342      * @param changeLogToken
343      *            the change log token to start from or <code>null</code>
344      * @param includeProperties
345      *            indicates if changed properties should be included in the
346      *            result
347      * @param maxNumItems
348      *            maximum numbers of events
349      * @param context
350      *            the OperationContext
351      */
352     ChangeEvents getContentChanges(String changeLogToken, boolean includeProperties, long maxNumItems,
353             OperationContext context);
354 
355     // create
356 
357     /**
358      * Creates a new document.
359      * 
360      * @return the object id of the new document
361      * 
362      * @see Folder#createDocument(Map, ContentStream, VersioningState, List,
363      *      List, List, OperationContext)
364      */
365     ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
366             VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces);
367 
368     /**
369      * Creates a new document.
370      * 
371      * @return the object id of the new document
372      * 
373      * @see Folder#createDocument(Map, ContentStream, VersioningState, List,
374      *      List, List, OperationContext)
375      */
376     ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
377             VersioningState versioningState);
378 
379     /**
380      * Creates a new document from a source document.
381      * 
382      * @return the object id of the new document
383      * 
384      * @see Folder#createDocumentFromSource(ObjectId, Map, VersioningState,
385      *      List, List, List, OperationContext)
386      */
387     ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
388             VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces);
389 
390     /**
391      * Creates a new document from a source document.
392      * 
393      * @return the object id of the new document
394      * 
395      * @see Folder#createDocumentFromSource(ObjectId, Map, VersioningState,
396      *      List, List, List, OperationContext)
397      */
398     ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
399             VersioningState versioningState);
400 
401     /**
402      * Creates a new folder.
403      * 
404      * @return the object id of the new folder
405      * 
406      * @see Folder#createFolder(Map, List, List, List, OperationContext)
407      */
408     ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
409             List<Ace> removeAces);
410 
411     /**
412      * Creates a new folder.
413      * 
414      * @return the object id of the new folder
415      * 
416      * @see Folder#createFolder(Map, List, List, List, OperationContext)
417      */
418     ObjectId createFolder(Map<String, ?> properties, ObjectId folderId);
419 
420     /**
421      * Creates a new policy.
422      * 
423      * @return the object id of the new policy
424      * 
425      * @see Folder#createPolicy(Map, List, List, List, OperationContext)
426      */
427     ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies, List<Ace> addAces,
428             List<Ace> removeAces);
429 
430     /**
431      * Creates a new policy.
432      * 
433      * @return the object id of the new policy
434      * 
435      * @see Folder#createPolicy(Map, List, List, List, OperationContext)
436      */
437     ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId);
438 
439     /**
440      * Creates a new relationship.
441      * 
442      * @return the object id of the new relationship
443      */
444     ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
445             List<Ace> removeAces);
446 
447     /**
448      * Creates a new relationship.
449      * 
450      * @return the object id of the new relationship
451      */
452     ObjectId createRelationship(Map<String, ?> properties);
453 
454     /**
455      * Fetches the relationships from or to an object from the repository.
456      */
457     ItemIterable<Relationship> getRelationships(ObjectId objectId, boolean includeSubRelationshipTypes,
458             RelationshipDirection relationshipDirection, ObjectType type, OperationContext context);
459 
460     /**
461      * Fetches the ACL of an object from the repository.
462      */
463     Acl getAcl(ObjectId objectId, boolean onlyBasicPermissions);
464 
465     /**
466      * Applies an ACL to an object.
467      */
468     Acl applyAcl(ObjectId objectId, List<Ace> addAces, List<Ace> removeAces, AclPropagation aclPropagation);
469 
470     /**
471      * Applies a set of policies to an object.
472      */
473     void applyPolicy(ObjectId objectId, ObjectId... policyIds);
474 
475     /**
476      * Removes a set of policies from an object.
477      */
478     void removePolicy(ObjectId objectId, ObjectId... policyIds);
479 }