| /******************************************************************************* |
| * Copyright (c) 2005, 2006 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); |
| } |
| } |