Package fitnesse.slim

Source Code of fitnesse.slim.ListExecutor$Executive

// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.slim;

import fitnesse.slim.instructions.Instruction;
import fitnesse.slim.instructions.InstructionFactory;
import fitnesse.slim.instructions.InstructionResult;

import java.util.ArrayList;
import java.util.List;

import static java.util.Arrays.asList;

/**
* executes a list of SLIM statements, and returns a list of return values.
*/
public class ListExecutor {
  private StatementExecutorInterface executor;
  private NameTranslator methodNameTranslator;
  private boolean verbose;

  public ListExecutor(SlimFactory slimFactory) {
    this(false, slimFactory);
  }

  protected ListExecutor(boolean verbose, SlimFactory slimFactory) {
    this.verbose = verbose;
    this.executor = slimFactory.getStatementExecutor();
    this.methodNameTranslator = slimFactory.getMethodNameTranslator();
  }

  protected void setVerbose() {
    verbose = true;
  }

  private class Executive {
    public void prepareToExecute() { }

    public List<Object> executeStatements(List<Object> statements) {
      List<Object> result = new ArrayList<Object>();
      for (Object statement : statements)
        if (!executor.stopHasBeenRequested())
          result.add(executeStatement(statement));
      return result;
    }

    public Object executeStatement(Object statement) {
      Instruction instruction = InstructionFactory.createInstruction(asStatementList(statement), methodNameTranslator);
      InstructionResult result = instruction.execute(executor);
      Object resultObject;
      if (result.hasResult() || result.hasError()) {
        resultObject = result.getResult();
      } else {
        resultObject = null;
      }
      return asList(instruction.getId(), resultObject);
    }

    public void finalizeExecution() {
      if (executor.stopHasBeenRequested())
        executor.reset();
    }
  }

  private class LoggingExecutive extends Executive {
    public void prepareToExecute() {
      verboseMessage("!1 Instructions");
    }

    public Object executeStatement(Object statement) {
      List<Object> statementList = asStatementList(statement);
      verboseMessage(statementList + "\n");
      Object retVal = super.executeStatement(statement);
      verboseMessage(retVal);
      verboseMessage("------");
      return retVal;
    }
  }

  public List<Object> execute(List<Object> statements) {
    Executive e = verbose ? new LoggingExecutive() : new Executive();
    e.prepareToExecute();
    List<Object> result = e.executeStatements(statements);
    e.finalizeExecution();
    return result;
  }

  private List<Object> asStatementList(Object statement) {
    return (List<Object>) statement;
  }

  private void verboseMessage(Object message) {
    if (verbose) System.out.println(message);
  }
}
TOP

Related Classes of fitnesse.slim.ListExecutor$Executive

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.