From 2d932445747aff9ce2e67e09e3dbe69445625f08 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Wed, 15 Jul 2015 09:59:51 +0000 Subject: [PATCH] Added try/catch to prevent ClientAbortException java.net.SocketException Broken Pipe git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@117251 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../workspace/server/LocalUploadServlet.java | 113 +++++++----------- .../user/workspace/CreateSharedFolder.java | 86 +++++++++++++ .../portlets/user/workspace/ItemRetrieve.java | 23 +++- 3 files changed, 145 insertions(+), 77 deletions(-) create mode 100644 src/test/java/org/gcube/portlets/user/workspace/CreateSharedFolder.java diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java index 54821e4..11767c8 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java @@ -161,13 +161,6 @@ public class LocalUploadServlet extends HttpServlet { return; } - /* - if (file == null) { - logger.error("Error processing request in upload servlet: No file to upload"); - sendError(response, "Internal error: No file to upload"); - return; - }*/ - if (destinationId == null) { logger.error("Error processing request in upload servlet: No destination folder id found"); sendError(response, "Internal error: No destination folder id found"); @@ -221,43 +214,21 @@ public class LocalUploadServlet extends HttpServlet { String contentType = MimeTypeUtil.getMimeType(itemName, new BufferedInputStream(fileUploadIS)); logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName); -// System.out.println("Content type: "+contentType + " unique name: "+itemName); - String extension = FilenameUtils.getExtension(itemName); logger.trace("extension: "+extension); - -// System.out.println("extension: "+extension); - + if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD boolean isZipFile = MimeTypeUtil.isZipContentType(contentType); if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE - -// String newItemName = ""; -// -// if(!isOverwrite) -// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension -// else -// newItemName = item.getName(); - -// System.out.println("itemwithoutext " +itemwithoutext); - + String newItemName = itemName; - logger.trace("createTemplate: "+newItemName); createTemplate(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite); }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT - -// String newItemName = ""; -// -// if(!isOverwrite) -// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension -// else -// newItemName = item.getName(); - -// System.out.println("itemwithoutext " +itemwithoutext); + String newItemName = itemName; logger.trace("createReport: "+newItemName); createReport(request.getSession(), wa, newItemName, openInputStream(file), destinationFolder, response, isOverwrite); @@ -298,11 +269,6 @@ public class LocalUploadServlet extends HttpServlet { } } - -//} catch (IOException e) { -// logger.error("Error creating elements", e); -// sendError(response, "Internal error: "+e.getMessage()); -// return; /** * @@ -336,23 +302,16 @@ public class LocalUploadServlet extends HttpServlet { private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){ new Thread(){ - public void run() { - WorkspaceItem sourceItem; try { sourceItem = workspace.getItem(itemId); String sourceSharedId = sourceItem.getIdSharedFolder(); WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId); - NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite); - - } catch (Exception e) { logger.error("Error in notifyUploadInSharedFolder", e); - } - }; }.start(); @@ -374,7 +333,6 @@ public class LocalUploadServlet extends HttpServlet { if(createdItem!=null){ notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath()); } else @@ -426,7 +384,6 @@ public class LocalUploadServlet extends HttpServlet { report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId()); notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath()); } else{ //CASE OVERWRITE @@ -435,12 +392,10 @@ public class LocalUploadServlet extends HttpServlet { if(rep!=null){ notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); } else sendError(response,"Internal error: Workspace Item Not Found"); - } } catch (WrongDestinationException e) { logger.error("Error creating elements", e); @@ -463,7 +418,6 @@ public class LocalUploadServlet extends HttpServlet { template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId()); notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath()); }else{ //CASE OVERWRITE @@ -472,12 +426,10 @@ public class LocalUploadServlet extends HttpServlet { if(rep!=null){ notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); - sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); } else sendError(response,"Internal error: Workspace Item Not Found"); - } } catch (WrongDestinationException e) { @@ -491,29 +443,48 @@ public class LocalUploadServlet extends HttpServlet { } - protected void sendError(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); + protected void sendError(HttpServletResponse response, String message) throws IOException{ + try { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); + response.getWriter().write(resultMessage.toString()); + 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 + } } - protected void sendMessage(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); + protected void sendMessage(HttpServletResponse response, String message) throws IOException{ + try { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); + response.getWriter().write(resultMessage.toString()); + 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 + } } - protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException - { - response.setStatus(HttpServletResponse.SC_ACCEPTED); - HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); - response.getWriter().write(resultMessage.toString()); - response.flushBuffer(); + protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException{ + try { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); + response.getWriter().write(resultMessage.toString()); + 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 + } } - - } diff --git a/src/test/java/org/gcube/portlets/user/workspace/CreateSharedFolder.java b/src/test/java/org/gcube/portlets/user/workspace/CreateSharedFolder.java new file mode 100644 index 0000000..cbdfa65 --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/workspace/CreateSharedFolder.java @@ -0,0 +1,86 @@ +/** + * + */ +package org.gcube.portlets.user.workspace; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +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.exceptions.UserNotFoundException; +import org.gcube.common.homelibrary.home.workspace.Workspace; +import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; +import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jul 14, 2015 + */ +public class CreateSharedFolder { + + protected static Logger logger = Logger.getLogger(CreateSharedFolder.class); +// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps/EcologicalModelling"; //PRODUCTION + public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV + + public static String USER = "francesco.mangiacrapa"; //PRODUCTION + + public static void main(String[] args) { + + try { + ScopeBean scope = new ScopeBean(DEFAULT_SCOPE); + ScopeProvider.instance.set(scope.toString()); + Workspace workspace = HomeLibrary.getHomeManagerFactory() + .getHomeManager().getHome(USER) + .getWorkspace(); + + String folderName = "Test Folder"; + String desc = "descr"; + List listLogin = new ArrayList(); + + listLogin.add("valentina.marioli"); + listLogin.add("massimiliano.assante"); + + WorkspaceSharedFolder sharedFolder = workspace.createSharedFolder( + folderName, desc, listLogin, workspace.getRoot().getId()); + + if (sharedFolder == null) + System.out.println("shared folder is null"); + + System.out + .println("Shared folder created: " + sharedFolder.getId()); + } catch (InsufficientPrivilegesException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ItemAlreadyExistException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (WrongDestinationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ItemNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (WorkspaceFolderNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InternalErrorException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (HomeNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (UserNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } +} diff --git a/src/test/java/org/gcube/portlets/user/workspace/ItemRetrieve.java b/src/test/java/org/gcube/portlets/user/workspace/ItemRetrieve.java index 948ea1d..b03255c 100644 --- a/src/test/java/org/gcube/portlets/user/workspace/ItemRetrieve.java +++ b/src/test/java/org/gcube/portlets/user/workspace/ItemRetrieve.java @@ -29,12 +29,12 @@ import org.gcube.common.scope.impl.ScopeBean; public class ItemRetrieve { - public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION -// public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV +// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION + public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV public static String TEST_USER = "francesco.mangiacrapa"; // public static String ITEMID = "63832213-098d-42d1-8774-89b6349764c0"; //Activity T3.4 working drafts/T2-EC-IMAR-HO-14-015 iMarine Sustainability WP - Business Model tools.pdf - public static String ITEMID = "ec8bcf91-0969-450e-971c-a273c114d9e4"; - + public static String ITEMID = "d81d3a64-603f-4907-ae74-be8353211807"; +// d81d3a64-603f-4907-ae74-be8353211807 protected static Logger logger = Logger.getLogger(ItemRetrieve.class); @@ -46,9 +46,12 @@ public class ItemRetrieve { System.out.println("init HL"); try { Workspace ws = getWorkspace(); + + retrieveFirstLevel(ws, ITEMID); + System.out.println("get workspace -> OK"); WorkspaceItem item = ws.getItem(ITEMID); - System.out.println("get item -> OK"); + System.out.println("get item id: "+item.getId()+", name: "+item.getName() +", parent: "+item.getParent()); System.out.println(item); }catch(Exception e){ e.printStackTrace(); @@ -82,7 +85,7 @@ public class ItemRetrieve { } - private static void retrieveFirstLevel(Workspace ws){ + private static void retrieveFirstLevel(Workspace ws, String foundID){ try { @@ -109,6 +112,14 @@ public class ItemRetrieve { int othersCounter = 0; for (WorkspaceItem workspaceItem : children) { + if(foundID!=null && !foundID.isEmpty()){ + if(workspaceItem.getId().compareTo(foundID)==0){ + System.out.println("ITEM FOUND id: "+workspaceItem.getId()+", name: "+workspaceItem.getName()); + return; + } + } + + switch (workspaceItem.getType()) { case FOLDER: