View Javadoc

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.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.convertHolder;
24  import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setExtensionValues;
25  import static org.apache.chemistry.opencmis.commons.impl.WSConverter.setHolderValue;
26  
27  import java.util.ArrayList;
28  import java.util.List;
29  
30  import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
31  import org.apache.chemistry.opencmis.commons.data.Acl;
32  import org.apache.chemistry.opencmis.commons.data.ContentStream;
33  import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
34  import org.apache.chemistry.opencmis.commons.data.ObjectData;
35  import org.apache.chemistry.opencmis.commons.data.Properties;
36  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
37  import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
38  import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisException;
39  import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisExtensionType;
40  import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisObjectType;
41  import org.apache.chemistry.opencmis.commons.impl.jaxb.EnumIncludeRelationships;
42  import org.apache.chemistry.opencmis.commons.impl.jaxb.VersioningServicePort;
43  import org.apache.chemistry.opencmis.commons.spi.Holder;
44  import org.apache.chemistry.opencmis.commons.spi.VersioningService;
45  
46  /**
47   * Versioning Service Web Services client.
48   */
49  public class VersioningServiceImpl extends AbstractWebServicesService implements VersioningService {
50  
51      private final AbstractPortProvider portProvider;
52  
53      /**
54       * Constructor.
55       */
56      public VersioningServiceImpl(BindingSession session, AbstractPortProvider portProvider) {
57          setSession(session);
58          this.portProvider = portProvider;
59      }
60  
61      @Override
62      public void checkOut(String repositoryId, Holder<String> objectId, ExtensionsData extension,
63              Holder<Boolean> contentCopied) {
64          VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId), "checkOut");
65  
66          try {
67              javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
68              javax.xml.ws.Holder<Boolean> portContentCopied = new javax.xml.ws.Holder<Boolean>();
69              javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
70  
71              port.checkOut(repositoryId, portObjectId, portExtension, portContentCopied);
72  
73              setHolderValue(portObjectId, objectId);
74              setHolderValue(portContentCopied, contentCopied);
75              setExtensionValues(portExtension, extension);
76          } catch (CmisException e) {
77              throw convertException(e);
78          } catch (Exception e) {
79              throw new CmisRuntimeException("Error: " + e.getMessage(), e);
80          } finally {
81              portProvider.endCall(port);
82          }
83      }
84  
85      @Override
86      public void cancelCheckOut(String repositoryId, String objectId, ExtensionsData extension) {
87          VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
88                  "cancelCheckOut");
89  
90          try {
91              javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
92  
93              port.cancelCheckOut(repositoryId, objectId, portExtension);
94  
95              setExtensionValues(portExtension, extension);
96          } catch (CmisException e) {
97              throw convertException(e);
98          } catch (Exception e) {
99              throw new CmisRuntimeException("Error: " + e.getMessage(), e);
100         } finally {
101             portProvider.endCall(port);
102         }
103     }
104 
105     @Override
106     public void checkIn(String repositoryId, Holder<String> objectId, Boolean major, Properties properties,
107             ContentStream contentStream, String checkinComment, List<String> policies, Acl addACEs, Acl removeACEs,
108             ExtensionsData extension) {
109         VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId), "checkIn");
110 
111         try {
112             javax.xml.ws.Holder<String> portObjectId = convertHolder(objectId);
113             javax.xml.ws.Holder<CmisExtensionType> portExtension = convertExtensionHolder(extension);
114 
115             port.checkIn(repositoryId, portObjectId, major, convert(properties), convert(contentStream, false),
116                     checkinComment, policies, convert(addACEs), convert(removeACEs), portExtension);
117 
118             setHolderValue(portObjectId, objectId);
119             setExtensionValues(portExtension, extension);
120         } catch (CmisException e) {
121             throw convertException(e);
122         } catch (Exception e) {
123             throw new CmisRuntimeException("Error: " + e.getMessage(), e);
124         } finally {
125             portProvider.endCall(port);
126         }
127     }
128 
129     @Override
130     public List<ObjectData> getAllVersions(String repositoryId, String objectId, String versionSeriesId, String filter,
131             Boolean includeAllowableActions, ExtensionsData extension) {
132         VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
133                 "getAllVersions");
134 
135         try {
136             List<CmisObjectType> versionList = port.getAllVersions(repositoryId, versionSeriesId, filter,
137                     includeAllowableActions, convert(extension));
138 
139             // no list?
140             if (versionList == null) {
141                 return null;
142             }
143 
144             // convert list
145             List<ObjectData> result = new ArrayList<ObjectData>();
146             for (CmisObjectType version : versionList) {
147                 result.add(convert(version));
148             }
149 
150             return result;
151         } catch (CmisException e) {
152             throw convertException(e);
153         } catch (Exception e) {
154             throw new CmisRuntimeException("Error: " + e.getMessage(), e);
155         } finally {
156             portProvider.endCall(port);
157         }
158     }
159 
160     @Override
161     public ObjectData getObjectOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
162             Boolean major, String filter, Boolean includeAllowableActions, IncludeRelationships includeRelationships,
163             String renditionFilter, Boolean includePolicyIds, Boolean includeACL, ExtensionsData extension) {
164         VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
165                 "getObjectOfLatestVersion");
166 
167         try {
168             return convert(port.getObjectOfLatestVersion(repositoryId, versionSeriesId, major, filter,
169                     includeAllowableActions, convert(EnumIncludeRelationships.class, includeRelationships),
170                     renditionFilter, includePolicyIds, includeACL, convert(extension)));
171         } catch (CmisException e) {
172             throw convertException(e);
173         } catch (Exception e) {
174             throw new CmisRuntimeException("Error: " + e.getMessage(), e);
175         } finally {
176             portProvider.endCall(port);
177         }
178     }
179 
180     @Override
181     public Properties getPropertiesOfLatestVersion(String repositoryId, String objectId, String versionSeriesId,
182             Boolean major, String filter, ExtensionsData extension) {
183         VersioningServicePort port = portProvider.getVersioningServicePort(getCmisVersion(repositoryId),
184                 "getPropertiesOfLatestVersion");
185 
186         try {
187             return convert(port.getPropertiesOfLatestVersion(repositoryId, versionSeriesId, major, filter,
188                     convert(extension)));
189         } catch (CmisException e) {
190             throw convertException(e);
191         } catch (Exception e) {
192             throw new CmisRuntimeException("Error: " + e.getMessage(), e);
193         } finally {
194             portProvider.endCall(port);
195         }
196     }
197 }