/*
 * Copyright (c) 2008. All rights reserved.
 */
package ro.isdc.wro.http.support;

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletOutputStream;

/**
 * Delegating implementation of {@link javax.servlet.ServletOutputStream}.
 *
 * @author Alex Objelean
 * @created Created on Nov 14, 2008
 */
public class DelegatingServletOutputStream extends ServletOutputStream {
  /**
   * Target {@link OutputStream} object.
   */
  private final OutputStream targetStream;

  /**
   * Create a DelegatingServletOutputStream for the given target stream.
   *
   * @param targetStream
   *          the target stream (never <code>null</code>)
   */
  public DelegatingServletOutputStream(final OutputStream targetStream) {
    if (targetStream == null) {
      throw new IllegalArgumentException("Target OutputStream must not be null");
    }
    this.targetStream = targetStream;
  }

  /**
   * Return the underlying target stream (never <code>null</code>).
   */
  public final OutputStream getTargetStream() {
    return this.targetStream;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void write(final int b) throws IOException {
    this.targetStream.write(b);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void flush() throws IOException {
    super.flush();
    this.targetStream.flush();
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void close() throws IOException {
    super.close();
    this.targetStream.close();
  }
}
