This project has retired. For details please refer to its
Attic page.
VersioningService xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.impl.atompub;
20
21 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.RESOURCE_ENTRY;
22 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.compileBaseUrl;
23 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.compileUrl;
24 import static org.apache.chemistry.opencmis.server.impl.atompub.AtomPubUtils.writeObjectEntry;
25 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getBooleanParameter;
26 import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getStringParameter;
27
28 import java.util.List;
29
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32
33 import org.apache.chemistry.opencmis.commons.data.ObjectData;
34 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
35 import org.apache.chemistry.opencmis.commons.impl.Constants;
36 import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
37 import org.apache.chemistry.opencmis.commons.server.CallContext;
38 import org.apache.chemistry.opencmis.commons.server.CmisService;
39 import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
40 import org.apache.chemistry.opencmis.commons.spi.Holder;
41
42
43
44
45 public class VersioningService {
46
47 private VersioningService() {
48 }
49
50
51
52
53 public static void checkOut(CallContext context, CmisService service, String repositoryId,
54 HttpServletRequest request, HttpServletResponse response) throws Exception {
55
56 AtomEntryParser parser = new AtomEntryParser(context.getTempDirectory(), context.getMemoryThreshold());
57 parser.setIgnoreAtomContentSrc(true);
58 parser.parse(request.getInputStream());
59
60
61 Holder<String> checkOutId = new Holder<String>(parser.getId());
62 service.checkOut(repositoryId, checkOutId, null, null);
63
64 ObjectInfo objectInfo = service.getObjectInfo(repositoryId, checkOutId.getValue());
65 if (objectInfo == null) {
66 throw new CmisRuntimeException("Object Info is missing!");
67 }
68
69 ObjectData object = objectInfo.getObject();
70 if (object == null) {
71 throw new CmisRuntimeException("Object is null!");
72 }
73
74 if (object.getId() == null) {
75 throw new CmisRuntimeException("Object Id is null!");
76 }
77
78
79 UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
80 String location = compileUrl(baseUrl, RESOURCE_ENTRY, object.getId());
81
82 response.setStatus(HttpServletResponse.SC_CREATED);
83 response.setContentType(Constants.MEDIATYPE_ENTRY);
84 response.setHeader("Content-Location", location);
85 response.setHeader("Location", location);
86
87
88 AtomEntry entry = new AtomEntry();
89 entry.startDocument(response.getOutputStream());
90 writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true);
91 entry.endDocument();
92 }
93
94
95
96
97 public static void getAllVersions(CallContext context, CmisService service, String repositoryId,
98 HttpServletRequest request, HttpServletResponse response) throws Exception {
99
100 String objectId = getStringParameter(request, Constants.PARAM_ID);
101 String versionSeriesId = getStringParameter(request, Constants.PARAM_VERSION_SERIES_ID);
102 String filter = getStringParameter(request, Constants.PARAM_FILTER);
103 Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
104
105
106 List<ObjectData> versions = service.getAllVersions(repositoryId, objectId, versionSeriesId, filter,
107 includeAllowableActions, null);
108
109 if (versions == null || versions.isEmpty()) {
110 throw new CmisRuntimeException("Version list is null or empty!");
111 }
112
113
114 response.setStatus(HttpServletResponse.SC_OK);
115 response.setContentType(Constants.MEDIATYPE_FEED);
116
117
118 AtomFeed feed = new AtomFeed();
119 feed.startDocument(response.getOutputStream());
120 feed.startFeed(true);
121
122
123 ObjectInfo latestObjectInfo = service.getObjectInfo(repositoryId, versions.get(0).getId());
124 ObjectInfo firstObjectInfo = service.getObjectInfo(repositoryId, versions.get(versions.size() - 1).getId());
125
126 feed.writeFeedElements(versionSeriesId, firstObjectInfo.getCreatedBy(), latestObjectInfo.getName(),
127 latestObjectInfo.getLastModificationDate(), null, null);
128
129
130 UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
131
132 feed.writeServiceLink(baseUrl.toString(), repositoryId);
133
134 if (objectId != null) {
135 feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, objectId));
136 }
137
138
139 AtomEntry entry = new AtomEntry(feed.getWriter());
140 for (ObjectData object : versions) {
141 if (object == null) {
142 continue;
143 }
144 writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false);
145 }
146
147
148 feed.endFeed();
149 feed.endDocument();
150 }
151
152
153
154
155 public static void deleteAllVersions(CallContext context, CmisService service, String repositoryId,
156 HttpServletRequest request, HttpServletResponse response) {
157
158 String objectId = getStringParameter(request, Constants.PARAM_ID);
159
160
161 service.deleteObjectOrCancelCheckOut(repositoryId, objectId, Boolean.TRUE, null);
162
163
164 response.setStatus(HttpServletResponse.SC_NO_CONTENT);
165 }
166 }