/* This page is part of the Game of Life source code */

/*
 * Easy text file operations
 * Copyright 2003, 2004 Edwin Martin <edwin@bitstorm.org>
 *
 */
package org.bitstorm.util;

import java.awt.FileDialog;
import java.awt.Frame;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;


/**
 * Class for easy text file read and write operations.
 @author Edwin Martin
 *
 */
public class EasyFile {
  private String filepath;
  private String filename;
  private InputStream textFileReader;
  private OutputStream textFileWriter;
  private final int bufferLength=1024;
  private Frame parent;
  private String title;
  private String fileExtension;

  /**
   * Constructs a EasyFile. Open file by filename.
   @param filepath path of file
   @throws FileNotFoundException
   */
  public EasyFileString filepath ) {
    this.filepath = filepath;
    textFileReader = null;
    textFileWriter = null;
    fileExtension = null;
  }

  /**
   * Constructs a EasyFile. Open file by url.
   @param url url of file
   @throws FileNotFoundException
   */
  public EasyFileURL url throws IOException {
    this.filepath = null;
    textFileWriter = null;
    fileExtension = null;
    
    textFileReader = url.openStream();
  }

  /**
   * Constructs a EasyFile. Open file with file selector.
   @param parent parent frame
   @param title title of fileselector
   @throws FileNotFoundException
   */
  public EasyFileFrame parent, String title ) {
    this.parent = parent;
    this.title = title;
    textFileReader = null;
    textFileWriter = null;
    fileExtension = null;
  }
  
  /**
   * Constructs a EasyFile. Read file from stream.
   @param textFileReader stream to read from
   */
  public EasyFileInputStream textFileReader ) {
    this.textFileReader = textFileReader;
    textFileWriter = null;
    filepath = null;
    fileExtension = null;
  }

  /**
   * Constructs a EasyFile. Write file to stream.
   @param textFileWriter stream to write to
   */
  public EasyFileOutputStream textFileWriter ) {
    this.textFileWriter = textFileWriter;
    textFileReader = null;
    filepath = null;
    fileExtension = null;
  }

  /**
   * Reads a text file into a string.
   @return contents of file
   */
  public String readText() throws IOException {
    int bytesRead;

    if textFileReader == null ) {
      if filepath == null ) {
        FileDialog filedialog = new FileDialogparent, title, FileDialog.LOAD );
        filedialog.setFilefilename );
        filedialog.show();
        if filedialog.getFile() != null ) {
          filename = filedialog.getFile();
          filepath = filedialog.getDirectory()+filename;
        else
          return "";
      }
      textFileReader = new FileInputStreamfilepath );
    }

    StringBuffer text = new StringBuffer();
    byte[] buffer = new byte[bufferLength];

    try {
      while ( ( bytesRead = textFileReader.readbuffer, 0, bufferLength ) ) != -)
        text.appendnew Stringbuffer, 0, bytesRead ) );
    finally {
      textFileReader.close();
    }
    return text.toString();
  }

  /**
   * Writes a string to a text file.
   @param text text to write
   */
  public void writeTextString text throws IOException {
    if textFileWriter == null ) {
      if filepath == null ) {
        FileDialog filedialog = new FileDialogparent, title, FileDialog.SAVE );
        filedialog.setFilefilename );
        filedialog.show();
        if filedialog.getFile() != null ) {
          filename = filedialog.getFile();
          filepath = filedialog.getDirectory()+filename;
          if fileExtension != null && filepath.indexOf('.'== -) {
            filepath = filepath+fileExtension;
          }
        else
          return;
      }
      textFileWriter = new FileOutputStreamfilepath );
    }

    try {
      textFileWriter.writetext.getBytes() );
    finally {
      textFileWriter.close();
    }
  }
  
  /**
   * Sets filename to use
   @param s filename
   */
  public void setFileNameString s ) {
    filename = s;
  }

  /**
   * Gets filename
   @return filename
   */
  public String getFileName() {
    return filename == null ? filepath : filename;
  }

  /**
   * Sets file extension to use
   @param s filename
   */
  public void setFileExtensionString s ) {
    fileExtension = s;
  }
}
Java2html