#633 Ticket: fixed download.

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@77275 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2013-06-25 13:33:03 +00:00
parent 9e5ed0bbdf
commit dbba9a624b
13 changed files with 1006 additions and 96 deletions

View File

@ -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<WindowOpenParameter> downloadHandlerCallback = new AsyncCallback<WindowOpenParameter>() {
@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);
}
}

View File

@ -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";
}

View File

@ -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<WindowOpenParameter> callback;
private String parameters;
/**
*
* @param method
* @param servletName the name of the servlet that must be called
* @param params param=value&param1=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<WindowOpenParameter> 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);
}
}

View File

@ -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&param1=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;
}
}

View File

@ -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());
}

View File

@ -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);
}
}

View File

@ -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<MessageBoxEvent> listener){
InfoDisplay.display(title, msg);
}
public MessageBox getMessageBoxConfirm(){
return box;
}
}

View File

@ -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();
}
}
}

View File

@ -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();
}

View File

@ -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);
}
}

View File

@ -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();
}

View File

@ -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;

View File

@ -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;
}