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.FileOutputStream;
|
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;
|
2018-07-31 16:48:35 +02:00
|
|
|
import java.nio.file.Files;
|
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;
|
|
|
|
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-07-31 16:48:35 +02:00
|
|
|
import org.gcube.common.storagehub.client.StreamDescriptor;
|
2018-07-30 15:36:06 +02:00
|
|
|
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
|
|
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
2018-06-29 19:12:24 +02:00
|
|
|
import org.gcube.common.storagehub.client.dsl.ItemContainer;
|
2018-07-30 15:36:06 +02:00
|
|
|
import org.gcube.common.storagehub.client.dsl.ListResolver;
|
2018-06-29 19:12:24 +02:00
|
|
|
import org.gcube.common.storagehub.client.dsl.OpenResolver;
|
|
|
|
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
|
2018-09-04 17:48:50 +02:00
|
|
|
import org.gcube.common.storagehub.model.Metadata;
|
|
|
|
import org.gcube.common.storagehub.model.items.AbstractFileItem;
|
|
|
|
import org.gcube.common.storagehub.model.items.FolderItem;
|
2018-06-29 19:12:24 +02:00
|
|
|
import org.gcube.common.storagehub.model.items.Item;
|
2018-09-04 17:48:50 +02:00
|
|
|
import org.gcube.common.storagehub.model.items.SharedFolder;
|
2015-12-04 18:45:47 +01:00
|
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
|
2018-07-30 15:36:06 +02:00
|
|
|
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription;
|
2015-12-04 18:45:47 +01:00
|
|
|
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 {
|
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
// private static final String STATISTICAL_ALGORITHM_PROJECT_MIMETYPE =
|
|
|
|
// "text/xml";
|
2015-12-11 18:02:03 +01:00
|
|
|
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());
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
* TODO
|
2016-01-18 12:59:57 +01:00
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @param folderId
|
|
|
|
* Folder id
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription copyItemOnFolder(String user, String itemId, String folderId)
|
2017-05-12 18:26:05 +02:00
|
|
|
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
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(),
|
|
|
|
item.getOwner().getPortalLogin(), item.getPath(), item.getType().name());
|
|
|
|
itemDescription.setPublicLink(item.getPublicLink(false));
|
|
|
|
|
|
|
|
return itemDescription;
|
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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
|
|
|
* TODO
|
2016-09-08 18:49:44 +02:00
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @param folderId
|
|
|
|
* Destination folder id
|
|
|
|
* @param newName
|
|
|
|
* New name
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription 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);
|
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(),
|
|
|
|
item.getOwner().getPortalLogin(), item.getPath(), item.getType().name());
|
|
|
|
|
|
|
|
return itemDescription;
|
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-07-30 15:36:06 +02:00
|
|
|
logger.debug("Delete Item: [User=" + user + ", ItemId=" + itemId + "]");
|
2018-06-29 19:12:24 +02:00
|
|
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Delete folder: [user=" + user + ", parentId=" + parentId + ", folderName=" + folderName + "]");
|
2018-09-04 12:48:57 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openParentResolver = shc.open(parentId);
|
|
|
|
|
|
|
|
FolderContainer parentFolderContainer = openParentResolver.asFolder();
|
|
|
|
ListResolver listResolver = parentFolderContainer.findByName(folderName);
|
|
|
|
List<? extends Item> items = listResolver.getItems();
|
|
|
|
if (items == null || items.isEmpty()) {
|
|
|
|
logger.debug("No folder found");
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
Item item = items.get(0);
|
|
|
|
logger.debug("Item: " + item);
|
|
|
|
if (item != null) {
|
|
|
|
OpenResolver openResolver = shc.open(item.getId());
|
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
folderContainer.delete();
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
logger.debug("No folder found");
|
|
|
|
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("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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
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
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription createFolder(String user, String parentId, String folderName, String folderDescription)
|
2016-01-12 17:21:22 +01:00
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
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 + "]");
|
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(parentId);
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
FolderContainer folderContainerNew = folderContainer.newFolder(folderName, folderDescription);
|
|
|
|
FolderItem folderCreated = folderContainerNew.get();
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
ItemDescription itemDescription = new ItemDescription(folderCreated.getId(), folderCreated.getName(),
|
|
|
|
folderCreated.getOwner(), folderCreated.getPath(), folderCreated.getClass().getSimpleName());
|
2018-07-30 15:36:06 +02:00
|
|
|
|
|
|
|
return itemDescription;
|
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
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription find(String user, String parentId, String name) throws StatAlgoImporterServiceException {
|
2016-09-08 18:49:44 +02:00
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Find: [user=" + user + ", parentId=" + parentId + ", name=" + name + "]");
|
2018-07-30 15:36:06 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(parentId);
|
|
|
|
|
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
ListResolver listResolver = folderContainer.findByName(name);
|
|
|
|
List<? extends Item> items = listResolver.getItems();
|
|
|
|
if (items == null || items.isEmpty()) {
|
|
|
|
logger.debug("No item found");
|
|
|
|
return null;
|
|
|
|
} else {
|
|
|
|
Item item = items.get(0);
|
|
|
|
logger.debug("Item: " + item);
|
|
|
|
if (item != null) {
|
|
|
|
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
|
|
|
|
item.getPath(), item.getClass().getSimpleName());
|
|
|
|
|
|
|
|
return itemDescription;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
2016-09-08 18:49:44 +02: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());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save project: [user=" + user + ", folderId=" + folderId + "]");
|
2018-07-30 15:36:06 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(folderId);
|
|
|
|
|
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
ListResolver listResolver = folderContainer.findByName(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME);
|
|
|
|
List<? extends Item> items = listResolver.getItems();
|
|
|
|
if (items == null || items.isEmpty()) {
|
|
|
|
logger.debug("No item found");
|
|
|
|
FileContainer fileContainer = folderContainer.uploadFile(inputStream,
|
|
|
|
STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION);
|
|
|
|
logger.debug("Item uploaded: " + fileContainer.get().getId());
|
2015-12-11 18:02:03 +01:00
|
|
|
} else {
|
2018-07-30 15:36:06 +02:00
|
|
|
Item item = items.get(0);
|
|
|
|
logger.debug("Item found: " + item);
|
|
|
|
FileContainer fileContainer = folderContainer.uploadFile(inputStream,
|
|
|
|
STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, STATISTICAL_ALGORITHM_PROJECT_FILE_DESCRIPTION);
|
|
|
|
logger.debug("Item updated: " + fileContainer.get().getId());
|
2015-12-11 18:02:03 +01:00
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
}
|
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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
|
|
|
* TODO
|
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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
|
|
|
* TODO
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription createItemOnWorkspace(String user, InputStream inputStream, String name, String description,
|
2017-05-12 18:26:05 +02:00
|
|
|
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
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
ItemDescription itemDescription = new ItemDescription(workspaceItem.getId(), workspaceItem.getName(),
|
|
|
|
workspaceItem.getOwner().getPortalLogin(), workspaceItem.getPath(), workspaceItem.getType().name());
|
|
|
|
itemDescription.setPublicLink(workspaceItem.getPublicLink(false));
|
|
|
|
|
|
|
|
return itemDescription;
|
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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
|
|
|
* TODO
|
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
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
2017-07-11 19:01:42 +02:00
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription createItemOnWorkspaceHowAdmin(String user, InputStream inputStream, String name,
|
2017-07-11 19:01:42 +02:00
|
|
|
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());
|
2018-07-30 15:36:06 +02:00
|
|
|
ItemDescription itemDescription;
|
2017-07-11 19:01:42 +02:00
|
|
|
if (codeJar == null) {
|
2018-07-30 15:36:06 +02:00
|
|
|
WorkspaceItem item = ws.createExternalFile(name, description, mimeType, inputStream,
|
|
|
|
folderItem.getId());
|
|
|
|
|
|
|
|
itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner().getPortalLogin(),
|
|
|
|
item.getPath(), item.getType().name());
|
|
|
|
itemDescription.setPublicLink(item.getPublicLink(false));
|
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
} else {
|
2018-07-30 15:36:06 +02:00
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
ws.updateItem(codeJar.getId(), inputStream);
|
2018-07-30 15:36:06 +02:00
|
|
|
|
|
|
|
itemDescription = new ItemDescription(codeJar.getId(), codeJar.getName(),
|
|
|
|
codeJar.getOwner().getPortalLogin(), codeJar.getPath(), codeJar.getType().name());
|
|
|
|
itemDescription.setPublicLink(codeJar.getPublicLink(false));
|
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
}
|
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
return itemDescription;
|
|
|
|
|
2017-07-11 19:01:42 +02:00
|
|
|
} 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
|
|
|
/**
|
2018-07-31 16:48:35 +02:00
|
|
|
*
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve project item on workspace: [user=" + user + ", folderId=" + folderId + "]");
|
2018-07-31 16:48:35 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(folderId);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
ListResolver listResolver = folderContainer.findByName(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME);
|
|
|
|
List<? extends Item> items = listResolver.getItems();
|
|
|
|
if (items == null || items.isEmpty()) {
|
|
|
|
logger.debug("No project found in this folder!");
|
2017-05-12 18:26:05 +02:00
|
|
|
throw new StatAlgoImporterServiceException("No project found in this folder!");
|
2018-07-31 16:48:35 +02:00
|
|
|
} else {
|
|
|
|
Item item = items.get(0);
|
|
|
|
logger.debug("Item: " + item);
|
|
|
|
if (item != null) {
|
|
|
|
StreamDescriptor streamDescr = shc.open(item.getId()).asFile().download();
|
|
|
|
return streamDescr.getStream();
|
2015-12-14 18:44:54 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
} else {
|
|
|
|
logger.debug("No project found in this folder!");
|
|
|
|
throw new StatAlgoImporterServiceException("No project found in this folder!");
|
|
|
|
}
|
|
|
|
}
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Exist project item on workspace: [user=" + user + ", folderId=" + folderId + "]");
|
2018-07-31 16:48:35 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(folderId);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
ListResolver listResolver = folderContainer.findByName(STATISTICAL_ALGORITHM_PROJECT_FILE_NAME);
|
|
|
|
List<? extends Item> items = listResolver.getItems();
|
|
|
|
if (items == null || items.isEmpty()) {
|
2016-01-22 13:07:41 +01:00
|
|
|
return false;
|
|
|
|
} else {
|
2018-07-31 16:48:35 +02:00
|
|
|
Item item = items.get(0);
|
|
|
|
logger.debug("Item: " + item);
|
|
|
|
if (item != null) {
|
|
|
|
return true;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
2016-01-22 13:07:41 +01:00
|
|
|
}
|
|
|
|
|
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
|
2018-07-30 15:36:06 +02:00
|
|
|
* @return Item description
|
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
|
|
|
*/
|
2018-07-30 15:36:06 +02:00
|
|
|
public ItemDescription retrieveItemInfoOnWorkspace(String user, String itemId)
|
2016-01-22 13:07:41 +01:00
|
|
|
throws StatAlgoImporterServiceException {
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Retrieve item info on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2016-11-28 14:41:14 +01:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FileContainer fileContainer = openResolver.asFile();
|
|
|
|
AbstractFileItem item = fileContainer.get();
|
|
|
|
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
|
|
|
|
item.getPath(), item.getClass().getSimpleName());
|
|
|
|
itemDescription.setPublicLink(fileContainer.getPublicLink().toString());
|
2018-07-30 15:36:06 +02:00
|
|
|
|
|
|
|
return itemDescription;
|
2016-01-22 13:07:41 +01:00
|
|
|
|
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
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param user
|
|
|
|
* User
|
|
|
|
* @param itemId
|
|
|
|
* Item id
|
|
|
|
* @return Item description
|
|
|
|
* @throws StatAlgoImporterServiceException
|
|
|
|
* Exception
|
|
|
|
*/
|
|
|
|
public ItemDescription retrieveFolderInfoOnWorkspace(String user, String itemId)
|
|
|
|
throws StatAlgoImporterServiceException {
|
2018-09-04 17:48:50 +02:00
|
|
|
|
2018-07-30 15:36:06 +02:00
|
|
|
try {
|
|
|
|
logger.info("Retrieve folder info on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2018-07-30 15:36:06 +02:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FolderItem item = openResolver.asFolder().get();
|
|
|
|
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
|
|
|
|
item.getPath(), item.getClass().getSimpleName());
|
2018-07-30 15:36:06 +02:00
|
|
|
|
|
|
|
return itemDescription;
|
|
|
|
|
|
|
|
} catch (Throwable e) {
|
|
|
|
logger.error("Retrieve folder info on workspace: " + e.getLocalizedMessage(), e);
|
|
|
|
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 {
|
2018-07-31 16:48:35 +02:00
|
|
|
|
2015-12-04 18:45:47 +01:00
|
|
|
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
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
2015-12-04 18:45:47 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
StreamDescriptor streamDescr = shc.open(itemId).asFile().download();
|
2015-12-11 18:02:03 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
InputStream is = streamDescr.getStream();
|
|
|
|
return is;
|
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());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save string in item: [user=" + user + ", itemId=" + itemId + "]");
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2017-05-12 18:26:05 +02:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FileContainer fileContainer = openResolver.asFile();
|
|
|
|
AbstractFileItem abstractFileItem = fileContainer.get();
|
|
|
|
if (abstractFileItem == 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
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
String parentId = abstractFileItem.getParentId();
|
|
|
|
FolderContainer parentContainer = shc.open(parentId).asFolder();
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
// convert String into InputStream
|
|
|
|
try (InputStream is = new ByteArrayInputStream(data.getBytes())) {
|
|
|
|
parentContainer.uploadFile(is, abstractFileItem.getName(), abstractFileItem.getDescription());
|
|
|
|
}
|
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
|
|
|
/**
|
2018-07-31 16:48:35 +02: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 {
|
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Save input stream in item: [user=" + user + ", itemId=" + itemId + "]");
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2017-05-12 18:26:05 +02:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FileContainer fileContainer = openResolver.asFile();
|
|
|
|
AbstractFileItem abstractFileItem = fileContainer.get();
|
2018-07-31 16:48:35 +02:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
String parentId = abstractFileItem.getParentId();
|
|
|
|
FolderContainer parentContainer = shc.open(parentId).asFolder();
|
|
|
|
parentContainer.uploadFile(is, abstractFileItem.getName(), abstractFileItem.getDescription());
|
2016-01-26 16:31:34 +01:00
|
|
|
|
|
|
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Zip folder: [user=" + user + ", folderId=" + folderId + "]");
|
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
StreamDescriptor streamDescr = shc.open(folderId).asFolder().download();
|
|
|
|
|
|
|
|
File fileZip = Files.createTempFile(streamDescr.getFileName(), "").toFile();
|
|
|
|
logger.debug("File zip: " + fileZip.getAbsolutePath());
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
try (FileOutputStream fos = new FileOutputStream(fileZip)) {
|
|
|
|
InputStream is = streamDescr.getStream();
|
|
|
|
byte[] buf = new byte[2048];
|
|
|
|
int read = -1;
|
|
|
|
while ((read = is.read(buf)) != -1) {
|
|
|
|
fos.write(buf, 0, read);
|
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
}
|
2016-01-12 17:21:22 +01:00
|
|
|
|
|
|
|
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
|
|
|
try {
|
2017-05-12 18:26:05 +02:00
|
|
|
logger.info("Zip folder with exclude: [user=" + user + ", folderId=" + folderId + "]");
|
2018-07-31 16:48:35 +02:00
|
|
|
String[] idsArray = new String[idsToExclude.size()];
|
|
|
|
idsArray = idsToExclude.toArray(idsArray);
|
2017-05-12 18:26:05 +02:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
StreamDescriptor streamDescr = shc.open(folderId).asFolder().download(idsArray);
|
2016-01-25 17:40:15 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
File fileZip = Files.createTempFile(streamDescr.getFileName(), "").toFile();
|
|
|
|
logger.debug("File zip: " + fileZip.getAbsolutePath());
|
2016-01-25 17:40:15 +01:00
|
|
|
|
2018-07-31 16:48:35 +02:00
|
|
|
try (FileOutputStream fos = new FileOutputStream(fileZip); InputStream is = streamDescr.getStream()) {
|
|
|
|
byte[] buf = new byte[1024];
|
|
|
|
int read = -1;
|
|
|
|
while ((read = is.read(buf)) != -1) {
|
|
|
|
fos.write(buf, 0, read);
|
|
|
|
}
|
|
|
|
}
|
2016-01-25 17:40:15 +01:00
|
|
|
|
|
|
|
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();
|
2018-07-31 16:48:35 +02:00
|
|
|
|
|
|
|
try (FileOutputStream out = new FileOutputStream(destination.toFile());
|
|
|
|
InputStream is = uc.getInputStream();) {
|
|
|
|
byte buf[] = new byte[1024];
|
|
|
|
int len = 0;
|
|
|
|
while ((len = is.read(buf)) > 0)
|
|
|
|
out.write(buf, 0, len);
|
|
|
|
}
|
2016-01-13 17:26:54 +01:00
|
|
|
|
|
|
|
} 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());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-15 20:33:07 +01:00
|
|
|
/**
|
2018-09-04 17:48:50 +02:00
|
|
|
*
|
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 {
|
|
|
|
try {
|
|
|
|
logger.info("Get shared info: [user=" + user + ", itemId=" + itemId + "]");
|
|
|
|
List<String> shared = new ArrayList<String>();
|
2018-09-04 17:48:50 +02:00
|
|
|
StorageHubClient shc = new StorageHubClient();
|
|
|
|
OpenResolver openResolver = shc.open(itemId);
|
2018-06-29 19:12:24 +02:00
|
|
|
|
2018-09-04 17:48:50 +02:00
|
|
|
FolderContainer folderContainer = openResolver.asFolder();
|
|
|
|
FolderItem folderItem = folderContainer.get();
|
|
|
|
|
|
|
|
if (folderItem != null) {
|
|
|
|
if (folderItem.isShared()) {
|
|
|
|
if (folderItem instanceof SharedFolder) {
|
|
|
|
SharedFolder sharedFolder = (SharedFolder) folderItem;
|
|
|
|
Metadata metadata = sharedFolder.getUsers();
|
|
|
|
shared = new ArrayList<>(metadata.getValues().keySet());
|
|
|
|
} else {
|
|
|
|
logger.error("The folder is shared but is not of type SharedFolder: itemId=" + itemId + "]");
|
|
|
|
if (folderItem.getOwner() != null && !folderItem.getOwner().isEmpty()) {
|
|
|
|
shared.add(folderItem.getOwner());
|
|
|
|
} else {
|
|
|
|
logger.error("Invalid owner for: itemId=" + itemId + "]");
|
|
|
|
}
|
2018-01-15 20:33:07 +01:00
|
|
|
}
|
|
|
|
} else {
|
2018-09-04 17:48:50 +02:00
|
|
|
if (folderItem.getOwner() != null && !folderItem.getOwner().isEmpty()) {
|
|
|
|
shared.add(folderItem.getOwner());
|
|
|
|
} else {
|
|
|
|
logger.error("Invalid owner for: itemId=" + itemId + "]");
|
|
|
|
}
|
2018-01-15 20:33:07 +01:00
|
|
|
}
|
2018-09-04 17:48:50 +02:00
|
|
|
} else {
|
|
|
|
logger.info("Folder null: itemId=" + itemId + "]");
|
2018-01-15 20:33:07 +01:00
|
|
|
}
|
2018-09-04 17:48:50 +02:00
|
|
|
|
|
|
|
logger.debug("Shared: " + shared);
|
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
|
|
|
}
|