workspace-uploader/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderWsUtil.java

161 lines
5.7 KiB
Java

package org.gcube.portlets.widgets.workspaceuploader.server;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.gcube.common.portal.PortalContext;
import org.gcube.common.storagehub.model.types.WorkspaceItemType;
import org.gcube.common.storagehubwrapper.server.StorageHubWrapper;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.server.util.WsUtil;
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The server side implementation of the RPC service.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jan 7, 2016
*/
@SuppressWarnings("serial")
public class WorkspaceUploaderWsUtil extends HttpServlet {
public static Logger logger = LoggerFactory.getLogger(WorkspaceUploaderWsUtil.class);
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String folderParentId = request.getParameter(ConstantsWorkspaceUploader.FOLDER_PARENT_ID);
String itemName = request.getParameter(ConstantsWorkspaceUploader.ITEM_NAME);
String currGroupId = request.getParameter(ConstantsWorkspaceUploader.CURR_GROUP_ID);
//String currUserId = req.getParameter(ConstantsWorkspaceUploader.CURR_USER_ID);
logger.debug("folderParentId: "+folderParentId);
logger.debug("itemName: "+itemName);
logger.debug("currGroupId: "+currGroupId);
if(currGroupId==null || currGroupId.isEmpty())
sendError(response, "Parameter error: currGroupId is null or empty");
//logger.debug("currUserId: "+currUserId);
try {
Workspace wa = null;
//GCubeUser currUser;
try {
GCubeUser user = PortalContext.getConfiguration().getCurrentUser(request);
StorageHubWrapper storageWrapper = WsUtil.getStorageHubWrapper(request, currGroupId, user);
wa = storageWrapper.getWorkspace();
} catch (Exception e) {
logger.error("Error during workspace retrieving", e);
sendError(response, "An error occurred during item exists check");
}
String itemId = itemExistsInWorkpaceFolder(wa, folderParentId, itemName);
sendOKMessage(response, itemId);
}
catch (Exception e) {
logger.error("An error occurred during item exists check",e);
sendError(response, "An error occurred during item exists check");
}
}
/**
* Item exists in workpace folder.
*
* @param currGroupId the curr group id
* @param req the req
* @param parentId the parent id
* @param itemName the item name
* @return the string
* @throws Exception the exception
*/
public String itemExistsInWorkpaceFolder(Workspace workspace, String parentId, String itemName) throws Exception {
logger.trace("get itemExistsInWorkpace for name: "+itemName+", by parentId: "+parentId);
try {
// //IN THIS CASE THE SESSION EXPIRED IS MANAGED BY UPLOAD SERVLET
// if(gcubeUser==null)
// return null;
WorkspaceItem wsItem = workspace.getItem(parentId); //GET PARENT
if(wsItem.getType().equals(WorkspaceItemType.FOLDER) || wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){
List<WorkspaceItem> foundItems = workspace.find(itemName, parentId);
logger.debug("Is item: "+itemName+", existing in parentId: "+parentId +"? "+foundItems);
if(foundItems!=null && foundItems.size()>0)
return foundItems.get(0).getId();
else
return null;
}else
throw new Exception("Invalid Folder parent");
} catch (Exception e) {
String error = "Sorry an error occurred when searching item id, please refresh and try again";
logger.error(error, e);
throw new Exception(e.getMessage());
}
}
/**
* Send error.
*
* @param response the response
* @param message the message
* @throws IOException Signals that an I/O exception has occurred.
*/
protected void sendError(HttpServletResponse response, String message) throws IOException{
try {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write(message);
//5.6 Closure of Response Object:
//When a response is closed, the container must immediately flush all remaining content in the response buffer to the client
// response.flushBuffer();
} catch (IOException e){
logger.warn("IOException class name: "+e.getClass().getSimpleName());
if (e.getClass().getSimpleName().equals("ClientAbortException"))
logger.warn("Skipping ClientAbortException: "+e.getMessage());
else
throw e; //Sending Exceptions
}
}
/**
* Send message.
*
* @param response the response
* @param message the message
* @throws IOException Signals that an I/O exception has occurred.
*/
protected void sendOKMessage(HttpServletResponse response, String message) throws IOException{
try {
response.setStatus(HttpServletResponse.SC_OK);
if(message==null)
message="null";
response.getWriter().write(message);
//5.6 Closure of Response Object:
//When a response is closed, the container must immediately flush all remaining content in the response buffer to the client
// response.flushBuffer();
} catch (IOException e){
logger.warn("IOException class name: "+e.getClass().getSimpleName());
if (e.getClass().getSimpleName().equals("ClientAbortException"))
logger.warn("Skipping ClientAbortException: "+e.getMessage());
else
throw e; //Sending Exceptions
}
}
}