data-miner-manager/src/main/java/org/gcube/portlets/user/dataminermanager/server/storage/StorageUtil.java

227 lines
6.3 KiB
Java

package org.gcube.portlets.user.dataminermanager.server.storage;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
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.dsl.FileContainer;
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.Metadata;
import org.gcube.common.storagehub.model.items.FolderItem;
import org.gcube.common.storagehub.model.items.Item;
import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Giancarlo Panichi
*
*
*/
public class StorageUtil {
private static Logger logger = LoggerFactory.getLogger(StorageUtil.class);
/**
*
* @param user
* user
* @param itemId
* item id
* @return map properties
* @throws ServiceException
* service exception
*/
public Map<String, String> getProperties(String user, String itemId) throws ServiceException {
try {
StorageHubClient shc = new StorageHubClient();
Item item = shc.open(itemId).asItem().get();
Metadata metadata = item.getPropertyMap();
Map<String, String> itemMap = new HashMap<String, String>();
Map<String, Object> metadataMap = metadata.getValues();
for (String key : metadataMap.keySet()) {
String s = String.valueOf(metadataMap.get(key));
itemMap.put(key, s);
}
return itemMap;
} catch (Throwable e) {
logger.error("Error retrieving properties: " +e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e);
}
}
/**
*
* @param user
* user
* @param itemId
* item id
* @return input stream
* @throws ServiceException
* service exception
*/
public InputStream getInputStreamForItemOnWorkspace(String user, String itemId) throws ServiceException {
try {
logger.debug("getInputStreamForItemOnWorkspace: [user="+user+", itemId="+itemId+"]");
StorageHubClient shc = new StorageHubClient();
FileContainer fileContainer = shc.open(itemId).asFile();
StreamDescriptor streamDescriptor = fileContainer.download();
return streamDescriptor.getStream();
} catch (Throwable e) {
logger.error("Error retrieving InputStream for File: " +e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage(),e);
}
}
/**
*
* @param user
* user
* @param itemId
* item id
* @return public link
* @throws ServiceException
* service exception
*/
public String getPublicLink(String user, String itemId) throws ServiceException {
try {
logger.debug("getPublicLink: [user="+user+", itemId="+itemId+"]");
StorageHubClient shc = new StorageHubClient();
URL url = shc.open(itemId).asFile().getPublicLink();
return url.toString();
} catch (Throwable e) {
logger.error("Error retrieving public link: " + e.getLocalizedMessage(),e);
throw new ServiceException(e.getLocalizedMessage(),e);
}
}
/**
*
* @param user
* user
* @param folderId
* folder id
* @return input stream
* @throws ServiceException
* service exception
*/
public InputStream zipFolder(String user, String folderId) throws ServiceException {
try {
logger.debug("zipFolder: [user=" + user + ", folderId=" + folderId + "]");
StorageHubClient shc = new StorageHubClient();
OpenResolver openResolver = shc.open(folderId);
ItemContainer<Item> itemContainer = openResolver.asItem();
Item item = itemContainer.get();
if (item instanceof FolderItem) {
StreamDescriptor streamDescriptor = openResolver.asFolder().download();
InputStream is = streamDescriptor.getStream();
return is;
} else {
throw new ServiceException("Is not a valid folder!");
}
} catch (Throwable e) {
logger.error("Error in zip Folder: " +e.getLocalizedMessage(),e);
throw new ServiceException(e.getLocalizedMessage(),e);
}
}
/**
*
* @param user
* user
* @param itemName
* item name
* @return workspace item
* @throws ServiceException
* service exception
*/
public WorkspaceItem getItemInRootFolderOnWorkspace(String user, String itemName) throws ServiceException {
Workspace ws;
try {
logger.debug("GetItemInRootFolder: [user=" + user + ", itemName=" + itemName + "]");
ws = HomeLibrary.getUserWorkspace(user);
WorkspaceItem item = ws.find(itemName, ws.getRoot().getId());
return item;
} catch (Throwable e) {
logger.error("Error in get Item in RootFolder: " +e.getLocalizedMessage(),e);
throw new ServiceException(e.getLocalizedMessage());
}
}
/**
*
* @param user
* user
* @param folderId
* folder id
* @param itemName
* item name
* @return workspace item
* @throws ServiceException
* service exception
*/
public WorkspaceItem getItemInFolderOnWorkspace(String user, String folderId, String itemName)
throws ServiceException {
Workspace ws;
try {
logger.debug("GetItemInFolder: [user=" + user + ", folderId="+folderId+", itemName=" + itemName + "]");
ws = HomeLibrary.getUserWorkspace(user);
WorkspaceItem item = ws.find(itemName, folderId);
return item;
} catch (Throwable e) {
logger.error("Error in get Item in Folder: " +e.getLocalizedMessage(),e);
throw new ServiceException(e.getLocalizedMessage());
}
}
/**
*
* @param user
* user
* @param itemId
* item id
* @throws ServiceException
* service exception
*/
public void deleteItem(String user, String itemId) throws ServiceException {
Workspace ws;
try {
logger.debug("User: " + user + ", ItemId:" + itemId);
ws = HomeLibrary.getUserWorkspace(user);
ws.removeItems(itemId);
return;
} catch (Throwable e) {
logger.error("Error deleting Item: "+e.getLocalizedMessage(),e);
throw new ServiceException(e.getLocalizedMessage());
}
}
}