2015-12-04 18:45:47 +01:00
|
|
|
package org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage;
|
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
import java.io.ByteArrayInputStream;
|
2016-01-12 17:21:22 +01:00
|
|
|
import java.io.File;
|
2016-01-13 17:26:54 +01:00
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
import java.io.FileOutputStream;
|
2016-01-12 17:21:22 +01:00
|
|
|
import java.io.IOException;
|
2015-12-04 18:45:47 +01:00
|
|
|
import java.io.InputStream;
|
2016-01-13 17:26:54 +01:00
|
|
|
import java.net.URL;
|
2015-12-04 18:45:47 +01:00
|
|
|
import java.net.URLConnection;
|
2016-01-13 17:26:54 +01:00
|
|
|
import java.nio.file.Path;
|
2018-01-15 20:33:07 +01:00
|
|
|
import java.util.ArrayList;
|
2016-01-25 17:40:15 +01:00
|
|
|
import java.util.List;
|
2015-12-04 18:45:47 +01:00
|
|
|
|
|
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
2016-01-12 17:21:22 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
2015-12-04 18:45:47 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
2016-01-12 17:21:22 +01:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile;
|
2018-01-15 20:33:07 +01:00
|
|
|
import org.gcube.common.homelibrary.jcr.workspace.JCRWorkspaceSharedFolder;
|
2016-01-12 17:21:22 +01:00
|
|
|
import org.gcube.common.homelibrary.util.zip.ZipUtil;
|
2018-06-29 19:12:24 +02:00
|
|
|
import org.gcube.common.storagehub.client.dsl.ItemContainer;
|
|
|
|
import org.gcube.common.storagehub.client.dsl.OpenResolver;
|
|
|
|
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
|
|
|
import org.gcube.common.storagehub.model.items.Item;
|
2015-12-04 18:45:47 +01:00
|
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
2017-05-12 18:26:05 +02:00
|
|
|
* @author Giancarlo Panichi
|
|
|
|
*
|
2015-12-04 18:45:47 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class FilesStorage {
|
|
|
|
|
2015-12-11 18:02:03 +01:00
|
|
|
private static final String STATISTICAL_ALGORITHM_PROJECT_MIMETYPE = "text/xml";
|
|
|
|
private static final String STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION = "Statistical Algorithm Project File";
|
|
|
|
private static final String STATISTICAL_ALGORITHM_PROJECT_FILE_NAME = "stat_algo.project";
|
2016-03-09 11:13:15 +01:00
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
public static final Logger logger = LoggerFactory.getLogger(FilesStorage.class);
|
2015-12-04 18:45:47 +01:00
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
2017-05-12 18:26:05 +02:00
|
|
|
* @return public link
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public String getPublicLink(String user, String itemId) throws StatAlgoImporterServiceException {
|
2016-01-18 12:59:57 +01:00
|
|
|
|
2018-06-29 19:12:24 +02:00
|
|
|
try {
|
|
|
|
logger.debug("getPublicLink: [user=" + user + ", itemId=" + itemId + "]");
|
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
URL url = shc.open(itemId).asFile().getPublicLink();
|
|
|
|
return url.toString();
|
2016-01-18 12:59:57 +01:00
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2016-11-28 14:41:14 +01:00
|
|
|
logger.error("Get public link: " + e.getLocalizedMessage(), e);
|
2016-01-18 12:59:57 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @param folderId
|
|
|
|
* Folder id
|
2017-05-12 18:26:05 +02:00
|
|
|
* @return workspace item
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public WorkspaceItem copyItemOnFolder(String user, String itemId, String folderId)
|
|
|
|
throws StatAlgoImporterServiceException {
|
2015-12-11 18:02:03 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Copy item on folder: [user=" + user + ", itemId=" + itemId + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2015-12-11 18:02:03 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Destination is not a folder!");
|
2015-12-11 18:02:03 +01:00
|
|
|
}
|
|
|
|
|
2016-03-09 11:13:15 +01:00
|
|
|
WorkspaceItem item = ws.copy(itemId, folderId);
|
2015-12-11 18:02:03 +01:00
|
|
|
|
2016-01-26 16:31:34 +01:00
|
|
|
return item;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Copy item on folder on workspace: " + e.getLocalizedMessage(), e);
|
2015-12-11 18:02:03 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-08 18:49:44 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @param folderId
|
|
|
|
* Destination folder id
|
|
|
|
* @param newName
|
|
|
|
* New name
|
2017-05-12 18:26:05 +02:00
|
|
|
* @return workspace item
|
2016-09-08 18:49:44 +02:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-09-08 18:49:44 +02:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public WorkspaceItem copyItemOnFolderWithNewName(String user, String itemId, String folderId, String newName)
|
2016-09-08 18:49:44 +02:00
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Copy item on folder with new name: [user=" + user + ", itemId=" + itemId + ", folderId="
|
|
|
|
+ folderId + ", newName=" + newName + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-09-08 18:49:44 +02:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Destination is not a folder!");
|
2016-09-08 18:49:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
WorkspaceItem item = ws.copy(itemId, newName, folderId);
|
|
|
|
|
|
|
|
return item;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Copy item on folder with new name on workspace: " + e.getLocalizedMessage(), e);
|
2016-09-08 18:49:44 +02:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public void deleteItemOnFolder(String user, String itemId) throws StatAlgoImporterServiceException {
|
2015-12-11 18:02:03 +01:00
|
|
|
try {
|
2018-06-29 19:12:24 +02:00
|
|
|
logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId+"]");
|
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2015-12-11 18:02:03 +01:00
|
|
|
|
2018-06-29 19:12:24 +02:00
|
|
|
ItemContainer<Item> itemContainer = openResolver.asItem();
|
|
|
|
itemContainer.delete();
|
2015-12-11 18:02:03 +01:00
|
|
|
|
|
|
|
return;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Delete Item on workspace: " + e.getLocalizedMessage(), e);
|
2015-12-11 18:02:03 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* user
|
2016-01-26 16:31:34 +01:00
|
|
|
* @param parentId
|
2017-05-12 18:26:05 +02:00
|
|
|
* parent id
|
|
|
|
* @param folderName
|
|
|
|
* folder name
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public void deleteFolder(String user, String parentId, String folderName) throws StatAlgoImporterServiceException {
|
2016-01-12 17:21:22 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Delete folder: [user=" + user + ", parentId=" + parentId + ", folderName=" + folderName + "]");
|
2016-01-12 17:21:22 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
2016-01-26 16:31:34 +01:00
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(parentId);
|
2016-01-12 17:21:22 +01:00
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No valid project folder!");
|
2016-01-12 17:21:22 +01:00
|
|
|
}
|
|
|
|
|
2016-03-09 11:13:15 +01:00
|
|
|
WorkspaceItem target = ws.find(folderName, parentId);
|
2016-01-12 17:21:22 +01:00
|
|
|
|
|
|
|
if (target != null) {
|
|
|
|
ws.removeItems(target.getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Delete folder on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-12 17:21:22 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* user
|
2016-01-26 16:31:34 +01:00
|
|
|
* @param parentId
|
2017-05-12 18:26:05 +02:00
|
|
|
* parent id
|
|
|
|
* @param folderName
|
|
|
|
* folder name
|
|
|
|
* @param folderDescription
|
|
|
|
* folder description
|
|
|
|
* @return workspace folder
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public WorkspaceFolder createFolder(String user, String parentId, String folderName, String folderDescription)
|
2016-01-12 17:21:22 +01:00
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Create folder: [user=" + user + ", parentId=" + parentId + ", folderName=" + folderName
|
2016-11-28 14:41:14 +01:00
|
|
|
+ ", folderDescription=" + folderDescription + "]");
|
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
2016-01-26 16:31:34 +01:00
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(parentId);
|
2016-01-12 17:21:22 +01:00
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No valid project folder!");
|
2016-01-12 17:21:22 +01:00
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
WorkspaceFolder projectTargetFolder = ws.createFolder(folderName, folderDescription, parentId);
|
2016-01-12 17:21:22 +01:00
|
|
|
|
|
|
|
return projectTargetFolder;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Create folder on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-12 17:21:22 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-09-08 18:49:44 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param parentId
|
2017-05-12 18:26:05 +02:00
|
|
|
* Parent id
|
|
|
|
* @param name
|
|
|
|
* Name
|
|
|
|
* @return workspace item
|
2016-09-08 18:49:44 +02:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2016-09-08 18:49:44 +02:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public WorkspaceItem find(String user, String parentId, String name) throws StatAlgoImporterServiceException {
|
2016-09-08 18:49:44 +02:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Find: [user=" + user + ", parentId=" + parentId + ", name=" + name + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-09-08 18:49:44 +02:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(parentId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No valid project folder!");
|
2016-09-08 18:49:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return ws.find(name, parentId);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2016-11-28 14:41:14 +01:00
|
|
|
logger.error("Find: " + e.getLocalizedMessage(), e);
|
2016-09-08 18:49:44 +02:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param parentName
|
|
|
|
* Parent name
|
|
|
|
* @param name
|
|
|
|
* Name
|
|
|
|
* @return WorkspaceItem
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public WorkspaceItem findInParentName(String user, String parentName, String name)
|
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
|
|
|
logger.info("Find by parent name: [user=" + user + ", parentName=" + parentName + ", name=" + name + "]");
|
|
|
|
|
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem parentItem = ws.getItem(parentName);
|
|
|
|
if (!parentItem.isFolder()) {
|
|
|
|
throw new StatAlgoImporterServiceException("No valid folder: " + parentName + "!");
|
|
|
|
}
|
|
|
|
|
|
|
|
return ws.find(name, parentItem.getId());
|
|
|
|
|
|
|
|
} catch (Throwable e) {
|
|
|
|
logger.error("Find by parent name: " + e.getLocalizedMessage(), e);
|
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* User
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param inputStream
|
2017-05-12 18:26:05 +02:00
|
|
|
* Input stream
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param folderId
|
2017-05-12 18:26:05 +02:00
|
|
|
* Folder id
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public void saveStatisticalAlgorithmProject(String user, InputStream inputStream, String folderId)
|
2016-01-12 17:21:22 +01:00
|
|
|
throws StatAlgoImporterServiceException {
|
2015-12-11 18:02:03 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save project: [user=" + user + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2015-12-11 18:02:03 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Destination is not a folder!");
|
2015-12-11 18:02:03 +01:00
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
WorkspaceItem projectItem = ws.find(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, folderId);
|
2015-12-11 18:02:03 +01:00
|
|
|
|
|
|
|
if (projectItem == null) {
|
|
|
|
ws.createExternalFile(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME,
|
2017-05-12 18:26:05 +02:00
|
|
|
STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION, STATISTICAL_ALGORITHM_PROJECT_MIMETYPE,
|
|
|
|
inputStream, folderId);
|
2015-12-11 18:02:03 +01:00
|
|
|
} else {
|
|
|
|
ws.updateItem(projectItem.getId(), inputStream);
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Save project on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-11 17:01:28 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* User
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param inputStream
|
2017-05-12 18:26:05 +02:00
|
|
|
* Input stream
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param name
|
2017-05-12 18:26:05 +02:00
|
|
|
* Name
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param description
|
2017-05-12 18:26:05 +02:00
|
|
|
* Description
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param mimeType
|
2017-05-12 18:26:05 +02:00
|
|
|
* Mimetype
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param folderId
|
2017-05-12 18:26:05 +02:00
|
|
|
* Folder destination
|
2016-01-18 12:59:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public void saveItemOnWorkspace(String user, InputStream inputStream, String name, String description,
|
|
|
|
String mimeType, String folderId) throws StatAlgoImporterServiceException {
|
2016-01-11 17:01:28 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save item on workspace: [user=" + user + ", name=" + name + ", description=" + description
|
|
|
|
+ ", mimeType=" + mimeType + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-01-11 17:01:28 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Destination is not a folder!");
|
2016-01-11 17:01:28 +01:00
|
|
|
}
|
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
WorkspaceItem projectItem = ws.find(name, folderId);
|
2016-01-11 17:01:28 +01:00
|
|
|
|
|
|
|
if (projectItem == null) {
|
2017-05-12 18:26:05 +02:00
|
|
|
ws.createExternalFile(name, description, mimeType, inputStream, folderId);
|
2016-01-11 17:01:28 +01:00
|
|
|
} else {
|
|
|
|
ws.updateItem(projectItem.getId(), inputStream);
|
|
|
|
}
|
|
|
|
|
|
|
|
return;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Save item on workspace: " + e.getLocalizedMessage(), e);
|
2015-12-11 18:02:03 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
2016-01-13 17:26:54 +01:00
|
|
|
|
2016-01-18 12:59:57 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param inputStream
|
|
|
|
* Input stream
|
|
|
|
* @param name
|
|
|
|
* Item name
|
|
|
|
* @param description
|
|
|
|
* Item description
|
|
|
|
* @param mimeType
|
|
|
|
* Item mimetype
|
|
|
|
* @param folderId
|
|
|
|
* Destination folder
|
|
|
|
* @return Workspace item
|
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exceptioon
|
2016-01-18 12:59:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public WorkspaceItem createItemOnWorkspace(String user, InputStream inputStream, String name, String description,
|
|
|
|
String mimeType, String folderId) throws StatAlgoImporterServiceException {
|
2016-01-12 17:21:22 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Create item on workspace: [user=" + user + ", name=" + name + ", description=" + description
|
|
|
|
+ ", mimeType=" + mimeType + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
2017-07-11 19:01:42 +02:00
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Destination is not a folder!");
|
2016-01-12 17:21:22 +01:00
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
ExternalFile workspaceItem = ws.createExternalFile(name, description, mimeType, inputStream, folderId);
|
2016-01-13 17:26:54 +01:00
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
return workspaceItem;
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Create item on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-12 17:21:22 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param inputStream
|
|
|
|
* InputStream
|
|
|
|
* @param name
|
|
|
|
* Name
|
|
|
|
* @param description
|
|
|
|
* Description
|
|
|
|
* @param mimeType
|
|
|
|
* MimeType
|
|
|
|
* @param folderName
|
|
|
|
* Folder Path
|
|
|
|
* @return WorkspaceItem
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public WorkspaceItem createItemOnWorkspaceHowAdmin(String user, InputStream inputStream, String name,
|
|
|
|
String description, String mimeType, String folderName) throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
|
|
|
logger.info("Create item on workspace how admin: [user=" + user + ", name=" + name + ", description="
|
|
|
|
+ description + ", mimeType=" + mimeType + ", folderName=" + folderName + "]");
|
|
|
|
|
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
WorkspaceItem root = ws.getRoot();
|
2018-01-15 20:33:07 +01:00
|
|
|
WorkspaceItem folderItem = ws.find(folderName, root.getId());
|
2017-07-11 19:01:42 +02:00
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
if (folderItem == null || !folderItem.isFolder()) {
|
|
|
|
throw new StatAlgoImporterServiceException("Destination " + folderName + " is not a valid folder!");
|
2017-07-11 19:01:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
WorkspaceItem codeJar = ws.find(name, folderItem.getId());
|
|
|
|
|
|
|
|
if (codeJar == null) {
|
|
|
|
return ws.createExternalFile(name, description, mimeType, inputStream, folderItem.getId());
|
|
|
|
} else {
|
|
|
|
ws.updateItem(codeJar.getId(), inputStream);
|
|
|
|
return codeJar;
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (Throwable e) {
|
|
|
|
logger.error("Create item on workspace how admin: " + e.getLocalizedMessage(), e);
|
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-14 18:44:54 +01:00
|
|
|
/**
|
|
|
|
*
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param folderId
|
|
|
|
* Folder id
|
|
|
|
* @return Input stream
|
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
|
|
|
*
|
2015-12-14 18:44:54 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public InputStream retrieveProjectItemOnWorkspace(String user, String folderId)
|
|
|
|
throws StatAlgoImporterServiceException {
|
2015-12-14 18:44:54 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve project item on workspace: [user=" + user + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2015-12-14 18:44:54 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is not valid folder!");
|
2015-12-14 18:44:54 +01:00
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
WorkspaceItem projectItem = ws.find(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, folderId);
|
2016-01-12 17:21:22 +01:00
|
|
|
|
|
|
|
if (projectItem == null) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No project found in this folder!");
|
2015-12-14 18:44:54 +01:00
|
|
|
}
|
|
|
|
|
2016-11-28 14:41:14 +01:00
|
|
|
return retrieveInputStream(user, projectItem);
|
2015-12-14 18:44:54 +01:00
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Retrieve project item on workspace: " + e.getLocalizedMessage(), e);
|
2015-12-14 18:44:54 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
2016-01-25 17:02:23 +01:00
|
|
|
|
2016-01-22 13:07:41 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* User
|
2016-01-22 13:07:41 +01:00
|
|
|
* @param folderId
|
2017-05-12 18:26:05 +02:00
|
|
|
* Folder id
|
|
|
|
* @return boolean True if exist
|
2016-01-22 13:07:41 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2016-01-22 13:07:41 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public boolean existProjectItemOnWorkspace(String user, String folderId) throws StatAlgoImporterServiceException {
|
2016-01-22 13:07:41 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Exist project item on workspace: [user=" + user + ", folderId=" + folderId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-01-22 13:07:41 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is not valid folder!");
|
2016-01-22 13:07:41 +01:00
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
WorkspaceItem projectItem = ws.find(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, folderId);
|
2016-01-22 13:07:41 +01:00
|
|
|
|
|
|
|
if (projectItem == null) {
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Exist project item on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-22 13:07:41 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
2017-05-12 18:26:05 +02:00
|
|
|
* User
|
2016-01-22 13:07:41 +01:00
|
|
|
* @param itemId
|
2017-05-12 18:26:05 +02:00
|
|
|
* Item id
|
|
|
|
* @return Workspace Item
|
2016-01-22 13:07:41 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2016-01-22 13:07:41 +01:00
|
|
|
*/
|
|
|
|
public WorkspaceItem retrieveItemInfoOnWorkspace(String user, String itemId)
|
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve item info on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-01-22 13:07:41 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(itemId);
|
|
|
|
return workSpaceItem;
|
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Retrieve item info on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-22 13:07:41 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
2015-12-04 18:45:47 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
2016-01-18 12:59:57 +01:00
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @return Input stream
|
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Excetpion
|
2015-12-04 18:45:47 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public InputStream retrieveItemOnWorkspace(String user, String itemId) throws StatAlgoImporterServiceException {
|
2015-12-04 18:45:47 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve item on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2015-12-04 18:45:47 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(itemId);
|
2015-12-11 18:02:03 +01:00
|
|
|
if (workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Folder Item is not valid!");
|
2015-12-04 18:45:47 +01:00
|
|
|
}
|
2015-12-11 18:02:03 +01:00
|
|
|
|
2016-11-28 14:41:14 +01:00
|
|
|
return retrieveInputStream(user, workSpaceItem);
|
2015-12-04 18:45:47 +01:00
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Retieve item on workspace: " + e.getLocalizedMessage(), e);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2015-12-04 18:45:47 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
2016-03-09 11:13:15 +01:00
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param wi
|
2017-05-12 18:26:05 +02:00
|
|
|
* Workspace item
|
2016-03-09 11:13:15 +01:00
|
|
|
* @return InputStream
|
2015-12-04 18:45:47 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2015-12-04 18:45:47 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public InputStream retrieveInputStream(String user, WorkspaceItem wi) throws StatAlgoImporterServiceException {
|
2015-12-04 18:45:47 +01:00
|
|
|
InputStream is = null;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve input stream: [user=" + user + ", workspaceItem=" + wi + "]");
|
2015-12-04 18:45:47 +01:00
|
|
|
|
|
|
|
org.gcube.common.homelibrary.home.workspace.folder.items.File gcubeItem = ((org.gcube.common.homelibrary.home.workspace.folder.items.File) wi);
|
2016-01-25 17:40:15 +01:00
|
|
|
is = gcubeItem.getData();
|
2016-03-09 11:13:15 +01:00
|
|
|
return is;
|
2016-09-08 18:49:44 +02:00
|
|
|
|
2016-03-09 11:13:15 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Error retrieving file from storage: " + e.getLocalizedMessage(), e);
|
|
|
|
throw new StatAlgoImporterServiceException("Error retrieving file from storage: " + e.getLocalizedMessage(),
|
|
|
|
e);
|
2015-12-04 18:45:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
/**
|
|
|
|
*
|
2016-01-12 17:21:22 +01:00
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item on workspace
|
|
|
|
* @param data
|
|
|
|
* String to save
|
2015-12-18 17:55:57 +01:00
|
|
|
* @throws StatAlgoImporterServiceException
|
2017-05-12 18:26:05 +02:00
|
|
|
* Exception
|
2015-12-18 17:55:57 +01:00
|
|
|
*/
|
2017-05-12 18:26:05 +02:00
|
|
|
public void saveStringInItem(String user, String itemId, String data) throws StatAlgoImporterServiceException {
|
2015-12-18 17:55:57 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save string in item: [user=" + user + ", itemId=" + itemId + "]");
|
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(itemId);
|
2016-01-12 17:21:22 +01:00
|
|
|
if (workSpaceItem == null) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No item retrieved on workspace!");
|
2015-12-18 17:55:57 +01:00
|
|
|
} else {
|
|
|
|
if (workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is a folder!");
|
2015-12-18 17:55:57 +01:00
|
|
|
} else {
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
// convert String into InputStream
|
|
|
|
InputStream is = new ByteArrayInputStream(data.getBytes());
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
ws.updateItem(itemId, is);
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2015-12-18 17:55:57 +01:00
|
|
|
return;
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Save string in item on workspace: " + e.getLocalizedMessage(), e);
|
2015-12-18 17:55:57 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
2016-03-09 11:13:15 +01:00
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @param is
|
|
|
|
* Input stream
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
2016-01-26 16:31:34 +01:00
|
|
|
public void saveInputStreamInItem(String user, String itemId, InputStream is)
|
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save input stream in item: [user=" + user + ", itemId=" + itemId + "]");
|
|
|
|
|
2016-01-26 16:31:34 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(itemId);
|
|
|
|
if (workSpaceItem == null) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No item retrieved on workspace!");
|
2016-01-26 16:31:34 +01:00
|
|
|
} else {
|
|
|
|
if (workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is a folder!");
|
2016-01-26 16:31:34 +01:00
|
|
|
} else {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// convert String into InputStream
|
|
|
|
ws.updateItem(itemId, is);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
2016-11-28 14:41:14 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Save input stream in item on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-26 16:31:34 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param folderId
|
|
|
|
* Folder Id
|
|
|
|
* @return Zip folder
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public File zipFolder(String user, String folderId) throws StatAlgoImporterServiceException {
|
2016-01-12 17:21:22 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Zip folder: [user=" + user + ", folderId=" + folderId + "]");
|
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is not valid folder!");
|
2016-01-12 17:21:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
WorkspaceFolder folder = (WorkspaceFolder) workSpaceItem;
|
|
|
|
|
|
|
|
File fileZip = ZipUtil.zipFolder(folder);
|
|
|
|
|
|
|
|
return fileZip;
|
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Zip folder on workspace: " + e.getLocalizedMessage(), e);
|
2016-01-25 17:40:15 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param folderId
|
|
|
|
* Folder id
|
|
|
|
* @param idsToExclude
|
|
|
|
* List of ids to exclude
|
|
|
|
* @return Zip folder
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public File zipFolder(String user, String folderId, List<String> idsToExclude)
|
|
|
|
throws StatAlgoImporterServiceException {
|
2016-01-25 17:40:15 +01:00
|
|
|
Workspace ws;
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Zip folder with exclude: [user=" + user + ", folderId=" + folderId + "]");
|
|
|
|
|
2016-01-25 17:40:15 +01:00
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workSpaceItem = ws.getItem(folderId);
|
|
|
|
if (!workSpaceItem.isFolder()) {
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("Item is not valid folder!");
|
2016-01-25 17:40:15 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
WorkspaceFolder folder = (WorkspaceFolder) workSpaceItem;
|
|
|
|
|
|
|
|
File fileZip = ZipUtil.zipFolder(folder, false, idsToExclude);
|
|
|
|
|
|
|
|
return fileZip;
|
|
|
|
|
2016-11-22 15:55:52 +01:00
|
|
|
} catch (Throwable e) {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.error("Zip folder with exclude on workspace: " + e.getLocalizedMessage(), e);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2016-01-12 17:21:22 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2015-12-04 18:45:47 +01:00
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param fileUrl
|
|
|
|
* Url
|
|
|
|
* @param destination
|
|
|
|
* Destination
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public void downloadInputFile(String fileUrl, Path destination) throws StatAlgoImporterServiceException {
|
2016-01-13 17:26:54 +01:00
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Download input file: [fileUrl=" + fileUrl + ", destination=" + destination + "]");
|
2016-01-13 17:26:54 +01:00
|
|
|
|
|
|
|
URL smpFile = new URL(fileUrl);
|
|
|
|
URLConnection uc = (URLConnection) smpFile.openConnection();
|
|
|
|
InputStream is = uc.getInputStream();
|
|
|
|
inputStreamToFile(is, destination);
|
|
|
|
is.close();
|
|
|
|
|
|
|
|
} catch (Throwable e) {
|
2016-11-28 14:41:14 +01:00
|
|
|
logger.error("Download input file: " + e.getLocalizedMessage(), e);
|
2016-01-13 17:26:54 +01:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-12 18:26:05 +02:00
|
|
|
private void inputStreamToFile(InputStream is, Path destination) throws FileNotFoundException, IOException {
|
2016-01-13 17:26:54 +01:00
|
|
|
FileOutputStream out = new FileOutputStream(destination.toFile());
|
|
|
|
byte buf[] = new byte[1024];
|
|
|
|
int len = 0;
|
|
|
|
while ((len = is.read(buf)) > 0)
|
|
|
|
out.write(buf, 0, len);
|
|
|
|
out.close();
|
|
|
|
}
|
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item
|
|
|
|
* @return The list of users with whom a folder is shared, including owner
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public List<String> getSharedList(String user, String itemId) throws StatAlgoImporterServiceException {
|
|
|
|
Workspace ws;
|
|
|
|
try {
|
|
|
|
logger.info("Get shared info: [user=" + user + ", itemId=" + itemId + "]");
|
|
|
|
|
|
|
|
ws = HomeLibrary.getUserWorkspace(user);
|
|
|
|
|
|
|
|
WorkspaceItem workspaceItem = ws.getItem(itemId);
|
|
|
|
if (!workspaceItem.isFolder()) {
|
|
|
|
throw new StatAlgoImporterServiceException("Attention this is not a folder!");
|
|
|
|
}
|
2018-06-29 19:12:24 +02:00
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
List<String> shared = new ArrayList<String>();
|
|
|
|
if (workspaceItem.isShared()) {
|
|
|
|
JCRWorkspaceSharedFolder sharedFolder = (JCRWorkspaceSharedFolder) workspaceItem;
|
|
|
|
shared = sharedFolder.getUsers();
|
|
|
|
} else {
|
|
|
|
if (workspaceItem.getOwner() != null) {
|
|
|
|
String owner = workspaceItem.getOwner().getPortalLogin();
|
|
|
|
if (owner != null && !owner.isEmpty()) {
|
|
|
|
shared.add(owner);
|
|
|
|
} else {
|
2018-06-29 19:12:24 +02:00
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
}
|
|
|
|
} else {
|
2018-06-29 19:12:24 +02:00
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return shared;
|
|
|
|
|
|
|
|
} catch (Throwable e) {
|
|
|
|
logger.error("Get shared info: " + e.getLocalizedMessage(), e);
|
2018-06-29 19:12:24 +02:00
|
|
|
throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e);
|
2018-01-15 20:33:07 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-12-04 18:45:47 +01:00
|
|
|
}
|