workspace-explorer/src/main/java/org/gcube/portlets/widgets/wsexplorer/server/WorkspaceExplorerServiceImp...

249 lines
8.2 KiB
Java

package org.gcube.portlets.widgets.wsexplorer.server;
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;
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;
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
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;
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.
*/
@SuppressWarnings("serial")
public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implements WorkspaceExplorerService {
public static final Logger _log = LoggerFactory.getLogger(WorkspaceExplorerServiceImpl.class);
public static final String USERNAME_ATTRIBUTE = "username";
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";
user = "francesco.mangiacrapa";
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);
}
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...");
WorkspaceFolder specials = workspace.getMySpecialFolders();
WorkspaceItem root = workspace.getRoot();
_log.trace("GetRoot - Replyiing root");
long startTime = System.currentTimeMillis();
_log.trace("start time - " + startTime);
Item rootItem = ItemBuilder.getItem(null, root, showableTypes, filterCriteria, 2);
Item specialFolders = ItemBuilder.getItem(null, specials, showableTypes, filterCriteria, 2);
specialFolders.setShared(true);
rootItem.addChild(specialFolders);
if(rootItem==null)
_log.trace("############ rootItem null");
_log.trace("Only showable types:");
//printName("", rootItem);
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);
//printName("", rootItem);
Collections.sort(rootItem.getChildren(), new ItemComparator());
return rootItem;
} catch (Exception e) {
_log.error("Error during root retrieving", e);
throw new WorkspaceNavigatorServiceException(e.getMessage());
}
}
/**
* {@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);
Item folderItem = ItemBuilder.getItem(null, folder, showableTypes, filterCriteria, 2);
_log.trace("Only showable types:");
//printName("", folderItem);
if (purgeEmpyFolders) folderItem = ItemBuilder.purgeEmptyFolders(folderItem);
_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(folderItem.getChildren(), new ItemComparator());
return folderItem;
} catch (Exception e) {
_log.error("Error during folder retrieving", e);
throw new WorkspaceNavigatorServiceException(e.getMessage());
}
}
/**
* {@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);
}
}*/
/**
* Gets the list parents by item identifier.
*
* @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
public List<Item> getListParentsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception {
/*List<Item> listParents = new ArrayList<Item>();
_log.trace("get List Parents By Item Identifier "+ itemIdentifier);
try {
Workspace workspace = getWorkspace();
WorkspaceItem wsItem = workspace.getItem(itemIdentifier);
_log.trace("workspace retrieve item name: "+wsItem.getName());
String nameSpecialFolder = getNameForSpecialFolder();
if(includeItemAsParent==true && wsItem.getType().equals(WorkspaceItemType.FOLDER)){
listParents.add(builder.buildGXTFolderModelItemHandleSpecialFolder((WorkspaceFolder) wsItem, null, nameSpecialFolder));
}
while(wsItem!=null && wsItem.getParent()!=null){
WorkspaceFolder wsFolder = wsItem.getParent();
listParents.add(builder.buildGXTFolderModelItemHandleSpecialFolder(wsFolder, null, nameSpecialFolder));
wsItem = wsFolder;
}
Collections.reverse(listParents);
//SET PARENTS
for(int i=0; i<listParents.size()-1; i++){
Item parent = listParents.get(i);
Item fileModel = listParents.get(i+1);
fileModel.setParentFileModel(parent);
}
_log.trace("list parents return size: "+listParents.size());
} catch (Exception e) {
_log.error("Error in get List Parents By Item Identifier ", e);
e.printStackTrace();
throw new Exception(e.getMessage());
}
return listParents;
*/
return null;
}
}