1 /* 2 * This file is part of Waarp Project (named also Waarp or GG). 3 * 4 * Copyright (c) 2019, Waarp SAS, and individual contributors by the @author 5 * tags. See the COPYRIGHT.txt in the distribution for a full listing of 6 * individual contributors. 7 * 8 * All Waarp Project is free software: you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or (at your 11 * option) any later version. 12 * 13 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY 14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along with 18 * Waarp . If not, see <http://www.gnu.org/licenses/>. 19 */ 20 package org.waarp.openr66.context.task; 21 22 import org.waarp.common.file.FileUtils; 23 24 import java.io.BufferedReader; 25 import java.io.IOException; 26 import java.io.InputStreamReader; 27 import java.io.PipedInputStream; 28 29 /** 30 * This class is used with external process in order to get the last echo from 31 * the stdout of the process. 32 */ 33 class LastLineReader extends Thread { 34 private final BufferedReader reader; 35 /** 36 * This will be the result at the end 37 */ 38 private String lastLine; 39 40 LastLineReader(final PipedInputStream inputStream) { 41 reader = new BufferedReader(new InputStreamReader(inputStream)); 42 } 43 44 @Override 45 public final void run() { 46 String line; 47 try { 48 while ((line = reader.readLine()) != null) { 49 line = line.trim(); 50 if (!line.isEmpty()) { 51 setLastLine(line); 52 } 53 } 54 } catch (final IOException e) { 55 // Could be a "Write end dead", which means the end of the thread 56 // writer is found 57 // before the thread closes the write pipe 58 } 59 FileUtils.close(reader); 60 } 61 62 /** 63 * @return the lastLine 64 */ 65 public final String getLastLine() { 66 return lastLine; 67 } 68 69 /** 70 * @param lastLine the lastLine to set 71 */ 72 private void setLastLine(final String lastLine) { 73 this.lastLine = lastLine; 74 } 75 76 }