/*******************************************************************************
 * Copyright (c) 2007 Wind River Systems, Inc. and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
package com.google.eclipse.elt.emulator.core;

import java.io.PrintStream;
import java.util.List;

import org.eclipse.jface.text.hyperlink.IHyperlink;

import com.google.eclipse.elt.emulator.model.Style;

public class VT100BackendTraceDecorator implements IVT100EmulatorBackend {
  final IVT100EmulatorBackend backend;
  final PrintStream out;

  public VT100BackendTraceDecorator(IVT100EmulatorBackend backend, PrintStream out) {
    this.backend = backend;
    this.out = out;
  }

  @Override public void appendString(String buffer) {
    out.println("appendString(\"" + buffer + "\")");
    backend.appendString(buffer);
  }

  @Override public void clearAll() {
    out.println("clearAll()");
    backend.clearAll();
  }

  @Override public void deleteCharacters(int n) {
    out.println("deleteCharacters(" + n + ")");
    backend.deleteCharacters(n);
  }

  @Override public void deleteLines(int n) {
    out.println("deleteLines(" + n + ")");
    backend.deleteLines(n);
  }

  @Override public void eraseAll() {
    out.println("eraseAll()");
    backend.eraseAll();
  }

  @Override public void eraseLine() {
    out.println("eraseLine()");
    backend.eraseLine();
  }

  @Override public void eraseLineToCursor() {
    out.println("eraseLineToCursor()");
    backend.eraseLineToCursor();
  }

  @Override public void eraseLineToEnd() {
    out.println("eraseLineToEnd()");
    backend.eraseLineToEnd();
  }

  @Override public void eraseToCursor() {
    out.println("eraseToCursor()");
    backend.eraseToCursor();
  }

  @Override public void eraseToEndOfScreen() {
    out.println("eraseToEndOfScreen()");
    backend.eraseToEndOfScreen();
  }

  @Override public int getColumns() {
    return backend.getColumns();
  }

  @Override public int getCursorColumn() {
    return backend.getCursorColumn();
  }

  @Override public int getCursorLine() {
    return backend.getCursorLine();
  }

  @Override public int getLines() {
    return backend.getLines();
  }

  @Override public Style getStyle() {
    return backend.getStyle();
  }

  @Override public void insertCharacters(int charactersToInsert) {
    out.println("insertCharacters(" + charactersToInsert + ")");
    backend.insertCharacters(charactersToInsert);
  }

  @Override public void insertLines(int n) {
    out.println("insertLines(" + n + ")");
    backend.insertLines(n);
  }

  @Override public void processNewline() {
    out.println("processNewline()");
    backend.processNewline();
  }

  @Override public void setCursor(int targetLine, int targetColumn) {
    out.println("setCursor(" + targetLine + ", " + targetColumn + ")");
    backend.setCursor(targetLine, targetColumn);
  }

  @Override public void setCursorColumn(int targetColumn) {
    out.println("setCursorColumn(" + targetColumn + ")");
    backend.setCursorColumn(targetColumn);
  }

  @Override public void setCursorLine(int targetLine) {
    out.println("setCursorLine(" + targetLine + ")");
    backend.setCursorLine(targetLine);
  }

  @Override public void setDimensions(int lines, int cols) {
    out.println("setDimensions(" + lines + "," + cols + ")");
    backend.setDimensions(lines, cols);
  }

  @Override public void setStyle(Style style) {
    out.println("setStyle(" + style + ")");
    backend.setStyle(style);
  }

  @Override public List<IHyperlink> hyperlinksAt(int line) {
    return backend.hyperlinksAt(line);
  }
}
