ManagedOutputStream.java :  » IDE-Eclipse » osgi » org » eclipse » osgi » storagemanager » Java Open Source

Java Open Source » IDE Eclipse » osgi 
osgi » org » eclipse » osgi » storagemanager » ManagedOutputStream.java
/*******************************************************************************
 * Copyright (c) 2005, 2008 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.osgi.storagemanager;

import java.io.*;

/**
 * Represents a managed output stream for target managed by a storage manager.
 * @see StorageManager#getOutputStream(String)
 * @see StorageManager#getOutputStreamSet(String[])
 * <p>
 * Clients may not extend this class.
 * </p>
 * @since 3.2
 */
// Note the implementation of this class originated from the following deprecated classes:
// /org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/StreamManagerOutputStream.java
public final class ManagedOutputStream extends FilterOutputStream {
  static final int ST_OPEN = 0;
  static final int ST_CLOSED = 1;
  private String target;
  private StorageManager manager;
  private File outputFile;
  private int state;
  private ManagedOutputStream[] streamSet = null;

  ManagedOutputStream(OutputStream out, StorageManager manager, String target, File outputFile) {
    super(out);
    this.manager = manager;
    this.target = target;
    this.outputFile = outputFile;
    this.state = ST_OPEN;
  }

  /** 
   * Instructs this output stream to be closed and storage manager to 
   * be updated as appropriate.  If this managed output stream is part of 
   * a set returned by {@link StorageManager#getOutputStreamSet(String[])} then
   * the storage manager will only be updated with the new content after all 
   * of the managed output streams in the set are closed successfully.
   * @see FilterOutputStream#close()
   */
  public void close() throws IOException {
    manager.closeOutputStream(this);
  }

  /**
   * Instructs this output stream to be closed and the contents discarded.
   * If this managed output stream is part of a set returned by 
   * {@link StorageManager#getOutputStreamSet(String[])} then the new 
   * content of all managed output streams in the set will be discarded.
   */
  public void abort() {
    manager.abortOutputStream(this);
  }

  OutputStream getOutputStream() {
    return out;
  }

  String getTarget() {
    return target;
  }

  File getOutputFile() {
    return outputFile;
  }

  int getState() {
    return state;
  }

  void setState(int state) {
    this.state = state;
  }

  void setStreamSet(ManagedOutputStream[] set) {
    streamSet = set;
  }

  ManagedOutputStream[] getStreamSet() {
    return streamSet;
  }

  /*
   * (non-Javadoc)
   * @see java.io.FilterOutputStream#write(byte[], int, int)
   * Override this method to prevent single byte writes to the output stream
   * which is done by the default implementation of FilteredOutputStream
   */
  public void write(byte[] bytes, int off, int len) throws IOException {
    out.write(bytes, off, len);
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.