/**
*
*/
package at.gv.egiz.pdfas.impl.input;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import at.gv.egiz.pdfas.framework.input.TextDataSource;
import at.gv.egiz.pdfas.impl.input.helper.DataSourceHelper;
/**
* @author wprinz
*
*/
public class FileBasedTextDataSourceImpl implements TextDataSource, FileBased
{
/**
* The log.
*/
private static final Log log = LogFactory.getLog(FileBasedTextDataSourceImpl.class);
protected File file = null;
protected String characterEncoding = null;
public FileBasedTextDataSourceImpl(File file, String characterEncoding) throws IOException
{
if (!file.exists())
{
throw new FileNotFoundException("The file '" + file + "' does not exist.");
}
if (!file.canRead())
{
throw new IOException("The file '" + file + "' cannot be read.");
}
this.file = file;
this.characterEncoding = characterEncoding;
}
/**
* @see at.gv.egiz.pdfas.impl.input.FileBased#getFile()
*/
public File getFile()
{
return this.file;
}
/**
* Returns the character encoding.
*
* @return Returns the character encoding.
*/
public String getCharacterEncoding()
{
return this.characterEncoding;
}
/**
* @see at.gv.egiz.pdfas.framework.input.TextDataSource#getText()
*/
public String getText()
{
try
{
InputStream is = createInputStream();
byte[] data = new byte[getLength()];
int read = 0;
int n = 0;
while ((n = is.read(data, read, data.length - read)) > 0)
{
read += n;
}
is.close();
String text = new String(data, getCharacterEncoding());
data = null;
return text;
}
catch (IOException e)
{
log.error("Couldn't read text for file " + getFile() + ". Returning null.", e);
return null;
}
}
/**
* @see at.gv.egiz.pdfas.framework.input.DataSource#createInputStream()
*/
public InputStream createInputStream()
{
try
{
FileInputStream fis = new FileInputStream(getFile());
return fis;
}
catch (IOException e)
{
log.error("Couldn't create InputStream for file " + getFile() + ". Returning null.", e);
return null;
}
}
/**
* @see at.gv.egiz.pdfas.framework.input.DataSource#getLength()
*/
public int getLength()
{
return (int) getFile().length();
}
byte [] cache = null;
/**
* @see at.gv.egiz.pdfas.framework.input.DataSource#getAsByteArray()
*/
public byte[] getAsByteArray()
{
if (cache != null)
{
return cache;
}
cache = DataSourceHelper.convertInputStreamToByteArray(createInputStream());
return cache;
}
}