/**
* 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.sync.service.impl;
import com.liferay.document.library.kernel.exception.DuplicateFileEntryException;
import com.liferay.document.library.kernel.exception.DuplicateFolderNameException;
import com.liferay.document.library.kernel.exception.NoSuchFileEntryException;
import com.liferay.document.library.kernel.exception.NoSuchFolderException;
import com.liferay.document.library.kernel.model.DLFileEntryConstants;
import com.liferay.document.library.kernel.model.DLFileVersion;
import com.liferay.document.library.kernel.model.DLFolder;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.model.DLSyncEvent;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.json.JSONArray;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.jsonwebservice.NoSuchJSONWebServiceException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.GroupConstants;
import com.liferay.portal.kernel.model.Organization;
import com.liferay.portal.kernel.model.ResourceConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileVersion;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.security.access.control.AccessControlled;
import com.liferay.portal.kernel.security.auth.CompanyThreadLocal;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.transaction.Transactional;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.Constants;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.PrefsPropsUtil;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.ReleaseInfo;
import com.liferay.portal.kernel.util.SetUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.comparator.GroupNameComparator;
import com.liferay.portal.kernel.zip.ZipReader;
import com.liferay.portal.kernel.zip.ZipReaderFactoryUtil;
import com.liferay.sync.constants.SyncConstants;
import com.liferay.sync.constants.SyncDLObjectConstants;
import com.liferay.sync.constants.SyncDeviceConstants;
import com.liferay.sync.model.SyncDLObject;
import com.liferay.sync.model.SyncDevice;
import com.liferay.sync.service.base.SyncDLObjectServiceBaseImpl;
import com.liferay.sync.service.configuration.SyncServiceConfigurationKeys;
import com.liferay.sync.service.configuration.SyncServiceConfigurationValues;
import com.liferay.sync.util.JSONWebServiceActionParametersMap;
import com.liferay.sync.util.SyncContext;
import com.liferay.sync.util.SyncDLObjectUpdate;
import com.liferay.sync.util.SyncDeviceThreadLocal;
import com.liferay.sync.util.SyncUtil;
import com.liferay.sync.util.comparator.SyncDLObjectModifiedTimeComparator;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import jodd.bean.BeanUtil;
import jodd.util.NameValue;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
/**
* @author Michael Young
* @author Dennis Ju
*/
public class SyncDLObjectServiceImpl extends SyncDLObjectServiceBaseImpl {
@Override
public SyncDLObject addFileEntry(
long repositoryId, long folderId, String sourceFileName,
String mimeType, String title, String description, String changeLog,
File file, String checksum, ServiceContext serviceContext)
throws PortalException {
try {
Group group = groupLocalService.getGroup(repositoryId);
SyncUtil.checkSyncEnabled(group.getGroupId());
checkFolder(folderId);
if (!group.isUser() &&
ArrayUtil.isEmpty(serviceContext.getGroupPermissions())) {
SyncUtil.setFilePermissions(group, false, serviceContext);
}
serviceContext.setCommand(Constants.ADD);
FileEntry fileEntry = dlAppService.addFileEntry(
repositoryId, folderId, sourceFileName, mimeType, title,
description, changeLog, file, serviceContext);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_ADD, checksum);
}
catch (PortalException pe) {
if (pe instanceof DuplicateFileEntryException) {
if (GetterUtil.getBoolean(
serviceContext.getAttribute("overwrite"))) {
FileEntry fileEntry = dlAppService.getFileEntry(
repositoryId, folderId, title);
return updateFileEntry(
fileEntry.getFileEntryId(), sourceFileName, mimeType,
title, description, changeLog, false, file, checksum,
serviceContext);
}
}
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject addFolder(
long repositoryId, long parentFolderId, String name,
String description, ServiceContext serviceContext)
throws PortalException {
try {
Group group = groupLocalService.getGroup(repositoryId);
SyncUtil.checkSyncEnabled(group.getGroupId());
checkFolder(parentFolderId);
if (!group.isUser() &&
ArrayUtil.isEmpty(serviceContext.getGroupPermissions())) {
SyncUtil.setFilePermissions(group, true, serviceContext);
}
Folder folder = dlAppService.addFolder(
repositoryId, parentFolderId, name, description,
serviceContext);
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_ADD);
}
catch (PortalException pe) {
if (pe instanceof DuplicateFolderNameException) {
if (GetterUtil.getBoolean(
serviceContext.getAttribute("overwrite"))) {
Folder folder = dlAppService.getFolder(
repositoryId, parentFolderId, name);
return updateFolder(
folder.getFolderId(), name, description,
serviceContext);
}
}
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject cancelCheckOut(long fileEntryId)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
dlAppService.cancelCheckOut(fileEntryId);
fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_CANCEL_CHECK_OUT);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject checkInFileEntry(
long fileEntryId, boolean majorVersion, String changeLog,
ServiceContext serviceContext)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
dlAppService.checkInFileEntry(
fileEntryId, majorVersion, changeLog, serviceContext);
fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_CHECK_IN);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject checkOutFileEntry(
long fileEntryId, ServiceContext serviceContext)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
dlAppService.checkOutFileEntry(fileEntryId, serviceContext);
fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_CHECK_OUT);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject checkOutFileEntry(
long fileEntryId, String owner, long expirationTime,
ServiceContext serviceContext)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
fileEntry = dlAppService.checkOutFileEntry(
fileEntryId, owner, expirationTime, serviceContext);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_CHECK_OUT);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject copyFileEntry(
long sourceFileEntryId, long repositoryId, long folderId,
String sourceFileName, String title, ServiceContext serviceContext)
throws PortalException {
try {
Group group = groupLocalService.getGroup(repositoryId);
SyncUtil.checkSyncEnabled(group.getGroupId());
checkFolder(folderId);
FileEntry sourceFileEntry = dlAppLocalService.getFileEntry(
sourceFileEntryId);
SyncDLObject sourceSyncDLObject =
syncDLObjectLocalService.fetchSyncDLObject(
SyncDLObjectConstants.TYPE_FILE, sourceFileEntryId);
FileVersion fileVersion = sourceFileEntry.getLatestFileVersion();
if (!group.isUser() &&
ArrayUtil.isEmpty(serviceContext.getGroupPermissions())) {
SyncUtil.setFilePermissions(group, false, serviceContext);
}
serviceContext.setCommand(Constants.ADD);
FileEntry fileEntry = dlAppService.addFileEntry(
repositoryId, folderId, sourceFileName,
sourceFileEntry.getMimeType(), title, null, null,
fileVersion.getContentStream(false), sourceFileEntry.getSize(),
serviceContext);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_ADD,
sourceSyncDLObject.getChecksum());
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public List<SyncDLObject> getAllFolderSyncDLObjects(long repositoryId)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
repositoryService.checkRepository(repositoryId);
List<SyncDLObject> syncDLObjects =
syncDLObjectFinder.findByModifiedTime(
-1, repositoryId, 0, SyncDLObjectConstants.TYPE_FOLDER,
QueryUtil.ALL_POS, QueryUtil.ALL_POS);
return checkSyncDLObjects(syncDLObjects, repositoryId, 0);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject getFileEntrySyncDLObject(
long repositoryId, long folderId, String title)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
FileEntry fileEntry = dlAppService.getFileEntry(
repositoryId, folderId, title);
return toSyncDLObject(fileEntry, SyncDLObjectConstants.EVENT_GET);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public List<SyncDLObject> getFileEntrySyncDLObjects(
long repositoryId, long folderId)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
List<FileEntry> fileEntries = dlAppService.getFileEntries(
repositoryId, folderId);
List<SyncDLObject> syncDLObjects = new ArrayList<>(
fileEntries.size());
for (FileEntry fileEntry : fileEntries) {
SyncDLObject syncDLObject = toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_GET);
syncDLObjects.add(syncDLObject);
}
return syncDLObjects;
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject getFolderSyncDLObject(long folderId)
throws PortalException {
try {
Folder folder = dlAppLocalService.getFolder(folderId);
SyncUtil.checkSyncEnabled(folder.getGroupId());
folder = dlAppService.getFolder(folderId);
if (!SyncUtil.isSupportedFolder(folder)) {
return null;
}
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_GET);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject getFolderSyncDLObject(
long repositoryId, long parentFolderId, String name)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
Folder folder = dlAppService.getFolder(
repositoryId, parentFolderId, name);
if (!SyncUtil.isSupportedFolder(folder)) {
return null;
}
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_GET);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public List<SyncDLObject> getFolderSyncDLObjects(
long repositoryId, long parentFolderId)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
List<Folder> folders = dlAppService.getFolders(
repositoryId, parentFolderId);
List<SyncDLObject> syncDLObjects = new ArrayList<>(folders.size());
for (Folder folder : folders) {
if (!SyncUtil.isSupportedFolder(folder)) {
continue;
}
SyncDLObject syncDLObject = toSyncDLObject(
folder, SyncDLObjectConstants.EVENT_GET);
syncDLObjects.add(syncDLObject);
}
return syncDLObjects;
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public Group getGroup(long groupId) throws PortalException {
try {
SyncUtil.checkSyncEnabled(groupId);
return groupService.getGroup(groupId);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public long getLatestModifiedTime() throws PortalException {
try {
SyncUtil.checkSyncEnabled(0);
return syncDLObjectLocalService.getLatestModifiedTime();
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@AccessControlled(guestAccessEnabled = true)
@Override
public Object getSyncContext() throws PortalException {
try {
SyncUtil.checkSyncEnabled(0);
User user = getGuestOrUser();
SyncContext syncContext = new SyncContext();
String authType = PrefsPropsUtil.getString(
CompanyThreadLocal.getCompanyId(),
PropsKeys.COMPANY_SECURITY_AUTH_TYPE,
PropsUtil.get(PropsKeys.COMPANY_SECURITY_AUTH_TYPE));
syncContext.setAuthType(authType);
boolean oAuthEnabled = PrefsPropsUtil.getBoolean(
user.getCompanyId(), SyncConstants.SYNC_OAUTH_ENABLED);
if (oAuthEnabled) {
String oAuthConsumerKey = PrefsPropsUtil.getString(
user.getCompanyId(), SyncConstants.SYNC_OAUTH_CONSUMER_KEY);
syncContext.setOAuthConsumerKey(oAuthConsumerKey);
String oAuthConsumerSecret = PrefsPropsUtil.getString(
user.getCompanyId(),
SyncConstants.SYNC_OAUTH_CONSUMER_SECRET);
syncContext.setOAuthConsumerSecret(oAuthConsumerSecret);
syncContext.setOAuthEnabled(true);
}
syncContext.setPortletPreferencesMap(getPortletPreferencesMap());
Bundle bundle = FrameworkUtil.getBundle(getClass());
syncContext.setPluginVersion(String.valueOf(bundle.getVersion()));
if (!user.isDefaultUser()) {
boolean lanEnabled = PrefsPropsUtil.getBoolean(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_LAN_ENABLED,
SyncServiceConfigurationValues.SYNC_LAN_ENABLED);
if (lanEnabled) {
String lanCertificate = PrefsPropsUtil.getString(
user.getCompanyId(),
SyncConstants.SYNC_LAN_CERTIFICATE);
syncContext.setLanCertificate(lanCertificate);
syncContext.setLanEnabled(true);
String lanKey = PrefsPropsUtil.getString(
user.getCompanyId(), SyncConstants.SYNC_LAN_KEY);
syncContext.setLanKey(lanKey);
String lanServerUuid = PrefsPropsUtil.getString(
user.getCompanyId(),
SyncConstants.SYNC_LAN_SERVER_UUID);
syncContext.setLanServerUuid(lanServerUuid);
}
syncContext.setPortalBuildNumber(ReleaseInfo.getBuildNumber());
syncContext.setUser(user);
if (!syncDeviceSupports(SyncDeviceConstants.FEATURE_SET_1)) {
syncContext.setUserSitesGroups(getUserSitesGroups());
}
}
return syncContext;
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public String getSyncDLObjectUpdate(
long repositoryId, long lastAccessTime, int max)
throws PortalException {
return getSyncDLObjectUpdate(repositoryId, lastAccessTime, max, true);
}
@Override
public String getSyncDLObjectUpdate(
long repositoryId, long lastAccessTime, int max,
boolean retrieveFromCache)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
repositoryService.checkRepository(repositoryId);
String[] events = null;
if (retrieveFromCache) {
events = new String[0];
}
else {
events = new String[] {
SyncDLObjectConstants.EVENT_DELETE,
SyncDLObjectConstants.EVENT_TRASH
};
}
int count = syncDLObjectPersistence.countByM_R_NotE(
lastAccessTime, repositoryId, events);
if (count == 0) {
SyncDLObjectUpdate syncDLObjectUpdate = getSyncDLObjectUpdate(
Collections.<SyncDLObject>emptyList(), 0, lastAccessTime,
lastAccessTime);
return syncDLObjectUpdate.toString();
}
int start = 0;
int end = 0;
if (max == QueryUtil.ALL_POS) {
start = QueryUtil.ALL_POS;
end = QueryUtil.ALL_POS;
}
else if (max == 0) {
end = SyncServiceConfigurationValues.SYNC_PAGINATION_DELTA;
}
else {
end = max;
}
List<SyncDLObject> syncDLObjects = null;
if (retrieveFromCache) {
syncDLObjects = syncDLObjectPersistence.findByM_R_NotE(
lastAccessTime, repositoryId, events, start, end,
new SyncDLObjectModifiedTimeComparator());
}
else {
syncDLObjects = syncDLObjectFinder.findByModifiedTime(
lastAccessTime, repositoryId, 0, null, start, end);
}
SyncDLObject syncDLObject = syncDLObjects.get(
syncDLObjects.size() - 1);
SyncDLObjectUpdate syncDLObjectUpdate = getSyncDLObjectUpdate(
checkSyncDLObjects(syncDLObjects, repositoryId, lastAccessTime),
count, syncDLObject.getModifiedTime(), lastAccessTime);
return syncDLObjectUpdate.toString();
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public String getSyncDLObjectUpdate(
long repositoryId, long parentFolderId, long lastAccessTime)
throws PortalException {
try {
SyncUtil.checkSyncEnabled(repositoryId);
repositoryService.checkRepository(repositoryId);
List<SyncDLObject> syncDLObjects =
syncDLObjectFinder.findByModifiedTime(
lastAccessTime, repositoryId, parentFolderId, null,
QueryUtil.ALL_POS, QueryUtil.ALL_POS);
SyncDLObject syncDLObject = syncDLObjects.get(
syncDLObjects.size() - 1);
SyncDLObjectUpdate syncDLObjectUpdate = getSyncDLObjectUpdate(
checkSyncDLObjects(syncDLObjects, repositoryId, lastAccessTime),
syncDLObjects.size(), syncDLObject.getModifiedTime(),
lastAccessTime);
return syncDLObjectUpdate.toString();
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public List<Group> getUserSitesGroups() throws PortalException {
try {
SyncUtil.checkSyncEnabled(0);
User user = getUser();
List<Group> groups = new ArrayList<>();
LinkedHashMap<String, Object> groupParams = new LinkedHashMap<>();
groupParams.put("active", true);
groupParams.put("usersGroups", user.getUserId());
List<Group> userSiteGroups = groupLocalService.search(
user.getCompanyId(), null, groupParams, QueryUtil.ALL_POS,
QueryUtil.ALL_POS);
for (Group userSiteGroup : userSiteGroups) {
if (SyncUtil.isSyncEnabled(userSiteGroup)) {
userSiteGroup.setName(userSiteGroup.getDescriptiveName());
groups.add(userSiteGroup);
}
}
List<Organization> organizations =
organizationLocalService.getOrganizations(
user.getUserId(), QueryUtil.ALL_POS, QueryUtil.ALL_POS,
null);
for (Organization organization : organizations) {
Group userOrganizationGroup = organization.getGroup();
if (SyncUtil.isSyncEnabled(userOrganizationGroup)) {
groups.add(userOrganizationGroup);
}
if (!GetterUtil.getBoolean(
PropsUtil.get(
PropsKeys.ORGANIZATIONS_MEMBERSHIP_STRICT))) {
for (Organization ancestorOrganization :
organization.getAncestors()) {
Group userAncestorOrganizationGroup =
ancestorOrganization.getGroup();
if (SyncUtil.isSyncEnabled(
userAncestorOrganizationGroup)) {
groups.add(userAncestorOrganizationGroup);
}
}
}
}
if (PrefsPropsUtil.getBoolean(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_ALLOW_USER_PERSONAL_SITES,
SyncServiceConfigurationValues.
SYNC_ALLOW_USER_PERSONAL_SITES)) {
Group userGroup = user.getGroup();
userGroup.setName(user.getScreenName());
groups.add(userGroup);
}
Group companyGroup = groupLocalService.getCompanyGroup(
user.getCompanyId());
if (SyncUtil.isSyncEnabled(companyGroup)) {
companyGroup.setName(companyGroup.getDescriptiveName());
groups.add(companyGroup);
}
Collections.sort(groups, new GroupNameComparator());
return ListUtil.unique(groups);
}
catch (PortalException pe) {
Class<?> clazz = pe.getClass();
throw new PortalException(clazz.getName(), pe);
}
}
@Override
public SyncDLObject moveFileEntry(
long fileEntryId, long newFolderId, ServiceContext serviceContext)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
fileEntry = dlAppService.moveFileEntry(
fileEntryId, newFolderId, serviceContext);
return toSyncDLObject(fileEntry, SyncDLObjectConstants.EVENT_MOVE);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject moveFileEntryToTrash(long fileEntryId)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
fileEntry = dlTrashService.moveFileEntryToTrash(fileEntryId);
return toSyncDLObject(fileEntry, SyncDLObjectConstants.EVENT_TRASH);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject moveFolder(
long folderId, long parentFolderId, ServiceContext serviceContext)
throws PortalException {
try {
Folder folder = dlAppLocalService.getFolder(folderId);
SyncUtil.checkSyncEnabled(folder.getGroupId());
checkFolder(folder);
folder = dlAppService.moveFolder(
folderId, parentFolderId, serviceContext);
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_MOVE);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject moveFolderToTrash(long folderId)
throws PortalException {
try {
Folder folder = dlAppLocalService.getFolder(folderId);
SyncUtil.checkSyncEnabled(folder.getGroupId());
checkFolder(folderId);
folder = dlTrashService.moveFolderToTrash(folderId);
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_TRASH);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject patchFileEntry(
long fileEntryId, long sourceVersionId, String sourceFileName,
String mimeType, String title, String description, String changeLog,
boolean majorVersion, File deltaFile, String checksum,
ServiceContext serviceContext)
throws PortalException {
File patchedFile = null;
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
DLFileVersion dlFileVersion =
dlFileVersionLocalService.getDLFileVersion(sourceVersionId);
File sourceFile = dlFileEntryLocalService.getFile(
fileEntryId, dlFileVersion.getVersion(), false);
patchedFile = FileUtil.createTempFile();
SyncUtil.patchFile(sourceFile, deltaFile, patchedFile);
SyncDLObject syncDLObject = updateFileEntry(
fileEntryId, sourceFileName, mimeType, title, description,
changeLog, majorVersion, patchedFile, checksum, serviceContext);
if (SyncServiceConfigurationValues.SYNC_FILE_DIFF_CACHE_ENABLED &&
(sourceVersionId != syncDLObject.getVersionId())) {
DLFileVersion targetDLFileVersion =
dlFileVersionLocalService.getFileVersion(
syncDLObject.getVersionId());
syncDLFileVersionDiffLocalService.addSyncDLFileVersionDiff(
fileEntryId, sourceVersionId,
targetDLFileVersion.getFileVersionId(), deltaFile);
}
return syncDLObject;
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
finally {
FileUtil.delete(patchedFile);
}
}
@Override
public SyncDLObject restoreFileEntryFromTrash(long fileEntryId)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
dlTrashService.restoreFileEntryFromTrash(fileEntryId);
fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_RESTORE);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject restoreFolderFromTrash(long folderId)
throws PortalException {
try {
Folder folder = dlAppLocalService.getFolder(folderId);
SyncUtil.checkSyncEnabled(folder.getGroupId());
dlTrashService.restoreFolderFromTrash(folderId);
folder = dlAppLocalService.getFolder(folderId);
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_RESTORE);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
@Transactional(enabled = false)
public Map<String, Object> updateFileEntries(File zipFile)
throws PortalException {
Map<String, Object> responseMap = new HashMap<>();
ZipReader zipReader = null;
try {
SyncUtil.checkSyncEnabled(0);
zipReader = ZipReaderFactoryUtil.getZipReader(zipFile);
String manifest = zipReader.getEntryAsString("/manifest.json");
JSONArray jsonArray = JSONFactoryUtil.createJSONArray(manifest);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONWebServiceActionParametersMap
jsonWebServiceActionParametersMap =
JSONFactoryUtil.looseDeserialize(
jsonObject.toString(),
JSONWebServiceActionParametersMap.class);
String zipFileId = MapUtil.getString(
jsonWebServiceActionParametersMap, "zipFileId");
try {
responseMap.put(
zipFileId,
updateFileEntries(
zipReader, zipFileId,
jsonWebServiceActionParametersMap));
}
catch (Exception e) {
String message = e.getMessage();
if (message == null) {
_log.error(e, e);
message = e.toString();
}
if (!message.startsWith(StringPool.QUOTE) &&
!message.endsWith(StringPool.QUOTE)) {
message = StringUtil.quote(message, StringPool.QUOTE);
}
String json = "{\"exception\": " + message + "}";
responseMap.put(zipFileId, json);
}
}
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
finally {
if (zipReader != null) {
zipReader.close();
}
}
return responseMap;
}
@Override
public SyncDLObject updateFileEntry(
long fileEntryId, String sourceFileName, String mimeType,
String title, String description, String changeLog,
boolean majorVersion, File file, String checksum,
ServiceContext serviceContext)
throws PortalException {
try {
FileEntry fileEntry = dlAppLocalService.getFileEntry(fileEntryId);
SyncUtil.checkSyncEnabled(fileEntry.getGroupId());
checkFileEntry(fileEntry);
serviceContext.setCommand(Constants.UPDATE);
fileEntry = dlAppService.updateFileEntry(
fileEntryId, sourceFileName, mimeType, title, description,
changeLog, majorVersion, file, serviceContext);
return toSyncDLObject(
fileEntry, SyncDLObjectConstants.EVENT_UPDATE, checksum);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
@Override
public SyncDLObject updateFolder(
long folderId, String name, String description,
ServiceContext serviceContext)
throws PortalException {
try {
Folder folder = dlAppLocalService.getFolder(folderId);
SyncUtil.checkSyncEnabled(folder.getGroupId());
checkFolder(folder);
folder = dlAppService.updateFolder(
folderId, name, description, serviceContext);
return toSyncDLObject(folder, SyncDLObjectConstants.EVENT_UPDATE);
}
catch (PortalException pe) {
throw new PortalException(SyncUtil.buildExceptionMessage(pe), pe);
}
}
protected static SyncDLObjectUpdate getSyncDLObjectUpdate(
List<SyncDLObject> syncDLObjects, int resultsTotal, long lastAccessTime,
long previousLastAccessTime) {
Map<String, Long> settingsModifiedTimes = new HashMap<>();
long syncContextModifiedTime = PrefsPropsUtil.getLong(
CompanyThreadLocal.getCompanyId(),
SyncConstants.SYNC_CONTEXT_MODIFIED_TIME);
if ((syncContextModifiedTime != 0) &&
(syncContextModifiedTime > previousLastAccessTime)) {
settingsModifiedTimes.put(
SyncConstants.SYNC_CONTEXT_MODIFIED_TIME,
syncContextModifiedTime);
}
return new SyncDLObjectUpdate(
syncDLObjects, resultsTotal, lastAccessTime, settingsModifiedTimes);
}
protected static boolean syncDeviceSupports(int featureSet) {
SyncDevice syncDevice = SyncDeviceThreadLocal.getSyncDevice();
if (syncDevice == null) {
return false;
}
return syncDevice.supports(featureSet);
}
protected void checkFileEntry(FileEntry fileEntry) throws PortalException {
// SYNC-1542
if (fileEntry.isInTrash()) {
throw new NoSuchFileEntryException();
}
}
protected void checkFolder(Folder folder) throws PortalException {
// SYNC-1542
if (folder.getModel() instanceof DLFolder) {
DLFolder dlFolder = (DLFolder)folder.getModel();
if (dlFolder.isInTrash()) {
throw new NoSuchFolderException();
}
return;
}
throw new PortalException("Folder must be an instance of DLFolder");
}
protected void checkFolder(long folderId) throws PortalException {
if (folderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
return;
}
Folder folder = dlAppService.getFolder(folderId);
checkFolder(folder);
}
protected SyncDLObject checkModifiedTime(
SyncDLObject syncDLObject, long typePK) {
DynamicQuery dynamicQuery = dlSyncEventLocalService.dynamicQuery();
dynamicQuery.add(RestrictionsFactoryUtil.eq("typePK", typePK));
List<DLSyncEvent> dlSyncEvents = dlSyncEventLocalService.dynamicQuery(
dynamicQuery);
if (dlSyncEvents.isEmpty()) {
return syncDLObject;
}
DLSyncEvent dlSyncEvent = dlSyncEvents.get(0);
syncDLObject.setModifiedTime(dlSyncEvent.getModifiedTime());
return syncDLObject;
}
protected List<SyncDLObject> checkSyncDLObjects(
List<SyncDLObject> syncDLObjects, long repositoryId,
long lastAccessTime)
throws PortalException {
PermissionChecker permissionChecker = getPermissionChecker();
if (permissionChecker.isGroupAdmin(repositoryId)) {
return syncDLObjects;
}
boolean hasFileModelPermission = hasModelPermission(
repositoryId, DLFileEntryConstants.getClassName());
boolean hasFolderModelPermission = hasModelPermission(
repositoryId, DLFolderConstants.getClassName());
if (hasFileModelPermission && hasFolderModelPermission) {
return syncDLObjects;
}
Set<Long> typePKs = new HashSet<>();
for (SyncDLObject syncDLObject : syncDLObjects) {
typePKs.add(syncDLObject.getTypePK());
if (!hasFolderModelPermission &&
_PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
long[] parentFolderIds = StringUtil.split(
syncDLObject.getTreePath(), StringPool.SLASH, 0L);
for (long parentFolderId : parentFolderIds) {
if (parentFolderId > 0) {
typePKs.add(parentFolderId);
}
}
}
}
Set<Long> checkedTypePKs = SetUtil.fromList(
checkTypePKs(
repositoryId, permissionChecker.getUserId(),
new ArrayList(typePKs)));
List<SyncDLObject> checkedSyncDLObjects = new ArrayList<>();
Date lastAccessDate = new Date(lastAccessTime);
for (SyncDLObject syncDLObject : syncDLObjects) {
String event = syncDLObject.getEvent();
if (event.equals(SyncDLObjectConstants.EVENT_DELETE) ||
event.equals(SyncDLObjectConstants.EVENT_TRASH) ||
hasPermission(
checkedTypePKs, syncDLObject, hasFileModelPermission,
hasFolderModelPermission)) {
checkedSyncDLObjects.add(syncDLObject);
continue;
}
Date lastPermissionChangeDate =
syncDLObject.getLastPermissionChangeDate();
if ((lastPermissionChangeDate != null) &&
lastPermissionChangeDate.after(lastAccessDate)) {
syncDLObject.setEvent(SyncDLObjectConstants.EVENT_DELETE);
checkedSyncDLObjects.add(syncDLObject);
}
}
return checkedSyncDLObjects;
}
protected List<Long> checkTypePKs(
long repositoryId, long userId, List<Long> typePKs) {
if (typePKs.size() <= _SQL_DATA_MAX_PARAMETERS) {
return syncDLObjectFinder.filterFindByR_U_T(
repositoryId, userId, ArrayUtil.toLongArray(typePKs));
}
else {
List<Long> sublistTypePKs = typePKs.subList(
0, _SQL_DATA_MAX_PARAMETERS);
List<Long> checkedTypePKs = syncDLObjectFinder.filterFindByR_U_T(
repositoryId, userId, ArrayUtil.toLongArray(sublistTypePKs));
sublistTypePKs.clear();
checkedTypePKs.addAll(checkTypePKs(repositoryId, userId, typePKs));
return checkedTypePKs;
}
}
protected Map<String, String> getPortletPreferencesMap()
throws PortalException {
Map<String, String> portletPreferencesMap = new HashMap<>();
User user = getUser();
portletPreferencesMap.put(
SyncServiceConfigurationKeys.
SYNC_CLIENT_AUTHENTICATION_RETRY_INTERVAL,
String.valueOf(
SyncServiceConfigurationValues.
SYNC_CLIENT_AUTHENTICATION_RETRY_INTERVAL));
int batchFileMaxSize = PrefsPropsUtil.getInteger(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_BATCH_FILE_MAX_SIZE,
SyncServiceConfigurationValues.SYNC_CLIENT_BATCH_FILE_MAX_SIZE);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_BATCH_FILE_MAX_SIZE,
String.valueOf(batchFileMaxSize));
boolean forceSecurityMode = PrefsPropsUtil.getBoolean(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_FORCE_SECURITY_MODE,
SyncServiceConfigurationValues.SYNC_CLIENT_FORCE_SECURITY_MODE);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_FORCE_SECURITY_MODE,
String.valueOf(forceSecurityMode));
int maxConnections = PrefsPropsUtil.getInteger(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_CONNECTIONS,
SyncServiceConfigurationValues.SYNC_CLIENT_MAX_CONNECTIONS);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_CONNECTIONS,
String.valueOf(maxConnections));
int maxDownloadRate = PrefsPropsUtil.getInteger(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_DOWNLOAD_RATE,
SyncServiceConfigurationValues.SYNC_CLIENT_MAX_DOWNLOAD_RATE);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_DOWNLOAD_RATE,
String.valueOf(maxDownloadRate));
int maxUploadRate = PrefsPropsUtil.getInteger(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_UPLOAD_RATE,
SyncServiceConfigurationValues.SYNC_CLIENT_MAX_UPLOAD_RATE);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_MAX_UPLOAD_RATE,
String.valueOf(maxUploadRate));
int pollInterval = PrefsPropsUtil.getInteger(
user.getCompanyId(),
SyncServiceConfigurationKeys.SYNC_CLIENT_POLL_INTERVAL,
SyncServiceConfigurationValues.SYNC_CLIENT_POLL_INTERVAL);
portletPreferencesMap.put(
SyncServiceConfigurationKeys.SYNC_CLIENT_POLL_INTERVAL,
String.valueOf(pollInterval));
return portletPreferencesMap;
}
protected boolean hasModelPermission(long groupId, String name)
throws PortalException {
PermissionChecker permissionChecker = getPermissionChecker();
long[] roleIds = permissionChecker.getRoleIds(
permissionChecker.getUserId(), groupId);
if (roleIds.length == 0) {
return false;
}
if (resourcePermissionLocalService.hasResourcePermission(
permissionChecker.getCompanyId(), name,
ResourceConstants.SCOPE_COMPANY,
String.valueOf(permissionChecker.getCompanyId()), roleIds,
ActionKeys.VIEW) ||
resourcePermissionLocalService.hasResourcePermission(
permissionChecker.getCompanyId(), name,
ResourceConstants.SCOPE_GROUP_TEMPLATE,
String.valueOf(GroupConstants.DEFAULT_PARENT_GROUP_ID), roleIds,
ActionKeys.VIEW) ||
resourcePermissionLocalService.hasResourcePermission(
permissionChecker.getCompanyId(), name,
ResourceConstants.SCOPE_GROUP, String.valueOf(groupId), roleIds,
ActionKeys.VIEW)) {
return true;
}
return false;
}
protected boolean hasPermission(
Set<Long> checkedTypePKs, SyncDLObject syncDLObject,
boolean hasFileModelPermission, boolean hasFolderModelPermission) {
String type = syncDLObject.getType();
if ((!type.equals(SyncDLObjectConstants.TYPE_FILE) ||
!hasFileModelPermission) &&
(!type.equals(SyncDLObjectConstants.TYPE_FOLDER) ||
!hasFolderModelPermission) &&
!checkedTypePKs.contains(syncDLObject.getTypePK())) {
return false;
}
if (!hasFolderModelPermission &&
_PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
long[] parentFolderIds = StringUtil.split(
syncDLObject.getTreePath(), StringPool.SLASH, 0L);
for (long parentFolderId : parentFolderIds) {
if ((parentFolderId > 0) &&
!checkedTypePKs.contains(parentFolderId)) {
return false;
}
}
}
return true;
}
protected SyncDLObject toSyncDLObject(FileEntry fileEntry, String event)
throws PortalException {
return toSyncDLObject(fileEntry, event, null);
}
protected SyncDLObject toSyncDLObject(
FileEntry fileEntry, String event, String checksum)
throws PortalException {
SyncDLObject syncDLObject = SyncUtil.toSyncDLObject(fileEntry, event);
checkModifiedTime(syncDLObject, fileEntry.getFileEntryId());
if (Validator.isNotNull(checksum)) {
SyncUtil.addChecksum(
syncDLObject.getModifiedTime(), fileEntry.getFileEntryId(),
checksum);
}
String lanTokenKey = SyncUtil.getLanTokenKey(
syncDLObject.getModifiedTime(), fileEntry.getFileEntryId(), true);
syncDLObject.setLanTokenKey(lanTokenKey);
return syncDLObject;
}
protected SyncDLObject toSyncDLObject(Folder folder, String event)
throws PortalException {
SyncDLObject syncDLObject = SyncUtil.toSyncDLObject(folder, event);
return checkModifiedTime(syncDLObject, folder.getFolderId());
}
protected SyncDLObject updateFileEntries(
ZipReader zipReader, String zipFileId,
JSONWebServiceActionParametersMap jsonWebServiceActionParametersMap)
throws Exception {
ServiceContext serviceContext = new ServiceContext();
List<NameValue<String, Object>> innerParameters =
jsonWebServiceActionParametersMap.getInnerParameters(
"serviceContext");
if (innerParameters != null) {
for (NameValue<String, Object> innerParameter : innerParameters) {
try {
BeanUtil.setProperty(
serviceContext, innerParameter.getName(),
innerParameter.getValue());
}
catch (Exception e) {
if (_log.isDebugEnabled()) {
_log.debug(e.getMessage(), e);
}
}
}
}
String urlPath = MapUtil.getString(
jsonWebServiceActionParametersMap, "urlPath");
if (urlPath.endsWith("/add-file-entry")) {
long repositoryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "repositoryId");
long folderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "folderId");
String sourceFileName = MapUtil.getString(
jsonWebServiceActionParametersMap, "sourceFileName");
String mimeType = MapUtil.getString(
jsonWebServiceActionParametersMap, "mimeType");
String title = MapUtil.getString(
jsonWebServiceActionParametersMap, "title");
String description = MapUtil.getString(
jsonWebServiceActionParametersMap, "description");
String changeLog = MapUtil.getString(
jsonWebServiceActionParametersMap, "changeLog");
InputStream inputStream = zipReader.getEntryAsInputStream(
zipFileId);
File tempFile = null;
try {
tempFile = FileUtil.createTempFile(inputStream);
String checksum = MapUtil.getString(
jsonWebServiceActionParametersMap, "checksum");
return syncDLObjectService.addFileEntry(
repositoryId, folderId, sourceFileName, mimeType, title,
description, changeLog, tempFile, checksum, serviceContext);
}
finally {
FileUtil.delete(tempFile);
}
}
else if (urlPath.endsWith("/add-folder")) {
long repositoryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "repositoryId");
long parentFolderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "parentFolderId");
String name = MapUtil.getString(
jsonWebServiceActionParametersMap, "name");
String description = MapUtil.getString(
jsonWebServiceActionParametersMap, "description");
return syncDLObjectService.addFolder(
repositoryId, parentFolderId, name, description,
serviceContext);
}
else if (urlPath.endsWith("/copy-file-entry")) {
long sourceFileEntryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "sourceFileEntryId");
long repositoryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "repositoryId");
long folderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "folderId");
String sourceFileName = MapUtil.getString(
jsonWebServiceActionParametersMap, "sourceFileName");
String title = MapUtil.getString(
jsonWebServiceActionParametersMap, "title");
return syncDLObjectService.copyFileEntry(
sourceFileEntryId, repositoryId, folderId, sourceFileName,
title, serviceContext);
}
else if (urlPath.endsWith("/move-file-entry")) {
long fileEntryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "fileEntryId");
long newFolderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "newFolderId");
return syncDLObjectService.moveFileEntry(
fileEntryId, newFolderId, serviceContext);
}
else if (urlPath.endsWith("/move-file-entry-to-trash")) {
long fileEntryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "fileEntryId");
return syncDLObjectService.moveFileEntryToTrash(fileEntryId);
}
else if (urlPath.endsWith("/move-folder")) {
long folderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "folderId");
long parentFolderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "parentFolderId");
return syncDLObjectService.moveFolder(
folderId, parentFolderId, serviceContext);
}
else if (urlPath.endsWith("/move-folder-to-trash")) {
long folderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "folderId");
return syncDLObjectService.moveFolderToTrash(folderId);
}
else if (urlPath.endsWith("/patch-file-entry")) {
long fileEntryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "fileEntryId");
long sourceVersionId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "sourceVersionId");
String sourceFileName = MapUtil.getString(
jsonWebServiceActionParametersMap, "sourceFileName");
String mimeType = MapUtil.getString(
jsonWebServiceActionParametersMap, "mimeType");
String title = MapUtil.getString(
jsonWebServiceActionParametersMap, "title");
String description = MapUtil.getString(
jsonWebServiceActionParametersMap, "description");
String changeLog = MapUtil.getString(
jsonWebServiceActionParametersMap, "changeLog");
boolean majorVersion = MapUtil.getBoolean(
jsonWebServiceActionParametersMap, "majorVersion");
InputStream inputStream = zipReader.getEntryAsInputStream(
zipFileId);
File tempFile = null;
try {
tempFile = FileUtil.createTempFile(inputStream);
String checksum = MapUtil.getString(
jsonWebServiceActionParametersMap, "checksum");
return syncDLObjectService.patchFileEntry(
fileEntryId, sourceVersionId, sourceFileName, mimeType,
title, description, changeLog, majorVersion, tempFile,
checksum, serviceContext);
}
finally {
FileUtil.delete(tempFile);
}
}
else if (urlPath.endsWith("/update-file-entry")) {
long fileEntryId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "fileEntryId");
String sourceFileName = MapUtil.getString(
jsonWebServiceActionParametersMap, "sourceFileName");
String mimeType = MapUtil.getString(
jsonWebServiceActionParametersMap, "mimeType");
String title = MapUtil.getString(
jsonWebServiceActionParametersMap, "title");
String description = MapUtil.getString(
jsonWebServiceActionParametersMap, "description");
String changeLog = MapUtil.getString(
jsonWebServiceActionParametersMap, "changeLog");
boolean majorVersion = MapUtil.getBoolean(
jsonWebServiceActionParametersMap, "majorVersion");
File tempFile = null;
try {
InputStream inputStream = zipReader.getEntryAsInputStream(
zipFileId);
if (inputStream != null) {
tempFile = FileUtil.createTempFile(inputStream);
}
String checksum = MapUtil.getString(
jsonWebServiceActionParametersMap, "checksum");
return syncDLObjectService.updateFileEntry(
fileEntryId, sourceFileName, mimeType, title, description,
changeLog, majorVersion, tempFile, checksum,
serviceContext);
}
finally {
FileUtil.delete(tempFile);
}
}
else if (urlPath.endsWith("/update-folder")) {
long folderId = MapUtil.getLong(
jsonWebServiceActionParametersMap, "folderId");
String name = MapUtil.getString(
jsonWebServiceActionParametersMap, "name");
String description = MapUtil.getString(
jsonWebServiceActionParametersMap, "description");
return syncDLObjectService.updateFolder(
folderId, name, description, serviceContext);
}
else {
throw new NoSuchJSONWebServiceException(
"No JSON web service action with path " + urlPath);
}
}
private static final boolean _PERMISSIONS_VIEW_DYNAMIC_INHERITANCE =
GetterUtil.getBoolean(
PropsUtil.get(PropsKeys.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE));
private static final int _SQL_DATA_MAX_PARAMETERS = GetterUtil.getInteger(
PropsUtil.get(PropsKeys.SQL_DATA_MAX_PARAMETERS));
private static final Log _log = LogFactoryUtil.getLog(
SyncDLObjectServiceImpl.class);
}