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

1   package org.apache.chemistry.opencmis.fileshare;
2   /*
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   *
21   */
22  
23  
24  import java.math.BigInteger;
25  import java.util.ArrayList;
26  import java.util.Collections;
27  import java.util.List;
28  
29  import org.apache.chemistry.opencmis.commons.data.Acl;
30  import org.apache.chemistry.opencmis.commons.data.AllowableActions;
31  import org.apache.chemistry.opencmis.commons.data.ContentStream;
32  import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
33  import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
34  import org.apache.chemistry.opencmis.commons.data.ObjectData;
35  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
36  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
37  import org.apache.chemistry.opencmis.commons.data.ObjectList;
38  import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
39  import org.apache.chemistry.opencmis.commons.data.Properties;
40  import org.apache.chemistry.opencmis.commons.data.RenditionData;
41  import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
42  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
43  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
44  import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
45  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
46  import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
47  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
48  import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
49  import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
50  import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
51  import org.apache.chemistry.opencmis.commons.server.CallContext;
52  import org.apache.chemistry.opencmis.commons.spi.Holder;
53  
54  /**
55   * FileShare service implementation.
56   */
57  public class FileShareService extends AbstractCmisService {
58  
59      private final RepositoryMap repositoryMap;
60      private CallContext context;
61  
62      /**
63       * Constructor.
64       */
65      public FileShareService(RepositoryMap repositoryMap) {
66          this.repositoryMap = repositoryMap;
67      }
68  
69      // --- context ---
70  
71      public void setCallContext(CallContext context) {
72          this.context = context;
73      }
74  
75      public CallContext getCallContext() {
76          return context;
77      }
78  
79      public FileShareRepository getRepository() {
80          return repositoryMap.getRepository(getCallContext().getRepositoryId());
81      }
82  
83      // --- repository service ---
84  
85      @Override
86      public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
87          for (FileShareRepository fsr : repositoryMap.getRepositories()) {
88              if (fsr.getRepositoryId().equals(repositoryId)) {
89                  return fsr.getRepositoryInfo(getCallContext());
90              }
91          }
92  
93          throw new CmisObjectNotFoundException("Unknown repository '" + repositoryId + "'!");
94      }
95  
96      @Override
97      public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
98          List<RepositoryInfo> result = new ArrayList<RepositoryInfo>();
99  
100         for (FileShareRepository fsr : repositoryMap.getRepositories()) {
101             result.add(fsr.getRepositoryInfo(getCallContext()));
102         }
103 
104         return result;
105     }
106 
107     @Override
108     public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
109             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
110         return getRepository().getTypesChildren(getCallContext(), typeId, includePropertyDefinitions, maxItems,
111                 skipCount);
112     }
113 
114     @Override
115     public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
116         return getRepository().getTypeDefinition(getCallContext(), typeId);
117     }
118 
119     @Override
120     public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
121             Boolean includePropertyDefinitions, ExtensionsData extension) {
122         return getRepository().getTypesDescendants(getCallContext(), typeId, depth, includePropertyDefinitions);
123     }
124 
125     // --- navigation service ---
126 
127     @Override
128     public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
129             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
130             Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
131         return getRepository().getChildren(getCallContext(), folderId, filter, includeAllowableActions,
132                 includePathSegment, maxItems, skipCount, this);
133     }
134 
135     @Override
136     public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
137             String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
138             String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
139         return getRepository().getDescendants(getCallContext(), folderId, depth, filter, includeAllowableActions,
140                 includePathSegment, this, false);
141     }
142 
143     @Override
144     public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
145         return getRepository().getFolderParent(getCallContext(), folderId, filter, this);
146     }
147 
148     @Override
149     public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
150             String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
151             String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
152         return getRepository().getDescendants(getCallContext(), folderId, depth, filter, includeAllowableActions,
153                 includePathSegment, this, true);
154     }
155 
156     @Override
157     public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
158             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
159             Boolean includeRelativePathSegment, ExtensionsData extension) {
160         return getRepository().getObjectParents(getCallContext(), objectId, filter, includeAllowableActions,
161                 includeRelativePathSegment, this);
162     }
163 
164     @Override
165     public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
166             Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
167             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
168         ObjectListImpl result = new ObjectListImpl();
169         result.setHasMoreItems(false);
170         result.setNumItems(BigInteger.ZERO);
171         List<ObjectData> emptyList = Collections.emptyList();
172         result.setObjects(emptyList);
173 
174         return result;
175     }
176 
177     // --- object service ---
178 
179     @Override
180     public String create(String repositoryId, Properties properties, String folderId, ContentStream contentStream,
181             VersioningState versioningState, List<String> policies, ExtensionsData extension) {
182         ObjectData object = getRepository().create(getCallContext(), properties, folderId, contentStream,
183                 versioningState, this);
184 
185         return object.getId();
186     }
187 
188     @Override
189     public String createDocument(String repositoryId, Properties properties, String folderId,
190             ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
191             Acl removeAces, ExtensionsData extension) {
192         return getRepository().createDocument(getCallContext(), properties, folderId, contentStream, versioningState);
193     }
194 
195     @Override
196     public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
197             String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
198             ExtensionsData extension) {
199         return getRepository().createDocumentFromSource(getCallContext(), sourceId, properties, folderId,
200                 versioningState);
201     }
202 
203     @Override
204     public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
205             Acl addAces, Acl removeAces, ExtensionsData extension) {
206         return getRepository().createFolder(getCallContext(), properties, folderId);
207     }
208 
209     @Override
210     public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
211             ExtensionsData extension) {
212         getRepository().setContentStream(getCallContext(), objectId, true, null);
213     }
214 
215     @Override
216     public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
217             ExtensionsData extension) {
218         getRepository().deleteObject(getCallContext(), objectId);
219     }
220 
221     @Override
222     public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
223             UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
224         return getRepository().deleteTree(getCallContext(), folderId, continueOnFailure);
225     }
226 
227     @Override
228     public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
229         return getRepository().getAllowableActions(getCallContext(), objectId);
230     }
231 
232     @Override
233     public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
234             BigInteger length, ExtensionsData extension) {
235         return getRepository().getContentStream(getCallContext(), objectId, offset, length);
236     }
237 
238     @Override
239     public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
240             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
241             Boolean includeAcl, ExtensionsData extension) {
242         return getRepository().getObject(getCallContext(), objectId, null, filter, includeAllowableActions, includeAcl,
243                 this);
244     }
245 
246     @Override
247     public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
248             IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
249             Boolean includeAcl, ExtensionsData extension) {
250         return getRepository().getObjectByPath(getCallContext(), path, filter, includeAllowableActions, includeAcl,
251                 this);
252     }
253 
254     @Override
255     public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
256         ObjectData object = getRepository().getObject(getCallContext(), objectId, null, filter, false, false, this);
257         return object.getProperties();
258     }
259 
260     @Override
261     public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter,
262             BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
263         return Collections.emptyList();
264     }
265 
266     @Override
267     public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
268             ExtensionsData extension) {
269         getRepository().moveObject(getCallContext(), objectId, targetFolderId, this);
270     }
271 
272     @Override
273     public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
274             Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
275         getRepository().setContentStream(getCallContext(), objectId, overwriteFlag, contentStream);
276     }
277 
278     @Override
279     public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
280             Properties properties, ExtensionsData extension) {
281         getRepository().updateProperties(getCallContext(), objectId, properties, this);
282     }
283 
284     // --- versioning service ---
285 
286     @Override
287     public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
288             Boolean includeAllowableActions, ExtensionsData extension) {
289         ObjectData theVersion = getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter,
290                 includeAllowableActions, false, this);
291 
292         return Collections.singletonList(theVersion);
293     }
294 
295     @Override
296     public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
297             Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
298             String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
299         return getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter, includeAllowableActions,
300                 includeAcl, this);
301     }
302 
303     @Override
304     public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
305             Boolean major, String filter, ExtensionsData extension) {
306         ObjectData object = getRepository().getObject(getCallContext(), objectId, versionSeriesId, filter, false,
307                 false, null);
308 
309         return object.getProperties();
310     }
311 
312     // --- ACL service ---
313 
314     @Override
315     public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) {
316         return getRepository().getAcl(getCallContext(), objectId);
317     }
318 }