249 lines
8.2 KiB
Java
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;
|
|
}
|
|
}
|