PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/dxp/apps/sharepoint-soap/sharepoint-soap-repository/src/main/java/com/liferay/sharepoint/soap/repository/connector/SharepointConnectionImpl.java

http://github.com/liferay/liferay-portal
Java | 448 lines | 333 code | 99 blank | 16 comment | 4 complexity | 43f89a293fe1b1e774d6d8946b200359 MD5 | raw file
Possible License(s): LGPL-2.0
  1. /**
  2. * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
  3. *
  4. * The contents of this file are subject to the terms of the Liferay Enterprise
  5. * Subscription License ("License"). You may not use this file except in
  6. * compliance with the License. You can obtain a copy of the License by
  7. * contacting Liferay, Inc. See the License for the specific language governing
  8. * permissions and limitations under the License, including but not limited to
  9. * distribution rights of the Software.
  10. *
  11. *
  12. *
  13. */
  14. package com.liferay.sharepoint.soap.repository.connector;
  15. import com.liferay.petra.string.StringBundler;
  16. import com.liferay.petra.string.StringPool;
  17. import com.liferay.portal.kernel.util.GetterUtil;
  18. import com.liferay.sharepoint.soap.repository.connector.operation.AddFolderOperation;
  19. import com.liferay.sharepoint.soap.repository.connector.operation.AddOrUpdateFileOperation;
  20. import com.liferay.sharepoint.soap.repository.connector.operation.BatchOperation;
  21. import com.liferay.sharepoint.soap.repository.connector.operation.CancelCheckOutFileOperation;
  22. import com.liferay.sharepoint.soap.repository.connector.operation.CheckInFileOperation;
  23. import com.liferay.sharepoint.soap.repository.connector.operation.CheckOutFileOperation;
  24. import com.liferay.sharepoint.soap.repository.connector.operation.CopySharepointObjectOperation;
  25. import com.liferay.sharepoint.soap.repository.connector.operation.DeleteSharepointObjectOperation;
  26. import com.liferay.sharepoint.soap.repository.connector.operation.GetInputStreamOperation;
  27. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointObjectByIdOperation;
  28. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointObjectByPathOperation;
  29. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointObjectsByFolderOperation;
  30. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointObjectsByNameOperation;
  31. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointObjectsByQueryOperation;
  32. import com.liferay.sharepoint.soap.repository.connector.operation.GetSharepointVersionsOperation;
  33. import com.liferay.sharepoint.soap.repository.connector.operation.MoveSharepointObjectOperation;
  34. import com.liferay.sharepoint.soap.repository.connector.operation.Operation;
  35. import com.liferay.sharepoint.soap.repository.connector.operation.PathUtil;
  36. import com.liferay.sharepoint.soap.repository.connector.operation.URLUtil;
  37. import com.liferay.sharepoint.soap.repository.connector.schema.query.Query;
  38. import com.liferay.sharepoint.soap.repository.connector.schema.query.QueryOptionsList;
  39. import com.microsoft.schemas.sharepoint.soap.CopySoap12Stub;
  40. import com.microsoft.schemas.sharepoint.soap.ListsSoap12Stub;
  41. import com.microsoft.schemas.sharepoint.soap.VersionsSoap12Stub;
  42. import java.io.InputStream;
  43. import java.net.URL;
  44. import java.util.Collections;
  45. import java.util.Date;
  46. import java.util.EnumSet;
  47. import java.util.HashMap;
  48. import java.util.Iterator;
  49. import java.util.List;
  50. import java.util.Map;
  51. import java.util.Set;
  52. import org.apache.axis2.client.Options;
  53. import org.apache.axis2.client.ServiceClient;
  54. import org.apache.axis2.client.Stub;
  55. import org.apache.axis2.transport.http.HTTPConstants;
  56. import org.apache.axis2.transport.http.impl.httpclient3.HttpTransportPropertiesImpl;
  57. import org.apache.http.client.config.AuthSchemes;
  58. /**
  59. * @author Iván Zaera
  60. */
  61. public class SharepointConnectionImpl implements SharepointConnection {
  62. public static final long SHAREPOINT_ROOT_FOLDER_SHAREPOINT_OBJECT_ID = -1;
  63. public SharepointConnectionImpl(
  64. SharepointConnection.ServerVersion serverVersion,
  65. String serverProtocol, String serverAddress, int serverPort,
  66. String sitePath, String libraryName, String libraryPath,
  67. String userName, String password)
  68. throws SharepointRuntimeException {
  69. _sharepointConnectionInfo = new SharepointConnectionInfo(
  70. serverVersion, serverProtocol, serverAddress, serverPort, sitePath,
  71. libraryName, libraryPath, userName, password);
  72. _initCopyStub();
  73. _initListsStub();
  74. initSharepointRootFolder();
  75. _initVersionsStub();
  76. _buildOperations();
  77. }
  78. @Override
  79. public void addFile(
  80. String folderPath, String fileName, String changeLog,
  81. InputStream inputStream)
  82. throws SharepointException {
  83. String filePath = PathUtil.buildPath(folderPath, fileName);
  84. changeLog = GetterUtil.getString(changeLog);
  85. _addOrUpdateFileOperation.execute(filePath, changeLog, inputStream);
  86. }
  87. @Override
  88. public void addFolder(String folderPath, String folderName)
  89. throws SharepointException {
  90. PathUtil.validatePath(folderPath);
  91. PathUtil.validateName(folderName);
  92. _addFolderOperation.execute(folderPath, folderName);
  93. }
  94. @Override
  95. public boolean cancelCheckOutFile(String filePath)
  96. throws SharepointException {
  97. PathUtil.validatePath(filePath);
  98. return _cancelCheckOutFileOperation.execute(filePath);
  99. }
  100. @Override
  101. public boolean checkInFile(
  102. String filePath, String comment, CheckInType checkInType)
  103. throws SharepointException {
  104. PathUtil.validatePath(filePath);
  105. return _checkInFileOperation.execute(filePath, comment, checkInType);
  106. }
  107. @Override
  108. public boolean checkOutFile(String filePath) throws SharepointException {
  109. PathUtil.validatePath(filePath);
  110. return _checkOutFileOperation.execute(filePath);
  111. }
  112. @Override
  113. public void copySharepointObject(String path, String newPath)
  114. throws SharepointException {
  115. PathUtil.validatePath(path);
  116. PathUtil.validatePath(newPath);
  117. _copySharepointObjectOperation.execute(path, newPath);
  118. }
  119. @Override
  120. public void deleteSharepointObject(String path) throws SharepointException {
  121. PathUtil.validatePath(path);
  122. _deleteSharepointObjectOperation.execute(path);
  123. }
  124. @Override
  125. public InputStream getInputStream(SharepointObject sharepointObject)
  126. throws SharepointException {
  127. return _getInputStreamOperation.execute(sharepointObject);
  128. }
  129. @Override
  130. public InputStream getInputStream(SharepointVersion sharepointVersion)
  131. throws SharepointException {
  132. return _getInputStreamOperation.execute(sharepointVersion);
  133. }
  134. @Override
  135. public SharepointConnectionInfo getSharepointConnectionInfo() {
  136. return _sharepointConnectionInfo;
  137. }
  138. @Override
  139. public SharepointObject getSharepointObject(long sharepointObjectId)
  140. throws SharepointException {
  141. if (sharepointObjectId == SHAREPOINT_ROOT_FOLDER_SHAREPOINT_OBJECT_ID) {
  142. return _sharepointRootFolder;
  143. }
  144. return _getSharepointObjectByIdOperation.execute(sharepointObjectId);
  145. }
  146. @Override
  147. public SharepointObject getSharepointObject(String path)
  148. throws SharepointException {
  149. PathUtil.validatePath(path);
  150. if (path.equals(StringPool.SLASH)) {
  151. return _sharepointRootFolder;
  152. }
  153. return _getSharepointObjectByPathOperation.execute(path);
  154. }
  155. @Override
  156. public List<SharepointObject> getSharepointObjects(
  157. Query query, QueryOptionsList queryOptionsList)
  158. throws SharepointException {
  159. return _getSharepointObjectsByQueryOperation.execute(
  160. query, queryOptionsList);
  161. }
  162. @Override
  163. public List<SharepointObject> getSharepointObjects(String name)
  164. throws SharepointException {
  165. return _getSharepointObjectsByNameOperation.execute(name);
  166. }
  167. @Override
  168. public List<SharepointObject> getSharepointObjects(
  169. String folderPath, ObjectTypeFilter objectTypeFilter)
  170. throws SharepointException {
  171. PathUtil.validatePath(folderPath);
  172. return _getSharepointObjectsByFolderOperation.execute(
  173. folderPath, objectTypeFilter);
  174. }
  175. @Override
  176. public int getSharepointObjectsCount(
  177. String folderPath, ObjectTypeFilter objectTypeFilter)
  178. throws SharepointException {
  179. List<SharepointObject> sharepointObjects = getSharepointObjects(
  180. folderPath, objectTypeFilter);
  181. return sharepointObjects.size();
  182. }
  183. @Override
  184. public List<SharepointVersion> getSharepointVersions(String filePath)
  185. throws SharepointException {
  186. PathUtil.validatePath(filePath);
  187. return _getSharepointVersionsOperation.execute(filePath);
  188. }
  189. public void initSharepointRootFolder() {
  190. URL serviceURL = _sharepointConnectionInfo.getServiceURL();
  191. String libraryPath = _sharepointConnectionInfo.getLibraryPath();
  192. URL libraryURL = URLUtil.toURL(serviceURL + libraryPath);
  193. _sharepointRootFolder = new SharepointObject(
  194. StringPool.BLANK, null, new Date(0), true, new Date(0),
  195. StringPool.SLASH, EnumSet.allOf(SharepointObject.Permission.class),
  196. SHAREPOINT_ROOT_FOLDER_SHAREPOINT_OBJECT_ID, 0, libraryURL);
  197. }
  198. @Override
  199. public void moveSharepointObject(String path, String newPath)
  200. throws SharepointException {
  201. PathUtil.validatePath(path);
  202. PathUtil.validatePath(newPath);
  203. _moveSharepointObjectOperation.execute(path, newPath);
  204. }
  205. @Override
  206. public void updateFile(String filePath, InputStream inputStream)
  207. throws SharepointException {
  208. PathUtil.validatePath(filePath);
  209. _addOrUpdateFileOperation.execute(filePath, null, inputStream);
  210. }
  211. private <O extends Operation> O _buildOperation(Class<O> clazz) {
  212. try {
  213. O operation = clazz.newInstance();
  214. operation.setCopySoap12Stub(_copySoap12Stub);
  215. operation.setListsSoap12Stub(_listsSoap12Stub);
  216. operation.setOperations(_operations);
  217. operation.setSharepointConnectionInfo(_sharepointConnectionInfo);
  218. operation.setVersionsSoap12Stub(_versionsSoap12Stub);
  219. _operations.put(clazz, operation);
  220. return operation;
  221. }
  222. catch (Exception exception) {
  223. throw new SharepointRuntimeException(
  224. "Unable to initialize operation " + clazz.getName(), exception);
  225. }
  226. }
  227. private void _buildOperations() {
  228. _addFolderOperation = _buildOperation(AddFolderOperation.class);
  229. _addOrUpdateFileOperation = _buildOperation(
  230. AddOrUpdateFileOperation.class);
  231. _batchOperation = _buildOperation(BatchOperation.class);
  232. _cancelCheckOutFileOperation = _buildOperation(
  233. CancelCheckOutFileOperation.class);
  234. _checkInFileOperation = _buildOperation(CheckInFileOperation.class);
  235. _checkOutFileOperation = _buildOperation(CheckOutFileOperation.class);
  236. _copySharepointObjectOperation = _buildOperation(
  237. CopySharepointObjectOperation.class);
  238. _deleteSharepointObjectOperation = _buildOperation(
  239. DeleteSharepointObjectOperation.class);
  240. _getInputStreamOperation = _buildOperation(
  241. GetInputStreamOperation.class);
  242. _getSharepointObjectByIdOperation = _buildOperation(
  243. GetSharepointObjectByIdOperation.class);
  244. _getSharepointObjectByPathOperation = _buildOperation(
  245. GetSharepointObjectByPathOperation.class);
  246. _getSharepointObjectsByFolderOperation = _buildOperation(
  247. GetSharepointObjectsByFolderOperation.class);
  248. _getSharepointObjectsByNameOperation = _buildOperation(
  249. GetSharepointObjectsByNameOperation.class);
  250. _getSharepointObjectsByQueryOperation = _buildOperation(
  251. GetSharepointObjectsByQueryOperation.class);
  252. _getSharepointVersionsOperation = _buildOperation(
  253. GetSharepointVersionsOperation.class);
  254. _moveSharepointObjectOperation = _buildOperation(
  255. MoveSharepointObjectOperation.class);
  256. Set<Map.Entry<Class<? extends Operation>, Operation>> set =
  257. _operations.entrySet();
  258. Iterator<Map.Entry<Class<? extends Operation>, Operation>> iterator =
  259. set.iterator();
  260. while (iterator.hasNext()) {
  261. Map.Entry<Class<? extends Operation>, Operation> entry =
  262. iterator.next();
  263. Operation operation = entry.getValue();
  264. operation.afterPropertiesSet();
  265. }
  266. }
  267. private void _configureStub(Stub stub, URL url) {
  268. ServiceClient serviceClient = stub._getServiceClient();
  269. Options options = serviceClient.getOptions();
  270. HttpTransportPropertiesImpl.Authenticator authenticator =
  271. new HttpTransportPropertiesImpl.Authenticator();
  272. authenticator.setAuthSchemes(
  273. Collections.singletonList(AuthSchemes.NTLM));
  274. authenticator.setDomain(url.getHost());
  275. authenticator.setHost(url.getHost());
  276. authenticator.setPassword(_sharepointConnectionInfo.getPassword());
  277. authenticator.setPort(url.getPort());
  278. authenticator.setPreemptiveAuthentication(true);
  279. authenticator.setUsername(_sharepointConnectionInfo.getUserName());
  280. options.setProperty(HTTPConstants.AUTHENTICATE, authenticator);
  281. }
  282. private URL _getServiceURL(String serviceName) {
  283. URL url = _sharepointConnectionInfo.getServiceURL();
  284. return URLUtil.toURL(
  285. StringBundler.concat(url, "_vti_bin/", serviceName, ".asmx"));
  286. }
  287. private void _initCopyStub() {
  288. URL serviceURL = _getServiceURL("copy");
  289. try {
  290. _copySoap12Stub = new CopySoap12Stub(null, serviceURL.toString());
  291. _configureStub(_copySoap12Stub, serviceURL);
  292. }
  293. catch (Exception exception) {
  294. throw new SharepointRuntimeException(
  295. "Unable to configure SOAP endpoint " + serviceURL, exception);
  296. }
  297. }
  298. private void _initListsStub() {
  299. URL serviceURL = _getServiceURL("lists");
  300. try {
  301. _listsSoap12Stub = new ListsSoap12Stub(
  302. null, serviceURL.toExternalForm());
  303. _configureStub(_listsSoap12Stub, serviceURL);
  304. }
  305. catch (Exception exception) {
  306. throw new SharepointRuntimeException(
  307. "Unable to configure SOAP endpoint " + serviceURL, exception);
  308. }
  309. }
  310. private void _initVersionsStub() {
  311. URL serviceURL = _getServiceURL("versions");
  312. try {
  313. _versionsSoap12Stub = new VersionsSoap12Stub(
  314. null, serviceURL.toExternalForm());
  315. _configureStub(_versionsSoap12Stub, serviceURL);
  316. }
  317. catch (Exception exception) {
  318. throw new SharepointRuntimeException(
  319. "Unable to configure SOAP endpoint " + serviceURL, exception);
  320. }
  321. }
  322. private AddFolderOperation _addFolderOperation;
  323. private AddOrUpdateFileOperation _addOrUpdateFileOperation;
  324. private BatchOperation _batchOperation;
  325. private CancelCheckOutFileOperation _cancelCheckOutFileOperation;
  326. private CheckInFileOperation _checkInFileOperation;
  327. private CheckOutFileOperation _checkOutFileOperation;
  328. private CopySharepointObjectOperation _copySharepointObjectOperation;
  329. private CopySoap12Stub _copySoap12Stub;
  330. private DeleteSharepointObjectOperation _deleteSharepointObjectOperation;
  331. private GetInputStreamOperation _getInputStreamOperation;
  332. private GetSharepointObjectByIdOperation _getSharepointObjectByIdOperation;
  333. private GetSharepointObjectByPathOperation
  334. _getSharepointObjectByPathOperation;
  335. private GetSharepointObjectsByFolderOperation
  336. _getSharepointObjectsByFolderOperation;
  337. private GetSharepointObjectsByNameOperation
  338. _getSharepointObjectsByNameOperation;
  339. private GetSharepointObjectsByQueryOperation
  340. _getSharepointObjectsByQueryOperation;
  341. private GetSharepointVersionsOperation _getSharepointVersionsOperation;
  342. private ListsSoap12Stub _listsSoap12Stub;
  343. private MoveSharepointObjectOperation _moveSharepointObjectOperation;
  344. private final Map<Class<? extends Operation>, Operation> _operations =
  345. new HashMap<>();
  346. private final SharepointConnectionInfo _sharepointConnectionInfo;
  347. private SharepointObject _sharepointRootFolder;
  348. private VersionsSoap12Stub _versionsSoap12Stub;
  349. }