This project has retired. For details please refer to its Attic page.
InMemoryService 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.inmemory.server;
20  
21  import java.math.BigInteger;
22  import java.util.List;
23  import java.util.Map;
24  
25  import org.apache.chemistry.opencmis.commons.data.Acl;
26  import org.apache.chemistry.opencmis.commons.data.AllowableActions;
27  import org.apache.chemistry.opencmis.commons.data.ContentStream;
28  import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
29  import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
30  import org.apache.chemistry.opencmis.commons.data.ObjectData;
31  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
32  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
33  import org.apache.chemistry.opencmis.commons.data.ObjectList;
34  import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
35  import org.apache.chemistry.opencmis.commons.data.Properties;
36  import org.apache.chemistry.opencmis.commons.data.RenditionData;
37  import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
38  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
39  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
40  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
41  import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
42  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
43  import org.apache.chemistry.opencmis.commons.enums.RelationshipDirection;
44  import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
45  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
46  import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
47  import org.apache.chemistry.opencmis.commons.server.CallContext;
48  import org.apache.chemistry.opencmis.commons.spi.Holder;
49  import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoreManager;
50  import org.apache.commons.logging.Log;
51  import org.apache.commons.logging.LogFactory;
52  
53  public class InMemoryService extends AbstractCmisService {
54  
55      private static final Log LOG = LogFactory.getLog(InMemoryService.class.getName());
56  
57      private final StoreManager storeManager; // singleton root of everything
58      private CallContext context;
59  
60      private final InMemoryRepositoryServiceImpl fRepSvc;
61      private final InMemoryObjectServiceImpl fObjSvc;
62      private final InMemoryNavigationServiceImpl fNavSvc;
63      private final InMemoryVersioningServiceImpl fVerSvc;
64      private final InMemoryDiscoveryServiceImpl fDisSvc;
65      private final InMemoryMultiFilingServiceImpl fMultiSvc;
66      private final InMemoryAclService fAclSvc;
67  
68      public StoreManager getStoreManager() {
69          return storeManager;
70      }
71  
72      public InMemoryService(Map<String, String> parameters, StoreManager sm) {
73          storeManager = sm;
74          fRepSvc = new InMemoryRepositoryServiceImpl(storeManager);
75          fNavSvc = new InMemoryNavigationServiceImpl(storeManager);
76          fObjSvc = new InMemoryObjectServiceImpl(storeManager);
77          fVerSvc = new InMemoryVersioningServiceImpl(storeManager, fObjSvc);
78          fDisSvc = new InMemoryDiscoveryServiceImpl(storeManager, fRepSvc, fNavSvc);
79          fMultiSvc = new InMemoryMultiFilingServiceImpl(storeManager);
80          fAclSvc = new InMemoryAclService(storeManager);
81      }
82  
83      public CallContext getCallContext() {
84          return context;
85      }
86  
87      public void setCallContext(CallContext context) {
88          this.context = context;
89      }
90  
91      // --- repository service ---
92  
93      @Override
94      public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
95          return fRepSvc.getRepositoryInfos(getCallContext(), extension);
96      }
97  
98      @Override
99      public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
100         return fRepSvc.getRepositoryInfo(getCallContext(), repositoryId, extension);
101     }
102 
103     @Override
104     public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
105             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
106         return fRepSvc.getTypeChildren(getCallContext(), repositoryId, typeId, includePropertyDefinitions, maxItems,
107                 skipCount, extension);
108     }
109 
110     @Override
111     public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
112         return fRepSvc.getTypeDefinition(getCallContext(), repositoryId, typeId, extension);
113     }
114 
115     @Override
116     public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
117             Boolean includePropertyDefinitions, ExtensionsData extension) {
118         return fRepSvc.getTypeDescendants(getCallContext(), repositoryId, typeId, depth, includePropertyDefinitions,
119                 extension);
120     }
121 
122     // --- navigation service ---
123 
124     @Override
125     public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
126             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
127             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
128         return fNavSvc.getCheckedOutDocs(getCallContext(), repositoryId, folderId, filter, orderBy,
129                 includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, extension, this);
130     }
131 
132     @Override
133     public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
134             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
135             Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
136         return fNavSvc.getChildren(getCallContext(), repositoryId, folderId, filter, orderBy, includeAllowableActions,
137                 includeRelationships, renditionFilter, includePathSegment, maxItems, skipCount, extension, this);
138     }
139 
140     @Override
141     public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
142             String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
143             String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
144         return fNavSvc.getDescendants(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions,
145                 includeRelationships, renditionFilter, includePathSegment, extension, this);
146     }
147 
148     @Override
149     public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
150         return fNavSvc.getFolderParent(getCallContext(), repositoryId, folderId, filter, extension, this);
151     }
152 
153     @Override
154     public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
155             String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
156             String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
157         return fNavSvc.getFolderTree(getCallContext(), repositoryId, folderId, depth, filter, includeAllowableActions,
158                 includeRelationships, renditionFilter, includePathSegment, extension, this);
159     }
160 
161     @Override
162     public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
163             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
164             Boolean includeRelativePathSegment, ExtensionsData extension) {
165         return fNavSvc.getObjectParents(getCallContext(), repositoryId, objectId, filter, includeAllowableActions,
166                 includeRelationships, renditionFilter, includeRelativePathSegment, extension, this);
167     }
168 
169     // --- object service ---
170 
171     @Override
172     public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
173             VersioningState versioningState, List<String> policies, ExtensionsData extension) {
174         String id = fObjSvc.create(getCallContext(), repositoryId, properties, folderId, contentStream,
175                 versioningState, policies, extension, this);
176         return id;
177 
178     }
179 
180     @Override
181     public String createDocument(String repositoryId, Properties properties, String folderId,
182             ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
183             Acl removeAces, ExtensionsData extension) {
184         return fObjSvc.createDocument(getCallContext(), repositoryId, properties, folderId, contentStream,
185                 versioningState, policies, addAces, removeAces, extension);
186     }
187 
188     @Override
189     public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
190             String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
191             ExtensionsData extension) {
192         return fObjSvc.createDocumentFromSource(getCallContext(), repositoryId, sourceId, properties, folderId,
193                 versioningState, policies, addAces, removeAces, extension);
194     }
195 
196     @Override
197     public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
198             Acl addAces, Acl removeAces, ExtensionsData extension) {
199         return fObjSvc.createFolder(getCallContext(), repositoryId, properties, folderId, policies, addAces,
200                 removeAces, extension);
201     }
202 
203     @Override
204     public String createPolicy(String repositoryId, Properties properties, String folderId, List<String> policies,
205             Acl addAces, Acl removeAces, ExtensionsData extension) {
206         return fObjSvc.createPolicy(getCallContext(), repositoryId, properties, folderId, policies, addAces,
207                 removeAces, extension);
208     }
209 
210     @Override
211     public String createRelationship(String repositoryId, Properties properties, List<String> policies, Acl addAces,
212             Acl removeAces, ExtensionsData extension) {
213         return fObjSvc.createRelationship(getCallContext(), repositoryId, properties, policies, addAces, removeAces,
214                 extension);
215     }
216 
217     @Override
218     public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
219             ExtensionsData extension) {
220         fObjSvc.deleteContentStream(getCallContext(), repositoryId, objectId, changeToken, extension);
221     }
222 
223     @Override
224     public void deleteObject(String repositoryId, String objectId, Boolean allVersions, ExtensionsData extension) {
225         fObjSvc.deleteObject(getCallContext(), repositoryId, objectId, allVersions, extension);
226     }
227 
228     @Override
229     public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
230             ExtensionsData extension) {
231         fObjSvc.deleteObject(getCallContext(), repositoryId, objectId, allVersions, extension);
232     }
233 
234     @Override
235     public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
236             UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
237         return fObjSvc.deleteTree(getCallContext(), repositoryId, folderId, allVersions, unfileObjects,
238                 continueOnFailure, extension);
239     }
240 
241     @Override
242     public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
243         return fObjSvc.getAllowableActions(getCallContext(), repositoryId, objectId, extension);
244     }
245 
246     @Override
247     public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
248             BigInteger length, ExtensionsData extension) {
249         return fObjSvc.getContentStream(getCallContext(), repositoryId, objectId, streamId, offset, length, extension);
250     }
251 
252     @Override
253     public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
254             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
255             Boolean includeAcl, ExtensionsData extension) {
256         return fObjSvc.getObject(getCallContext(), repositoryId, objectId, filter, includeAllowableActions,
257                 includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, this);
258     }
259 
260     @Override
261     public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
262             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
263             Boolean includeAcl, ExtensionsData extension) {
264         return fObjSvc.getObjectByPath(getCallContext(), repositoryId, path, filter, includeAllowableActions,
265                 includeRelationships, renditionFilter, includePolicyIds, includeAcl, extension, this);
266     }
267 
268     @Override
269     public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
270         return fObjSvc.getProperties(getCallContext(), repositoryId, objectId, filter, extension);
271     }
272 
273     @Override
274     public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
275             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
276         return fObjSvc.getRenditions(getCallContext(), repositoryId, objectId, renditionFilter, maxItems, skipCount,
277                 extension);
278     }
279 
280     @Override
281     public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
282             ExtensionsData extension) {
283         fObjSvc.moveObject(getCallContext(), repositoryId, objectId, targetFolderId, sourceFolderId, extension, this);
284     }
285 
286     @Override
287     public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
288             Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
289         fObjSvc.setContentStream(getCallContext(), repositoryId, objectId, overwriteFlag, changeToken, contentStream,
290                 extension);
291     }
292 
293     @Override
294     public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
295             Properties properties, ExtensionsData extension) {
296         fObjSvc.updateProperties(getCallContext(), repositoryId, objectId, changeToken, properties, null, extension,
297                 this);
298     }
299 
300     // --- versioning service ---
301 
302     @Override
303     public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
304         fVerSvc.cancelCheckOut(getCallContext(), repositoryId, objectId, extension);
305     }
306 
307     @Override
308     public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
309             ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
310             ExtensionsData extension) {
311         fVerSvc.checkIn(getCallContext(), repositoryId, objectId, major, properties, contentStream, checkinComment,
312                 policies, addAces, removeAces, extension, this);
313     }
314 
315     @Override
316     public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
317             Holder<Boolean> contentCopied) {
318         fVerSvc.checkOut(getCallContext(), repositoryId, objectId, extension, contentCopied, this);
319     }
320 
321     @Override
322     public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
323             Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
324             String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
325         return fVerSvc.getObjectOfLatestVersion(getCallContext(), repositoryId, objectId, versionSeriesId, major, filter,
326                 includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds, includeAcl,
327                 extension, this);
328     }
329 
330     @Override
331     public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
332             Boolean major, String filter, ExtensionsData extension) {
333         return fVerSvc.getPropertiesOfLatestVersion(getCallContext(), repositoryId, objectId, versionSeriesId, major, filter,
334                 extension);
335     }
336 
337     @Override
338     public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
339             Boolean includeAllowableActions, ExtensionsData extension) {
340         return fVerSvc.getAllVersions(getCallContext(), repositoryId, objectId, versionSeriesId,
341                 filter, includeAllowableActions, extension, this);
342     }
343 
344     // --- discovery service ---
345 
346     @Override
347     public ObjectList getContentChanges(String repositoryId, Holder<String> changeLogToken, Boolean includeProperties,
348             String filter, Boolean includePolicyIds, Boolean includeAcl, BigInteger maxItems, ExtensionsData extension) {
349         return fDisSvc.getContentChanges(getCallContext(), repositoryId, changeLogToken, includeProperties, filter, includePolicyIds,
350                 includeAcl, maxItems, extension, this);
351     }
352 
353     @Override
354     public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
355             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
356             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
357         return fDisSvc.query(getCallContext(), repositoryId, statement, searchAllVersions, includeAllowableActions,
358                 includeRelationships, renditionFilter, maxItems, skipCount, extension);
359     }
360 
361     // --- multi filing service ---
362 
363     @Override
364     public void addObjectToFolder(String repositoryId, String objectId, String folderId, Boolean allVersions,
365             ExtensionsData extension) {
366         fMultiSvc.addObjectToFolder(getCallContext(), repositoryId, objectId, folderId, allVersions, extension, this);
367     }
368 
369     @Override
370     public void removeObjectFromFolder(String repositoryId, String objectId, String folderId, ExtensionsData extension) {
371         fMultiSvc.removeObjectFromFolder(getCallContext(), repositoryId, objectId, folderId, extension, this);
372     }
373 
374     // --- relationship service ---
375 
376     @Override
377     public ObjectList getObjectRelationships(String repositoryId, String objectId, Boolean includeSubRelationshipTypes,
378             RelationshipDirection relationshipDirection, String typeId, String filter, Boolean includeAllowableActions,
379             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
380         return super.getObjectRelationships(repositoryId, objectId, includeSubRelationshipTypes, relationshipDirection,
381                 typeId, filter, includeAllowableActions, maxItems, skipCount, extension);
382     }
383 
384     // --- ACL service ---
385 
386     @Override
387     public Acl applyAcl(String repositoryId, String objectId, Acl aces, AclPropagation aclPropagation) {
388         return fAclSvc.applyAcl(getCallContext(), repositoryId, objectId, aces, aclPropagation);
389     }
390 
391     @Override
392     public Acl applyAcl(String repositoryId, String objectId, Acl addAces, Acl removeAces,
393             AclPropagation aclPropagation, ExtensionsData extension) {
394         return fAclSvc.applyAcl(getCallContext(), repositoryId, objectId, addAces, removeAces, aclPropagation, extension, this);
395     }
396 
397     @Override
398     public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
399         return fAclSvc.getAcl(getCallContext(), repositoryId, objectId, onlyBasicPermissions, extension, this);
400     }
401 
402     // --- policy service ---
403 
404     @Override
405     public void applyPolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
406         super.applyPolicy(repositoryId, policyId, objectId, extension);
407     }
408 
409     @Override
410     public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter,
411             ExtensionsData extension) {
412         return super.getAppliedPolicies(repositoryId, objectId, filter, extension);
413     }
414 
415     @Override
416     public void removePolicy(String repositoryId, String policyId, String objectId, ExtensionsData extension) {
417         super.removePolicy(repositoryId, policyId, objectId, extension);
418     }
419 
420     // /////////////
421 
422 }