diff --git a/distro/changelog.xml b/distro/changelog.xml index b1af042..8886e9e 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,9 +1,17 @@ + + [Task #17135] Workspace: assign the file extension during the + download + + [Task #17018] Move some methods to SHUB due to backward - compatibility broken between SHUB and HL + compatibility broken between SHUB and HL + 4.0.0 @@ -10,7 +11,7 @@ org.gcube.portlets.user workspace-tree-widget - 6.25.1-SNAPSHOT + 6.26.0-SNAPSHOT gCube Workspace Tree Widget gCube Workspace Tree Widget is a widget to navigate and interact with gCube Workspace @@ -263,6 +264,11 @@ provided + + commons-io + commons-io + + log4j diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java index a893c9c..9f4801e 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java @@ -17,7 +17,6 @@ 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.util.MimeTypeUtil; import org.gcube.common.portal.PortalContext; import org.gcube.common.storagehubwrapper.server.StorageHubWrapper; import org.gcube.common.storagehubwrapper.server.tohl.Workspace; @@ -31,6 +30,7 @@ import org.gcube.common.storagehubwrapper.shared.tohl.items.URLFileItem; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.server.property.PortalUrlGroupGatewayProperty; import org.gcube.portlets.user.workspace.server.util.AllowedMimeTypeToInline; +import org.gcube.portlets.user.workspace.server.util.MimeTypeUtility; import org.gcube.portlets.user.workspace.server.util.WsUtil; import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; @@ -154,7 +154,7 @@ public class DownloadServlet extends HttpServlet{ logger.info("Downloading the folder: "+workspaceFolder); String contentDisposition = viewContent?"inline":"attachment"; String mimeType = "application/zip"; - String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType); + String itemName = MimeTypeUtility.getNameWithExtension(item.getName(), mimeType); resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); resp.setContentType(mimeType); @@ -197,7 +197,7 @@ public class DownloadServlet extends HttpServlet{ String mimeType = pdfFile.getMimeType(); logger.trace("EXTERNAL_FILE DOWNLOAD FOR "+pdfFile.getId()); String contentDisposition = viewContent?"inline":"attachment"; - String itemName = MimeTypeUtil.getNameWithExtension(descr.getItemName(), mimeType); + String itemName = MimeTypeUtility.getNameWithExtension(descr.getItemName(), mimeType); resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); resp.setContentType(mimeType); @@ -223,7 +223,7 @@ public class DownloadServlet extends HttpServlet{ ImageFileItem imageFile = (ImageFileItem) workspaceFileItem; logger.info("Downloading: "+imageFile); String mimeType = imageFile.getMimeType(); - String itemName = MimeTypeUtil.getNameWithExtension(descr.getItemName(), mimeType); + String itemName = MimeTypeUtility.getNameWithExtension(descr.getItemName(), mimeType); String contentDisposition = viewContent?"inline":"attachment"; resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); resp.setContentType(mimeType); @@ -247,7 +247,7 @@ public class DownloadServlet extends HttpServlet{ URLFileItem externalUrl = (URLFileItem) workspaceFileItem; logger.info("Downloading: "+externalUrl); String urlMimeType = "text/uri-list"; - String itemName = MimeTypeUtil.getNameWithExtension(descr.getItemName(), urlMimeType); + String itemName = MimeTypeUtility.getNameWithExtension(descr.getItemName(), urlMimeType); String contentDisposition = viewContent?"inline":"attachment"; resp.setHeader("Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); resp.setContentType(urlMimeType); @@ -296,7 +296,7 @@ public class DownloadServlet extends HttpServlet{ try{ - String itemName = MimeTypeUtil.getNameWithExtension(descr.getItemName(), workspaceFileItem.getMimeType()); + String itemName = MimeTypeUtility.getNameWithExtension(descr.getItemName(), workspaceFileItem.getMimeType()); logger.info("Downloading default item: "+workspaceFileItem); //String contentDisposition = viewContent?"inline":"attachment"; diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/MimeTypeUtility.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/MimeTypeUtility.java new file mode 100644 index 0000000..0039315 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/MimeTypeUtility.java @@ -0,0 +1,251 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.server.util; + +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.log4j.Logger; +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; + +/** + * 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 { + + protected static Logger logger = Logger.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> mimetype_extension_map = new LinkedHashMap>(); + protected static final Map extension_mimetype_map = new LinkedHashMap(); + + static { + InputStream extensionToMimetype = MimeTypeUtility.class.getResourceAsStream("/ExtensionToMimeTypeMap.properties"); + InputStream mimetypeToExtension = MimeTypeUtility.class.getResourceAsStream("/MimeTypeToExtensionMap.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 toExtensions = mimetype_extension_map.get(mimeType); + if(toExtensions==null) { + toExtensions = new ArrayList(); + } + 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 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.trace("getNameWithExtension name: " + name + " mimeType: " + mimeType); + + String declaredExtension = FilenameUtils.getExtension(name); + + if(declaredExtension.isEmpty()) { + + if (mimeType == null) + return name; + + List extensions = MimeTypeUtility.getExtension(mimeType); + logger.trace("Available into map extensions is/are: " + extensions); + + String extension; + if(extensions==null) { + extension = ""; + }else { + extension = 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: " + extension); + extension = "." + extension; + } + + logger.trace("returning " + name + extension); + return name + extension; + }else { + logger.trace("extension already declared in the name "+name+", returning name like is it"); + return name; + } + } + + /** + * Check if the content type is a zip type. + * + * @param contentType the content type to check. + * @return true if is a zip file, false 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> getMimeTypeToExtensionMap() { + return mimetype_extension_map; + } + + + /** + * Gets the extension to mime type map. + * + * @return the extension to mime type map + */ + public static Map getExtensionToMimeTypeMap() { + return extension_mimetype_map; + } + +} diff --git a/src/main/resources/ExtensionToMimeTypeMap.properties b/src/main/resources/ExtensionToMimeTypeMap.properties new file mode 100644 index 0000000..f122032 --- /dev/null +++ b/src/main/resources/ExtensionToMimeTypeMap.properties @@ -0,0 +1,212 @@ +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/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 \ No newline at end of file diff --git a/src/main/resources/MimeTypeToExtensionMap.properties b/src/main/resources/MimeTypeToExtensionMap.properties new file mode 100644 index 0000000..a45aef6 --- /dev/null +++ b/src/main/resources/MimeTypeToExtensionMap.properties @@ -0,0 +1,177 @@ +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-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 +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/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 \ No newline at end of file diff --git a/src/test/java/org/gcube/portlets/user/workspace/MimeTypeUtilityTest.java b/src/test/java/org/gcube/portlets/user/workspace/MimeTypeUtilityTest.java new file mode 100644 index 0000000..e8da95d --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/workspace/MimeTypeUtilityTest.java @@ -0,0 +1,47 @@ +package org.gcube.portlets.user.workspace; + +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.portlets.user.workspace.server.util.MimeTypeUtility; + +public class MimeTypeUtilityTest { + + static Map fileNamesToMimeTypes = new LinkedHashMap<>(); + + static { + + fileNamesToMimeTypes.put("An html page of D4science.html", "text/html"); + fileNamesToMimeTypes.put("No Extension File of kind CSV", "text/csv"); + fileNamesToMimeTypes.put("No Extension File of kind PDF", "application/pdf"); + fileNamesToMimeTypes.put("An .o extension file", "text/html"); + } + + + public static void main(String[] args) { + + Map> mimetype_extension_map = MimeTypeUtility.getMimeTypeToExtensionMap(); + + System.out.println("Mime types: "); + for (String mimeType : mimetype_extension_map.keySet()) { + System.out.println(mimeType + " -> " + mimetype_extension_map.get(mimeType)); + } + + String mimeType = "text/html"; + System.out.println("\n\nGet " + mimeType + " returing list of exstensions: " + mimetype_extension_map.get(mimeType)); + + + for (String keyFileName : fileNamesToMimeTypes.keySet()) { + try { + System.out.println("\nResolving file name with extension for name: "+keyFileName); + String toFileName = MimeTypeUtility.getNameWithExtension(keyFileName, fileNamesToMimeTypes.get(keyFileName)); + System.out.println("Assigned the file name: "+toFileName); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + +}