/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.sharepoint; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.DateUtil; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.xml.Element; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author Bruno Farache */ public abstract class BaseSharepointStorageImpl implements SharepointStorage { @Override public void addDocumentElements( SharepointRequest sharepointRequest, Element element) throws Exception { } @Override public void createFolder(SharepointRequest sharepointRequest) throws Exception { } @Override public InputStream getDocumentInputStream( SharepointRequest sharepointRequest) throws Exception { return null; } @Override public Tree getDocumentsTree(SharepointRequest sharepointRequest) throws Exception { return new Tree(); } @Override public Tree getDocumentTree(SharepointRequest sharepointRequest) throws Exception { return new Tree(); } @Override public Tree getFoldersTree(SharepointRequest sharepointRequest) throws Exception { return new Tree(); } @Override public Tree getFolderTree(SharepointRequest sharepointRequest) throws Exception { return new Tree(); } @Override public void getParentFolderIds( long groupId, String path, List<Long> folderIds) throws Exception { } @Override public Tree[] moveDocument(SharepointRequest sharepointRequest) throws Exception { return null; } @Override public void putDocument(SharepointRequest sharepointRequest) throws Exception { } @Override public Tree[] removeDocument(SharepointRequest sharepointRequest) throws Exception { return null; } protected void addDocumentElement( Element element, String documentName, Date createDate, Date modifiedDate, String userName) throws Exception { element.addNamespace("z", "#RowsetSchema"); Element rowEl = element.addElement("z:row"); rowEl.addAttribute("ows_FileRef", documentName); rowEl.addAttribute("ows_FSObjType", "0"); rowEl.addAttribute("ows_Created", getDate(createDate, true)); rowEl.addAttribute("ows_Author", userName); rowEl.addAttribute("ows_Modified", getDate(modifiedDate, true)); rowEl.addAttribute("ows_Editor", userName); } protected String getDate(Date date, boolean xml) { if (date == null) { return StringPool.BLANK; } StringBundler sb = new StringBundler(2); if (xml) { sb.append( DateUtil.getDate(date, "yyyy-mm-dd HH:mm:ss Z", LocaleUtil.US)); } else { sb.append("TR|"); sb.append( DateUtil.getDate( date, "dd MMM yyyy HH:mm:ss Z", LocaleUtil.US)); } return sb.toString(); } protected Tree getDocumentTree( String documentName, Date createDate, Date modifiedDate, long size, String userName, String version) { Tree documentTree = new Tree(); documentName = SharepointUtil.replaceBackSlashes(documentName); documentTree.addChild(new Leaf("document_name", documentName, true)); String createDateString = getDate(createDate, false); String modifiedDateString = getDate(modifiedDate, false); Tree metaInfoTree = new Tree(); metaInfoTree.addChild( new Leaf("vti_timecreated", createDateString, false)); metaInfoTree.addChild( new Leaf("vti_timelastmodified", modifiedDateString, false)); metaInfoTree.addChild( new Leaf("vti_timelastwritten", modifiedDateString, false)); metaInfoTree.addChild(new Leaf("vti_filesize", "IR|" + size, false)); metaInfoTree.addChild( new Leaf("vti_sourcecontrolcheckedoutby", "SR|" + userName, false)); metaInfoTree.addChild( new Leaf( "vti_sourcecontroltimecheckedout", createDateString, false)); metaInfoTree.addChild( new Leaf("vti_sourcecontrolversion", "SR|V" + version, false)); metaInfoTree.addChild( new Leaf("vti_sourcecontrollockexpires", createDateString, false)); documentTree.addChild(new Leaf("meta_info", metaInfoTree)); return documentTree; } protected Tree getFolderTree(String name) { Date now = new Date(); return getFolderTree(name, now, now, now); } protected Tree getFolderTree( String name, Date createDate, Date modifiedDate, Date lastPostDate) { Tree folderTree = new Tree(); Tree metaInfoTree = new Tree(); name = SharepointUtil.replaceBackSlashes(name); metaInfoTree.addChild( new Leaf("vti_timecreated", getDate(createDate, false), false)); metaInfoTree.addChild( new Leaf( "vti_timelastmodified", getDate(modifiedDate, false), false)); metaInfoTree.addChild( new Leaf( "vti_timelastwritten", getDate(lastPostDate, false), false)); metaInfoTree.addChild(new Leaf("vti_hassubdirs", "BR|true", false)); metaInfoTree.addChild(new Leaf("vti_isbrowsable", "BR|true", false)); metaInfoTree.addChild(new Leaf("vti_isexecutable", "BR|false", false)); metaInfoTree.addChild(new Leaf("vti_isscriptable", "BR|false", false)); folderTree.addChild(new Leaf("url", name, true)); folderTree.addChild(new Leaf("meta_info", metaInfoTree)); return folderTree; } protected long getLastFolderId( long groupId, String path, long defaultParentFolderId) throws Exception { List<Long> folderIds = new ArrayList<>(); folderIds.add(defaultParentFolderId); String[] pathArray = SharepointUtil.getPathArray(path); if (pathArray.length > 2) { path = removeFoldersFromPath(path, 2); getParentFolderIds(groupId, path, folderIds); } return folderIds.get(folderIds.size() - 1); } protected String getParentFolderPath(String path) { int pos = path.lastIndexOf(CharPool.FORWARD_SLASH); return path.substring(0, pos); } protected String getResourceName(String path) { int pos = path.lastIndexOf(CharPool.FORWARD_SLASH); return path.substring(pos + 1); } protected String removeFoldersFromPath(String path, int index) { for (int i = 0; i < index; i++) { int pos = path.indexOf(CharPool.SLASH); path = path.substring(pos + 1); } return path; } }