1 package org.apache.maven.it.util.cli; 2 3 /* 4 * The MIT License 5 * 6 * Copyright (c) 2004, The Codehaus 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a copy of 9 * this software and associated documentation files (the "Software"), to deal in 10 * the Software without restriction, including without limitation the rights to 11 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 12 * of the Software, and to permit persons to whom the Software is furnished to do 13 * so, subject to the following conditions: 14 * 15 * The above copyright notice and this permission notice shall be included in all 16 * copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 27 /******************************************************************************** 28 * CruiseControl, a Continuous Integration Toolkit 29 * Copyright (c) 2001-2003, ThoughtWorks, Inc. 30 * 651 W Washington Ave. Suite 500 31 * Chicago, IL 60661 USA 32 * All rights reserved. 33 * 34 * Redistribution and use in source and binary forms, with or without 35 * modification, are permitted provided that the following conditions 36 * are met: 37 * 38 * + Redistributions of source code must retain the above copyright 39 * notice, this list of conditions and the following disclaimer. 40 * 41 * + Redistributions in binary form must reproduce the above 42 * copyright notice, this list of conditions and the following 43 * disclaimer in the documentation and/or other materials provided 44 * with the distribution. 45 * 46 * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the 47 * names of its contributors may be used to endorse or promote 48 * products derived from this software without specific prior 49 * written permission. 50 * 51 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 52 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 53 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 54 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR 55 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 56 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 57 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 58 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 59 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 60 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 61 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 62 ********************************************************************************/ 63 64 /* ==================================================================== 65 * Copyright 2003-2004 The Apache Software Foundation. 66 * 67 * Licensed under the Apache License, Version 2.0 (the "License"); 68 * you may not use this file except in compliance with the License. 69 * You may obtain a copy of the License at 70 * 71 * http://www.apache.org/licenses/LICENSE-2.0 72 * 73 * Unless required by applicable law or agreed to in writing, software 74 * distributed under the License is distributed on an "AS IS" BASIS, 75 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 76 * See the License for the specific language governing permissions and 77 * limitations under the License. 78 * ==================================================================== 79 */ 80 81 import org.apache.maven.it.util.IOUtil; 82 83 import java.io.BufferedReader; 84 import java.io.InputStream; 85 import java.io.InputStreamReader; 86 import java.io.PrintWriter; 87 88 /** 89 * Class to pump the error stream during Process's runtime. Copied from the Ant 90 * built-in task. 91 * 92 * @author <a href="mailto:fvancea@maxiq.com">Florin Vancea </a> 93 * @author <a href="mailto:pj@thoughtworks.com">Paul Julius </a> 94 * @since June 11, 2001 95 */ 96 public class StreamPumper 97 extends Thread 98 { 99 private BufferedReader in; 100 101 private StreamConsumer consumer = null; 102 103 private PrintWriter out = null; 104 105 private static final int SIZE = 1024; 106 107 boolean done; 108 109 public StreamPumper( InputStream in ) 110 { 111 this.in = new BufferedReader( new InputStreamReader( in ), SIZE ); 112 } 113 114 public StreamPumper( InputStream in, StreamConsumer consumer ) 115 { 116 this( in ); 117 118 this.consumer = consumer; 119 } 120 121 public StreamPumper( InputStream in, PrintWriter writer ) 122 { 123 this( in ); 124 125 out = writer; 126 } 127 128 public StreamPumper( InputStream in, PrintWriter writer, StreamConsumer consumer ) 129 { 130 this( in ); 131 this.out = writer; 132 this.consumer = consumer; 133 } 134 135 public void run() 136 { 137 try 138 { 139 String s = in.readLine(); 140 141 while ( s != null ) 142 { 143 consumeLine( s ); 144 145 if ( out != null ) 146 { 147 out.println( s ); 148 149 out.flush(); 150 } 151 152 s = in.readLine(); 153 } 154 } 155 catch ( Throwable e ) 156 { 157 // Catched everything so the streams will be closed and flagged as done. 158 } 159 finally 160 { 161 IOUtil.close( in ); 162 163 164 synchronized ( this ) 165 { 166 done = true; 167 168 this.notifyAll(); 169 } 170 } 171 } 172 173 public void flush() 174 { 175 if ( out != null ) 176 { 177 out.flush(); 178 } 179 } 180 181 public void close() 182 { 183 IOUtil.close( out ); 184 } 185 186 public boolean isDone() 187 { 188 return done; 189 } 190 191 private void consumeLine( String line ) 192 { 193 if ( consumer != null ) 194 { 195 consumer.consumeLine( line ); 196 } 197 } 198 }