FileDocCategorySizeDatePackage
NullProducer.javaAPI DocExample1907Tue Feb 04 21:46:28 GMT 1997dcj.util.Bandwidth

NullProducer.java

package dcj.util.Bandwidth;

import java.io.InputStream;
import java.io.OutputStream;

public class ContentProducer
{
  protected ContentProducer source = null;
  protected ContentConsumer dest = null;
  protected DataMonitor     monitor = new DataMonitor();

  public ContentProducer(InputStream src) {
    source = new ContentProducer(src);
  }

  public ContentProducer(ContentProducer src) {
    source = src;
  }

  public ContentProducer(OutputStream dst) {
    dest = new ContentConsumer(dst);
  }

  public ContentProducer(ContentConsumer dst) {
    dest = dst;
  }

  public void setSource(ContentProducer p) {
    source = p;
  }

  public void setSource(InputStream s) {
    source = new ContentProducer(s);
  }

  public void setDest(ContentConsumer c) {
    dest = c;
  }

  public void setDest(OutputStream s) {
    dest = new ContentConsumer(s);
  }

  // Produce a chunk of data
  public byte[] produce() {
    boolean success;
    byte[] data = null;
    success = preProduction();
    if (success)
      data = doProduction();
    if (success && data != null)
      success = postProduction(data);

    return data;
  }

  // Default pre-consumption procedure: log the start of
  // data consumption if not done already.
  protected boolean preProduction() {
    if (monitor.getStart() == null)
      monitor.start();

    return true;
  }

  // Default consumption procedure: write data unmodified to our
  // output destination, if present.
  protected byte[] doProduction() {
    byte[] data = null;
    if (source != null) {
      data = source.produce();
    }

    return data;
  }

  // Default post-consumption procedure: log the data consumption
  // size and finish time with our monitor.
  protected boolean postProduction(byte[] data) {
    monitor.addSample(data.length);
    return true;
  }
}