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

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

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

/**
 * A String TextBased DataSource.
 * 
 * @author wprinz
 * 
 */
public class StringTextBasedDataSource implements DataSource, TextBased
{
  /**
   * The text.
   */
  protected String text = null;

  protected byte[] cache = null;

  /**
   * @param text
   */
  public StringTextBasedDataSource(String text)
  {
    this.text = text;
  }

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

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getAsByteArray()
   */
  public byte[] getAsByteArray()
  {
    if (cache == null)
    {
      try
      {
        this.cache = this.text.getBytes("UTF-8");
      }
      catch (UnsupportedEncodingException e)
      {
        e.printStackTrace();
        throw new RuntimeException(e);
      }
    }
    return this.cache;
  }

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

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

  /**
   * @see at.gv.egiz.pdfas.api.io.DataSource#getCharacterEncoding()
   */
  public String getCharacterEncoding()
  {
    return "UTF-8";
  }

  /**
   * @see at.gv.egiz.pdfas.api.io.TextBased#getText()
   */
  public String getText()
  {
    return this.text;
  }

}