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

148 lines
5.3 KiB
Java

package org.gcube.portlets.widgets.workspaceuploader.server;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
import org.gcube.common.homelibrary.home.workspace.Workspace;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
import org.gcube.common.portal.PortalContext;
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 req, HttpServletResponse resp)
throws ServletException, IOException {
String folderParentId = req.getParameter(ConstantsWorkspaceUploader.FOLDER_PARENT_ID);
String itemName = req.getParameter(ConstantsWorkspaceUploader.ITEM_NAME);
String currGroupId = req.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);
//logger.debug("currUserId: "+currUserId);
try {
String itemId = itemExistsInWorkpaceFolder(currGroupId, req, folderParentId, itemName);
sendOKMessage(resp, itemId);
}
catch (Exception e) {
logger.error("An error occurred during item exists check",e);
sendError(resp, "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(String currGroupId, HttpServletRequest req, String parentId, String itemName) throws Exception {
logger.trace("get itemExistsInWorkpace for name: "+itemName+", by parentId: "+parentId);
try {
GCubeUser gcubeUser = PortalContext.getConfiguration().getCurrentUser(req);
//IN THIS CASE THE SESSION EXPIRED IS MANAGED BY UPLOAD SERVLET
if(gcubeUser==null)
return null;
Workspace workspace = WsUtil.getWorkspace(req, currGroupId, gcubeUser);
WorkspaceItem wsItem = workspace.getItem(parentId); //GET PARENT
if(wsItem.getType().equals(WorkspaceItemType.FOLDER) || wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){
WorkspaceItem itemFound = workspace.find(itemName, parentId);
if(itemFound==null){
logger.trace("item: "+itemName+", not exists in parentId: "+parentId);
return null;
}
logger.trace("item: "+itemName+", exists in parentId: "+parentId +", returning id:" +itemFound.getId());
return itemFound.getId();
}
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
}
}
}