/*
 * Copyright (c) Robert Bosch GmbH. All rights reserved.
 */
package org.eclipse.blockchain.core.log;

import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;

/**
 * @author PKI8COB
 */
public class EthereumLogger implements IEthereumLogger {

  MessageConsoleStream outputMessage;
  MessageConsoleStream errorOutputMessage;
  private final MessageConsole console;

  /**
   * @param messageConsole
   * @param c
   * @param outputMessage
   */
  public EthereumLogger(final MessageConsole messageConsole) {
    this.outputMessage = messageConsole.newMessageStream();
    this.errorOutputMessage = messageConsole.newMessageStream();
    this.console = messageConsole;
    ConsolePlugin.getDefault().getConsoleManager().showConsoleView(this.outputMessage.getConsole());
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void log(final String content) {
    this.console.activate();
    this.outputMessage.println(content);

  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void errorLog(final String content) {
    this.console.activate();
    this.errorOutputMessage.println(content);
  }

}
