fixed: closing of input streams

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@75305 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2013-05-23 17:02:48 +00:00
parent bb99f16cf7
commit d8e502b3e6
1 changed files with 151 additions and 15 deletions

View File

@ -6,7 +6,9 @@ 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;
@ -15,8 +17,11 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.antlr.stringtemplate.language.Cat;
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;
@ -36,6 +41,7 @@ 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;
@ -89,6 +95,16 @@ public class DownloadServlet extends HttpServlet{
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");
@ -96,6 +112,7 @@ public class DownloadServlet extends HttpServlet{
}
switch (item.getType()) {
case FOLDER:{
try {
File tmpZip = ZipUtil.zipFolder((WorkspaceFolder) item);
@ -103,7 +120,14 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length());
OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), 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;
@ -129,7 +153,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip");
resp.setContentLength((int) reportTemplate.getLength());
OutputStream out = resp.getOutputStream();
IOUtils.copy(reportTemplate.getData(), 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);
@ -151,7 +181,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip");
resp.setContentLength((int) report.getLength());
OutputStream out = resp.getOutputStream();
IOUtils.copy(report.getData(), 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);
@ -163,11 +199,15 @@ public class DownloadServlet extends HttpServlet{
}
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);
@ -175,12 +215,20 @@ public class DownloadServlet extends HttpServlet{
//COMMENTED 26/03/2013
// resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" );
resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + "\"" );
resp.setContentType(externalFile.getMimeType());
resp.setContentType(mimeType);
resp.setContentLength((int) externalFile.getLength());
OutputStream out = resp.getOutputStream();
IOUtils.copy(externalFile.getData(), resp.getOutputStream());
//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());
@ -190,6 +238,7 @@ public class DownloadServlet extends HttpServlet{
}
case EXTERNAL_IMAGE:{
try{
ExternalImage externalImage = (ExternalImage)folderItem;
@ -201,8 +250,14 @@ public class DownloadServlet extends HttpServlet{
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();
IOUtils.copy(externalImage.getData(), resp.getOutputStream());
InputStream is = externalImage.getData();
IOUtils.copy(is, out);
is.close();
out.close();
return;
} catch (InternalErrorException e) {
@ -216,8 +271,14 @@ public class DownloadServlet extends HttpServlet{
ExternalUrl externalUrl = (ExternalUrl)folderItem;
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(new StringReader(externalUrl.getUrl()), resp.getOutputStream());
IOUtils.copy(sr, out);
sr.close();
out.close();
return;
} catch (InternalErrorException e) {
@ -237,8 +298,13 @@ public class DownloadServlet extends HttpServlet{
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage());
return;
}
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
IOUtils.copy(new StringReader(query.getQuery()), resp.getOutputStream());
StringReader sr = new StringReader(query.getQuery());
IOUtils.copy(sr, out);
sr.close();
out.close();
return;
@ -253,8 +319,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream());
FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close();
tmpZip.delete();
return;
@ -274,8 +345,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream());
FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close();
tmpZip.delete();
return;
@ -299,8 +375,13 @@ public class DownloadServlet extends HttpServlet{
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();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream());
FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close();
tmpZip.delete();
}
@ -310,8 +391,13 @@ public class DownloadServlet extends HttpServlet{
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();
IOUtils.copy(document.getData(), resp.getOutputStream());
InputStream is = document.getData();
IOUtils.copy(is, out);
is.close();
out.close();
}
return;
@ -328,8 +414,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("text/html");
resp.setContentLength((int) document.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
IOUtils.copy(new StringReader(document.getData()), resp.getOutputStream());
StringReader sr = new StringReader(document.getData());
IOUtils.copy(sr, out);
sr.close();
out.close();
return;
@ -371,7 +462,11 @@ public class DownloadServlet extends HttpServlet{
if(externalResourceLink.getData()!=null){
System.out.println("Input stream is not null");
IOUtils.copy(externalResourceLink.getData(), resp.getOutputStream());
//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);
@ -410,5 +505,46 @@ public class DownloadServlet extends HttpServlet{
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving");
return;
}
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("test.user", GCUBEScope.getScope("/gcube/devsec")).getWorkspace();
//
// ExternalFile f = (ExternalFile) ws.getItem("61c6d01c-72f3-44b6-88da-6b9b486ef391");
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);
// }
// 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();
}
}
}