/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /** * */ package com.autentia.tnt.upload.impl; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.*; import org.apache.myfaces.custom.fileupload.UploadedFile; import com.autentia.tnt.upload.*; import com.autentia.tnt.util.*; /** * Intraweb default uploader: places files in the path described in * configuration file. * * @author ivan */ public class DefaultUploader implements Uploader { /** path where files must be stored */ private String path; /** * Constructor * * @param object * object the file is associated to */ public DefaultUploader(String object) { path = ConfigurationUtil.getDefault().getUploadPath() + object + File.separator; } /** */ public void store(String id, UploadedFile file) throws IOException { InputStream in = null; OutputStream out = null; byte[] buffer = new byte[65536]; int nr; try{ in = file.getInputStream(); out = new FileOutputStream(getFilePath(id) + FileUtil.getFileName(file.getName())); while ((nr = in.read(buffer)) != -1) { out.write(buffer, 0, nr); } }finally{ if(in != null){ try{ in.close(); }catch(IOException ioex){ // Ignored } } if(out!=null){ try{ out.close(); }catch(IOException ioex){ // Ignored } } } } /** */ public void replace(String id, String oldFile, UploadedFile newFile) throws IOException { if (oldFile != null) { delete(id, oldFile); } store(id, newFile); } /** */ public boolean exists(String id, String file) { return new File(getFilePath(id) + file).exists(); } /** */ public boolean delete(String id, String file) throws IOException { final String fullPath = getFilePath(id) + file; boolean exists = exists(id, file); if (!exists) { return false; } else { boolean ok = new File(fullPath).delete(); if (!ok) { throw new IOException("File could not be deleted: " + fullPath); } else { return true; } } } /** */ public String version(String id, String oldFile, UploadedFile newFile) throws IOException { final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-hhmmss"); if (!exists(id, oldFile)) { throw new FileNotFoundException(oldFile + " doesn't exists!"); } if (oldFile == null) { store(id, newFile); return newFile.getName(); } final String versioned = oldFile.substring(0, oldFile.lastIndexOf('.')) + "_" + sdf.format(new Date()) + oldFile.substring(oldFile.lastIndexOf('.')); byte[] buffer = new byte[65536]; int nr; InputStream in = null; OutputStream out = null; try{ in = newFile.getInputStream(); out = new FileOutputStream(getFilePath(id) + FileUtil.getFileName(versioned)); while ((nr = in.read(buffer)) != -1) { out.write(buffer, 0, nr); } }finally{ if(in != null){ try{ in.close(); }catch(IOException ioex){ // Ignored } } if(out!=null){ try{ out.close(); }catch(IOException ioex){ // Ignored } } } return versioned; } /** * Get file path and create directories as necessary. * * @return the file path (directory where it should be stored */ private String getFilePath(String id) { final String filePath = (id == null) ? (path) : (path + id + File.separator); new File(filePath).mkdirs(); return filePath; } }