#665 incident is fixed. Url redirect is implemented in the event of storage error

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@80964 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2013-08-30 12:57:54 +00:00
parent 55b477c31c
commit 9f7c3095f6
4 changed files with 57 additions and 15 deletions

View File

@ -2034,7 +2034,14 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt
@Override
public void onSuccess(WindowOpenParameter windowOpenParam) {
com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?"+windowOpenParam.getParameters(), windowOpenParam.getOption(), "");
String params = "?"+windowOpenParam.getParameters();
if(params.length()>1)
params+="&";
params+=ConstantsExplorer.REDIRECTONERROR+"="+windowOpenParam.isRedirectOnError();
com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params, windowOpenParam.getOption(), "");
}
};

View File

@ -80,7 +80,7 @@ public class RequestBuilderWorkspaceValidateItem {
}else{ //OK STATUS
if(callback!=null)
callback.onSuccess(new WindowOpenParameter(name, "", params));
callback.onSuccess(new WindowOpenParameter(name, "", params, true));
}
}

View File

@ -10,9 +10,10 @@ package org.gcube.portlets.user.workspace.client.util;
*/
public class WindowOpenParameter {
String option;
String parameters;
String itemName;
private String option;
private String parameters;
private String itemName;
private boolean redirectOnError;
/**
*
@ -26,12 +27,14 @@ public class WindowOpenParameter {
* @param option the name of the window (e.g. "_blank")
* @param itemName
* @param parameters param=value&param1=value1&...
* @param redirectOnError if true execute a redirect on fake URL
*/
public WindowOpenParameter(String option, String itemName, String parameters) {
public WindowOpenParameter(String option, String itemName, String parameters, boolean redirectOnError) {
super();
this.option = option;
this.itemName = itemName;
this.parameters = parameters;
this.redirectOnError = redirectOnError;
}
@ -60,6 +63,16 @@ public class WindowOpenParameter {
public void setItemName(String itemName) {
this.itemName = itemName;
}
public boolean isRedirectOnError() {
return redirectOnError;
}
public void setRedirectOnError(boolean redirectOnError) {
this.redirectOnError = redirectOnError;
}

View File

@ -271,6 +271,13 @@ public class DownloadServlet extends HttpServlet{
//MODIFIED 22-05-2013 CLOSE STREAM
// IOUtils.copy(externalFile.getData(), resp.getOutputStream());
is = externalFile.getData();
// //REMOVE THIS -- TODO TEMPORARY SOLUTION
// if(is==null){
// logger.error("Error during get input stream: IS is null");
// throw new Exception("Item is not reachable");
// }
out = resp.getOutputStream();
IOUtils.copy(is, out);
@ -278,7 +285,7 @@ public class DownloadServlet extends HttpServlet{
out.close();
} catch (Exception e) {
logger.error("Error during external item sending "+itemId,e);
logger.error("Error during external item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -304,13 +311,21 @@ public class DownloadServlet extends HttpServlet{
// IOUtils.copy(externalImage.getData(), resp.getOutputStream());
OutputStream out = resp.getOutputStream();
InputStream is = externalImage.getData();
// //REMOVE THIS -- TODO TEMPORARY SOLUTION
// if(is==null){
// logger.error("Error during get input stream: IS is null");
// throw new Exception("Item is not reachable");
// }
IOUtils.copy(is, out);
is.close();
out.close();
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -342,7 +357,7 @@ public class DownloadServlet extends HttpServlet{
out.close();
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -392,7 +407,7 @@ public class DownloadServlet extends HttpServlet{
tmpZip.delete();
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -419,7 +434,7 @@ public class DownloadServlet extends HttpServlet{
tmpZip.delete();
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -466,7 +481,7 @@ public class DownloadServlet extends HttpServlet{
}
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -490,7 +505,7 @@ public class DownloadServlet extends HttpServlet{
return;
} catch (Exception e) {
logger.error("Error during item compression "+itemId,e);
logger.error("Error during item retrieving "+itemId,e);
handleError(urlRedirectOnError, req, resp, itemId, 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;
@ -583,6 +598,7 @@ public class DownloadServlet extends HttpServlet{
protected void handleError(boolean urlRedirectOnError, HttpServletRequest req, HttpServletResponse resp, String itemId, String message) throws IOException{
logger.warn("Handle error occurred: "+message);
logger.trace("urlRedirectOnError is active: "+urlRedirectOnError);
if(urlRedirectOnError){
urlRedirect(req, resp, itemId);
}else
@ -594,7 +610,13 @@ public class DownloadServlet extends HttpServlet{
{
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message);
response.getWriter().write(resultMessage.toString());
logger.trace("error message: "+resultMessage);
logger.trace("writing response...");
StringReader sr = new StringReader(resultMessage.toString());
IOUtils.copy(sr, response.getOutputStream());
// response.getWriter().write(resultMessage.toString());
logger.trace("response writed");
response.flushBuffer();
}
@ -626,7 +648,7 @@ public class DownloadServlet extends HttpServlet{
String requestUrl = getRequestURL(req) +fakePath;
logger.trace("Url redirect on: "+requestUrl);
System.out.println("Url redirect on: "+requestUrl);
// System.out.println("Url redirect on: "+requestUrl);
response.sendRedirect(response.encodeRedirectURL(requestUrl));
return;
}