ref 11720: DataMiner - Update to StorageHUB

https://support.d4science.org/issues/11720

Updated to StorageHub 

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/data-miner-manager@169458 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2018-06-26 14:58:21 +00:00
parent 7476cec4d8
commit 992ae023fe
2 changed files with 72 additions and 90 deletions

View File

@ -3,14 +3,13 @@ package org.gcube.portlets.user.dataminermanager.server.storage;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.gcube.common.homelibrary.home.HomeLibrary;
import org.gcube.common.homelibrary.home.workspace.Workspace;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
import org.gcube.common.storagehub.client.StreamDescriptor; import org.gcube.common.storagehub.client.StreamDescriptor;
import org.gcube.common.storagehub.client.dsl.FileContainer; import org.gcube.common.storagehub.client.dsl.FileContainer;
import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer;
import org.gcube.common.storagehub.client.dsl.ListResolver;
import org.gcube.common.storagehub.client.dsl.OpenResolver; import org.gcube.common.storagehub.client.dsl.OpenResolver;
import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.Metadata; import org.gcube.common.storagehub.model.Metadata;
@ -54,8 +53,8 @@ public class StorageUtil {
return itemMap; return itemMap;
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error retrieving properties: " +e.getLocalizedMessage(), e); logger.error("Error retrieving properties: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e); throw new ServiceException(e.getLocalizedMessage(), e);
} }
} }
@ -70,22 +69,20 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public InputStream getInputStreamForItemOnWorkspace(String user, String itemId) throws ServiceException { public InputStream getInputStreamForItemOnWorkspace(String user, String itemId) throws ServiceException {
try { try {
logger.debug("getInputStreamForItemOnWorkspace: [user="+user+", itemId="+itemId+"]"); logger.debug("getInputStreamForItemOnWorkspace: [user=" + user + ", itemId=" + itemId + "]");
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
FileContainer fileContainer = shc.open(itemId).asFile(); FileContainer fileContainer = shc.open(itemId).asFile();
StreamDescriptor streamDescriptor = fileContainer.download(); StreamDescriptor streamDescriptor = fileContainer.download();
return streamDescriptor.getStream(); return streamDescriptor.getStream();
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error retrieving InputStream for File: " +e.getLocalizedMessage(), e); logger.error("Error retrieving InputStream for File: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e); throw new ServiceException(e.getLocalizedMessage(), e);
} }
} }
/** /**
* *
* @param user * @param user
@ -96,16 +93,16 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public String getPublicLink(String user, String itemId) throws ServiceException { public String getPublicLink(String user, String itemId) throws ServiceException {
try { try {
logger.debug("getPublicLink: [user="+user+", itemId="+itemId+"]"); logger.debug("getPublicLink: [user=" + user + ", itemId=" + itemId + "]");
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
URL url = shc.open(itemId).asFile().getPublicLink(); URL url = shc.open(itemId).asFile().getPublicLink();
return url.toString(); return url.toString();
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error retrieving public link: " + e.getLocalizedMessage(),e); logger.error("Error retrieving public link: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e); throw new ServiceException(e.getLocalizedMessage(), e);
} }
} }
@ -119,7 +116,7 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public InputStream zipFolder(String user, String folderId) throws ServiceException { public InputStream zipFolder(String user, String folderId) throws ServiceException {
try { try {
logger.debug("zipFolder: [user=" + user + ", folderId=" + folderId + "]"); logger.debug("zipFolder: [user=" + user + ", folderId=" + folderId + "]");
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
@ -136,8 +133,8 @@ public class StorageUtil {
} }
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error in zip Folder: " +e.getLocalizedMessage(),e); logger.error("Error in zip Folder: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e); throw new ServiceException(e.getLocalizedMessage(), e);
} }
} }
@ -152,18 +149,21 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public WorkspaceItem getItemInRootFolderOnWorkspace(String user, String itemName) throws ServiceException { public Item getItemInRootFolderOnWorkspace(String user, String itemName) throws ServiceException {
Workspace ws;
try { try {
logger.debug("GetItemInRootFolder: [user=" + user + ", itemName=" + itemName + "]"); logger.debug("GetItemInRootFolder: [user=" + user + ", itemName=" + itemName + "]");
ws = HomeLibrary.getUserWorkspace(user); StorageHubClient shc = new StorageHubClient();
ListResolver listResolver = shc.getWSRoot().findByName(itemName);
List<? extends Item> items = listResolver.getItems();
WorkspaceItem item = ws.find(itemName, ws.getRoot().getId()); if (items != null && !items.isEmpty()) {
return items.get(0);
return item; } else {
return null;
}
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error in get Item in RootFolder: " +e.getLocalizedMessage(),e); logger.error("Error in get Item in RootFolder: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage()); throw new ServiceException(e.getLocalizedMessage());
} }
} }
@ -180,19 +180,21 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public WorkspaceItem getItemInFolderOnWorkspace(String user, String folderId, String itemName) public Item getItemInFolderOnWorkspace(String user, String folderId, String itemName) throws ServiceException {
throws ServiceException {
Workspace ws;
try { try {
logger.debug("GetItemInFolder: [user=" + user + ", folderId="+folderId+", itemName=" + itemName + "]"); logger.debug("GetItemInFolder: [user=" + user + ", folderId=" + folderId + ", itemName=" + itemName + "]");
ws = HomeLibrary.getUserWorkspace(user); StorageHubClient shc = new StorageHubClient();
ListResolver listResolver = shc.open(folderId).asFolder().findByName(itemName);
List<? extends Item> items = listResolver.getItems();
WorkspaceItem item = ws.find(itemName, folderId); if (items != null && !items.isEmpty()) {
return items.get(0);
return item; } else {
return null;
}
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error in get Item in Folder: " +e.getLocalizedMessage(),e); logger.error("Error in get Item in Folder: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage()); throw new ServiceException(e.getLocalizedMessage());
} }
} }
@ -206,17 +208,18 @@ public class StorageUtil {
* @throws ServiceException * @throws ServiceException
* service exception * service exception
*/ */
public void deleteItem(String user, String itemId) throws ServiceException { public void deleteItem(String user, String itemId) throws ServiceException {
Workspace ws;
try { try {
logger.debug("User: " + user + ", ItemId:" + itemId); logger.debug("User: " + user + ", ItemId:" + itemId);
ws = HomeLibrary.getUserWorkspace(user); StorageHubClient shc = new StorageHubClient();
OpenResolver openResolver = shc.open(itemId);
ws.removeItems(itemId); ItemContainer<Item> itemContainer = openResolver.asItem();
itemContainer.delete();
return; return;
} catch (Throwable e) { } catch (Throwable e) {
logger.error("Error deleting Item: "+e.getLocalizedMessage(),e); logger.error("Error deleting Item: " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage()); throw new ServiceException(e.getLocalizedMessage());
} }

View File

@ -1,15 +1,14 @@
package org.gcube.portlets.user.dataminermanager.server.util; package org.gcube.portlets.user.dataminermanager.server.util;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
import org.gcube.portlets.user.dataminermanager.server.storage.StorageUtil;
import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials; import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.Computations; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.Computations;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.OutputDataSets;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.DataMinerWorkArea;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.InputDataSets; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.InputDataSets;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription; import org.gcube.data.analysis.dataminermanagercl.shared.workspace.ItemDescription;
import org.gcube.data.analysis.dataminermanagercl.shared.workspace.OutputDataSets;
import org.gcube.portlets.user.dataminermanager.server.storage.StorageUtil;
import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -25,8 +24,7 @@ public class DataMinerWorkAreaManager {
private static final String COMPUTED_DATA_FOLDER = "Output Data Sets"; private static final String COMPUTED_DATA_FOLDER = "Output Data Sets";
private static final String COMPUTATIONS_FOLDER = "Computations"; private static final String COMPUTATIONS_FOLDER = "Computations";
public static final Logger logger = LoggerFactory public static final Logger logger = LoggerFactory.getLogger(DataMinerWorkAreaManager.class);
.getLogger(DataMinerWorkAreaManager.class);
private ServiceCredentials serviceCredentials; private ServiceCredentials serviceCredentials;
@ -36,12 +34,11 @@ public class DataMinerWorkAreaManager {
public DataMinerWorkArea getDataMinerWorkArea() throws ServiceException { public DataMinerWorkArea getDataMinerWorkArea() throws ServiceException {
DataMinerWorkArea dataMinerWorkArea = null; DataMinerWorkArea dataMinerWorkArea = null;
StorageUtil storageUtil=new StorageUtil(); StorageUtil storageUtil = new StorageUtil();
try { try {
WorkspaceItem wiDataMinerFolder = storageUtil Item wiDataMinerFolder = storageUtil.getItemInRootFolderOnWorkspace(serviceCredentials.getUserName(),
.getItemInRootFolderOnWorkspace(serviceCredentials.getUserName(), DATA_MINER_FOLDER);
DATA_MINER_FOLDER);
if (wiDataMinerFolder == null) { if (wiDataMinerFolder == null) {
dataMinerWorkArea = new DataMinerWorkArea(null); dataMinerWorkArea = new DataMinerWorkArea(null);
@ -49,13 +46,10 @@ public class DataMinerWorkAreaManager {
} else { } else {
ItemDescription dataMinerWorkAreaFolder = null; ItemDescription dataMinerWorkAreaFolder = null;
dataMinerWorkAreaFolder = new ItemDescription( dataMinerWorkAreaFolder = new ItemDescription(wiDataMinerFolder.getId(), wiDataMinerFolder.getName(),
wiDataMinerFolder.getId(), wiDataMinerFolder.getName(), wiDataMinerFolder.getOwner(), wiDataMinerFolder.getPath(),
wiDataMinerFolder.getOwner().getPortalLogin(), null);
wiDataMinerFolder.getPath(), wiDataMinerFolder dataMinerWorkArea = new DataMinerWorkArea(dataMinerWorkAreaFolder);
.getType().name());
dataMinerWorkArea = new DataMinerWorkArea(
dataMinerWorkAreaFolder);
} }
@ -68,18 +62,13 @@ public class DataMinerWorkAreaManager {
InputDataSets inputDataSets = null; InputDataSets inputDataSets = null;
try { try {
WorkspaceItem wiImportedDataFolder = storageUtil Item wiImportedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(),
.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), IMPORTED_DATA_FOLDER);
dataMinerWorkArea.getDataMinerWorkAreaFolder()
.getId(), IMPORTED_DATA_FOLDER);
ItemDescription importedDataFolder = null; ItemDescription importedDataFolder = null;
importedDataFolder = new ItemDescription( importedDataFolder = new ItemDescription(wiImportedDataFolder.getId(), wiImportedDataFolder.getName(),
wiImportedDataFolder.getId(), wiImportedDataFolder.getOwner(), wiImportedDataFolder.getPath(),
wiImportedDataFolder.getName(), wiImportedDataFolder null);
.getOwner().getPortalLogin(),
wiImportedDataFolder.getPath(), wiImportedDataFolder
.getType().name());
inputDataSets = new InputDataSets(importedDataFolder); inputDataSets = new InputDataSets(importedDataFolder);
@ -90,18 +79,13 @@ public class DataMinerWorkAreaManager {
OutputDataSets outputDataSets = null; OutputDataSets outputDataSets = null;
try { try {
WorkspaceItem wiComputedDataFolder = storageUtil Item wiComputedDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(),
.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), COMPUTED_DATA_FOLDER);
dataMinerWorkArea.getDataMinerWorkAreaFolder()
.getId(), COMPUTED_DATA_FOLDER);
ItemDescription computedDataFolder = null; ItemDescription computedDataFolder = null;
computedDataFolder = new ItemDescription( computedDataFolder = new ItemDescription(wiComputedDataFolder.getId(), wiComputedDataFolder.getName(),
wiComputedDataFolder.getId(), wiComputedDataFolder.getOwner(), wiComputedDataFolder.getPath(),
wiComputedDataFolder.getName(), wiComputedDataFolder null);
.getOwner().getPortalLogin(),
wiComputedDataFolder.getPath(), wiComputedDataFolder
.getType().name());
outputDataSets = new OutputDataSets(computedDataFolder); outputDataSets = new OutputDataSets(computedDataFolder);
} catch (Throwable e) { } catch (Throwable e) {
@ -111,18 +95,13 @@ public class DataMinerWorkAreaManager {
Computations computations = null; Computations computations = null;
try { try {
WorkspaceItem wiComputationsDataFolder = storageUtil Item wiComputationsDataFolder = storageUtil.getItemInFolderOnWorkspace(serviceCredentials.getUserName(),
.getItemInFolderOnWorkspace(serviceCredentials.getUserName(), dataMinerWorkArea.getDataMinerWorkAreaFolder().getId(), COMPUTATIONS_FOLDER);
dataMinerWorkArea.getDataMinerWorkAreaFolder()
.getId(), COMPUTATIONS_FOLDER);
ItemDescription computationsDataFolder = null; ItemDescription computationsDataFolder = null;
computationsDataFolder = new ItemDescription( computationsDataFolder = new ItemDescription(wiComputationsDataFolder.getId(),
wiComputationsDataFolder.getId(), wiComputationsDataFolder.getName(), wiComputationsDataFolder.getOwner(),
wiComputationsDataFolder.getName(), wiComputationsDataFolder.getPath(), null);
wiComputationsDataFolder.getOwner().getPortalLogin(),
wiComputationsDataFolder.getPath(),
wiComputationsDataFolder.getType().name());
computations = new Computations(computationsDataFolder); computations = new Computations(computationsDataFolder);
} catch (Throwable e) { } catch (Throwable e) {