2015-06-24 15:16:13 +02:00
|
|
|
package org.gcube.portlets.widgets.wsexplorer.server;
|
|
|
|
|
2015-07-10 11:57:39 +02:00
|
|
|
import java.text.DecimalFormat;
|
2015-06-25 12:33:18 +02:00
|
|
|
import java.util.ArrayList;
|
2015-06-24 15:16:13 +02:00
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
|
|
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
|
|
import org.gcube.application.framework.core.session.SessionManager;
|
2015-07-06 17:18:23 +02:00
|
|
|
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
|
2015-06-24 15:16:13 +02:00
|
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
|
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
|
|
|
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
2015-07-06 17:18:23 +02:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
2015-06-24 15:16:13 +02:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
2015-07-06 17:18:23 +02:00
|
|
|
import org.gcube.common.homelibrary.home.workspace.folder.FolderItem;
|
2015-06-25 17:22:13 +02:00
|
|
|
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants;
|
2015-06-24 15:16:13 +02:00
|
|
|
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService;
|
|
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
|
|
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
|
2015-06-30 12:31:49 +02:00
|
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
|
2015-06-24 15:16:13 +02:00
|
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
|
|
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The server side implementation of the RPC service.
|
2015-06-25 12:33:18 +02:00
|
|
|
*
|
|
|
|
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
|
|
|
* Jun 25, 2015
|
2015-06-24 15:16:13 +02:00
|
|
|
*/
|
|
|
|
@SuppressWarnings("serial")
|
|
|
|
public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implements WorkspaceExplorerService {
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
2015-06-24 15:16:13 +02:00
|
|
|
public static final Logger _log = LoggerFactory.getLogger(WorkspaceExplorerServiceImpl.class);
|
|
|
|
public static final String USERNAME_ATTRIBUTE = "username";
|
2015-07-10 15:28:32 +02:00
|
|
|
public static final String TEST_USER = "test.user";
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
/**
|
|
|
|
* Gets the ASL session.
|
|
|
|
*
|
|
|
|
* @param httpSession the http session
|
|
|
|
* @return the ASL session
|
|
|
|
*/
|
2015-06-24 15:16:13 +02:00
|
|
|
private ASLSession getASLSession(HttpSession httpSession) {
|
|
|
|
String sessionID = httpSession.getId();
|
|
|
|
String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE);
|
|
|
|
|
|
|
|
_log.error("WORKSPACE PORTLET SessionID= " + sessionID);
|
|
|
|
|
|
|
|
//TODO we check for the older attribute name
|
|
|
|
if (user == null) user = (String) httpSession.getAttribute("user");
|
|
|
|
|
|
|
|
if (user == null) {
|
|
|
|
|
|
|
|
_log.error("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND");
|
|
|
|
|
|
|
|
//for test only
|
|
|
|
// user = "test.user";
|
2015-06-30 14:52:40 +02:00
|
|
|
user = TEST_USER;
|
2015-06-24 15:16:13 +02:00
|
|
|
httpSession.setAttribute(USERNAME_ATTRIBUTE, user);
|
|
|
|
ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user);
|
|
|
|
session.setScope("/gcube/devsec/devVRE");
|
|
|
|
|
|
|
|
return session;
|
|
|
|
} else _log.trace("user found in session "+user);
|
|
|
|
return SessionManager.getInstance().getASLSession(sessionID, user);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
/**
|
|
|
|
* Gets the workspace.
|
|
|
|
*
|
|
|
|
* @return the workspace
|
|
|
|
* @throws InternalErrorException the internal error exception
|
|
|
|
* @throws HomeNotFoundException the home not found exception
|
|
|
|
* @throws WorkspaceFolderNotFoundException the workspace folder not found exception
|
|
|
|
*/
|
2015-06-24 15:16:13 +02:00
|
|
|
protected Workspace getWorkspace() throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException {
|
|
|
|
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
|
|
|
|
|
|
|
|
Workspace workspace = HomeLibrary.getUserWorkspace(session.getUsername());
|
|
|
|
return workspace;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public Item getRoot(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
|
|
|
|
_log.trace("getRoot showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+ filterCriteria);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
_log.trace("Start getRoot...");
|
|
|
|
|
|
|
|
WorkspaceItem root = workspace.getRoot();
|
|
|
|
|
|
|
|
_log.trace("GetRoot - Replyiing root");
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
_log.trace("start time - " + startTime);
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, true);
|
2015-06-30 12:31:49 +02:00
|
|
|
rootItem.setName(WorkspaceExplorerConstants.HOME_LABEL);
|
2015-06-24 15:16:13 +02:00
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
/* SPECIAL FOLDERS
|
2015-06-24 15:16:13 +02:00
|
|
|
Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2);
|
|
|
|
specialFolders.setShared(true);
|
|
|
|
rootItem.addChild(specialFolders);
|
2015-06-25 12:33:18 +02:00
|
|
|
*/
|
2015-06-24 15:16:13 +02:00
|
|
|
if (purgeEmpyFolders) rootItem = ItemBuilder.purgeEmptyFolders(rootItem);
|
|
|
|
|
|
|
|
_log.trace("Returning:");
|
|
|
|
Long endTime = System.currentTimeMillis() - startTime;
|
|
|
|
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
|
|
|
|
_log.trace("end time - " + time);
|
|
|
|
|
|
|
|
Collections.sort(rootItem.getChildren(), new ItemComparator());
|
2015-06-25 16:34:41 +02:00
|
|
|
_log.info("Returning children size: "+rootItem.getChildren().size());
|
|
|
|
|
2015-06-24 15:16:13 +02:00
|
|
|
return rootItem;
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error during root retrieving", e);
|
2015-06-30 12:31:49 +02:00
|
|
|
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get root");
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public Item getFolder(String folderId, List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
|
|
|
|
_log.trace("getFolder folderId: "+folderId+" showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem folder = workspace.getItem(folderId);
|
|
|
|
|
|
|
|
_log.trace("GetFolder - Replyiing folder");
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
_log.trace("start time - " + startTime);
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true);
|
2015-06-24 15:16:13 +02:00
|
|
|
_log.trace("Only showable types:");
|
2015-06-30 12:31:49 +02:00
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder);
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
_log.trace("Returning:");
|
|
|
|
Long endTime = System.currentTimeMillis() - startTime;
|
|
|
|
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
|
|
|
|
_log.trace("end time - " + time);
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
Collections.sort(itemFolder.getChildren(), new ItemComparator());
|
2015-06-24 15:16:13 +02:00
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
return itemFolder;
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error during folder retrieving", e);
|
2015-06-30 12:31:49 +02:00
|
|
|
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get folder");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-07-06 17:18:23 +02:00
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#getItemByCategory(org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory)
|
|
|
|
*/
|
2015-06-30 12:31:49 +02:00
|
|
|
@Override
|
|
|
|
public Item getItemByCategory(ItemCategory category) throws WorkspaceNavigatorServiceException{
|
|
|
|
_log.trace("GetItemByCategory category: "+category);
|
|
|
|
try {
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
Item item = null;
|
|
|
|
|
|
|
|
switch(category){
|
|
|
|
case HOME:{
|
|
|
|
WorkspaceItem root = workspace.getRoot();
|
|
|
|
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
|
2015-06-30 14:52:40 +02:00
|
|
|
String fullName = UserUtil.getUserFullName(session.getUsername());
|
|
|
|
if(fullName.indexOf(" ")>0){
|
|
|
|
fullName = fullName.substring(0, fullName.indexOf(" "));
|
|
|
|
}else if(fullName.indexOf(".")>0){
|
|
|
|
fullName = fullName.substring(0, fullName.indexOf("."));
|
|
|
|
}
|
2015-06-30 18:10:45 +02:00
|
|
|
item = new Item(null, root.getId(), fullName+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), true, true);
|
2015-06-30 12:31:49 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case VRE_FOLDER:{
|
|
|
|
WorkspaceItem folder = workspace.getMySpecialFolders();
|
2015-06-30 18:10:45 +02:00
|
|
|
item = new Item(null, folder.getId(), WorkspaceExplorerConstants.VRE_FOLDERS_LABEL, ItemType.FOLDER, folder.getPath(), folder.getOwner().getPortalLogin(), true, false);
|
2015-06-30 12:31:49 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return item;
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error during get item by category", e);
|
|
|
|
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get item by category");
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|
|
|
|
}
|
2015-06-25 17:22:13 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public Item getMySpecialFolder(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
|
|
|
|
_log.trace("GetMySpecialFolder showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+filterCriteria);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem folder = workspace.getMySpecialFolders();
|
|
|
|
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
_log.trace("start time - " + startTime);
|
|
|
|
|
|
|
|
Item itemFolder = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, true);
|
2015-06-25 18:17:10 +02:00
|
|
|
itemFolder.setName(WorkspaceExplorerConstants.VRE_FOLDERS_LABEL);
|
2015-06-25 17:22:13 +02:00
|
|
|
itemFolder.setSpecialFolder(true);
|
2015-06-25 18:17:10 +02:00
|
|
|
|
|
|
|
_log.trace("Builded MySpecialFolder: "+itemFolder);
|
2015-06-25 17:22:13 +02:00
|
|
|
|
|
|
|
_log.trace("Only showable types:");
|
|
|
|
//printName("", folderItem);
|
|
|
|
|
|
|
|
if (purgeEmpyFolders) itemFolder = ItemBuilder.purgeEmptyFolders(itemFolder);
|
|
|
|
|
|
|
|
_log.trace("Returning:");
|
|
|
|
|
|
|
|
Long endTime = System.currentTimeMillis() - startTime;
|
|
|
|
String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
|
|
|
|
_log.trace("end time - " + time);
|
|
|
|
|
|
|
|
//printName("", folderItem);
|
|
|
|
|
|
|
|
Collections.sort(itemFolder.getChildren(), new ItemComparator());
|
|
|
|
|
|
|
|
return itemFolder;
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error during special folders retrieving", e);
|
2015-06-30 12:31:49 +02:00
|
|
|
throw new WorkspaceNavigatorServiceException("Sorry, an error occurred when performing get My Special Folder");
|
2015-06-25 17:22:13 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public boolean checkName(String name) throws WorkspaceNavigatorServiceException {
|
|
|
|
_log.trace("checkName name: "+name);
|
|
|
|
try {
|
|
|
|
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
|
|
|
|
Workspace workspace = HomeLibrary.getUserWorkspace(session.getUsername());
|
|
|
|
return workspace.isValidName(name);
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error during folder retrieving", e);
|
|
|
|
throw new WorkspaceNavigatorServiceException(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*protected void printName(String indentation, Item item)
|
|
|
|
{
|
|
|
|
if(item!=null){
|
|
|
|
_log.trace(indentation+item.getName());
|
|
|
|
for (Item child:item.getChildren()) printName(indentation+"\t", child);
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
|
|
|
|
/**
|
2015-06-30 14:52:40 +02:00
|
|
|
* Gets Breadcrumbs (the list of parents) by item identifier.
|
2015-06-24 15:16:13 +02:00
|
|
|
*
|
|
|
|
* @param itemIdentifier the item identifier
|
|
|
|
* @param includeItemAsParent - if parameter is true and item passed in input is a folder, the folder is included in path returned as last parent
|
|
|
|
* @return the list parents by item identifier
|
|
|
|
* @throws Exception the exception
|
|
|
|
*/
|
|
|
|
@Override
|
2015-06-30 14:52:40 +02:00
|
|
|
public List<Item> getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception {
|
2015-06-25 12:33:18 +02:00
|
|
|
List<Item> listParents = new ArrayList<Item>();
|
2015-06-25 16:34:41 +02:00
|
|
|
_log.trace("ListParents By Item Identifier "+ itemIdentifier);
|
2015-06-24 15:16:13 +02:00
|
|
|
try {
|
2015-06-30 14:52:40 +02:00
|
|
|
|
2015-06-24 15:16:13 +02:00
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(itemIdentifier);
|
2015-06-30 18:10:45 +02:00
|
|
|
|
2015-06-24 15:16:13 +02:00
|
|
|
_log.trace("workspace retrieve item name: "+wsItem.getName());
|
|
|
|
|
2015-06-25 12:33:18 +02:00
|
|
|
if(includeItemAsParent==true && wsItem.isFolder()){
|
2015-06-25 18:17:10 +02:00
|
|
|
listParents.add(ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsItem, null));
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|
2015-06-30 18:10:45 +02:00
|
|
|
|
|
|
|
//HANDLE MY_SPECIAL_FOLDER
|
|
|
|
if(wsItem.isFolder()){
|
|
|
|
if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem))
|
|
|
|
return listParents;
|
|
|
|
}
|
2015-06-24 15:16:13 +02:00
|
|
|
|
2015-06-30 18:10:45 +02:00
|
|
|
//CREATING LIST PARENTS
|
2015-06-24 15:16:13 +02:00
|
|
|
while(wsItem!=null && wsItem.getParent()!=null){
|
2015-06-30 18:10:45 +02:00
|
|
|
WorkspaceFolder wsParentFolder = wsItem.getParent();
|
|
|
|
Item parent = ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsParentFolder, null);
|
2015-06-30 14:52:40 +02:00
|
|
|
listParents.add(parent);
|
2015-06-30 18:10:45 +02:00
|
|
|
if(parent.isSpecialFolder()) //SKIP HOME PARENT FOR MY_SPECIAL_FOLDER
|
2015-06-30 14:52:40 +02:00
|
|
|
break;
|
2015-06-30 18:10:45 +02:00
|
|
|
wsItem = wsParentFolder;
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
Collections.reverse(listParents);
|
2015-06-30 18:10:45 +02:00
|
|
|
/*
|
2015-06-30 14:52:40 +02:00
|
|
|
System.out.println("Parent's:");
|
|
|
|
for (Item item : listParents) {
|
|
|
|
System.out.println(item);
|
2015-06-30 18:10:45 +02:00
|
|
|
}*/
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
//SET PARENTS
|
|
|
|
for(int i=0; i<listParents.size()-1; i++){
|
|
|
|
Item parent = listParents.get(i);
|
|
|
|
Item fileModel = listParents.get(i+1);
|
2015-06-25 12:33:18 +02:00
|
|
|
fileModel.setParent(parent);
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|
|
|
|
|
2015-06-25 16:34:41 +02:00
|
|
|
_log.trace("ListParents return size: "+listParents.size());
|
2015-06-24 15:16:13 +02:00
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error in get List Parents By Item Identifier ", e);
|
|
|
|
e.printStackTrace();
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
|
|
|
|
return listParents;
|
|
|
|
}
|
2015-07-06 17:18:23 +02:00
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#loadSizeByItemId(java.lang.String)
|
|
|
|
*/
|
|
|
|
@Override
|
2015-07-10 11:57:39 +02:00
|
|
|
public Long getSizeByItemId(String itemId) throws Exception {
|
2015-07-06 17:18:23 +02:00
|
|
|
|
|
|
|
_log.info("get Size By ItemId "+ itemId);
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(itemId);
|
|
|
|
Long size = new Long(-1);
|
|
|
|
|
|
|
|
if(wsItem instanceof FolderItem){ //ITEM
|
|
|
|
FolderItem folderItem = (FolderItem) wsItem;
|
|
|
|
size = new Long(folderItem.getLength());
|
|
|
|
} else if (wsItem instanceof WorkspaceFolder ){ //FOLDER
|
|
|
|
WorkspaceFolder theFolder = (WorkspaceFolder) wsItem;
|
|
|
|
size = theFolder.getSize();
|
|
|
|
} else if (wsItem instanceof WorkspaceSharedFolder){ //SHARED FOLDER
|
|
|
|
WorkspaceSharedFolder theFolder = (WorkspaceSharedFolder) wsItem;
|
|
|
|
size = theFolder.getSize();
|
|
|
|
}
|
|
|
|
_log.info("returning size: " +size);
|
|
|
|
return size;
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("get Size By ItemId ", e);
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#getMimeType(java.lang.String)
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public String getMimeType(String itemId) throws Exception {
|
|
|
|
|
|
|
|
_log.info("get MimeType By ItemId "+ itemId);
|
|
|
|
try {
|
|
|
|
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(itemId);
|
|
|
|
|
|
|
|
if(!wsItem.getType().equals(WorkspaceItemType.FOLDER_ITEM))
|
|
|
|
return null;
|
|
|
|
|
|
|
|
FolderItem folderItem = (FolderItem) wsItem;
|
|
|
|
|
|
|
|
return folderItem.getMimeType();
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("get MimeType By ItemId ", e);
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the user acl for folder id.
|
|
|
|
*
|
|
|
|
* @param folderId the folder id
|
|
|
|
* @return the user acl for folder id
|
|
|
|
* @throws Exception the exception
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public String getUserACLForFolderId(String folderId) throws Exception{
|
|
|
|
try {
|
|
|
|
_log.info("Get user ACL to FOLDER id: "+folderId);
|
|
|
|
Workspace workspace = getWorkspace();
|
|
|
|
WorkspaceItem wsItem = workspace.getItem(folderId);
|
|
|
|
|
|
|
|
if(!isASharedFolder(wsItem, false))
|
|
|
|
return "OWNER";
|
|
|
|
else //IS A SHARED FOLDER
|
|
|
|
return wsItem.getACLUser().toString();
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("Error in server get UserACLForFolderId", e);
|
|
|
|
String error = "An error occurred when getting ACL rules for selected folder. "+e.getMessage();
|
|
|
|
throw new Exception(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Checks if is a shared folder.
|
|
|
|
*
|
|
|
|
* @param item the item
|
|
|
|
* @param asRoot the as root
|
|
|
|
* @return true, if is a shared folder
|
|
|
|
*/
|
|
|
|
private boolean isASharedFolder(WorkspaceItem item, boolean asRoot){
|
|
|
|
try {
|
|
|
|
|
|
|
|
if(item!=null && item.isFolder() && item.isShared()){ //IS A SHARED SUB-FOLDER
|
|
|
|
if(asRoot)
|
|
|
|
return item.getType().equals(WorkspaceItemType.SHARED_FOLDER); //IS ROOT?
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}catch(Exception e){
|
|
|
|
_log.error("Error in server isASharedFolder", e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2015-07-10 11:57:39 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService#getFormattedSizeByItemId(java.lang.String, org.gcube.portlets.widgets.wsexplorer.shared.SizeFormatter)
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public String getReadableSizeByItemId(String itemId) throws Exception {
|
|
|
|
|
|
|
|
try{
|
|
|
|
_log.info("getFormattedSize ByItemId "+ itemId);
|
|
|
|
long size = getSizeByItemId(itemId);
|
|
|
|
return readableFileSize(size);
|
|
|
|
} catch (Exception e) {
|
|
|
|
_log.error("getFormattedSize By ItemId ", e);
|
|
|
|
throw new Exception(e.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static String readableFileSize(long size) {
|
|
|
|
if(size < 0) return "Unknown";
|
|
|
|
if(size == 0) return "Empty";
|
|
|
|
final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
|
|
|
|
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
|
2015-07-10 15:25:42 +02:00
|
|
|
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups))+units[digitGroups];
|
2015-07-10 11:57:39 +02:00
|
|
|
}
|
2015-06-24 15:16:13 +02:00
|
|
|
}
|