This project has retired. For details please refer to its
Attic page.
JcrService xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.chemistry.opencmis.jcr;
21
22 import org.apache.chemistry.opencmis.commons.data.Acl;
23 import org.apache.chemistry.opencmis.commons.data.AllowableActions;
24 import org.apache.chemistry.opencmis.commons.data.ContentStream;
25 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
26 import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
27 import org.apache.chemistry.opencmis.commons.data.ObjectData;
28 import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
29 import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
30 import org.apache.chemistry.opencmis.commons.data.ObjectList;
31 import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
32 import org.apache.chemistry.opencmis.commons.data.Properties;
33 import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
34 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
35 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
36 import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
37 import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
38 import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
39 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
40 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
41 import org.apache.chemistry.opencmis.commons.impl.server.AbstractCmisService;
42 import org.apache.chemistry.opencmis.commons.server.CallContext;
43 import org.apache.chemistry.opencmis.commons.spi.Holder;
44
45 import javax.jcr.Credentials;
46 import javax.jcr.Session;
47 import javax.jcr.SimpleCredentials;
48 import java.math.BigInteger;
49 import java.util.HashMap;
50 import java.util.List;
51 import java.util.Map;
52
53
54
55
56 public class JcrService extends AbstractCmisService {
57 private final JcrRepository jcrRepository;
58 private final Map<String, Session> sessions = new HashMap<String, Session>();
59
60 private CallContext context;
61
62 public JcrService(JcrRepository jcrRepository) {
63 this.jcrRepository = jcrRepository;
64 }
65
66 @Override
67 public void close() {
68 for (Session session : sessions.values()) {
69 session.logout();
70 }
71
72 super.close();
73 }
74
75 public void setCallContext(CallContext context) {
76 this.context = context;
77 }
78
79 public CallContext getCallContext() {
80 return context;
81 }
82
83
84
85 @Override
86 public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
87 return jcrRepository.getRepositoryInfo(login(repositoryId));
88 }
89
90 @Override
91 public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
92 return jcrRepository.getRepositoryInfos(login(null));
93 }
94
95 @Override
96 public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
97 BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
98
99 return jcrRepository.getTypeChildren(login(repositoryId), typeId, includePropertyDefinitions, maxItems, skipCount);
100 }
101
102 @Override
103 public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
104 return jcrRepository.getTypeDefinition(login(repositoryId), typeId);
105 }
106
107 @Override
108 public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
109 Boolean includePropertyDefinitions, ExtensionsData extension) {
110
111 return jcrRepository.getTypesDescendants(login(repositoryId), typeId, depth, includePropertyDefinitions);
112 }
113
114
115
116 @Override
117 public ObjectInFolderList getChildren(String repositoryId, String folderId, String filter, String orderBy,
118 Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
119 Boolean includePathSegment, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
120
121 return jcrRepository.getChildren(login(repositoryId), folderId, filter, includeAllowableActions,
122 includePathSegment, maxItems, skipCount, this, context.isObjectInfoRequired());
123 }
124
125 @Override
126 public List<ObjectInFolderContainer> getDescendants(String repositoryId, String folderId, BigInteger depth,
127 String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
128 String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
129
130 return jcrRepository.getDescendants(login(repositoryId), folderId, depth, filter, includeAllowableActions,
131 includePathSegment, this, context.isObjectInfoRequired(), false);
132 }
133
134 @Override
135 public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) {
136 return jcrRepository.getFolderParent(login(repositoryId), folderId, filter, this, context.isObjectInfoRequired());
137 }
138
139 @Override
140 public List<ObjectInFolderContainer> getFolderTree(String repositoryId, String folderId, BigInteger depth,
141 String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
142 String renditionFilter, Boolean includePathSegment, ExtensionsData extension) {
143
144 return jcrRepository.getDescendants(login(repositoryId), folderId, depth, filter, includeAllowableActions,
145 includePathSegment, this, context.isObjectInfoRequired(), true);
146 }
147
148 @Override
149 public List<ObjectParentData> getObjectParents(String repositoryId, String objectId, String filter,
150 Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
151 Boolean includeRelativePathSegment, ExtensionsData extension) {
152
153 return jcrRepository.getObjectParents(login(repositoryId), objectId, filter, includeAllowableActions,
154 includeRelativePathSegment, this, context.isObjectInfoRequired());
155 }
156
157 @Override
158 public ObjectList getCheckedOutDocs(String repositoryId, String folderId, String filter, String orderBy,
159 Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
160 BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
161
162 return jcrRepository.getCheckedOutDocs(login(repositoryId), folderId, filter, orderBy, includeAllowableActions,
163 maxItems, skipCount);
164 }
165
166
167
168 @Override
169 public String createDocument(String repositoryId, Properties properties, String folderId,
170 ContentStream contentStream, VersioningState versioningState, List<String> policies, Acl addAces,
171 Acl removeAces, ExtensionsData extension) {
172
173 return jcrRepository.createDocument(login(repositoryId), properties, folderId, contentStream, versioningState);
174 }
175
176 @Override
177 public String createDocumentFromSource(String repositoryId, String sourceId, Properties properties,
178 String folderId, VersioningState versioningState, List<String> policies, Acl addAces, Acl removeAces,
179 ExtensionsData extension) {
180
181 return jcrRepository.createDocumentFromSource(login(repositoryId), sourceId, properties, folderId, versioningState);
182 }
183
184 @Override
185 public void setContentStream(String repositoryId, Holder<String> objectId, Boolean overwriteFlag,
186 Holder<String> changeToken, ContentStream contentStream, ExtensionsData extension) {
187
188 jcrRepository.setContentStream(login(repositoryId), objectId, overwriteFlag, contentStream);
189 }
190
191 @Override
192 public void deleteContentStream(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
193 ExtensionsData extension) {
194
195 jcrRepository.setContentStream(login(repositoryId), objectId, true, null);
196 }
197
198 @Override
199 public String createFolder(String repositoryId, Properties properties, String folderId, List<String> policies,
200 Acl addAces, Acl removeAces, ExtensionsData extension) {
201
202 return jcrRepository.createFolder(login(repositoryId), properties, folderId);
203 }
204
205 @Override
206 public void deleteObjectOrCancelCheckOut(String repositoryId, String objectId, Boolean allVersions,
207 ExtensionsData extension) {
208
209 jcrRepository.deleteObject(login(repositoryId), objectId, allVersions);
210 }
211
212 @Override
213 public FailedToDeleteData deleteTree(String repositoryId, String folderId, Boolean allVersions,
214 UnfileObject unfileObjects, Boolean continueOnFailure, ExtensionsData extension) {
215
216 return jcrRepository.deleteTree(login(repositoryId), folderId);
217 }
218
219 @Override
220 public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) {
221 return jcrRepository.getAllowableActions(login(repositoryId), objectId);
222 }
223
224 @Override
225 public ContentStream getContentStream(String repositoryId, String objectId, String streamId, BigInteger offset,
226 BigInteger length, ExtensionsData extension) {
227
228 return jcrRepository.getContentStream(login(repositoryId), objectId, offset, length);
229 }
230
231 @Override
232 public ObjectData getObject(String repositoryId, String objectId, String filter, Boolean includeAllowableActions,
233 IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
234 Boolean includeAcl, ExtensionsData extension) {
235
236 return jcrRepository.getObject(login(repositoryId), objectId, filter, includeAllowableActions, this,
237 context.isObjectInfoRequired());
238 }
239
240 @Override
241 public ObjectData getObjectByPath(String repositoryId, String path, String filter, Boolean includeAllowableActions,
242 IncludeRelationships includeRelationships, String renditionFilter, Boolean includePolicyIds,
243 Boolean includeAcl, ExtensionsData extension) {
244
245 return jcrRepository.getObjectByPath(login(repositoryId), path, filter, includeAllowableActions, includeAcl,
246 this, context.isObjectInfoRequired());
247 }
248
249 @Override
250 public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) {
251 return jcrRepository.getProperties(login(repositoryId), objectId, filter, false, this,
252 context.isObjectInfoRequired());
253 }
254
255 @Override
256 public void moveObject(String repositoryId, Holder<String> objectId, String targetFolderId, String sourceFolderId,
257 ExtensionsData extension) {
258
259 jcrRepository.moveObject(login(repositoryId), objectId, targetFolderId, this, context.isObjectInfoRequired());
260 }
261
262 @Override
263 public void updateProperties(String repositoryId, Holder<String> objectId, Holder<String> changeToken,
264 Properties properties, ExtensionsData extension) {
265
266 jcrRepository.updateProperties(login(repositoryId), objectId, properties, this, context.isObjectInfoRequired());
267 }
268
269
270
271 @Override
272 public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
273 Holder<Boolean> contentCopied) {
274
275 jcrRepository.checkOut(login(repositoryId), objectId, contentCopied);
276 }
277
278 @Override
279 public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
280 jcrRepository.cancelCheckout(login(repositoryId), objectId);
281 }
282
283 @Override
284 public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
285 ContentStream contentStream, String checkinComment, List<String> policies, Acl addAces, Acl removeAces,
286 ExtensionsData extension) {
287
288 jcrRepository.checkIn(login(repositoryId), objectId, major, properties, contentStream, checkinComment);
289 }
290
291 @Override
292 public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
293 Boolean includeAllowableActions, ExtensionsData extension) {
294
295 return jcrRepository.getAllVersions(login(repositoryId), versionSeriesId == null ? objectId : versionSeriesId,
296 filter, includeAllowableActions, this, context.isObjectInfoRequired());
297 }
298
299 @Override
300 public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
301 Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
302 String renditionFilter, Boolean includePolicyIds, Boolean includeAcl, ExtensionsData extension) {
303
304 return jcrRepository.getObject(login(repositoryId), versionSeriesId == null ? objectId : versionSeriesId,
305 filter, includeAllowableActions, this, context.isObjectInfoRequired());
306 }
307
308 @Override
309 public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
310 Boolean major, String filter, ExtensionsData extension) {
311
312 ObjectData object = getObjectOfLatestVersion(repositoryId, objectId, versionSeriesId, major, filter, false,
313 null, null, false, false, extension);
314
315 return object.getProperties();
316 }
317
318
319
320 @Override
321 public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
322 Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
323 BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
324
325 return jcrRepository.query(login(repositoryId), statement, searchAllVersions, includeAllowableActions,
326 maxItems, skipCount);
327 }
328
329
330
331 protected Session login(String workspaceName) {
332 if (context == null) {
333 throw new CmisRuntimeException("No user context!");
334 }
335
336 Session session = sessions.get(workspaceName);
337 if (session == null) {
338 String userName = context.getUsername();
339 String password = context.getPassword();
340 Credentials credentials = userName == null
341 ? null
342 : new SimpleCredentials(userName, password == null ? "".toCharArray() : password.toCharArray());
343
344 session = jcrRepository.login(credentials, workspaceName);
345 sessions.put(workspaceName, session);
346 }
347 return session;
348 }
349
350 }