@ -3,6 +3,7 @@
* /
package org.gcube.portlets.user.workspaceexplorerapp.server ;
import java.io.ByteArrayInputStream ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.IOException ;
@ -21,20 +22,23 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FilenameUtils ;
import org.apache.commons.io.IOUtils ;
import org.apache.log4j.Logger ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalUrl ;
import org.gcube.common.homelibrary.home.workspace.folder.items.Report ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate ;
import org.gcube.common.homelibrary.home.workspace.folder.items.ts.TimeSeries ;
import org.gcube.common.homelibrary.util.Extensions ;
import org.gcube.common.homelibrary.util.MimeTypeUtil ;
import org.gcube.common.homelibrary.util.zip.ZipUtil ;
import org.gcube.common.storagehub.model.items.FolderItem ;
import org.gcube.common.storagehub.model.items.GCubeItem ;
import org.gcube.common.storagehubwrapper.server.tohl.Workspace ;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceFolder ;
import org.gcube.common.storagehubwrapper.shared.tohl.WorkspaceItem ;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.InternalErrorException ;
import org.gcube.common.storagehubwrapper.shared.tohl.exceptions.ItemNotFoundException ;
import org.gcube.common.storagehubwrapper.shared.tohl.impl.ImageFile ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.FileItem ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.ImageFileItem ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.ItemStreamDescriptor ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.PDFFileItem ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.URLFileItem ;
import org.gcube.common.storagehubwrapper.shared.tohl.items.URLItem ;
import org.gcube.portlets.user.workspaceexplorerapp.client.WorkspaceExplorerAppConstants ;
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.AllowedMimeTypeToInline ;
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.MimeTypeUtility ;
import org.gcube.portlets.user.workspaceexplorerapp.server.workspace.WsUtil ;
import org.gcube.portlets.user.workspaceexplorerapp.shared.HandlerResultMessage ;
@ -115,21 +119,22 @@ public class DownloadWorkspaceExplorerServlet extends HttpServlet{
if ( ids . size ( ) > 1 ) {
List < WorkspaceItem > listWI = toWorkspaceItems ( wa , ids ) ;
try {
File tmpZip = ZipUtil . zipWorkspaceItems ( listWI , null ) ;
resp . setHeader ( "Content-Disposition" , "attachment; filename=\"gCube Workspace Files - " + new Date ( ) + ".zip\"" ) ;
resp . setContentType ( "application/zip" ) ;
resp = setContentLength ( resp , tmpZip . length ( ) ) ;
OutputStream out = resp . getOutputStream ( ) ;
FileInputStream fileTmpZip = new FileInputStream ( tmpZip ) ;
IOUtils . copy ( fileTmpZip , resp . getOutputStream ( ) ) ;
fileTmpZip . close ( ) ;
out . close ( ) ;
tmpZip . delete ( ) ;
//TODO MUST BE IMPLEMENTED
// File tmpZip = ZipUtil.zipWorkspaceItems(listWI, null);
// resp.setHeader( "Content-Disposition", "attachment; filename=\"gCube Workspace Files - " + new Date() +".zip\"" );
// resp.setContentType("application/zip");
// resp = setContentLength(resp, tmpZip.length());
// OutputStream out = resp.getOutputStream();
//
// FileInputStream fileTmpZip = new FileInputStream(tmpZip);
// IOUtils.copy(fileTmpZip, resp.getOutputStream());
// fileTmpZip.close();
//
// out.close();
// tmpZip.delete();
return ;
}
catch ( InternalError Exception e ) {
catch ( Exception e ) {
logger . error ( "Error during folder compression " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during folder compression: " + e . getMessage ( ) ) ;
return ;
@ -157,304 +162,278 @@ public class DownloadWorkspaceExplorerServlet extends HttpServlet{
return ;
}
String itemId = item . getId ( ) ;
String versionID = null ;
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 ( resp , tmpZip . length ( ) ) ;
case URL_ITEM : {
try {
logger . info ( "Downloading " + item . getType ( ) ) ;
String urlValue = "URL not found" ;
if ( item instanceof URLItem ) {
URLItem theURL = ( URLItem ) item ;
urlValue = theURL . getValue ( ) = = null ? "URL not found" : theURL . getValue ( ) . toString ( ) ;
}
StringBuilder build = new StringBuilder ( ) ;
build . append ( "#URL downloaded from D4Science, source filename: " + item . getName ( ) ) ;
build . append ( "\n" ) ;
build . append ( urlValue ) ;
String fileContent = build . toString ( ) ;
logger . info ( "Writing file content: \n" + fileContent ) ;
ByteArrayInputStream is = new ByteArrayInputStream ( fileContent . getBytes ( ) ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
String urlMimeType = "text/uri-list" ;
String itemName = MimeTypeUtility . getNameWithExtension ( item . getName ( ) , urlMimeType ) ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( urlMimeType ) ;
OutputStream out = resp . getOutputStream ( ) ;
FileInputStream fileTmpZip = new FileInputStream ( tmpZip ) ;
IOUtils . copy ( fileTmpZip , resp . getOutputStream ( ) ) ;
fileTmpZip . close ( ) ;
IOUtils . copy ( is , out ) ;
is . close ( ) ;
out . close ( ) ;
tmpZip . delete ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during folder compression " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during folder compression: " + e . getMessage ( ) ) ;
} catch ( Exception e ) {
logger . error ( "Error during downloading the item " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data downloading: " + e . getMessage ( ) ) ;
return ;
}
}
case FOLDER_ITEM : {
FolderItem folderItem = ( FolderItem ) item ;
switch ( folderItem . getFolderItemType ( ) ) {
case REPORT_TEMPLATE : {
try {
ReportTemplate reportTemplate = ( ReportTemplate ) folderItem ;
String extension = FilenameUtils . getExtension ( item . getName ( ) ) ;
String itemName = item . getName ( ) ;
logger . trace ( "case REPORT_TEMPLATE extension is" + extension ) ;
if ( extension . compareToIgnoreCase ( Extensions . REPORT_TEMPLATE . getName ( ) ) ! = 0 ) //ADD EXTENSION?
itemName = "." + Extensions . REPORT_TEMPLATE . getName ( ) ;
case FOLDER :
case SHARED_FOLDER :
case VRE_FOLDER :
case SMART_FOLDER : {
logger . trace ( "case REPORT_TEMPLATE itemName is" + extension ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
WorkspaceFolder workspaceFolder = ( WorkspaceFolder ) item ;
ItemStreamDescriptor descr ;
try {
descr = wa . downloadFolder ( workspaceFolder . getId ( ) , workspaceFolder . getName ( ) , null ) ;
}
catch ( Exception e ) {
logger . error ( "Error on downloading the folder with id " + itemId , e ) ;
String error = e . getMessage ( ) ! = null ? e . getMessage ( ) : "The folder is not available for downloading" ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": " + error ) ;
return ;
}
resp . setContentType ( "application/zip" ) ;
resp = setContentLength ( resp , reportTemplate . getLength ( ) ) ;
OutputStream out = resp . getOutputStream ( ) ;
try {
//MODIFIED 22-05-2013 CLOSE STREAM
InputStream is = reportTemplate . getData ( ) ;
IOUtils . copy ( is , resp . getOutputStream ( ) ) ;
is . close ( ) ;
logger . info ( "Downloading the folder: " + workspaceFolder ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
String mimeType = "application/zip" ;
String itemName = MimeTypeUtility . getNameWithExtension ( item . getName ( ) , mimeType ) ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( mimeType ) ;
out . close ( ) ;
} catch ( Exception e ) {
logger . error ( "Error during external item sending " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
return ;
}
return ;
OutputStream out = resp . getOutputStream ( ) ;
InputStream is = descr . getStream ( ) ;
IOUtils . copy ( is , out ) ;
}
case REPORT : {
try {
Report report = ( Report ) folderItem ;
String extension = FilenameUtils . getExtension ( item . getName ( ) ) ;
String itemName = item . getName ( ) ;
logger . trace ( "case REPORT extension is" + extension ) ;
is . close ( ) ;
out . close ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during item downloading " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during folder data retrieving: " + e . getMessage ( ) ) ;
return ;
}
if ( extension . compareToIgnoreCase ( Extensions . REPORT . getName ( ) ) ! = 0 ) //ADD EXTENSION?
itemName = "." + Extensions . REPORT . getName ( ) ;
}
case FILE_ITEM : {
logger . trace ( "case REPORT itemName is" + extension ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
FileItem workspaceFileItem = ( FileItem ) item ;
ItemStreamDescriptor descr ;
try {
logger . info ( "Downloading the file id: " + workspaceFileItem . getId ( ) + " with name: " + workspaceFileItem . getName ( ) + " and versionID: " + versionID ) ;
descr = wa . downloadFile ( workspaceFileItem . getId ( ) , workspaceFileItem . getName ( ) , versionID , null ) ;
}
catch ( Exception e1 ) {
logger . error ( "Error on downloading the file with id " + itemId , e1 ) ;
String error = e1 . getMessage ( ) ! = null ? e1 . getMessage ( ) : "The file is not available for downloading" ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": " + error ) ;
return ;
}
resp . setContentType ( "application/zip" ) ;
resp = setContentLength ( resp , report . getLength ( ) ) ;
OutputStream out = resp . getOutputStream ( ) ;
switch ( workspaceFileItem . getFileItemType ( ) ) {
//MODIFIED 22-05-2013 CLOSE STREAM
InputStream is = report . getData ( ) ;
IOUtils . copy ( is , resp . getOutputStream ( ) ) ;
is . close ( ) ;
case PDF_DOCUMENT : {
out . close ( ) ;
} catch ( Exception e ) {
logger . error ( "Error during external item sending " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , 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 ( ) ) ;
PDFFileItem pdfFile = ( PDFFileItem ) workspaceFileItem ;
logger . info ( "Downloading: " + pdfFile ) ;
String mimeType = pdfFile . getMimeType ( ) ;
logger . trace ( "EXTERNAL_FILE DOWNLOAD FOR " + pdfFile . getId ( ) ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + item . getName ( ) + "\"" ) ;
String itemName = MimeTypeUtility . getNameWithExtension ( descr . getItemName ( ) , mimeType ) ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( mimeType ) ;
resp = setContentLength ( resp , externalFile . getLength ( ) ) ;
is = externalFile . getData ( ) ;
out = resp . getOutputStream ( ) ;
//Fixing Incident: 18926, replacing pdfFile.getSize() with ItemStreamDescriptor.getSize()
if ( descr . getSize ( ) ! = null & & descr . getSize ( ) > 0 ) {
resp = setContentLength ( resp , descr . getSize ( ) ) ;
}
logger . info ( "The " + workspaceFileItem . getFileItemType ( ) + " size is: " + descr . getSize ( ) ) ;
//resp = setContentLength(resp, pdfFile.getSize());
InputStream is = descr . getStream ( ) ;
OutputStream out = resp . getOutputStream ( ) ;
IOUtils . copy ( is , out ) ;
is . close ( ) ;
out . close ( ) ;
} catch ( Exception e ) {
logger . error ( "Error during external item retrieving " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
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 ( ) ) ;
return ;
}
return ;
}
case EXTERNAL_ IMAGE: {
case IMAGE_DOCUMENT : {
try {
ExternalImage externalImage = ( ExternalImage ) folderItem ;
String mimeType = externalImage . getMimeType ( ) ;
String itemName = MimeTypeUtil . getNameWithExtension ( item . getName ( ) , mimeType ) ;
ImageFileItem imageFile = ( ImageFileItem ) workspaceFileItem ;
logger . info ( "Downloading: " + imageFile ) ;
String mimeType = imageFile . getMimeType ( ) ;
String itemName = MimeTypeUtility . getNameWithExtension ( descr . getItemName ( ) , mimeType ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( externalImage . getMimeType ( ) ) ;
resp = setContentLength ( resp , externalImage . getLength ( ) ) ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( mimeType ) ;
//Fixing Incident: 18926, replacing imageFile.getSize() with ItemStreamDescriptor.getSize()
if ( descr . getSize ( ) ! = null & & descr . getSize ( ) > 0 ) {
resp = setContentLength ( resp , descr . getSize ( ) ) ;
}
logger . info ( "The " + workspaceFileItem . getFileItemType ( ) + " size is: " + descr . getSize ( ) ) ;
//resp = setContentLength(resp, imageFile.getSize());
InputStream is = descr . getStream ( ) ;
OutputStream out = resp . getOutputStream ( ) ;
InputStream is = externalImage . getData ( ) ;
IOUtils . copy ( is , out ) ;
is . close ( ) ;
is . close ( ) ;
out . close ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during item retrieving " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId s , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
logger . error ( "Error during item retrieving " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
return ;
}
}
case EXTERNAL_URL : {
case URL_DOCUMENT : {
try {
ExternalUrl externalUrl = ( ExternalUrl ) folderItem ;
String itemName = MimeTypeUtil . getNameWithExtension ( externalUrl . getName ( ) , "text/uri-list" ) ;
URLFileItem externalUrl = ( URLFileItem ) workspaceFileItem ;
logger . info ( "Downloading: " + externalUrl ) ;
String urlMimeType = "text/uri-list" ;
String itemName = MimeTypeUtility . getNameWithExtension ( descr . getItemName ( ) , urlMimeType ) ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
resp . setContentType ( "text/uri-list" ) ;
resp = setContentLength ( resp , externalUrl . getLength ( ) ) ;
resp . setContentType ( urlMimeType ) ;
//resp = setContentLength(resp, externalUrl.getSize());
//MODIFIED 22-05-2013 CLOSE STREAM
StringReader sr = new StringReader ( externalUrl . getUrl ( ) ) ;
OutputStream out = resp . getOutputStream ( ) ;
IOUtils . copy ( sr , out ) ;
InputStream is = descr . getStream ( ) ;
IOUtils . copy ( descr . getStream ( ) , out ) ;
sr . close ( ) ;
i s. close ( ) ;
out . close ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during item retrieving " + itemId s , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId s , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
logger . error ( "Error during item retrieving " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , 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 ( resp , query . getLength ( ) ) ;
} catch ( Exception e ) {
logger . error ( "Error getting item lenght " + query , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , 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 : {
case GCUBE_ITEM : {
try {
TimeSeries ts = ( TimeSeries ) folderItem ;
File tmpZip = ZipUtil . zipTimeSeries ( ts ) ;
// Document document = (Document)item;
org . gcube . common . storagehubwrapper . shared . tohl . items . GCubeItem gcubeItem = ( org . gcube . common . storagehubwrapper . shared . tohl . items . GCubeItem ) item ; //Cast GCubeItem
logger . info ( "Downloading: " + gcubeItem ) ;
String mimeType = "text/plain" ;
String contentDisposition = viewContent ? "inline" : "attachment" ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + item . getName ( ) + ".zip\"" ) ;
resp . setContentType ( "application/zip" ) ;
resp = setContentLength ( resp , tmpZip . length ( ) ) ;
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + gcubeItem . getName ( ) + ".txt\"" ) ;
resp . setContentType ( mimeType ) ;
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp . getOutputStream ( ) ;
FileInputStream fileTmpZip = new FileInputStream ( tmpZip ) ;
IOUtils . copy ( fileTmpZip , out ) ;
fileTmpZip . close ( ) ;
InputStream is = descr . getStream ( ) ;
IOUtils . copy ( is , out ) ;
is . close ( ) ;
out . close ( ) ;
tmpZip . delete ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during item retrieving " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , 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;
GCubeItem document = ( GCubeItem ) item ; //Cast GCubeItem
if ( ! viewContent ) {
File tmpZip = ZipUtil . zipDocument ( document ) ;
resp . setHeader ( "Content-Disposition" , "attachment; filename=\"" + item . getName ( ) + ".zip\"" ) ;
resp . setContentType ( "application/zip" ) ;
resp = setContentLength ( resp , 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 ( resp , 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 ( Exception e ) {
logger . error ( "Error during item retrieving " + itemId s , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId s , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
logger . error ( "Error during item retrieving " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
return ;
}
}
default : {
case METADATA : {
try {
// Metadata document = (Metadata)item;
GCubeItem metadata = ( GCubeItem ) item ; //Cast GCubeItem
resp . setContentType ( "text/html" ) ;
resp = setContentLength ( resp , metadata . getLength ( ) ) ;
String itemName = MimeTypeUtility . getNameWithExtension ( descr . getItemName ( ) , workspaceFileItem . getMimeType ( ) ) ;
logger . info ( "Downloading default item: " + workspaceFileItem ) ;
//String contentDisposition = viewContent?"inline":"attachment";
//Support #16430
//The 'inline' option may be badly managed by browser
String contentDisposition = "attachment" ;
List < String > allowedPrefixes = AllowedMimeTypeToInline . getAllowedMimeTypePrefixes ( ) ;
if ( viewContent ) {
logger . info ( "Checking if the mime type " + workspaceFileItem . getMimeType ( ) + " exists among Mime Type Prefixes" ) ;
for ( String prefix : allowedPrefixes ) {
if ( workspaceFileItem . getMimeType ( ) . startsWith ( prefix ) ) {
logger . info ( "yes, the prefix " + prefix + " is matching the mimetype " + workspaceFileItem . getMimeType ( ) + ", so returning 'Content-Disposition' at 'inline'" ) ;
contentDisposition = "inline" ;
break ;
}
}
}
resp . setHeader ( "Content-Disposition" , contentDisposition + "; filename=\"" + itemName + "\"" ) ;
//Fixing Incident: 18926, replacing workspaceFileItem.getSize() with ItemStreamDescriptor.getSize()
if ( descr . getSize ( ) ! = null & & descr . getSize ( ) > 0 ) {
resp = setContentLength ( resp , descr . getSize ( ) ) ;
}
logger . info ( "The size is: " + descr . getSize ( ) ) ;
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp . getOutputStream ( ) ;
InputStream is = metadata . getData ( ) ;
IOUtils . copy ( is , out ) ;
InputStream is = descr . getStream ( ) ;
IOUtils . copy ( descr . getStream ( ) , out ) ;
is . close ( ) ;
out . close ( ) ;
return ;
} catch ( Exception e ) {
logger . error ( "Error during item retrieving " + itemIds , e ) ;
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
logger . error ( "Error during item retrieving " + itemId , e ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving: " + e . getMessage ( ) ) ;
return ;
}
}
}
}
default :
break ;
}
handleError ( urlRedirectOnError , req , resp , itemIds , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving" ) ;
handleError ( urlRedirectOnError , req , resp , itemId , HttpServletResponse . SC_INTERNAL_SERVER_ERROR + ": Error during data retrieving" ) ;
return ;
}
/ * *
* To list .
*