View Javadoc

1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  
21  package org.apache.james.socket;
22  
23  import java.io.FilterOutputStream;
24  import java.io.IOException;
25  import java.io.OutputStream;
26  
27  import org.apache.commons.logging.Log;
28  import org.apache.commons.logging.impl.SimpleLog;
29  
30  public class SplitOutputStream extends FilterOutputStream {
31  
32      private OutputStream debugOutputStream;
33  
34      StringBuffer logString = new StringBuffer();
35  
36      private boolean DEEP_DEBUG = false;
37  
38      private Log log;
39  
40      public SplitOutputStream(OutputStream out, OutputStream debug) {
41          super(out);
42          debugOutputStream = debug;
43      }
44  
45      public void flush() throws IOException {
46          super.flush();
47          if (debugOutputStream != null) {
48              debugOutputStream.flush();
49          }
50      }
51  
52      public void write(int b) throws IOException {
53          super.write(b);
54          if (DEEP_DEBUG) {
55              if (b == 10) {
56                  getLog().debug(logString);
57                  logString = new StringBuffer();
58              } else if (b != 13) {
59                  logString.append((char) b);
60              }
61          }
62          if (debugOutputStream != null) {
63              debugOutputStream.write(b);
64              debugOutputStream.flush();
65          }
66      }
67  
68      public void setLog(Log log) {
69          this.log = log;
70      }
71  
72      protected Log getLog() {
73          if (log == null) {
74              log = new SimpleLog("SplitOutputStream");
75          }
76          return log;
77      }
78  
79  }