Package com.baulsupp.kolja.ansi

Source Code of com.baulsupp.kolja.ansi.Cat

package com.baulsupp.kolja.ansi;

import java.io.IOException;
import java.util.Iterator;
import java.util.regex.Pattern;

import jline.Terminal;

import com.baulsupp.kolja.log.line.Line;
import com.baulsupp.kolja.log.viewer.highlight.BasicSearchHighlight;
import com.baulsupp.kolja.log.viewer.renderer.FieldRenderer;
import com.baulsupp.kolja.log.viewer.renderer.Renderer;
import com.baulsupp.kolja.util.ColourPair;

public class Cat {
  protected boolean ansi;

  protected Renderer<Line> grid;

  protected Iterator<Line> i;

  private volatile boolean isQuit = false;

  protected volatile boolean isPaused = false;

  protected TailRenderer renderer;

  public boolean isAnsi() {
    return ansi;
  }

  public void setAnsi(boolean ansi) {
    this.ansi = ansi;
  }

  public boolean isQuit() {
    return isQuit;
  }

  public void setQuit(boolean isQuit) {
    this.isQuit = isQuit;
  }

  private boolean isPaused() {
    return isPaused;
  }

  public void quit() {
    this.isQuit = true;
  }

  public void setPaused(boolean paused) {
    this.isPaused = paused;
  }

  protected boolean isRunning() {
    return !(isPaused || isQuit);
  }

  protected void processInput() throws IOException {
    while (true) {
      String c = readCommand();

      if (c.equals("q")) {
        quit();
        break;
      } else if (c.equals(" ")) {
        setPaused(!isPaused());
      }
    }
  }

  private String readCommand() throws IOException {
    Terminal t = Terminal.getTerminal();

    return String.valueOf((char) t.readVirtualKey(System.in));
  }

  public void run() throws InterruptedException, IOException {
    while (true) {
      while (isRunning() && i.hasNext()) {
        showNextLine();
      }

      if (isEnd()) {
        return;
      }

      if (isPaused) {
        Thread.sleep(200);
      }
    }
  }

  protected boolean isEnd() {
    return isQuit || !i.hasNext();
  }

  protected void showNextLine() {
    Line l = i.next();
    renderer.show(l);
  }
 
  public void setI(Iterator<Line> i) {
    this.i = i;
  }
 
  public void setGrid(Renderer<Line> grid) {
    this.grid = grid;
    grid.setWidth(Terminal.getTerminal().getTerminalWidth());
    renderer = new TailRenderer(grid, ansi);
  }

  public void addHighlightTerm(String highlightTerm) {
    if (grid instanceof FieldRenderer) {
      BasicSearchHighlight basicSearchHighlight = new BasicSearchHighlight(ColourPair.RED_ON_BLACK);
      basicSearchHighlight.setPattern(Pattern.compile(highlightTerm));
      ((FieldRenderer) grid).addHighlight(basicSearchHighlight);
    }
  }

  public void setRenderer(Renderer<Line> renderer) {
    this.grid = renderer;

    grid.setWidth(Terminal.getTerminal().getTerminalWidth());

    this.renderer = new TailRenderer(grid, ansi);
  }

  public void setFixedWidth(boolean b) {
    renderer.setFixedWidth(b);
  }
}
TOP

Related Classes of com.baulsupp.kolja.ansi.Cat

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.