/** * */ package org.inbio.m3s.util; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; /** * @author jgutierrez * */ public class MediaFileManagement { private static Logger logger = Logger.getLogger(MediaFileManagement.class); /* Inyected values*/ private String thumbFolder = "THUMB"; private String bigFolder = "BIG"; private String originalFolder = "ORIGINAL"; // Media Size public int ORIGINAL = 0; public int THUMB = 1; public int BIG = 2; //FIXME: esto no deberia estar aca public Integer DSC_MEDIA_TYPE_ID = new Integer(1); public Integer YOUTUBE_VIDEO_TYPE_ID = new Integer(6); //FIXME: esto no deberia estar aca public Integer MOV_VIDEO_MEDIA_TYPE_ID = new Integer(4); /** * Takes the temporal media and moves it to the ORIGINAL MEDIA folder., * removes the tempFileName and Creates the THUMB and BIG media. Everything on * the day's folder * * * @param tempFileName * temporal name of the image * @param DBFileName * the name of the file with its extension * @param mediaId * Data Base media Identifier * @param mediaFilesPath The filePath where the media will be stored * @throws IllegalArgumentExcption */ public void organizeAndCleanFiles(String tempFileName, Integer mediaId, Integer mediaTypeId, String mediaFilesPath) throws IllegalArgumentException { logger.debug("organizeAndCleanFiles"); logger.debug("params: [tempFileName=" + tempFileName + "], " + "[mediaId=" + mediaId + "] " + "[mediaTypeId=" + mediaTypeId + "]."); // todays images and date params to keep media organized DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String todaysDate = (dateFormat.format(new Date())).toString(); // address of the high quality image String orignalMediaFilePath = mediaFilesPath + originalFolder + File.separator + todaysDate + File.separator + mediaId.toString() + getFileExtension(mediaTypeId, ORIGINAL); String thumbMediaFilePath; String bigMediaFilePath; File dir = null; File file = null; File newFile = null; logger.debug("moviendo archivos con apache commons-io"); try { file = new File(tempFileName); newFile = new File(orignalMediaFilePath); logger.debug("archivo fuente : '" + file.getCanonicalPath() + "'."); // file. logger.debug("archivo destino: '" + newFile.getCanonicalPath() + "'."); FileUtils.moveFile(file, newFile); // thumbMediaFilePath = mediaFilesPath + thumbFolder; bigMediaFilePath = mediaFilesPath + bigFolder; thumbMediaFilePath = thumbMediaFilePath + File.separator + todaysDate; bigMediaFilePath = bigMediaFilePath + File.separator + todaysDate; // creates the folder with the date to keep media organized(in case its // not created before) dir = new File(thumbMediaFilePath); FileUtils.forceMkdir(dir); dir = new File(bigMediaFilePath); FileUtils.forceMkdir(dir); } catch (Exception e) { logger.error("algo salio MAL moviendo los archivos."); logger.error(e.getMessage()); throw new IllegalArgumentException("Error Grave: Problemas moviendo los archivos."); } logger.debug("Fin prueba de mover archivo con apache commons-io"); thumbMediaFilePath = thumbMediaFilePath + File.separator + mediaId.toString() + getFileExtension(mediaTypeId, THUMB); bigMediaFilePath = bigMediaFilePath + File.separator + mediaId.toString() + getFileExtension(mediaTypeId, BIG); // create the thumb and big media files createLowResFiles(mediaTypeId, orignalMediaFilePath, thumbMediaFilePath, bigMediaFilePath); } /** * * @param fileName * @return */ public boolean isFileReadable(String fileName){ logger.debug("isFileReadable"); logger.debug("params: [fileName=" + fileName + "]."); try{ File f =new File(fileName); return f.canRead(); } catch(NullPointerException npe){ logger.error("file '" + fileName + "' doesnt exist!."); return false; } catch(Exception e){ logger.error("file '" + fileName + "' is not accesible [pero si existe]."); return false; } } /** * Creates the low resoultion files to be shown on the web. * * @param mediaTypeId * @param originalMediaFilePath * with the full path and the file name. ie: /media/orginal/7.mov * @param thumbMediaFilePath * with the full path and the file name. ie: /media/thumb/7.jpg * @param bigMediaFilePath * with the full path and the file name. ie: /media/thumb/7.flv * @throws IllegalArgumentException */ private void createLowResFiles(Integer mediaTypeId, String originalMediaFilePath, String thumbMediaFilePath, String bigMediaFilePath) throws IllegalArgumentException { try{ if (mediaTypeId.equals(DSC_MEDIA_TYPE_ID) || mediaTypeId.equals(YOUTUBE_VIDEO_TYPE_ID)) { ImageMagickAPI.createThumb(originalMediaFilePath, thumbMediaFilePath); ImageMagickAPI.writeStandardSize(originalMediaFilePath, bigMediaFilePath); } else if (mediaTypeId.equals(MOV_VIDEO_MEDIA_TYPE_ID)) { VideoAPI.createThumb(originalMediaFilePath, thumbMediaFilePath); VideoAPI.createFLV(originalMediaFilePath, bigMediaFilePath); } else { logger.error("No se puede reconocer el mediaTypeId recibido como parametro"); throw new IllegalArgumentException("No se puede reconocer el mediaTypeId recibido como parametro"); } } catch(Exception e){ logger.error("No se puede reconocer el mediaTypeId recibido como parametro"); throw new IllegalArgumentException("No se puede reconocer el mediaTypeId recibido como parametro"); } } /** * Este metodo esta todo alambrado, pero en teoria es para que dado un * mediaTypeId, retorne la extensión del archivo que debe guardarse en la * estructura de datos de la BD. * * @param mediaTypeId * @param mediaSize * estan al final de este archivo como constantes. * @return la extension apropiada para el multimedio * @throws IllegalArgumentException */ private String getFileExtension(Integer mediaTypeId, int mediaSize) throws IllegalArgumentException { if (mediaTypeId.equals(DSC_MEDIA_TYPE_ID) || mediaTypeId.equals(YOUTUBE_VIDEO_TYPE_ID)) { return ".jpg"; } else if (mediaTypeId.equals(MOV_VIDEO_MEDIA_TYPE_ID)) { if (mediaSize == ORIGINAL) return ".mov"; else if (mediaSize == THUMB) return ".jpg"; else // if(mediaSize == ImportFromFile.BIG) return ".flv"; } else { logger .error("No se puede reconocer el mediaTypeId recibido como parametro"); throw new IllegalArgumentException( "No se puede reconocer el mediaTypeId recibido como parametro"); } } /** * @return the thumbFolder */ public String getThumbFolder() { return thumbFolder; } /** * @param thumbFolder the thumbFolder to set */ public void setThumbFolder(String thumbFolder) { this.thumbFolder = thumbFolder; } /** * @return the bigFolder */ public String getBigFolder() { return bigFolder; } /** * @param bigFolder the bigFolder to set */ public void setBigFolder(String bigFolder) { this.bigFolder = bigFolder; } /** * @return the originalFolder */ public String getOriginalFolder() { return originalFolder; } /** * @param originalFolder the originalFolder to set */ public void setOriginalFolder(String originalFolder) { this.originalFolder = originalFolder; } }