In progess on SHUB migration

This commit is contained in:
Francesco Mangiacrapa 2020-04-14 17:43:25 +02:00
parent 40c24e29c5
commit 3109a73acc
19 changed files with 1164 additions and 360 deletions

View File

@ -17,6 +17,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>

View File

@ -0,0 +1,6 @@
eclipse.preferences.version=1
jarsExcludedFromWebInfLib=
lastWarOutDir=/home/francesco/git/workspace-explorer-app/target/workspace-explorer-app-1.3.0-SNAPSHOT
launchConfigExternalUrlPrefix=
warSrcDir=src/main/webapp
warSrcDirIsOutput=false

View File

@ -0,0 +1,3 @@
eclipse.preferences.version=1
entryPointModules=
gwtSyncCodeServer=true

View File

@ -4,6 +4,7 @@
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
<property name="context-root" value="workspace-explorer-app"/>
<property name="java-output-path" value="/workspace-explorer-app/target/workspace-explorer-app-0.0.1-SNAPSHOT/WEB-INF/classes"/>
</wb-module>

View File

@ -3,4 +3,5 @@
<installed facet="java" version="1.7"/>
<installed facet="jst.web" version="2.5"/>
<installed facet="jst.jaxrs" version="2.0"/>
<installed facet="com.gwtplugins.gwt.facet" version="1.0"/>
</faceted-project>

View File

@ -1,27 +1,39 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-2-0"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-3-0"
date="2020-04-14">
<Change>[Task #18920] Migrated to SHUB
</Change>
</Changeset>
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-2-0"
date="2018-03-07">
<Change>[Feature #11374] Download items with double click
</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-1-0"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-1-0"
date="2017-10-11">
<Change>[Feature #9926] read the scope from environment variable
</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-0-2"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-0-2"
date="2017-10-10">
<Change>Removed markAsRead method. It is performed by HL</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-0-1"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-0-1"
date="2017-07-03">
<Change>[Task #9104] removed log4j.properties file</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-0-0-1"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-0-0-1"
date="2016-11-10">
<Change>Incident #5722: fixed</Change>
</Changeset>
<Changeset component="org.gcube.portlets-user.workspace-explorer-app.1-0-0"
<Changeset
component="org.gcube.portlets-user.workspace-explorer-app.1-0-0"
date="2016-09-13">
<Change>first release</Change>
</Changeset>

52
pom.xml
View File

@ -59,6 +59,13 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<version>${gwtVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId>
@ -114,33 +121,14 @@
<!-- END FWS -->
<!-- HOME LIBRARY -->
<!-- <dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-model</artifactId>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-jcr</artifactId>
<version>[2.5.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
<exclusions>
<exclusion>
<artifactId>asm-debug-all</artifactId>
<groupId>org.ow2.asm</groupId>
</exclusion>
</exclusions>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.21</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library</artifactId>
<version>[2.5.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
<exclusions>
<exclusion>
<artifactId>asm-all</artifactId>
<groupId>asm</groupId>
</exclusion>
</exclusions>
</dependency>-->
<dependency>
<groupId>org.gcube.common</groupId>
@ -156,6 +144,12 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
@ -211,6 +205,14 @@
<build>
<!-- Generate compiled stuff in the folder used for developing mode -->
<outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<plugins>

View File

@ -130,18 +130,18 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
@Override
public void onClick(final ClickItemEvent clickItemEvent) {
isSelect = false;
Set<Item> items = wsExplorer.getItemsSelected();
List<Item> lstItems = toList(items);
//Return if item is not selectable
if(!itemIsSelectable(lstItems.get(0))){
notifyNotValidSelection();
return;
}
notifySelectedItem(lstItems.get(0));
isSelect = true;
// isSelect = false;
// Set<Item> items = wsExplorer.getItemsSelected();
// List<Item> lstItems = toList(items);
//
// //Return if item is not selectable
// if(!itemIsSelectable(lstItems.get(0))){
// notifyNotValidSelection();
// return;
// }
//
// notifySelectedItem(lstItems.get(0));
// isSelect = true;
}
});
@ -149,6 +149,8 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
@Override
public void onLoadFolder(LoadFolderEvent loadFolderEvent) {
GWT.log("LoadFolderEvent fired");
if(loadFolderEvent.getTargetFolder()==null)
return;
@ -243,8 +245,8 @@ public class WorkspaceResourcesExplorerPanel extends DockPanel implements HasWor
Window.alert("Sorry, an error occurred while contacting server, try again");
}
break;
case PREVIEW:
break;
// case PREVIEW:
// break;
case OPEN:
MaterialToast.fireToast("Showing...");
try {

View File

@ -12,7 +12,7 @@ package org.gcube.portlets.user.workspaceexplorerapp.client.download;
*/
public enum DownloadType {
PREVIEW,
//PREVIEW,
OPEN,
DOWNLOAD;
}

View File

@ -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 (InternalErrorException 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;
case FOLDER:
case SHARED_FOLDER:
case VRE_FOLDER:
case SMART_FOLDER: {
switch (folderItem.getFolderItemType()) {
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;
}
try{
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);
OutputStream out = resp.getOutputStream();
InputStream is = descr.getStream();
IOUtils.copy(is, out);
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;
}
}
case FILE_ITEM:{
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;
}
switch (workspaceFileItem.getFileItemType()) {
case PDF_DOCUMENT:{
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();
logger.trace("case REPORT_TEMPLATE itemName is" +extension);
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=\"" + itemName + "\"" );
String itemName = MimeTypeUtility.getNameWithExtension(descr.getItemName(), mimeType);
resp.setContentType("application/zip");
resp = setContentLength(resp, reportTemplate.getLength());
OutputStream out = resp.getOutputStream();
//MODIFIED 22-05-2013 CLOSE STREAM
InputStream is = reportTemplate.getData();
IOUtils.copy(is, resp.getOutputStream());
is.close();
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 REPORT:{
try{
Report report = (Report)folderItem;
String extension = FilenameUtils.getExtension(item.getName());
String itemName = item.getName();
logger.trace("case REPORT extension is" +extension);
if(extension.compareToIgnoreCase(Extensions.REPORT.getName())!=0) //ADD EXTENSION?
itemName = "." + Extensions.REPORT.getName();
logger.trace("case REPORT itemName is" +extension);
String contentDisposition = viewContent?"inline":"attachment";
resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" );
resp.setContentType("application/zip");
resp = setContentLength(resp, report.getLength());
OutputStream out = resp.getOutputStream();
//MODIFIED 22-05-2013 CLOSE STREAM
InputStream is = report.getData();
IOUtils.copy(is, resp.getOutputStream());
is.close();
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());
String contentDisposition = viewContent?"inline":"attachment";
resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + item.getName() + "\"" );
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);
String contentDisposition = viewContent?"inline":"attachment";
resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" );
resp.setContentType(externalImage.getMimeType());
resp = setContentLength(resp, externalImage.getLength());
OutputStream out = resp.getOutputStream();
InputStream is = externalImage.getData();
IOUtils.copy(is, 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());
return;
}
}
case EXTERNAL_URL:{
try{
ExternalUrl externalUrl = (ExternalUrl)folderItem;
String itemName = MimeTypeUtil.getNameWithExtension(externalUrl.getName(), "text/uri-list");
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("text/uri-list");
resp = setContentLength(resp, 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 (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 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:{
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(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();
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();
resp.setContentType(mimeType);
//Fixing Incident: 18926, replacing imageFile.getSize() with ItemStreamDescriptor.getSize()
if(descr.getSize()!=null && descr.getSize()>0) {
resp = setContentLength(resp, descr.getSize());
}
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();
logger.info("The "+workspaceFileItem.getFileItemType()+" size is: "+descr.getSize());
//resp = setContentLength(resp, imageFile.getSize());
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());
return;
}
}
case METADATA:{
try{
// Metadata document = (Metadata)item;
GCubeItem metadata = (GCubeItem) item; //Cast GCubeItem
resp.setContentType("text/html");
resp = setContentLength(resp, metadata.getLength());
//MODIFIED 22-05-2013 CLOSE STREAM
InputStream is = descr.getStream();
OutputStream out = resp.getOutputStream();
InputStream is = metadata.getData();
IOUtils.copy(is, 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;
}
}
case URL_DOCUMENT:{
try{
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(urlMimeType);
//resp = setContentLength(resp, externalUrl.getSize());
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
InputStream is = descr.getStream();
IOUtils.copy(descr.getStream(), out);
is.close();
out.close();
return;
} catch (Exception 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());
return;
}
}
case GCUBE_ITEM:{
try{
// 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=\"" + gcubeItem.getName() + ".txt\"" );
resp.setContentType(mimeType);
//MODIFIED 22-05-2013 CLOSE STREAM
OutputStream out = resp.getOutputStream();
InputStream is = descr.getStream();
IOUtils.copy(is, out);
is.close();
out.close();
return;
} catch (Exception 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());
return;
}
}
default:{
try{
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 = descr.getStream();
IOUtils.copy(descr.getStream(), out);
is.close();
out.close();
return;
} catch (Exception 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());
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.
*

View File

@ -346,7 +346,7 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
* BUT RETURNING ONLY /MY_SPECIAL_FOLDER
*/
if(wsItem.isFolder()){
if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem)){
if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem, lastItem.isRoot())){
return new ArrayList<Item>(Arrays.asList(arrayParents));
}
}
@ -400,7 +400,7 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
*/
@Override
public List<Item> getBreadcrumbsByItemIdentifierToParentLimit(String itemIdentifier, String parentLimit, boolean includeItemAsParent) throws Exception {
logger.trace("getBreadcrumbsByItemIdentifierToParentLimit by Item Identifier " + itemIdentifier +" and limit: "+parentLimit);
logger.trace("getBreadcrumbsByItemIdentifierToParentLimit by Item Identifier " + itemIdentifier +" and limit: "+parentLimit + " and includeItemAsParent: "+includeItemAsParent);
try {
Workspace workspace = getWorkspace();
@ -417,9 +417,14 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
if(parents==null) //avoiding null
parents = new ArrayList<WorkspaceItem>();
logger.trace("parents size: "+parents.size());
Item[] arrayParents;
if(logger.isDebugEnabled()) {
for (WorkspaceItem workspaceItem : parents) {
logger.debug("the parent is: "+workspaceItem.getName());
}
}
List<Item> arrayParents = new ArrayList<Item>();
parentLimit = parentLimit!=null?parentLimit:"";
switch (parents.size()) {
@ -439,42 +444,49 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
}
}
WorkspaceItem lastItem = parents.get(parents.size()-1);
//CONVERTING LAST ELEMENT IF NEEDED...
logger.debug("converting last element..");
if(includeItemAsParent && lastItem.isFolder()){ //FIX BUG #298
arrayParents = new Item[parents.size()];
logger.debug("including last item into path: "+lastItem.getName());
arrayParents[parents.size()-1] = ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) lastItem, null);
}else
arrayParents = new Item[parents.size()-1];
//WorkspaceItem lastItem = parents.get(parents.size()-1);
//Adding the item passed as last first parent
if(includeItemAsParent && wsItem.isFolder()) {
WorkspaceFolder wsItemAsFolder =(WorkspaceFolder) wsItem;
Item theItem = ItemBuilder.buildFolderForBreadcrumbs(wsItemAsFolder, null);
arrayParents.add(theItem);
}
/** HANDLE MY_SPECIAL_FOLDER TO AVOID COMPLETE PATH WORKSPACE/MY_SPECIAL_FOLDER
* BUT RETURNING ONLY /MY_SPECIAL_FOLDER
*/
WorkspaceItem theFirstParent = parents.get(0);
if(wsItem.isFolder()){
if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem)){
if(ItemBuilder.isSpecialFolder((WorkspaceFolder) wsItem, theFirstParent.isRoot())){
logger.debug("item id is special folder, returning");
return new ArrayList<Item>(Arrays.asList(arrayParents));
return new ArrayList<Item>(arrayParents);
}
if(itemIdentifier.compareTo(parentLimit)==0){
logger.debug("item and parent limit are identical element, returning");
return new ArrayList<Item>(Arrays.asList(arrayParents));
return new ArrayList<Item>(arrayParents);
}
}
//CONVERTING PATH
logger.debug("converting path from second-last..");
for (int i = parents.size()-2; i >= 0; i--) {
logger.debug("converting parents...");
//for (int i = parents.size()-2; i >= 0; i--) {
for (int i = 0; i<parents.size(); i++) {
logger.debug("converting index: "+i);
WorkspaceFolder wsParentFolder = (WorkspaceFolder) parents.get(i);
arrayParents[i] = ItemBuilder.buildFolderForBreadcrumbs(wsParentFolder, null);
if(arrayParents[i].isSpecialFolder()){ //SKIP HOME PARENT FOR MY_SPECIAL_FOLDER
logger.debug("the folder at index: "+i +" is "+wsParentFolder.getName());
Item itemParent = ItemBuilder.buildFolderForBreadcrumbs(wsParentFolder, null);
arrayParents.add(itemParent);
if(itemParent.isSpecialFolder()){ //SKIP HOME PARENT FOR MY_SPECIAL_FOLDER
logger.info("arrayParents index "+i+" is special folder, break");
break;
}else if(parentLimit.compareTo(arrayParents[i].getId())==0){
}else if(parentLimit.compareTo(itemParent.getId())==0){
logger.info("reached parent limit "+parentLimit+", break");
break;
}
@ -482,29 +494,40 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
//SET PARENTS
logger.debug("setting parents..");
for(int i=0; i<arrayParents.length-1; i++){
for(int i=0; i<arrayParents.size()-1; i++){
Item parent = arrayParents[i];
Item fileModel = arrayParents[i+1];
Item parent = arrayParents.get(i+1);
Item fileModel = arrayParents.get(i);
if(fileModel!=null) {
fileModel.setParent(parent);
}
}
logger.info("Limited list of parents returning size: "+arrayParents.length);
if(arrayParents[0]==null){ //EXIT BY BREAK IN CASE OF SPECIAL FOLDER OR REACHED PARENT LIMIT
List<Item> breadcrumbs = new ArrayList<Item>();
for (int i=1; i<arrayParents.length; i++) {
if(arrayParents[i]!=null) {
breadcrumbs.add(arrayParents[i]);
}
// if(arrayParents[0]==null){ //EXIT BY BREAK IN CASE OF SPECIAL FOLDER OR REACHED PARENT LIMIT
// List<Item> breadcrumbs = new ArrayList<Item>();
// for (int i=1; i<arrayParents.length; i++) {
// if(arrayParents[i]!=null) {
// breadcrumbs.add(arrayParents[i]);
// }
// }
// logger.debug("Returning the breadcrumb: "+breadcrumbs);
// return breadcrumbs;
// }
// else {
// return new ArrayList<Item>(Arrays.asList(arrayParents));
// }
Collections.reverse(arrayParents);
logger.info("Reversed the parent list");
if(logger.isDebugEnabled()) {
for (Item item : arrayParents) {
logger.info("Returning parent: "+item.getName());
}
return breadcrumbs;
}
else {
return new ArrayList<Item>(Arrays.asList(arrayParents));
}
// logger.info("Limited list of parents returning size: "+arrayParents.length);
return arrayParents;
//new ArrayList<Item>(Arrays.asList(arrayParents));
} catch (Exception e) {
logger.error("Error in get List Parents By Item Identifier ", e);
@ -780,7 +803,7 @@ public class WorkspaceExplorerAppServiceImpl extends RemoteServiceServlet implem
try{
String scope = WsUtil.getScope(this.getThreadLocalRequest().getSession());
ScopeProvider.instance.set(scope);
logger.info("Trying to decode encoded folder Id: "+encodedFolderId);
logger.info("Trying to decode encoded folder Id: "+encodedFolderId +" in the scope: "+scope);
String base64DecodedId = StringUtil.base64DecodeString(encodedFolderId);
// String useThis = "P+IpJ6F6cTaGENfKMQWmStGUE79gbri5bVGRnzOvb8YUNIsJqFrdhceBrF+/u00j";
logger.info("Base 64 decoded folder Id: "+base64DecodedId +", now decrypting...");

View File

@ -0,0 +1,85 @@
package org.gcube.portlets.user.workspaceexplorerapp.server.workspace;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The Class AllowedMimeTypeToInline.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Apr 4, 2019
*/
public class AllowedMimeTypeToInline {
public static final String filename = "MimeTypePrefixToInline.properties";
protected static Logger logger = LoggerFactory.getLogger(WsUtil.class);
/**
* Load mime type prefix.
*
* @return the properties
*/
private static Properties loadMimeTypePrefix(){
Properties prop = new Properties();
InputStream input = null;
try {
input = AllowedMimeTypeToInline.class.getResourceAsStream(filename);
if(input==null){
logger.error("Sorry, unable to find " + filename);
return null;
}
//load a properties file from class path, inside static method
prop.load(input);
return prop;
} catch (IOException ex) {
logger.error("Sorry, error: ", ex);
return null;
} finally{
if(input!=null){
try {
input.close();
} catch (IOException e) {
//silent
}
}
}
}
/**
* Gets the allowed mime type prefixes.
*
* @return the allowed mime type prefixes
*/
public static List<String> getAllowedMimeTypePrefixes(){
Properties prop = loadMimeTypePrefix();
List<String> prefixes = new ArrayList<String>();
if(prop==null)
return prefixes;
for (Object keyObj : prop.keySet()) {
prefixes.add((String) keyObj);
}
return prefixes;
}
}

View File

@ -411,7 +411,7 @@ public class ItemBuilder {
//name = shared.isVreFolder()?shared.getDisplayName():wsFolder.getName();
name = shared.isVreFolder()?shared.getName():wsFolder.getName(); //not implemented by SHUB
}else {if(isSpecialFolder(wsFolder)){
}else if(parent!=null && isSpecialFolder(wsFolder, parent.isRoot())){
//MANAGEMENT SPECIAL FOLDER
name = WorkspaceExplorerAppConstants.VRE_FOLDERS_LABEL;
isSpecialFolder = true;

View File

@ -0,0 +1,6 @@
image=prefix to image file
text=prefix to text file
video=prefix to video file
application/pdf=prefix to pdf file
application/xml=prefix to xml file
application/json=prefix to json file

View File

@ -0,0 +1,283 @@
/**
*
*/
package org.gcube.portlets.user.workspaceexplorerapp.server.workspace;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.Detector;
import org.apache.tika.io.TikaInputStream;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MediaType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The Class MimeTypeUtil.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Copied from org.gcube.common.homelibrary.util.MimeTypeUtil
* @author Federico De Faveri defaveri@isti.cnr.it
*
* Jul 5, 2019
*/
public class MimeTypeUtility {
private static final String DOT_STRING = ".";
protected static Logger logger = LoggerFactory.getLogger(MimeTypeUtility.class);
/**
*
*/
public static final String BINARY_MIMETYPE = "application/octet-stream";
public static final String[] ZIP_MIMETYPES = new String[] { "application/octet-stream", "application/x-compress",
"application/x-compressed", "application/x-zip-compressed", "application/x-gzip", "application/x-winzip",
"application/x-zip", "application/zip", "multipart/x-zip" };
protected static final Map<String, List<String>> mimetype_extension_map = new LinkedHashMap<String, List<String>>();
protected static final Map<String, String> extension_mimetype_map = new LinkedHashMap<String, String>();
static {
InputStream extensionToMimetype = MimeTypeUtility.class
.getResourceAsStream("/WsExtensionToMimeTypeMap.properties");
InputStream mimetypeToExtension = MimeTypeUtility.class
.getResourceAsStream("/WsMimeTypeToExtensionMap.properties");
try {
loadExtensions(extensionToMimetype);
loadMimeTypes(mimetypeToExtension);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Load extensions.
*
* @param is the is
* @throws IOException Signals that an I/O exception has occurred.
*/
protected static void loadExtensions(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine();
while (line != null) {
String[] split = line.split("=");
if (split.length == 2) {
String mimeType = split[0];
String extension = split[1];
extension_mimetype_map.put(extension, mimeType);
}
line = br.readLine();
}
br.close();
}
/**
* Load mime types.
*
* @param is the is
* @throws IOException Signals that an I/O exception has occurred.
*/
protected static void loadMimeTypes(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine();
while (line != null) {
String[] split = line.split("=");
if (split.length == 2) {
String mimeType = split[0];
String extension = split[1];
List<String> toExtensions = mimetype_extension_map.get(mimeType);
if (toExtensions == null) {
toExtensions = new ArrayList<String>();
}
toExtensions.add(extension);
mimetype_extension_map.put(mimeType, toExtensions);
// mimetype_extension_map.put(mimeType, extension);
}
line = br.readLine();
}
br.close();
}
/**
* Gets the extension.
*
* @param mimeType the mime type.
* @return the related list of Extensions.
*/
public static List<String> getExtension(String mimeType) {
return mimetype_extension_map.get(mimeType);
}
/**
* Gets the name with extension.
*
* @param name the file name.
* @param mimeType the mime type.
* @return the right name.
* @throws IOException Signals that an I/O exception has occurred.
*/
public static String getNameWithExtension(String name, String mimeType) throws IOException {
logger.debug("Deriving the file extension for file name: " + name + ", with mimeType: " + mimeType);
if (mimeType == null || mimeType.isEmpty()) {
logger.debug("Input mime type is null or empty returning passed name: " + name);
return name;
}
String declaredExtension = FilenameUtils.getExtension(name);
logger.debug("The name " + name + " contains the extension: " + declaredExtension);
if (declaredExtension.equals("exe"))
return name;
List<String> extensions = MimeTypeUtility.getExtension(mimeType);
logger.trace("Extension/s available for input mimetype: " + mimeType + " into map is/are: " + extensions);
String toMimeTypeExtension = "";
if (extensions != null) {
toMimeTypeExtension = extensions.get(extensions.size() - 1); // I'm reading the last extension in the map
// (myme type - list of extensions)
logger.debug("Using the last extension read into list of available extensions: " + toMimeTypeExtension);
}
// MANAGING ALREADY DECLARED EXTENSION IN THE FILE NAME
if (!declaredExtension.isEmpty() && !toMimeTypeExtension.isEmpty()) {
String dEextL = declaredExtension.toLowerCase();
String mtExtL = toMimeTypeExtension.toLowerCase();
// The extension writes in the file name is matching the mime type extension
// declared in the map
if (dEextL.equals(mtExtL)) {
logger.trace("The Extension declared in the name " + name
+ " is matching derived mime type extension so returning the input name: " + name);
return name;
}
// if(!dEextL.trim().contains(" ")) {
// logger.trace("The Extension declared in the name "+name+" seems a valid suffix (without other spaces) so returning the input name: "+name);
// return name;
// }
logger.debug("No logic seems to match the extension declared in the name " + declaredExtension
+ " as a valid extension so I'm adding the extension derived from mime type map: "
+ toMimeTypeExtension);
}
// CHECKING THE FOLLOWING IN ORDER TO AVOID THE DOT AS LAST CHAR OF FILENAME
if (toMimeTypeExtension.isEmpty()) {
return name;
}
String fullname = String.format("%s%s%s", name, DOT_STRING, toMimeTypeExtension);
logger.trace("returning full name:" + fullname);
return fullname;
}
/**
* Check if the content type is a zip type.
*
* @param contentType the content type to check.
* @return <code>true</code> if is a zip file, <code>false</code> otherwise.
*/
public static boolean isZipContentType(String contentType) {
for (String zip_mimetype : ZIP_MIMETYPES)
if (zip_mimetype.equals(contentType))
return true;
return false;
}
/**
* Get mime type by file.
*
* @param filenameWithExtension the filename with extension
* @param tmpFile the tmp file
* @return the mime type of the given file
*/
public static String getMimeType(String filenameWithExtension, File tmpFile) {
MediaType mediaType = null;
try {
TikaConfig config = TikaConfig.getDefaultConfig();
Detector detector = config.getDetector();
TikaInputStream stream = TikaInputStream.get(tmpFile);
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, filenameWithExtension);
mediaType = detector.detect(stream, metadata);
} catch (IOException e) {
logger.error("Error detecting mime type for file " + filenameWithExtension);
}
return mediaType.getBaseType().toString();
}
/**
* Get mime type by inpustream.
*
* @param filenameWithExtension the filename with extension
* @param input the input
* @return the mime type of the given file
* @throws IOException Signals that an I/O exception has occurred.
*/
public static String getMimeType(String filenameWithExtension, InputStream input) throws IOException {
MediaType mediaType = null;
try {
TikaConfig config = TikaConfig.getDefaultConfig();
Detector detector = config.getDetector();
TikaInputStream stream = TikaInputStream.get(input);
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, filenameWithExtension);
mediaType = detector.detect(stream, metadata);
} catch (IOException e) {
logger.error("Error detecting mime type for file " + filenameWithExtension);
} finally {
// if (file!=null)
// file.close();
}
return mediaType.getBaseType().toString();
}
/**
* Gets the mime type to extension map.
*
* @return the mime type to extension map
*/
public static Map<String, List<String>> getMimeTypeToExtensionMap() {
return mimetype_extension_map;
}
/**
* Gets the extension to mime type map.
*
* @return the extension to mime type map
*/
public static Map<String, String> getExtensionToMimeTypeMap() {
return extension_mimetype_map;
}
}

View File

@ -34,7 +34,7 @@ public class WsUtil {
try {
String scope = getScope(httpSession);
// TODO
String token = "MUST BE PROVIDED";
String token = "9b397e7a-c683-44dc-b65b-53725b98f7e5-98187548";
logger.debug("Getting " + StorageHubWrapper.class.getSimpleName() +
" by token: " + token.substring(0, 10) +" MASKED TOKEN" +
" by using the scope: " + scope);
@ -53,7 +53,7 @@ public class WsUtil {
* @return the workpace
* @throws Exception the exception
*/
protected static org.gcube.common.storagehubwrapper.server.tohl.Workspace getWorkspace(HttpSession httpSession) throws Exception {
public static org.gcube.common.storagehubwrapper.server.tohl.Workspace getWorkspace(HttpSession httpSession) throws Exception {
try {
StorageHubWrapper wrapper = getStorageHubWrapper(httpSession);

View File

@ -0,0 +1,213 @@
application/envoy =evy
application/fractals=fif
application/futuresplash=spl
application/hta=hta
application/internet-property-stream=acx
application/mac-binhex40=hqx
application/msword=doc
application/msword=dot
application/octet-stream=*
application/octet-stream=bin
application/octet-stream=class
application/octet-stream=dms
application/octet-stream=exe
application/octet-stream=lha
application/octet-stream=lzh
application/oda=oda
application/olescript=axs
application/pdf=pdf
application/pics-rules=prf
application/pkcs10=p10
application/pkix-crl=crl
application/postscript=ai
application/postscript=eps
application/postscript=ps
application/rtf=rtf
application/set-payment-initiation=setpay
application/set-registration-initiation=setreg
application/vnd.ms-excel=xla
application/vnd.ms-excel=xlc
application/vnd.ms-excel=xlm
application/vnd.ms-excel=xls
application/vnd.ms-excel=xlt
application/vnd.ms-excel=xlw
application/vnd.ms-outlook=msg
application/vnd.ms-pkicertstore=sst
application/vnd.ms-pkiseccat=cat
application/vnd.ms-pkistl=stl
application/vnd.ms-powerpoint=pot
application/vnd.ms-powerpoint=pps
application/vnd.ms-powerpoint=ppt
application/vnd.ms-project=mpp
application/vnd.ms-works=wcm
application/vnd.ms-works=wdb
application/vnd.ms-works=wks
application/vnd.ms-works=wps
application/vnd.openxmlformats-officedocument.wordprocessingml.document=docx
application/vnd.ms-word.document.macroEnabled.12=docm
application/vnd.openxmlformats-officedocument.wordprocessingml.template=dotx
application/vnd.ms-powerpoint.template.macroEnabled.12=potm
application/vnd.openxmlformats-officedocument.presentationml.template=potx
application/vnd.ms-powerpoint.addin.macroEnabled.12=ppam
application/vnd.ms-powerpoint.slideshow.macroEnabled.12=ppsm
application/vnd.openxmlformats-officedocument.presentationml.slideshow=ppsx
application/vnd.ms-powerpoint.presentation.macroEnabled.12=pptm
application/vnd.openxmlformats-officedocument.presentationml.presentation=pptx
application/vnd.ms-excel.addin.macroEnabled.12=xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12=xlsb
application/vnd.ms-excel.sheet.macroEnabled.12=xlsm
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=xlsx
application/vnd.ms-excel.template.macroEnabled.12=xltm
application/vnd.openxmlformats-officedocument.spreadsheetml.template=xltx
application/winhlp=hlp
application/x-bcpio=bcpio
application/x-cdf=cdf
application/x-compress=z
application/x-compressed=tgz
application/x-cpio=cpio
application/x-csh=csh
application/x-director=dcr
application/x-director=dir
application/x-director=dxr
application/x-dvi=dvi
application/x-gtar=gtar
application/x-gzip=gz
application/x-hdf=hdf
application/x-internet-signup=ins
application/x-internet-signup=isp
application/x-iphone=iii
application/x-javascript=js
application/x-latex=latex
application/x-msaccess=mdb
application/x-mscardfile=crd
application/x-msclip=clp
application/x-msdownload=dll
application/x-msmediaview=m13
application/x-msmediaview=m14
application/x-msmediaview=mvb
application/x-msmetafile=wmf
application/x-msmoney=mny
application/x-mspublisher=pub
application/x-msschedule=scd
application/x-msterminal=trm
application/x-mswrite=wri
application/x-netcdf=cdf
application/x-netcdf=nc
application/x-perfmon=pma
application/x-perfmon=pmc
application/x-perfmon=pml
application/x-perfmon=pmr
application/x-perfmon=pmw
application/x-pkcs12=p12
application/x-pkcs12=pfx
application/x-pkcs7-certificates=p7b
application/x-pkcs7-certificates=spc
application/x-pkcs7-certreqresp=p7r
application/x-pkcs7-mime=p7c
application/x-pkcs7-mime=p7m
application/x-pkcs7-signature=p7s
application/x-sh=sh
application/x-shar=shar
application/x-shockwave-flash=swf
application/x-stuffit=sit
application/x-sv4cpio=sv4cpio
application/x-sv4crc=sv4crc
application/x-tar=tar
application/x-tcl=tcl
application/x-tex=tex
application/x-texinfo=texi
application/x-texinfo=texinfo
application/x-troff=roff
application/x-troff=t
application/x-troff=tr
application/x-troff-man=man
application/x-troff-me=me
application/x-troff-ms=ms
application/x-ustar=ustar
application/x-wais-source=src
application/x-x509-ca-cert=cer
application/x-x509-ca-cert=crt
application/x-x509-ca-cert=der
application/ynd.ms-pkipko=pko
application/zip=zip
application/x-java-archive=jar
application/x-java-archive=war
audio/basic=au
audio/basic=snd
audio/mid=mid
audio/mid=rmi
audio/mpeg=mp3
audio/x-aiff=aif
audio/x-aiff=aifc
audio/x-aiff=aiff
audio/x-mpegurl=m3u
audio/x-pn-realaudio=ra
audio/x-pn-realaudio=ram
audio/x-wav=wav
image/bmp=bmp
image/cis-cod=cod
image/gif=gif
image/ief=ief
image/jpeg=jpe
image/jpeg=jpeg
image/jpeg=jpg
image/pipeg=jfif
image/svg+xml=svg
image/tiff=tif
image/tiff=tiff
image/x-cmu-raster=ras
image/x-cmx=cmx
image/x-icon=ico
image/x-portable-anymap=pnm
image/x-portable-bitmap=pbm
image/x-portable-graymap=pgm
image/x-portable-pixmap=ppm
image/x-rgb=rgb
image/x-xbitmap=xbm
image/x-xpixmap=xpm
image/x-xwindowdump=xwd
message/rfc822=mht
message/rfc822=mhtml
message/rfc822=nws
text/css=css
text/csv=csv
application/xml=xml
application/xhtml+xml=xhtml
text/h323=323
text/html=htm
text/html=html
text/html=stm
text/iuls=uls
text/plain=bas
text/plain=c
text/plain=h
text/plain=txt
text/richtext=rtx
text/scriptlet=sct
text/tab-separated-values=tsv
text/uri-list=txt
text/webviewhtml=htt
text/x-component=htc
text/x-setext=etx
text/x-vcard=vcf
video/mpeg=mp2
video/mpeg=mpa
video/mpeg=mpe
video/mpeg=mpeg
video/mpeg=mpg
video/mpeg=mpv2
video/quicktime=mov
video/quicktime=qt
video/x-la-asf=lsf
video/x-la-asf=lsx
video/x-ms-asf=asf
video/x-ms-asf=asr
video/x-ms-asf=asx
video/x-msvideo=avi
video/x-sgi-movie=movie
x-world/x-vrml=flr
x-world/x-vrml=vrml
x-world/x-vrml=wrl
x-world/x-vrml=wrz
x-world/x-vrml=xaf
x-world/x-vrml=xof

View File

@ -0,0 +1,181 @@
application/envoy =evy
application/fractals=fif
application/futuresplash=spl
application/hta=hta
application/internet-property-stream=acx
application/mac-binhex40=hqx
application/msword=doc
application/octet-stream=bin
application/oda=oda
application/olescript=axs
application/pdf=pdf
application/pics-rules=prf
application/pkcs10=p10
application/pkix-crl=crl
application/postscript=ps
application/rtf=rtf
application/set-payment-initiation=setpay
application/set-registration-initiation=setreg
application/vnd.ms-excel=xls
application/vnd.ms-outlook=msg
application/vnd.ms-pkicertstore=sst
application/vnd.ms-pkiseccat=cat
application/vnd.ms-pkistl=stl
application/vnd.ms-powerpoint=ppt
application/vnd.ms-project=mpp
application/vnd.ms-works=wcm
application/vnd.ms-works=wdb
application/vnd.ms-works=wks
application/vnd.ms-works=wps
application/vnd.openxmlformats-officedocument.wordprocessingml.document=docx
application/winhlp=hlp
application/x-bcpio=bcpio
application/x-cdf=cdf
application/x-compress=z
application/x-compressed=tgz
application/x-compressed-tar=tar.gz
application/x-cpio=cpio
application/x-csh=csh
application/x-director=dcr
application/x-director=dir
application/x-director=dxr
application/x-dvi=dvi
application/x-gtar=gtar
application/x-gzip=gz
application/x-hdf=hdf
application/x-internet-signup=ins
application/x-internet-signup=isp
application/x-iphone=iii
application/x-javascript=js
application/json=json
application/x-latex=latex
application/x-msaccess=mdb
application/x-mscardfile=crd
application/x-msclip=clp
application/x-msdownload=dll
application/x-msmediaview=m13
application/x-msmediaview=m14
application/x-msmediaview=mvb
application/x-msmetafile=wmf
application/x-msmoney=mny
application/x-mspublisher=pub
application/x-msschedule=scd
application/x-msterminal=trm
application/x-mswrite=wri
application/x-netcdf=cdf
application/x-netcdf=nc
application/x-perfmon=pma
application/x-perfmon=pmc
application/x-perfmon=pml
application/x-perfmon=pmr
application/x-perfmon=pmw
application/x-pkcs12=p12
application/x-pkcs12=pfx
application/x-pkcs7-certificates=p7b
application/x-pkcs7-certificates=spc
application/x-pkcs7-certreqresp=p7r
application/x-pkcs7-mime=p7c
application/x-pkcs7-mime=p7m
application/x-pkcs7-signature=p7s
application/x-sh=sh
application/x-shar=shar
application/x-shockwave-flash=swf
application/x-stuffit=sit
application/x-sv4cpio=sv4cpio
application/x-sv4crc=sv4crc
application/x-tar=tar
application/x-tcl=tcl
application/x-tex=tex
application/x-texinfo=texi
application/x-texinfo=texinfo
application/x-tika-java-web-archive=war
application/x-troff=roff
application/x-troff=t
application/x-troff=tr
application/x-troff-man=man
application/x-troff-me=me
application/x-troff-ms=ms
application/x-ustar=ustar
application/x-wais-source=src
application/x-x509-ca-cert=cer
application/x-x509-ca-cert=crt
application/x-x509-ca-cert=der
application/ynd.ms-pkipko=pko
application/zip=zip
audio/basic=au
audio/basic=snd
audio/mid=mid
audio/mid=rmi
audio/mpeg=mp3
audio/x-aiff=aif
audio/x-aiff=aifc
audio/x-aiff=aiff
audio/x-mpegurl=m3u
audio/x-pn-realaudio=ra
audio/x-pn-realaudio=ram
audio/x-wav=wav
image/bmp=bmp
image/cis-cod=cod
image/gif=gif
image/ief=ief
image/jpeg=jpe
image/jpeg=jpeg
image/jpeg=jpg
image/pipeg=jfif
image/svg+xml=svg
image/tiff=tif
image/tiff=tiff
image/x-cmu-raster=ras
image/x-cmx=cmx
image/x-icon=ico
image/x-portable-anymap=pnm
image/x-portable-bitmap=pbm
image/x-portable-graymap=pgm
image/x-portable-pixmap=ppm
image/x-rgb=rgb
image/x-xbitmap=xbm
image/x-xpixmap=xpm
image/x-xwindowdump=xwd
message/rfc822=mht
message/rfc822=mhtml
message/rfc822=nws
text/css=css
text/csv=csv
text/h323=323
text/html=htm
text/html=stm
text/html=html
text/iuls=uls
text/plain=bas
text/plain=c
text/plain=h
text/plain=txt
text/richtext=rtx
text/scriptlet=sct
text/tab-separated-values=tsv
text/uri-list=txt
text/webviewhtml=htt
text/x-component=htc
text/x-setext=etx
text/x-vcard=vcf
video/mpeg=mp2
video/mpeg=mpa
video/mpeg=mpe
video/mpeg=mpeg
video/mpeg=mpg
video/mpeg=mpv2
video/quicktime=mov
video/quicktime=qt
video/x-la-asf=lsf
video/x-la-asf=lsx
video/x-ms-asf=asf
video/x-ms-asf=asr
video/x-ms-asf=asx
video/x-msvideo=avi
video/x-sgi-movie=movie
x-world/x-vrml=flr
x-world/x-vrml=vrml
x-world/x-vrml=wrl
x-world/x-vrml=wrz
x-world/x-vrml=xaf
x-world/x-vrml=xof

6
src/test/resources/.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
/devNext.gcubekey
/devsec.gcubekey
/gcube.gcubekey
/pred4s.gcubekey
/preprod.gcubekey
/log4j.properties