Package org.platformlayer.client.cli.commands

Source Code of org.platformlayer.client.cli.commands.JobLogPrinter

package org.platformlayer.client.cli.commands;

import java.io.PrintWriter;
import java.util.List;

import org.platformlayer.jobs.model.JobLog;
import org.platformlayer.jobs.model.JobLogExceptionInfo;
import org.platformlayer.jobs.model.JobLogLine;
import org.platformlayer.jobs.model.JobLogLineLevels;

import com.fathomdb.cli.commands.Ansi;
import com.fathomdb.cli.commands.Ansi.Color;
import com.google.common.base.Strings;

public class JobLogPrinter {

  private final PrintWriter writer;
  private final Ansi ansi;

  int depth;
  String indent;

  public JobLogPrinter(PrintWriter writer) {
    this.writer = writer;
    this.ansi = new Ansi(writer);
  }

  public void write(List<JobLog> jobLogs) {
    for (JobLog jobLog : jobLogs) {
      write(jobLog);
    }

  }

  private void write(JobLog jobLog) {
    startJobLog(jobLog);

    for (JobLogLine line : jobLog) {
      write(line);
    }

    endJobLog(jobLog);
  }

  private void endJobLog(JobLog jobLog) {

  }

  public void startJobLog(JobLog jobLog) {
    depth = 0;
    indent = "";
  }

  public void end() {
    ansi.reset();

    flush();
  }

  public void write(JobLogLine line) {
    String type = line.getType();

    if (!Strings.isNullOrEmpty(type)) {
      if (type.equals(JobLogLine.TYPE_ENTER_SCOPE)) {
        ansi.println(Color.Default, indent + ">>> " + line.message);
        depth++;
        indent += "  ";
      } else if (type.equals(JobLogLine.TYPE_EXIT_SCOPE)) {
        depth--;
        indent = indent.substring(0, depth * 2);
        // ansi.println(indent + "<<< " + line.message);
      } else {
        ansi.println(Color.Red, indent + "??? " + line.message);
      }
      return;
    }

    Ansi.Color color = Ansi.Color.Default;

    if (line.level >= JobLogLineLevels.LEVEL_ERROR) {
      color = Ansi.Color.Red;
    } else if (line.level >= JobLogLineLevels.LEVEL_WARN) {
      color = Ansi.Color.Yellow;
    } else if (line.level >= JobLogLineLevels.LEVEL_INFO) {
      color = Ansi.Color.Green;
    } else {
      color = Ansi.Color.Blue;
    }

    ansi.println(color, indent + line.message);

    JobLogExceptionInfo exceptionInfo = line.exception;
    while (exceptionInfo != null) {
      for (String exceptionLine : exceptionInfo.info) {
        ansi.println(color, indent + exceptionLine);
      }

      exceptionInfo = exceptionInfo.inner;
    }
  }

  public void flush() {
    writer.flush();
  }

}
TOP

Related Classes of org.platformlayer.client.cli.commands.JobLogPrinter

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.