/**
 * 
 */
package at.gv.egiz.pdfas.io;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import at.gv.egiz.pdfas.api.io.TextBased;

/**
 * FileBased DataSource that is TextBased.
 * 
 * @author wprinz
 */
public class FileBasedTextBasedDataSource extends FileBasedDataSource implements TextBased
{
  protected String text = null;

  /**
   * @param file
   * @param mimeType
   * @param characterEncoding
   * @throws IOException
   */
  public FileBasedTextBasedDataSource(File file, String mimeType, String characterEncoding) throws IOException
  {
    super(file, mimeType, characterEncoding);
    if (characterEncoding == null)
    {
      throw new IllegalArgumentException("The characterEncoding must not be null.");
    }
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#createInputStream()
   */
  public InputStream createInputStream()
  {
    return new ByteArrayInputStream(this.cache);
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray()
   */
  public byte[] getAsByteArray()
  {
    return this.cache;
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getLength()
   */
  public int getLength()
  {
    return this.cache.length;
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getMimeType()
   */
  public String getMimeType()
  {
    return this.mimeType;
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding()
   */
  public String getCharacterEncoding()
  {
    return this.characterEncoding;
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.FileBased#getFile()
   */
  public File getFile()
  {
    return this.file;
  }

  public String getText()
  {
    if (this.text == null)
    {
      try
      {
        this.text = new String(this.cache, this.characterEncoding);
      }
      catch (UnsupportedEncodingException e)
      {
        e.printStackTrace();
        throw new RuntimeException(e);
      }
    }
    return this.text;
  }

}