diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java index 6e80463..c9bcd47 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java @@ -95,6 +95,8 @@ import org.gcube.portlets.user.workspace.client.model.SubTree; import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService; import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceServiceAsync; import org.gcube.portlets.user.workspace.client.util.PollingWorkspace; +import org.gcube.portlets.user.workspace.client.util.RequestBuilderWorkspaceValidateItem; +import org.gcube.portlets.user.workspace.client.util.WindowOpenParameter; import org.gcube.portlets.user.workspace.client.view.BasicDNDExample; import org.gcube.portlets.user.workspace.client.view.ExplorerPanel; import org.gcube.portlets.user.workspace.client.view.sharing.DialogShareFolder; @@ -109,9 +111,9 @@ import org.gcube.portlets.user.workspace.client.view.windows.DialogText; import org.gcube.portlets.user.workspace.client.view.windows.DialogUpload; import org.gcube.portlets.user.workspace.client.view.windows.DialogWebDavUrl; import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplay; +import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplayMessage; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxConfirm; -import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxInfo; import org.gcube.portlets.user.workspace.client.view.windows.WindowImagePreview; import org.gcube.portlets.user.workspace.client.view.windows.WindowOpenUrl; import org.gcube.portlets.user.workspace.client.view.windows.accounting.WindowAccountingInfo; @@ -132,6 +134,7 @@ import com.extjs.gxt.ui.client.widget.Info; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HasWidgets; @@ -167,6 +170,10 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } public GWTWorkspaceServiceAsync getRpcWorkspaceService() { + + + + return rpcWorkspaceService; } @@ -331,7 +338,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } else{//ITEM IS NOT SHAREABLE - new MessageBoxInfo("Info", "The selected item is not shareable because an ancestor item is already shared"); + new InfoDisplayMessage("Info", "The selected item is not shareable because an ancestor item is already shared"); } @@ -764,14 +771,53 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public void onFileDownloadEvent(FileDownloadEvent fileDownloadEvent) { if(fileDownloadEvent.getItemIdentifier()!=null){ - if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ - if(fileDownloadEvent.getItemName()!= null) - com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); - } - else - com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); +// if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ +// if(fileDownloadEvent.getItemName()!= null) +// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); +// } +// else +// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); +// + + if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ + if(fileDownloadEvent.getItemName()!= null){ + + try { + new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET, ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, "id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", "_self", downloadHandlerCallback); + + } catch (Exception e) { + explorerPanel.getAsycTreePanel().unmask(); + new MessageBoxAlert("Error", e.getMessage(), null); + explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); + } + + } +// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); + } else{ + + try { + new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, "id="+fileDownloadEvent.getItemIdentifier(), "_self", downloadHandlerCallback); + } catch (Exception e) { + explorerPanel.getAsycTreePanel().unmask(); + new MessageBoxAlert("Error", e.getMessage(), null); + explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); + } + } +// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); + +// if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ +// if(fileDownloadEvent.getItemName()!= null){ +// +// new DialogDownload(fileDownloadEvent.getItemName(), "_blank", fileDownloadEvent.getItemIdentifier(), true).submitForm(); +// } +// +// }else{ +// +// new DialogDownload("", "_self", fileDownloadEvent.getItemIdentifier(), false).submitForm(); +// } +// + - FileModel file = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(fileDownloadEvent.getItemIdentifier()); if(file!=null){ //FILE CAN NOT LOADED IN TREE @@ -1033,7 +1079,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); - new MessageBoxAlert("Error", caught.getMessage()+".", null); + new MessageBoxAlert("Error", caught.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @@ -1945,6 +1991,20 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } } + public AsyncCallback downloadHandlerCallback = new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + explorerPanel.getAsycTreePanel().unmask(); + new MessageBoxAlert("Error", caught.getMessage(), null); + explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); + } + + @Override + public void onSuccess(WindowOpenParameter windowOpenParam) { + com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?"+windowOpenParam.getParameters(), windowOpenParam.getOption(), ""); + } + }; @Override /** @@ -1969,4 +2029,5 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt // deselecteCurrentSelection(); explorerPanel.getAsycTreePanel().setSearch(isSearch); } + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java index bcda392..2f17b50 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java @@ -189,8 +189,14 @@ public class ConstantsExplorer { public static final String GET_SEARCH_PARAMETER ="search"; public static final String GET_ITEMID_PARAMETER ="itemid"; public static final String GET_OPEARATION_PARAMETER ="operation"; - public static enum WsPortletInitOperation {sharelink, gotofolder}; //DEFAULT OPERATION IS GOTOFOLDER + public static enum WsPortletInitOperation {sharelink, gotofolder}; //INIT OPERATIONS + //DEFAULT INIT OPERATION + public static final WsPortletInitOperation DEFAULT_OPERATION = WsPortletInitOperation.gotofolder; public enum ViewSwitchType {Tree, SmartFolder, Messages}; + //SERLVET ERROR + public static final String ERROR_ITEM_DOES_NOT_EXIST = "Item does not exist. It may have been deleted by another user"; + public static final String VALIDATEITEM = "validateitem"; + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/util/RequestBuilderWorkspaceValidateItem.java b/src/main/java/org/gcube/portlets/user/workspace/client/util/RequestBuilderWorkspaceValidateItem.java new file mode 100644 index 0000000..706495b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/util/RequestBuilderWorkspaceValidateItem.java @@ -0,0 +1,103 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.client.util; + +import org.gcube.portlets.user.workspace.client.ConstantsExplorer; +import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplayMessage; +import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; + +import com.google.gwt.http.client.Request; +import com.google.gwt.http.client.RequestBuilder; +import com.google.gwt.http.client.RequestCallback; +import com.google.gwt.http.client.RequestException; +import com.google.gwt.http.client.Response; +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jun 24, 2013 + * + */ +public class RequestBuilderWorkspaceValidateItem { + + /** + * + */ + protected static final int TIME_INFO_DISPLAY = 1500; //milliseconds + private AsyncCallback callback; + private String parameters; + + /** + * + * @param method + * @param servletName the name of the servlet that must be called + * @param params param=value¶m1=value1&... + * @param name the name of the window (e.g. "_blank") + * @param callback + * @throws Exception + */ + public RequestBuilderWorkspaceValidateItem(RequestBuilder.Method method, String servletName, final String params, final String name, final AsyncCallback callback) throws Exception{ + + this.callback = callback; + + this.parameters = params; + + if(servletName==null) + return; + + servletName = servletName.isEmpty()?"/":servletName; + + if(!servletName.contains("/")) + servletName+="/"+servletName; + + if(parameters==null) + parameters = ConstantsExplorer.VALIDATEITEM+"=true"; + else + parameters +="&"+ConstantsExplorer.VALIDATEITEM+"=true"; + + RequestBuilder requestBuilder = new RequestBuilder(method, servletName+"?"+parameters); + new InfoDisplayMessage("Download", "Requesting...", TIME_INFO_DISPLAY); + try { + + requestBuilder.sendRequest(params, new RequestCallback() { + + @Override + public void onResponseReceived(Request request, Response response) { + + int status = response.getStatusCode(); + +// System.out.println("status code is "+status); + + if(!(status==200) && !(status==202)){ //NOT IS STATUS SC_ACCEPTED + handleError("Sorry, an error occurred on retriving item, "+response.getText()); //ERROR STATUS + + }else{ //OK STATUS + + if(callback!=null) + callback.onSuccess(new WindowOpenParameter(name, "", params)); + } + } + + @Override + public void onError(Request request, Throwable exception) { + +// System.out.println("exception message is "+exception.getMessage()); + handleError(exception.getMessage()); + } + }); + + } catch (RequestException e) { + throw new Exception("An error occured on send request"); + } + } + + public void handleError(String message){ + + if(callback!=null) + callback.onFailure(new Exception(message)); + else + new MessageBoxAlert("Error", message, null); + + } +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/util/WindowOpenParameter.java b/src/main/java/org/gcube/portlets/user/workspace/client/util/WindowOpenParameter.java new file mode 100644 index 0000000..7ba9cc6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/util/WindowOpenParameter.java @@ -0,0 +1,66 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.client.util; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jun 25, 2013 + * + */ +public class WindowOpenParameter { + + String option; + String parameters; + String itemName; + + /** + * + */ + public WindowOpenParameter() { + } + + + /** + * + * @param option the name of the window (e.g. "_blank") + * @param itemName + * @param parameters param=value¶m1=value1&... + */ + public WindowOpenParameter(String option, String itemName, String parameters) { + super(); + this.option = option; + this.itemName = itemName; + this.parameters = parameters; + } + + + public String getParameters() { + return parameters; + } + + public void setParameters(String parameters) { + this.parameters = parameters; + } + + public String getOption() { + return option; + } + + public void setOption(String option) { + this.option = option; + } + + + public String getItemName() { + return itemName; + } + + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java index 69ccd44..cc00555 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java @@ -5,6 +5,7 @@ import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEvent; import org.gcube.portlets.user.workspace.client.model.FileModel; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; @@ -95,6 +96,7 @@ public class DialogUpload extends Window { isStatusCompleted = true; + // Log.trace("onSubmitComplete"); String result = event.getResultHtml(); @@ -125,7 +127,7 @@ public class DialogUpload extends Window { // com.google.gwt.user.client.Window.alert(result); // com.google.gwt.user.client.Window.alert("Stripped: " + strippedResult); - final UploadResultMessage resultMessage = UploadResultMessage.parseResult(strippedResult); + final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult); switch (resultMessage.getStatus()) { case ERROR: @@ -142,7 +144,7 @@ public class DialogUpload extends Window { Timer t = new Timer() { public void run() { AppControllerExplorer.getEventBus().fireEvent(new CompletedFileUploadEvent(parent, null)); - new MessageBoxInfo("Upload completed successfully", resultMessage.getMessage(), null); + new InfoDisplayMessage("Upload completed successfully", resultMessage.getMessage()); } }; @@ -268,7 +270,7 @@ public class DialogUpload extends Window { @Override public void onFailure(Throwable caught) { - Info.display("Error", "Sorry an error occurred on the server "+caught.getMessage() + ". Please try again later"); + Info.display("Error", caught.getMessage()); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/InfoDisplayMessage.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/InfoDisplayMessage.java new file mode 100644 index 0000000..2f6b34b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/InfoDisplayMessage.java @@ -0,0 +1,30 @@ +package org.gcube.portlets.user.workspace.client.view.windows; + + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jun 25, 2013 + * + */ +public class InfoDisplayMessage extends InfoDisplay{ + + + /** + * @param title + * @param text + */ + public InfoDisplayMessage(String title, String text) { + super(title, text); + } + + /** + * @param title + * @param text + */ + public InfoDisplayMessage(String title, String text, int milliseconds) { + super(title, text, milliseconds); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/MessageBoxInfo.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/MessageBoxInfo.java deleted file mode 100644 index b9c77fc..0000000 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/MessageBoxInfo.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.gcube.portlets.user.workspace.client.view.windows; - -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.event.MessageBoxEvent; -import com.extjs.gxt.ui.client.widget.MessageBox; - -public class MessageBoxInfo { - - private MessageBox box = null; - - public MessageBoxInfo(String title, String msg) { - InfoDisplay.display(title, msg); - } - - public MessageBoxInfo(String title, String msg, Listener listener){ - InfoDisplay.display(title, msg); - } - - public MessageBox getMessageBoxConfirm(){ - return box; - } -} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/CopyOfDownloadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/CopyOfDownloadServlet.java new file mode 100644 index 0000000..384a10e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/server/CopyOfDownloadServlet.java @@ -0,0 +1,595 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.server; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringReader; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.gcube.common.core.scope.GCUBEScope; +import org.gcube.common.core.utils.logging.GCUBELog; +import org.gcube.portlets.user.homelibrary.home.HomeLibrary; +import org.gcube.portlets.user.homelibrary.home.exceptions.InternalErrorException; +import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceFolder; +import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.ExternalResourceBrokenLinkException; +import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.ExternalResourcePluginNotFoundException; +import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.ItemNotFoundException; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.FolderItem; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.AquaMapsItem; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ExternalFile; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ExternalImage; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ExternalResourceLink; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ExternalUrl; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.Query; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.Report; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ReportTemplate; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Document; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Metadata; +import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ts.TimeSeries; +import org.gcube.portlets.user.homelibrary.util.Extensions; +import org.gcube.portlets.user.homelibrary.util.MimeTypeUtil; +import org.gcube.portlets.user.homelibrary.util.zip.ZipUtil; +import org.gcube.portlets.user.workspace.server.util.WsUtil; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; + +/** + * @author Federico De Faveri defaveri@isti.cnr.it + * + */ +public class CopyOfDownloadServlet extends HttpServlet{ + + private static final long serialVersionUID = -8423345575690165644L; + + + + + /** + * {@inheritDoc} + */ + @Override + public void init() throws ServletException { + super.init(); + System.out.println("Workspace DownloadServlet ready."); + } + + + + + public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + + String itemId = req.getParameter("id"); + boolean viewContent = (req.getParameter("viewContent")==null)?false:req.getParameter("viewContent").equals("true"); + + System.out.println("FILE REQUEST "+itemId); + + Workspace wa = null; + try { + wa = WsUtil.getWorkspace(req.getSession()); + } catch (Exception e) { + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during workspace retrieving"); + return; + } + + if (wa == null) { + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no workspace in session"); + return; + } + + GCUBELog logger = WsUtil.getLogger(wa); + + WorkspaceItem item; + try { + item = wa.getItem(itemId); + + + try{ + //ACCOUNTING + item.markAsRead(true); + + } catch (InternalErrorException e) { + logger.error("Requested item "+itemId+" has trow an internal error exception",e); + } + + } catch (ItemNotFoundException e) { + logger.error("Requested item "+itemId+" not found",e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no items found"); + return; + } + + switch (item.getType()) { + + case SHARED_FOLDER: + case FOLDER:{ + try { + File tmpZip = ZipUtil.zipFolder((WorkspaceFolder) item); + resp.setHeader( "Content-Disposition", "attachment; filename=\"" + item.getName() + ".zip\"" ); + resp.setContentType("application/zip"); + resp.setContentLength((int) tmpZip.length()); + OutputStream out = resp.getOutputStream(); + + //MODIFIED 22-05-2013 CLOSE STREAM +// IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream()); + + FileInputStream fileTmpZip = new FileInputStream(tmpZip); + IOUtils.copy(fileTmpZip, resp.getOutputStream()); + fileTmpZip.close(); + + out.close(); + tmpZip.delete(); + return; + + } catch (InternalErrorException e) { + logger.error("Error during folder compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during folder compression: "+e.getMessage()); + return; + } + } + case FOLDER_ITEM:{ + FolderItem folderItem = (FolderItem) item; + + switch (folderItem.getFolderItemType()) { + case REPORT_TEMPLATE:{ + try{ + ReportTemplate reportTemplate = (ReportTemplate)folderItem; + String itemName = item.getName() + "." + Extensions.REPORT_TEMPLATE.getValue(); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + + resp.setContentType("application/zip"); + resp.setContentLength((int) reportTemplate.getLength()); + OutputStream out = resp.getOutputStream(); + + //MODIFIED 22-05-2013 CLOSE STREAM +// IOUtils.copy(reportTemplate.getData(), resp.getOutputStream()); + InputStream is = reportTemplate.getData(); + IOUtils.copy(is, resp.getOutputStream()); + is.close(); + + out.close(); + } catch (InternalErrorException e) { + logger.error("Error during external item sending "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + return; + + } + case REPORT:{ + try{ + Report report = (Report)folderItem; + + String itemName = item.getName() + "." + Extensions.REPORT.getValue(); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + + resp.setContentType("application/zip"); + resp.setContentLength((int) report.getLength()); + OutputStream out = resp.getOutputStream(); + + //MODIFIED 22-05-2013 CLOSE STREAM +// IOUtils.copy(report.getData(), resp.getOutputStream()); + InputStream is = report.getData(); + IOUtils.copy(is, resp.getOutputStream()); + is.close(); + + out.close(); + } catch (InternalErrorException e) { + logger.error("Error during external item sending "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + return; + + } + case EXTERNAL_PDF_FILE: + case EXTERNAL_FILE:{ + + InputStream is = null; + OutputStream out = null; + try{ + ExternalFile externalFile = (ExternalFile)folderItem; + + String mimeType = externalFile.getMimeType(); + + logger.trace("EXTERNAL_FILE DOWNLOAD FOR "+externalFile.getId()); + //COMMENTED 26/03/2013 +// String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); + + String contentDisposition = (viewContent)?"inline":"attachment"; + //COMMENTED 26/03/2013 +// resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + "\"" ); + resp.setContentType(mimeType); + + resp.setContentLength((int) externalFile.getLength()); + + + //MODIFIED 22-05-2013 CLOSE STREAM +// IOUtils.copy(externalFile.getData(), resp.getOutputStream()); + is = externalFile.getData(); + out = resp.getOutputStream(); + IOUtils.copy(is, out); + + is.close(); + out.close(); + + } catch (InternalErrorException e) { + logger.error("Error during external item sending "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + return; + + } + case EXTERNAL_IMAGE:{ + + try{ + ExternalImage externalImage = (ExternalImage)folderItem; + + String mimeType = externalImage.getMimeType(); + String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + resp.setContentType(externalImage.getMimeType()); + + resp.setContentLength((int) externalImage.getLength()); + + //MODIFIED 22-05-2013 CLOSE STREAM +// IOUtils.copy(externalImage.getData(), resp.getOutputStream()); + OutputStream out = resp.getOutputStream(); + InputStream is = externalImage.getData(); + IOUtils.copy(is, out); + is.close(); + + out.close(); + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + } + case EXTERNAL_URL:{ + try{ + ExternalUrl externalUrl = (ExternalUrl)folderItem; + + //ADDED 20/06/2013 + String itemName = MimeTypeUtil.getNameWithExtension(externalUrl.getName(), "text/uri-list"); + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + +// //ADDED 20/06/2013 +// String itemName = externalUrl.getName() + ".uri"; +// String contentDisposition = (viewContent)?"inline":"attachment"; +// resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + + resp.setContentType("text/uri-list"); + resp.setContentLength((int) externalUrl.getLength()); + + //MODIFIED 22-05-2013 CLOSE STREAM + StringReader sr = new StringReader(externalUrl.getUrl()); + OutputStream out = resp.getOutputStream(); + IOUtils.copy(sr, out); + + sr.close(); + out.close(); + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + } + case QUERY:{ + + Query query = (Query)folderItem; + resp.setContentType("text/plain"); + try { + resp.setContentLength((int) query.getLength()); + } catch (InternalErrorException e) { + logger.error("Error getting item lenght "+query,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + StringReader sr = new StringReader(query.getQuery()); + IOUtils.copy(sr, out); + sr.close(); + + out.close(); + return; + + } + case TIME_SERIES:{ + try{ + TimeSeries ts = (TimeSeries)folderItem; + File tmpZip = ZipUtil.zipTimeSeries(ts); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + ".zip\"" ); + + resp.setContentType("application/zip"); + resp.setContentLength((int) tmpZip.length()); + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + FileInputStream fileTmpZip = new FileInputStream(tmpZip); + IOUtils.copy(fileTmpZip, out); + fileTmpZip.close(); + + out.close(); + tmpZip.delete(); + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + } + case AQUAMAPS_ITEM:{ + try{ + AquaMapsItem aquamaps = (AquaMapsItem)folderItem; + File tmpZip = ZipUtil.zipAquaMapsItem(aquamaps); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + ".zip\"" ); + + resp.setContentType("application/zip"); + resp.setContentLength((int) tmpZip.length()); + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + FileInputStream fileTmpZip = new FileInputStream(tmpZip); + IOUtils.copy(fileTmpZip, out); + fileTmpZip.close(); + + out.close(); + tmpZip.delete(); + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + } + case IMAGE_DOCUMENT: + case PDF_DOCUMENT: + case URL_DOCUMENT: + case DOCUMENT:{ + try{ + Document document = (Document)item; + + + if (!viewContent){ + File tmpZip = ZipUtil.zipDocument(document); + + resp.setHeader( "Content-Disposition", "attachment; filename=\"" + item.getName() + ".zip\"" ); + resp.setContentType("application/zip"); + resp.setContentLength((int) tmpZip.length()); + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + FileInputStream fileTmpZip = new FileInputStream(tmpZip); + IOUtils.copy(fileTmpZip, out); + fileTmpZip.close(); + + out.close(); + tmpZip.delete(); + } + else{ + String mimeType = document.getMimeType(); + String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); + resp.setHeader( "Content-Disposition", "inline; filename=\"" + itemName + "\"" ); + resp.setContentType(document.getMimeType()); + resp.setContentLength((int) document.getLength()); + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + InputStream is = document.getData(); + IOUtils.copy(is, out); + is.close(); + + out.close(); + } + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + } + + case METADATA:{ + try{ + Metadata document = (Metadata)item; + + resp.setContentType("text/html"); + resp.setContentLength((int) document.getLength()); + + //MODIFIED 22-05-2013 CLOSE STREAM + OutputStream out = resp.getOutputStream(); + StringReader sr = new StringReader(document.getData()); + IOUtils.copy(sr, out); + sr.close(); + + out.close(); + + return; + } catch (InternalErrorException e) { + logger.error("Error during item compression "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } + + + } + + case EXTERNAL_RESOURCE_LINK:{ //IT'S SAME OF EXTERNAL FILE + + try{ + ExternalResourceLink externalResourceLink = (ExternalResourceLink) folderItem; + OutputStream out = resp.getOutputStream(); + + try { + String mimeType = externalResourceLink.getMimeType(); + if(mimeType == null){ + System.out.println("mimeType is null... recover from MimeTypeUtil by BufferedInputStream"); + + BufferedInputStream bufferedStream = new BufferedInputStream(externalResourceLink.getData(), (int) externalResourceLink.getLength()); + mimeType = MimeTypeUtil.getMimeType(bufferedStream); + } + + System.out.println("setContentType with mimeType " + mimeType); + String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); + + String contentDisposition = (viewContent)?"inline":"attachment"; + resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); + resp.setContentType(mimeType); + + + System.out.println("resoure link lenght: " +externalResourceLink.getLength()); + + resp.setContentLength((int) externalResourceLink.getLength()); + + if(externalResourceLink.getData()!=null){ + System.out.println("Input stream is not null"); + + //MODIFIED 22-05-2013 CLOSE STREAM + InputStream eris = externalResourceLink.getData(); + IOUtils.copy(eris, resp.getOutputStream()); + eris.close(); + } + else{ + logger.error("Input stream is null "+itemId); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during inpunt stream retrieving, it's null"); + } + + } catch (ExternalResourceBrokenLinkException e) { + logger.error("Error during link resource retrieving "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during link retrieving, link broken!: "+e.getMessage()); + } catch (ExternalResourcePluginNotFoundException e) { + logger.error("Error during link resource retrieving "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during link retrieving, plugin not found!: "+e.getMessage()); + } + out.close(); + } catch (InternalErrorException e) { + logger.error("Error during external item sending "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + return; + } catch (Exception e) { + logger.error("Error during resource retrieving "+itemId,e); + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during resource retrieving, plugin not found!: "+e.getMessage()); + e.printStackTrace(); + } + + + return; + + + + } + } + + } + } + + resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving"); + return; + + } + + 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 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 sendWarnMessage(HttpServletResponse response, String message) throws IOException + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); + response.getWriter().write(resultMessage.toString()); + response.flushBuffer(); + } + + public static void main(String[] args) { + + InputStream is = null; + + System.out.println("start"); + +// is = GCUBEStorage.getRemoteFile("/Home/test.user/Workspace3d660604-03ef-49eb-89c3-4c73f8a47914"); + + try{ + + Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome("francesco.mangiacrapa", GCUBEScope.getScope("/gcube/devsec")).getWorkspace(); +// +// ExternalFile f = (ExternalFile) ws.getItem("907ce8ef-5c0b-4601-83ac-215d1f432f6b"); + + WorkspaceItem wsItem = ws.getItem("907ce8ef-5c0b-4601-83ac-215d1f432f6b"); + + + System.out.println("metadata info recovered from HL: [ID: "+wsItem.getId() +", name: "+wsItem.getName()+"]"); + + + + + FileOutputStream out = new FileOutputStream(new File("/tmp/bla")); +// byte[] buffer = new byte[1024]; +// int len; +// while ((len = is.read(buffer)) != -1) { +// out.write(buffer, 0, len); +// } + + System.out.println("cast as external file"); + ExternalFile f = (ExternalFile) wsItem; + + is = f.getData(); + + IOUtils.copy(is, out); + is.close(); + + out.close(); + +// System.out.println("Sleeping"); +// Thread.sleep(20000); +// System.out.println("Alive"); + + System.out.println("end"); + }catch (Exception e) { + e.printStackTrace(); + } + + + + } +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java index d5e309a..82082fc 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java @@ -40,11 +40,12 @@ import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ReportTem import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Document; import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Metadata; import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.ts.TimeSeries; -import org.gcube.portlets.user.homelibrary.jcr.repository.external.GCUBEStorage; import org.gcube.portlets.user.homelibrary.util.Extensions; import org.gcube.portlets.user.homelibrary.util.MimeTypeUtil; import org.gcube.portlets.user.homelibrary.util.zip.ZipUtil; +import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.server.util.WsUtil; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; /** * @author Federico De Faveri defaveri@isti.cnr.it @@ -54,6 +55,7 @@ public class DownloadServlet extends HttpServlet{ private static final long serialVersionUID = -8423345575690165644L; + protected static GCUBELog logger = new GCUBELog(DownloadServlet.class); @@ -63,7 +65,7 @@ public class DownloadServlet extends HttpServlet{ @Override public void init() throws ServletException { super.init(); - System.out.println("Workspace DownloadServlet ready."); + logger.trace("Workspace DownloadServlet ready."); } @@ -73,29 +75,42 @@ public class DownloadServlet extends HttpServlet{ String itemId = req.getParameter("id"); boolean viewContent = (req.getParameter("viewContent")==null)?false:req.getParameter("viewContent").equals("true"); - - System.out.println("FILE REQUEST "+itemId); + boolean isValidItem = (req.getParameter(ConstantsExplorer.VALIDATEITEM)==null)?false:req.getParameter(ConstantsExplorer.VALIDATEITEM).equals("true"); + + logger.trace("Input Params [id: "+itemId + ", viewContent: "+viewContent+", "+ConstantsExplorer.VALIDATEITEM +":" +isValidItem+"]"); + + if(itemId==null || itemId.isEmpty()){ + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Item id is null"); + return; + } + + logger.trace("FILE DOWNLOAD REQUEST "+itemId); Workspace wa = null; try { wa = WsUtil.getWorkspace(req.getSession()); } catch (Exception e) { - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during workspace retrieving"); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during workspace retrieving"); return; } if (wa == null) { - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no workspace in session"); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error, no workspace in session"); return; } - GCUBELog logger = WsUtil.getLogger(wa); - WorkspaceItem item; try { + item = wa.getItem(itemId); - + if(isValidItem){ //ADDED 25/06/2013 + String message = HttpServletResponse.SC_ACCEPTED+ ": The resource is available"; + sendMessageContinue(resp, message); + logger.trace("response return: "+message); + return; + } + try{ //ACCOUNTING item.markAsRead(true); @@ -106,7 +121,10 @@ public class DownloadServlet extends HttpServlet{ } catch (ItemNotFoundException e) { logger.error("Requested item "+itemId+" not found",e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no items found"); +// sendError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error, no items found"); + + sendError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": "+ConstantsExplorer.ERROR_ITEM_DOES_NOT_EXIST); + return; } @@ -134,7 +152,7 @@ public class DownloadServlet extends HttpServlet{ } catch (InternalErrorException e) { logger.error("Error during folder compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during folder compression: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during folder compression: "+e.getMessage()); return; } } @@ -163,7 +181,7 @@ public class DownloadServlet extends HttpServlet{ out.close(); } catch (InternalErrorException e) { logger.error("Error during external item sending "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } return; @@ -191,7 +209,7 @@ public class DownloadServlet extends HttpServlet{ out.close(); } catch (InternalErrorException e) { logger.error("Error during external item sending "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } return; @@ -231,7 +249,7 @@ public class DownloadServlet extends HttpServlet{ } catch (InternalErrorException e) { logger.error("Error during external item sending "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } return; @@ -262,7 +280,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } } @@ -293,7 +311,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } } @@ -305,7 +323,7 @@ public class DownloadServlet extends HttpServlet{ resp.setContentLength((int) query.getLength()); } catch (InternalErrorException e) { logger.error("Error getting item lenght "+query,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } @@ -341,7 +359,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } } @@ -367,7 +385,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } } @@ -413,7 +431,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } } @@ -436,7 +454,7 @@ public class DownloadServlet extends HttpServlet{ return; } catch (InternalErrorException e) { logger.error("Error during item compression "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } @@ -452,13 +470,13 @@ public class DownloadServlet extends HttpServlet{ try { String mimeType = externalResourceLink.getMimeType(); if(mimeType == null){ - System.out.println("mimeType is null... recover from MimeTypeUtil by BufferedInputStream"); + logger.trace("mimeType is null... recover from MimeTypeUtil by BufferedInputStream"); BufferedInputStream bufferedStream = new BufferedInputStream(externalResourceLink.getData(), (int) externalResourceLink.getLength()); mimeType = MimeTypeUtil.getMimeType(bufferedStream); } - System.out.println("setContentType with mimeType " + mimeType); + logger.trace("setContentType with mimeType " + mimeType); String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); String contentDisposition = (viewContent)?"inline":"attachment"; @@ -466,12 +484,12 @@ public class DownloadServlet extends HttpServlet{ resp.setContentType(mimeType); - System.out.println("resoure link lenght: " +externalResourceLink.getLength()); + logger.trace("resoure link lenght: " +externalResourceLink.getLength()); resp.setContentLength((int) externalResourceLink.getLength()); if(externalResourceLink.getData()!=null){ - System.out.println("Input stream is not null"); + logger.trace("Input stream is not null"); //MODIFIED 22-05-2013 CLOSE STREAM InputStream eris = externalResourceLink.getData(); @@ -480,24 +498,24 @@ public class DownloadServlet extends HttpServlet{ } else{ logger.error("Input stream is null "+itemId); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during inpunt stream retrieving, it's null"); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during inpunt stream retrieving, it's null"); } } catch (ExternalResourceBrokenLinkException e) { logger.error("Error during link resource retrieving "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during link retrieving, link broken!: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during link retrieving, link broken!: "+e.getMessage()); } catch (ExternalResourcePluginNotFoundException e) { logger.error("Error during link resource retrieving "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during link retrieving, plugin not found!: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during link retrieving, plugin not found!: "+e.getMessage()); } out.close(); } catch (InternalErrorException e) { logger.error("Error during external item sending "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving: "+e.getMessage()); return; } catch (Exception e) { logger.error("Error during resource retrieving "+itemId,e); - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during resource retrieving, plugin not found!: "+e.getMessage()); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during resource retrieving, plugin not found!: "+e.getMessage()); e.printStackTrace(); } @@ -512,16 +530,48 @@ public class DownloadServlet extends HttpServlet{ } } - resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving"); + sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during data retrieving"); return; } + 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 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 sendMessageContinue(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 sendWarnMessage(HttpServletResponse response, String message) throws IOException + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); + response.getWriter().write(resultMessage.toString()); + response.flushBuffer(); + } + public static void main(String[] args) { InputStream is = null; - System.out.println("start"); + logger.trace("start"); // is = GCUBEStorage.getRemoteFile("/Home/test.user/Workspace3d660604-03ef-49eb-89c3-4c73f8a47914"); @@ -534,7 +584,7 @@ public class DownloadServlet extends HttpServlet{ WorkspaceItem wsItem = ws.getItem("907ce8ef-5c0b-4601-83ac-215d1f432f6b"); - System.out.println("metadata info recovered from HL: [ID: "+wsItem.getId() +", name: "+wsItem.getName()+"]"); + logger.trace("metadata info recovered from HL: [ID: "+wsItem.getId() +", name: "+wsItem.getName()+"]"); @@ -546,7 +596,7 @@ public class DownloadServlet extends HttpServlet{ // out.write(buffer, 0, len); // } - System.out.println("cast as external file"); + logger.trace("cast as external file"); ExternalFile f = (ExternalFile) wsItem; is = f.getData(); @@ -556,11 +606,11 @@ public class DownloadServlet extends HttpServlet{ out.close(); -// System.out.println("Sleeping"); +// logger.trace("Sleeping"); // Thread.sleep(20000); -// System.out.println("Alive"); +// logger.trace("Alive"); - System.out.println("end"); + logger.trace("end"); }catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index 81db4e9..e47ab90 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -66,6 +66,11 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; */ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWTWorkspaceService{ + /** + * + */ + + private static final long serialVersionUID = 2828885661214875589L; public static final String LAST_OPEN_FOLDER_ATTRIBUTE = "WORKSPACE.LAST_OPEN_FOLDER"; @@ -610,6 +615,10 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT String error = "An error occurred on deleting item. "+e.getMessage(); throw new Exception(error); + }catch (ItemNotFoundException e) { + String error = "An error occurred on deleting item. "+ConstantsExplorer.ERROR_ITEM_DOES_NOT_EXIST; + workspaceLogger.error(error, e); + throw new Exception(error); } catch (Exception e) { workspaceLogger.error("Error in server Item remove", e); String error = ConstantsExplorer.SERVER_ERROR +" deleting item. "+e.getMessage(); @@ -656,12 +665,17 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT return true; } catch (ItemAlreadyExistException e) { - String error = "An error occurred on copying item, " +e.getMessage(); + String error = "An error occurred on renaming item, " +e.getMessage(); + workspaceLogger.error(error, e); + throw new Exception(error); + }catch (ItemNotFoundException e2) { + String error = "An error occurred on renaming item. "+ConstantsExplorer.ERROR_ITEM_DOES_NOT_EXIST; + workspaceLogger.error(error, e2); throw new Exception(error); - } catch (Exception e) { - workspaceLogger.error(ConstantsExplorer.SERVER_ERROR + " renaming item. "+ConstantsExplorer.TRY_AGAIN, e); - throw new Exception(e.getMessage()); + String error = ConstantsExplorer.SERVER_ERROR + " renaming item. "+ConstantsExplorer.TRY_AGAIN; + workspaceLogger.error(error, e); + throw new Exception(error); } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java index 464590b..f30b26f 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java @@ -40,9 +40,9 @@ import org.gcube.portlets.user.homelibrary.util.Extensions; import org.gcube.portlets.user.homelibrary.util.MimeTypeUtil; import org.gcube.portlets.user.homelibrary.util.WorkspaceUtil; import org.gcube.portlets.user.homelibrary.util.zip.UnzipUtil; -import org.gcube.portlets.user.workspace.client.view.windows.UploadResultMessage; import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil; import org.gcube.portlets.user.workspace.server.util.WsUtil; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; /** * @author Federico De Faveri defaveri@isti.cnr.it @@ -332,7 +332,7 @@ public class UploadServlet extends HttpServlet { protected void sendError(HttpServletResponse response, String message) throws IOException { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - UploadResultMessage resultMessage = UploadResultMessage.errorResult(message); + HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); response.getWriter().write(resultMessage.toString()); response.flushBuffer(); } @@ -340,7 +340,7 @@ public class UploadServlet extends HttpServlet { protected void sendMessage(HttpServletResponse response, String message) throws IOException { response.setStatus(HttpServletResponse.SC_ACCEPTED); - UploadResultMessage resultMessage = UploadResultMessage.okResult(message); + HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); response.getWriter().write(resultMessage.toString()); response.flushBuffer(); } @@ -348,7 +348,7 @@ public class UploadServlet extends HttpServlet { protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException { response.setStatus(HttpServletResponse.SC_ACCEPTED); - UploadResultMessage resultMessage = UploadResultMessage.warnResult(message); + HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); response.getWriter().write(resultMessage.toString()); response.flushBuffer(); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java index 65b05de..e4d16b0 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/notifications/NotificationsUtil.java @@ -9,14 +9,11 @@ import java.util.List; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; -import org.gcube.portlets.user.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.portlets.user.homelibrary.home.exceptions.InternalErrorException; import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceFolder; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItemType; import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceSharedFolder; -import org.gcube.portlets.user.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder; import org.gcube.portlets.user.workspace.server.util.WsUtil; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UploadResultMessage.java b/src/main/java/org/gcube/portlets/user/workspace/shared/HandlerResultMessage.java similarity index 63% rename from src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UploadResultMessage.java rename to src/main/java/org/gcube/portlets/user/workspace/shared/HandlerResultMessage.java index 321b9c5..e4196b8 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UploadResultMessage.java +++ b/src/main/java/org/gcube/portlets/user/workspace/shared/HandlerResultMessage.java @@ -1,14 +1,22 @@ /** * */ -package org.gcube.portlets.user.workspace.client.view.windows; +package org.gcube.portlets.user.workspace.shared; + +import java.io.Serializable; /** * @author Federico De Faveri defaveri@isti.cnr.it - * + * modified by Francesco Mangiacrapa */ -public class UploadResultMessage { +public class HandlerResultMessage implements Serializable{ + /** + * + */ + private static final long serialVersionUID = -4607236625671465107L; + + public enum Status { /** * If an error occurs. @@ -29,19 +37,19 @@ public class UploadResultMessage { UNKNOWN; } - public static UploadResultMessage errorResult(String message){ - return new UploadResultMessage(Status.ERROR, message); + public static HandlerResultMessage errorResult(String message){ + return new HandlerResultMessage(Status.ERROR, message); } - public static UploadResultMessage okResult(String message){ - return new UploadResultMessage(Status.OK, message); + public static HandlerResultMessage okResult(String message){ + return new HandlerResultMessage(Status.OK, message); } - public static UploadResultMessage warnResult(String message){ - return new UploadResultMessage(Status.WARN, message); + public static HandlerResultMessage warnResult(String message){ + return new HandlerResultMessage(Status.WARN, message); } - public static UploadResultMessage parseResult(String result){ + public static HandlerResultMessage parseResult(String result){ //expected 200:Upload complete String statusToken = null; String messageToken = null; @@ -61,7 +69,7 @@ public class UploadResultMessage { String message = (messageToken!=null)?messageToken:""; - return new UploadResultMessage(status, message); + return new HandlerResultMessage(status, message); } @@ -73,7 +81,7 @@ public class UploadResultMessage { * @param status the status. * @param message the message. */ - public UploadResultMessage(Status status, String message) { + public HandlerResultMessage(Status status, String message) { this.status = status; this.message = message; }