/*
* Copyright (C) 2014 GG-Net GmbH - Oliver Günther
*
* 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, or
* (at your option) any later version.
*
* 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 eu.ggnet.dwoss.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import org.apache.commons.io.IOUtils;
/**
* A Container to transfer File contents
* <p/>
* @author oliver.guenther
*/
public class FileJacket implements Serializable {
private byte[] content;
private String head;
private String suffix;
/**
* Constructor to set the content directly.
*
* @param head the head of the filename
* @param suffix the suffix of the file
* @param content the content of the file
*/
public FileJacket(String head, String suffix, byte[] content) {
this.content = content;
this.head = head;
this.suffix = suffix;
}
/**
* Constructur with read in logic.
* Creates a new DataFile with the content of the supplied file
* <p/>
* @param head the head of the filename
* @param suffix the suffix of the file
* @param file the file to read
* @throws RuntimeException if something while reading the file fails.
*/
public FileJacket(String head, String suffix, File file) throws RuntimeException {
this.head = head;
this.suffix = suffix;
content = new byte[0];
if ( file == null ) throw new NullPointerException("File is null");
if ( !file.exists() || !file.canRead() ) throw new IllegalStateException(file + " dosn't exist or cannot be read");
try (FileInputStream is = new FileInputStream(file)) {
content = IOUtils.toByteArray(is);
} catch (IOException ex) {
throw new RuntimeException("Exception during Read File", ex);
}
}
/**
* Creates a temporary File with the content of this DataFile, deletes on exit.
* <p/>
* @return the file pointing to the temporary one.
*/
public File toTemporaryFile() {
File f;
try {
f = File.createTempFile(head + "_", suffix);
f.deleteOnExit();
} catch (IOException ex) {
throw new RuntimeException("Temporary File creation not done.", ex);
}
try (FileOutputStream os = new FileOutputStream(f)) {
IOUtils.write(content, os);
} catch (IOException ex) {
throw new RuntimeException("Temporary File creation not done.", ex);
}
return f;
}
/**
* Creates a File from the FileJacket and stores it.
* The File name will be FileJacket.head + Filejacket.suffix
* <p/>
* @param url the location the File is stored to
* @return the File
*/
public File toFile(String url) {
File f = new File(url + "/" + this.head + this.suffix);
try (FileOutputStream os = new FileOutputStream(f)) {
IOUtils.write(content, os);
} catch (IOException e) {
throw new RuntimeException("File Creation Unseccessful", e);
}
return f;
}
public byte[] getContent() {
return content;
}
public String getHead() {
return head;
}
public String getSuffix() {
return suffix;
}
}