Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package utils; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; import org.apache.commons.io.FileUtils; import sv.com.mined.sieni.SieniArchivoFacadeRemote; import sv.com.mined.sieni.model.SieniArchivo; /** * * @author francisco_medina */ @ManagedBean(name = "copiaArchivos") public class CopiaArchivos { @EJB private SieniArchivoFacadeRemote sieniArchivoFacadeRemote; public Properties getProperties() { try { Properties props = new Properties(); props.load(CopiaArchivos.class.getClassLoader().getResourceAsStream("sieni.properties")); return props; } catch (IOException ex) { Logger.getLogger(CopiaArchivos.class.getName()).log(Level.SEVERE, null, ex); } return null; } public String getSeparador() { // return File.separator; return getProperties().getProperty("separador"); } public String getResourcesUrl() { ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext() .getContext(); String ruta = servletContext.getRealPath("") + getRelativeResourcesUrl(); // URL url = CopiaArchivos.class.getClassLoader().getResource("sieni.properties"); // String ruta = url.getFile(); ruta = formatUrl(ruta); int pos = (ruta.lastIndexOf("/") != -1) ? ruta.lastIndexOf("/") : ruta.lastIndexOf(File.separator); ruta = ruta.substring(0, pos); return ruta; } public String formatUrl(String url) { Character separador1 = '\\', separador2 = '/'; url = url.replace(separador1, getSeparador().charAt(0)); url = url.replace(separador2, getSeparador().charAt(0)); return url; } public String getMultimediaBaseUrl() { String multimedia = getProperties().getProperty("resources.multimedia.base"); return multimedia; } public String getRelativeResourcesUrl() { return getSeparador() + "resources" + getSeparador() + getMultimediaBaseUrl() + getSeparador(); } public String getRelativeBaseResourcesUrl() { return getSeparador() + "resources" + getSeparador(); } public String getContexto() { ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext() .getContext(); return servletContext.getContextPath(); } public String getRutaRelativa(Character tipoArchivo) { CopiaArchivos cpa = new CopiaArchivos(); String rutaRelativa = ""; String extencion = ""; Properties props = cpa.getProperties(); String separador = cpa.getSeparador(); Long numeroUnico = new Date().getTime(); switch (tipoArchivo) { case 'F': extencion = ".jpg"; rutaRelativa = props.getProperty("resources.multimedia.foto") + separador + numeroUnico.toString() + extencion; break; case 'V': extencion = ".mp4"; rutaRelativa = props.getProperty("resources.multimedia.video") + separador + numeroUnico.toString() + extencion; break; case 'I': extencion = ".jpg"; rutaRelativa = props.getProperty("resources.multimedia.imagen") + separador + numeroUnico.toString() + extencion; break; case 'A': extencion = ".mp3"; rutaRelativa = props.getProperty("resources.multimedia.audio") + separador + numeroUnico.toString() + extencion; break; } return rutaRelativa; } public String getFotoDefault() { CopiaArchivos cpa = new CopiaArchivos(); Properties props = cpa.getProperties(); String extencion = ".jpg"; return props.getProperty("resources.multimedia.foto") + cpa.getSeparador() + props.getProperty("resources.multimedia.foto.default") + extencion; } //cuando el archivo esta creado en la BD pero no existe en la carpeta de recursos public boolean copyDataToResource(SieniArchivo archivoEntity) { CopiaArchivos cpa = new CopiaArchivos(); Long idArchivo = archivoEntity.getIdArchivo(); boolean crear = false, copiaExitosa = false; //si no existe el nombre del archivo se crea String rutaRelativa = archivoEntity.getArRuta() != null ? archivoEntity.getArRuta() : cpa.getRutaRelativa(archivoEntity.getArTipo()); String ruta = cpa.getResourcesUrl() + cpa.getSeparador() + rutaRelativa; ruta = formatUrl(ruta); rutaRelativa = formatUrl(rutaRelativa); if (archivoEntity.getArRuta() != null) { File archivoCopia = new File(ruta); crear = !archivoCopia.exists(); } else { crear = true; } if (crear) {//crea la copia para streaming eficiente try { byte[] archivo = sieniArchivoFacadeRemote.getArchivoLazy(idArchivo); File f = new File(ruta); FileUtils.writeByteArrayToFile(f, archivo); archivoEntity.setArRuta(rutaRelativa); sieniArchivoFacadeRemote.edit(archivoEntity); copiaExitosa = true; } catch (IOException ex) { Logger.getLogger(CopiaArchivos.class.getName()).log(Level.SEVERE, null, ex); } } else { copiaExitosa = true; } return copiaExitosa; } //cuando el archivo esta creado en la BD pero no existe en la carpeta de recursos public byte[] getData(SieniArchivo archivoEntity) { Long idArchivo = archivoEntity.getIdArchivo(); byte[] archivo = sieniArchivoFacadeRemote.getArchivoLazy(idArchivo); return archivo; } //cuando se quiere actualizar el archivo de un recurso public SieniArchivo updateDataToResource(SieniArchivo archivoEntity) { CopiaArchivos cpa = new CopiaArchivos(); boolean crear = false; //si no existe el nombre del archivo se crea String rutaRelativa = archivoEntity.getArRuta() != null ? archivoEntity.getArRuta() : cpa.getRutaRelativa(archivoEntity.getArTipo()); String ruta = cpa.getResourcesUrl() + cpa.getSeparador() + rutaRelativa; ruta = formatUrl(ruta); rutaRelativa = formatUrl(rutaRelativa); if (archivoEntity.getArRuta() != null) { File archivoCopia = new File(ruta); crear = !archivoCopia.exists(); } else { crear = true; } if (crear) {//crea la copia para streaming eficiente try { byte[] archivo = archivoEntity.getArArchivo(); File f = new File(ruta); FileUtils.writeByteArrayToFile(f, archivo); archivoEntity.setArRuta(rutaRelativa); } catch (IOException ex) { Logger.getLogger(CopiaArchivos.class.getName()).log(Level.SEVERE, null, ex); } } else {//actualizar archivo try { byte[] archivo = archivoEntity.getArArchivo(); File f = new File(ruta); // f.delete(); FileUtils.writeByteArrayToFile(f, archivo); archivoEntity.setArRuta(rutaRelativa); } catch (IOException ex) { Logger.getLogger(CopiaArchivos.class.getName()).log(Level.SEVERE, null, ex); } } return archivoEntity; } //Elimina el archivo de la carpeta de recursos public boolean deleteDataToResource(SieniArchivo archivoEntity) { CopiaArchivos cpa = new CopiaArchivos(); boolean existe = false, eliminacionExitosa = false; //si no existe el nombre del archivo se crea String rutaRelativa = archivoEntity.getArRuta() != null ? archivoEntity.getArRuta() : cpa.getRutaRelativa(archivoEntity.getArTipo()); String ruta = cpa.getResourcesUrl() + cpa.getSeparador() + rutaRelativa; ruta = formatUrl(ruta); rutaRelativa = formatUrl(rutaRelativa); if (archivoEntity.getArRuta() != null) { File archivoCopia = new File(ruta); existe = archivoCopia.exists(); } if (existe) {//crea la copia para streaming eficiente try { File f = new File(ruta); f.delete(); eliminacionExitosa = true; } catch (Exception ex) { Logger.getLogger(CopiaArchivos.class.getName()).log(Level.SEVERE, null, ex); eliminacionExitosa = false; } } else { eliminacionExitosa = true; } return eliminacionExitosa; } public void setSieniArchivoFacadeRemote(SieniArchivoFacadeRemote sieniArchivoFacadeRemote) { this.sieniArchivoFacadeRemote = sieniArchivoFacadeRemote; } }