View Javadoc

1   package com.ashlux.mavenoc4jplugin.log;
2   
3   import org.apache.maven.plugin.logging.Log;
4   import org.apache.commons.lang.StringUtils;
5   
6   import java.io.InputStream;
7   import java.io.IOException;
8   
9   public class LogStreamGobbler implements Runnable {
10    private static final String lineSeperator = System.getProperty("line.separator");
11  
12    private InputStream inputStream;
13    private Log log;
14    private LogLevel logLevel;
15  
16    public LogStreamGobbler(InputStream inputStream, Log log, LogLevel logLevel) {
17      this.inputStream = inputStream;
18      this.log = log;
19      this.logLevel = logLevel;
20    }
21  
22    public void run() {
23      try {
24        work(inputStream, log, logLevel);
25        inputStream.close();
26      } catch (IOException e) {
27        log.error(e);
28      }
29    }
30  
31    // Log one line at a time at the specified log level
32    protected static void work(InputStream inputStream, Log log, LogLevel logLevel) throws IOException {
33      String line = "";
34      int myChar = inputStream.read();
35      while (myChar != -1) {
36        // concat all chars until we find a line seperator
37        if (lineSeperator.equals(String.valueOf((char) myChar))) {
38          log(log, logLevel, line);
39          line = "";
40        } else {
41          line += (char) myChar;
42        }
43        myChar = inputStream.read();
44      }
45  
46      // log anything left over
47      if (StringUtils.isNotEmpty(line)) {
48        log.error(line);
49      }
50    }
51  
52    protected static void log(Log log, LogLevel logLevel, String statement) {
53      switch (logLevel) {
54        case DEBUG:
55          log.debug(statement);
56          break;
57        case INFO:
58          log.info(statement);
59          break;
60        case WARN:
61          log.warn(statement);
62          break;
63        case ERROR:
64          log.error(statement);
65          break;
66      }
67    }
68  }