1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.client.bindings.spi.webservices;
20
21 import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convert;
22 import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertExtensionHolder;
23 import static org.apache.chemistry.opencmis.commons.impl.WSConverter.convertTypeContainerList;
24 import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
25
26 import java.math.BigInteger;
27 import java.util.ArrayList;
28 import java.util.List;
29
30 import org.apache.chemistry.opencmis.client.bindings.impl.CmisBindingsHelper;
31 import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
32 import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
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.CmisVersion;
38 import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
39 import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
40 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
41 import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl;
42 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
43 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
44 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryEntryType;
45 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType;
46 import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
47 import org.apache.chemistry.opencmis.commons.impl.jaxb.RepositoryServicePort;
48 import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
49
50
51
52
53 public class RepositoryServiceImpl extends AbstractWebServicesService implements RepositoryService {
54
55 private final AbstractPortProvider portProvider;
56
57
58
59
60 public RepositoryServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
61 setSession(session);
62 this.portProvider = portProvider;
63 }
64
65 @Override
66 public List<RepositoryInfo> getRepositoryInfos(ExtensionsData extension) {
67 CmisVersion cmisVersion = CmisBindingsHelper.getForcedCmisVersion(getSession());
68 if (cmisVersion == null) {
69 cmisVersion = CmisVersion.CMIS_1_1;
70 }
71
72 RepositoryServicePort port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositories");
73
74 List<CmisRepositoryEntryType> entries = null;
75 try {
76
77 entries = port.getRepositories(convert(extension));
78 } catch (CmisException e) {
79 throw convertException(e);
80 } catch (Exception e) {
81 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
82 } finally {
83 portProvider.endCall(port);
84 }
85
86 List<RepositoryInfo> infos = null;
87 if (entries != null) {
88 port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositoryInfo");
89
90 try {
91 infos = new ArrayList<RepositoryInfo>();
92
93
94 for (CmisRepositoryEntryType entry : entries) {
95 try {
96 CmisRepositoryInfoType info = port.getRepositoryInfo(entry.getRepositoryId(), null);
97 infos.add(convert(info));
98 } catch (CmisBaseException e) {
99
100
101 RepositoryInfoImpl info = new RepositoryInfoImpl();
102 info.setId(entry.getRepositoryId());
103 info.setName(entry.getRepositoryName());
104 infos.add(info);
105 }
106 }
107 } catch (CmisException e) {
108 throw convertException(e);
109 } catch (Exception e) {
110 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
111 } finally {
112 portProvider.endCall(port);
113 }
114 }
115
116 return infos;
117 }
118
119 @Override
120 public RepositoryInfo getRepositoryInfo(String repositoryId, ExtensionsData extension) {
121 CmisVersion cmisVersion = CmisBindingsHelper.getForcedCmisVersion(getSession());
122 if (cmisVersion == null) {
123 cmisVersion = CmisVersion.CMIS_1_1;
124 }
125
126 RepositoryServicePort port = portProvider.getRepositoryServicePort(cmisVersion, "getRepositoryInfo");
127
128 try {
129 return convert(port.getRepositoryInfo(repositoryId, convert(extension)));
130 } catch (CmisException e) {
131 throw convertException(e);
132 } catch (Exception e) {
133 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
134 } finally {
135 portProvider.endCall(port);
136 }
137 }
138
139 @Override
140 public TypeDefinition getTypeDefinition(String repositoryId, String typeId, ExtensionsData extension) {
141 RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
142 "getTypeDefinition");
143
144 try {
145 return convert(port.getTypeDefinition(repositoryId, typeId, convert(extension)));
146 } catch (CmisException e) {
147 throw convertException(e);
148 } catch (Exception e) {
149 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
150 } finally {
151 portProvider.endCall(port);
152 }
153 }
154
155 @Override
156 public TypeDefinitionList getTypeChildren(String repositoryId, String typeId, Boolean includePropertyDefinitions,
157 BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
158 RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
159 "getTypeChildren");
160
161 try {
162 return convert(port.getTypeChildren(repositoryId, typeId, includePropertyDefinitions, maxItems, skipCount,
163 convert(extension)));
164 } catch (CmisException e) {
165 throw convertException(e);
166 } catch (Exception e) {
167 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
168 } finally {
169 portProvider.endCall(port);
170 }
171 }
172
173 @Override
174 public List<TypeDefinitionContainer> getTypeDescendants(String repositoryId, String typeId, BigInteger depth,
175 Boolean includePropertyDefinitions, ExtensionsData extension) {
176 RepositoryServicePort port = portProvider.getRepositoryServicePort(getCmisVersion(repositoryId),
177 "getTypeDescendants");
178
179 try {
180 return convertTypeContainerList(port.getTypeDescendants(repositoryId, typeId, depth,
181 includePropertyDefinitions, convert(extension)));
182 } catch (CmisException e) {
183 throw convertException(e);
184 } catch (Exception e) {
185 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
186 } finally {
187 portProvider.endCall(port);
188 }
189 }
190
191 @Override
192 public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
193 if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
194 throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
195 }
196
197 RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "createType");
198
199 try {
200 javax.xml.ws.Holder<CmisTypeDefinitionType> typeDef = new javax.xml.ws.Holder<CmisTypeDefinitionType>(
201 convert(type));
202
203 port.createType(repositoryId, typeDef, convert(extension));
204
205 return convert(typeDef.value);
206 } catch (CmisException e) {
207 throw convertException(e);
208 } catch (Exception e) {
209 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
210 } finally {
211 portProvider.endCall(port);
212 }
213 }
214
215 @Override
216 public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) {
217 if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
218 throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
219 }
220
221 RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "updateType");
222
223 try {
224 javax.xml.ws.Holder<CmisTypeDefinitionType> typeDef = new javax.xml.ws.Holder<CmisTypeDefinitionType>(
225 convert(type));
226
227 port.updateType(repositoryId, typeDef, convert(extension));
228
229 return convert(typeDef.value);
230 } catch (CmisException e) {
231 throw convertException(e);
232 } catch (Exception e) {
233 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
234 } finally {
235 portProvider.endCall(port);
236 }
237 }
238
239 @Override
240 public void deleteType(String repositoryId, String typeId, ExtensionsData extension) {
241 if (getCmisVersion(repositoryId) == CmisVersion.CMIS_1_0) {
242 throw new CmisNotSupportedException("Repository is a CMIS 1.0 repository!");
243 }
244
245 RepositoryServicePort port = portProvider.getRepositoryServicePort(CmisVersion.CMIS_1_1, "deleteType");
246
247 try {
248 javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
249
250 port.deleteType(repositoryId, typeId, portExtension);
251
252 setExtensionValues(portExtension, extension);
253 } catch (CmisException e) {
254 throw convertException(e);
255 } catch (Exception e) {
256 throw new CmisRuntimeException("Error: " + e.getMessage(), e);
257 } finally {
258 portProvider.endCall(port);
259 }
260 }
261 }