001: /*****************************************************************************
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025:
026: * The Original Software is the CVS Client Library.
027: * The Initial Developer of the Original Software is Robert Greig.
028: * Portions created by Robert Greig are Copyright (C) 2000.
029: * All Rights Reserved.
030: *
031: * If you wish your version of this file to be governed by only the CDDL
032: * or only the GPL Version 2, indicate your decision by adding
033: * "[Contributor] elects to include this software in this distribution
034: * under the [CDDL or GPL Version 2] license." If you do not indicate a
035: * single choice of license, a recipient has the option to distribute
036: * your version of this file under either the CDDL, the GPL Version 2 or
037: * to extend the choice of license to its licensees as provided above.
038: * However, if you add GPL Version 2 code and therefore, elected the GPL
039: * Version 2 license, then the option applies only if the new code is
040: * made subject to such option by the copyright holder.
041:
042: * Contributor(s): Robert Greig.
043: *****************************************************************************/package org.netbeans.lib.cvsclient.util;
044:
045: import java.io.*;
046:
047: /**
048: * A data output stream that also logs everything sent to a Writer (via the
049: * logger).
050: * @author Robert Greig
051: */
052: public class LoggedDataOutputStream extends FilterOutputStream {
053:
054: private long counter;
055:
056: /**
057: * Construct a logged stream using the specified underlying stream
058: * @param out the stream
059: */
060: public LoggedDataOutputStream(OutputStream out) {
061: super (out);
062: }
063:
064: /**
065: * Write a line to the stream, logging it too. For compatibility reasons
066: * only. Does exactly the same what writeBytes() does.
067: *
068: * @deprecated Line to to bytes conversion is host specifics.
069: * Use raw byte access methods insted.
070: *
071: */
072: public void writeChars(String line) throws IOException {
073: writeBytes(line);
074: }
075:
076: /**
077: * Write a line to the stream, logging it too.
078: *
079: * Line to to bytes conversion is host specifics. Use {@link #writeBytes(String, String)} if possible.
080: */
081: public void writeBytes(String line) throws IOException {
082: byte[] bytes = line.getBytes();
083: out.write(bytes);
084: Logger.logOutput(bytes);
085: counter += bytes.length;
086: }
087:
088: /**
089: * Write a line to the stream, logging it too.
090: */
091: public void writeBytes(String line, String encoding)
092: throws IOException {
093: byte[] bytes = line.getBytes(encoding);
094: out.write(bytes);
095: Logger.logOutput(bytes);
096: counter += bytes.length;
097: }
098:
099: public void write(int b) throws IOException {
100: super .write(b);
101: counter++;
102: }
103:
104: public void write(byte b[]) throws IOException {
105: super .write(b);
106: counter += b.length;
107: }
108:
109: public void write(byte b[], int off, int len) throws IOException {
110: super .write(b, off, len);
111: counter += len;
112: }
113:
114: /**
115: * Closes this input stream and releases any system resources associated
116: * with the stream.
117: */
118: public void close() throws IOException {
119: out.close();
120: }
121:
122: public OutputStream getUnderlyingStream() {
123: return out;
124: }
125:
126: public void setUnderlyingStream(OutputStream os) {
127: out = os;
128: }
129:
130: public long getCounter() {
131: return counter;
132: }
133: }
|