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.BufferedInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.StringReader; import java.io.StringReader;
@ -15,8 +17,11 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.antlr.stringtemplate.language.Cat;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.gcube.common.core.scope.GCUBEScope;
import org.gcube.common.core.utils.logging.GCUBELog; 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.exceptions.InternalErrorException;
import org.gcube.portlets.user.homelibrary.home.workspace.Workspace; 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.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.Document;
import org.gcube.portlets.user.homelibrary.home.workspace.folder.items.gcube.Metadata; 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.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.Extensions;
import org.gcube.portlets.user.homelibrary.util.MimeTypeUtil; import org.gcube.portlets.user.homelibrary.util.MimeTypeUtil;
import org.gcube.portlets.user.homelibrary.util.zip.ZipUtil; import org.gcube.portlets.user.homelibrary.util.zip.ZipUtil;
@ -89,6 +95,16 @@ public class DownloadServlet extends HttpServlet{
WorkspaceItem item; WorkspaceItem item;
try { try {
item = wa.getItem(itemId); 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) { } catch (ItemNotFoundException e) {
logger.error("Requested item "+itemId+" not found",e); logger.error("Requested item "+itemId+" not found",e);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no items found"); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error, no items found");
@ -96,6 +112,7 @@ public class DownloadServlet extends HttpServlet{
} }
switch (item.getType()) { switch (item.getType()) {
case FOLDER:{ case FOLDER:{
try { try {
File tmpZip = ZipUtil.zipFolder((WorkspaceFolder) item); File tmpZip = ZipUtil.zipFolder((WorkspaceFolder) item);
@ -103,7 +120,14 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length()); resp.setContentLength((int) tmpZip.length());
OutputStream out = resp.getOutputStream(); 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(); out.close();
tmpZip.delete(); tmpZip.delete();
return; return;
@ -129,7 +153,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) reportTemplate.getLength()); resp.setContentLength((int) reportTemplate.getLength());
OutputStream out = resp.getOutputStream(); 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(); out.close();
} catch (InternalErrorException e) { } catch (InternalErrorException e) {
logger.error("Error during external item sending "+itemId,e); logger.error("Error during external item sending "+itemId,e);
@ -151,7 +181,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) report.getLength()); resp.setContentLength((int) report.getLength());
OutputStream out = resp.getOutputStream(); 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(); out.close();
} catch (InternalErrorException e) { } catch (InternalErrorException e) {
logger.error("Error during external item sending "+itemId,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_PDF_FILE:
case EXTERNAL_FILE:{ case EXTERNAL_FILE:{
InputStream is = null;
OutputStream out = null;
try{ try{
ExternalFile externalFile = (ExternalFile)folderItem; ExternalFile externalFile = (ExternalFile)folderItem;
String mimeType = externalFile.getMimeType(); String mimeType = externalFile.getMimeType();
logger.trace("EXTERNAL_FILE DOWNLOAD FOR "+externalFile.getId());
//COMMENTED 26/03/2013 //COMMENTED 26/03/2013
// String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); // String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType);
@ -175,12 +215,20 @@ public class DownloadServlet extends HttpServlet{
//COMMENTED 26/03/2013 //COMMENTED 26/03/2013
// resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); // resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" );
resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + "\"" ); resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + "\"" );
resp.setContentType(externalFile.getMimeType()); resp.setContentType(mimeType);
resp.setContentLength((int) externalFile.getLength()); 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(); out.close();
} catch (InternalErrorException e) { } catch (InternalErrorException e) {
logger.error("Error during external item sending "+itemId,e); logger.error("Error during external item sending "+itemId,e);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage()); 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:{ case EXTERNAL_IMAGE:{
try{ try{
ExternalImage externalImage = (ExternalImage)folderItem; ExternalImage externalImage = (ExternalImage)folderItem;
@ -201,8 +250,14 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType(externalImage.getMimeType()); resp.setContentType(externalImage.getMimeType());
resp.setContentLength((int) externalImage.getLength()); resp.setContentLength((int) externalImage.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
// IOUtils.copy(externalImage.getData(), resp.getOutputStream());
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(externalImage.getData(), resp.getOutputStream()); InputStream is = externalImage.getData();
IOUtils.copy(is, out);
is.close();
out.close(); out.close();
return; return;
} catch (InternalErrorException e) { } catch (InternalErrorException e) {
@ -216,8 +271,14 @@ public class DownloadServlet extends HttpServlet{
ExternalUrl externalUrl = (ExternalUrl)folderItem; ExternalUrl externalUrl = (ExternalUrl)folderItem;
resp.setContentType("text/uri-list"); resp.setContentType("text/uri-list");
resp.setContentLength((int) externalUrl.getLength()); resp.setContentLength((int) externalUrl.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
StringReader sr = new StringReader(externalUrl.getUrl());
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(new StringReader(externalUrl.getUrl()), resp.getOutputStream()); IOUtils.copy(sr, out);
sr.close();
out.close(); out.close();
return; return;
} catch (InternalErrorException e) { } 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()); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving: "+e.getMessage());
return; return;
} }
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); 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(); out.close();
return; return;
@ -253,8 +319,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length()); resp.setContentLength((int) tmpZip.length());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream()); FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close(); out.close();
tmpZip.delete(); tmpZip.delete();
return; return;
@ -274,8 +345,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length()); resp.setContentLength((int) tmpZip.length());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream()); FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close(); out.close();
tmpZip.delete(); tmpZip.delete();
return; return;
@ -299,8 +375,13 @@ public class DownloadServlet extends HttpServlet{
resp.setHeader( "Content-Disposition", "attachment; filename=\"" + item.getName() + ".zip\"" ); resp.setHeader( "Content-Disposition", "attachment; filename=\"" + item.getName() + ".zip\"" );
resp.setContentType("application/zip"); resp.setContentType("application/zip");
resp.setContentLength((int) tmpZip.length()); resp.setContentLength((int) tmpZip.length());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(new FileInputStream(tmpZip), resp.getOutputStream()); FileInputStream fileTmpZip = new FileInputStream(tmpZip);
IOUtils.copy(fileTmpZip, out);
fileTmpZip.close();
out.close(); out.close();
tmpZip.delete(); tmpZip.delete();
} }
@ -310,8 +391,13 @@ public class DownloadServlet extends HttpServlet{
resp.setHeader( "Content-Disposition", "inline; filename=\"" + itemName + "\"" ); resp.setHeader( "Content-Disposition", "inline; filename=\"" + itemName + "\"" );
resp.setContentType(document.getMimeType()); resp.setContentType(document.getMimeType());
resp.setContentLength((int) document.getLength()); resp.setContentLength((int) document.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); OutputStream out = resp.getOutputStream();
IOUtils.copy(document.getData(), resp.getOutputStream()); InputStream is = document.getData();
IOUtils.copy(is, out);
is.close();
out.close(); out.close();
} }
return; return;
@ -328,8 +414,13 @@ public class DownloadServlet extends HttpServlet{
resp.setContentType("text/html"); resp.setContentType("text/html");
resp.setContentLength((int) document.getLength()); resp.setContentLength((int) document.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream(); 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(); out.close();
return; return;
@ -371,7 +462,11 @@ public class DownloadServlet extends HttpServlet{
if(externalResourceLink.getData()!=null){ if(externalResourceLink.getData()!=null){
System.out.println("Input stream is not 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{ else{
logger.error("Input stream is null "+itemId); 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"); resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Error during data retrieving");
return; 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();
}
} }
} }