Package com.sandwich.koan.ui

Source Code of com.sandwich.koan.ui.ConsolePresenter

package com.sandwich.koan.ui;

import static com.sandwich.koan.constant.KoanConstants.EOL;
import static com.sandwich.koan.constant.KoanConstants.PROGRESS_BAR_END;
import static com.sandwich.koan.constant.KoanConstants.PROGRESS_BAR_START;
import static com.sandwich.koan.constant.KoanConstants.PROGRESS_BAR_WIDTH;

import java.util.List;

import com.sandwich.koan.ApplicationSettings;
import com.sandwich.koan.KoanMethod;
import com.sandwich.koan.constant.KoanConstants;
import com.sandwich.koan.result.KoanSuiteResult;
import com.sandwich.koan.util.ApplicationUtils;
import com.sandwich.util.Strings;

public class ConsolePresenter extends AbstractSuitePresenter {
 
  private static final int NUMBER_OF_LINES_TO_CLEAR_CONSOLE = 80;
 
  public void clearMessages(){
    for(int i = 0; i < NUMBER_OF_LINES_TO_CLEAR_CONSOLE; i++){
      ApplicationUtils.getPresenter().displayMessage(" ");
    }
  }
 
  protected void displayHeader(KoanSuiteResult result){
  }
 
  protected void displayPassingFailing(KoanSuiteResult result) {
    StringBuilder sb = new StringBuilder();
    appendLabeledClassesList(Strings.getMessage("passing_suites")+":", result.getPassingSuites(), sb);
    appendLabeledClassesList(Strings.getMessage("remaining_suites")+":", result.getRemainingSuites(), sb);
    sb.append(EOL).append("Edit & save a koan to reload or enter '"+ ApplicationSettings.getExitChar() +"' to exit");
    displayMessage(sb.toString());
  }
 
  private void appendLabeledClassesList(String suiteType, List<String> suites, StringBuilder sb) {
    if(suites == null || suites.isEmpty()){
      return;
    }
    sb.append(suiteType+' ');
    for(String c : suites){
      sb.append(c);
      if(suites.indexOf(c) != suites.size() - 1){
        sb.append(", ");
      }
    }
    sb.append(EOL);
  }
 
  protected void displayChart(KoanSuiteResult result) {
    StringBuilder sb = new StringBuilder(Strings.getMessage("level")).append(": ").append(result.getLevel()).append(EOL);
    int numberPassing = result.getNumberPassing();
    int totalKoans = result.getTotalNumberOfKoans();
    double percentPassing = ((double) numberPassing) / ((double) totalKoans);
    int percentScaledToFifty = (int) (percentPassing * PROGRESS_BAR_WIDTH);
    sb.append(Strings.getMessage("progress")).append(" ").append(PROGRESS_BAR_START);
    for (int i = 0; i < PROGRESS_BAR_WIDTH; i++) {
      if (i < percentScaledToFifty) {
        sb.append(KoanConstants.COMPLETE_CHAR);
      } else {
        sb.append(KoanConstants.INCOMPLETE_CHAR);
      }
    }
    sb.append(PROGRESS_BAR_END);
    sb.append(' ');
    sb.append(numberPassing).append("/").append(totalKoans);
    displayMessage(sb.toString());
  }
 
  @Override
  protected void displayAllSuccess(KoanSuiteResult result) {
    displayMessage(new StringBuilder(EOL).append(Strings.getMessage("all_koans_succeeded")).toString());
  }
 
  @Override
  protected void displayOneOrMoreFailure(KoanSuiteResult result) {
    printSuggestion(result);
    String message = result.getMessage();
    StringBuilder sb = new StringBuilder(
      message == null || message.length() == 0 || !result.displayIncompleteException() ? ""
        : new StringBuilder(Strings.getMessage("what_went_wrong")).append(
                  ": ").append(
                  EOL).append(
                  message).append(
                  EOL));
    if(ApplicationSettings.isEncouragementEnabled()){ // added noise to console output, and no real value
      int totalKoans = result.getTotalNumberOfKoans();
      int numberPassing = result.getNumberPassing();
      sb.append(        EOL).append(
                  Strings.getMessage("you_have_conquered")).append(
                  " ").append(
                  numberPassing).append(
                  " ").append(
                  Strings.getMessage("out_of")).append(
                  " ").append(
                  totalKoans).append(
                  " ").append(
                  totalKoans != 1 ? Strings.getMessage("koans") : Strings.getMessage("koan")).append(
                  "! ").append(
                  Strings.getMessage("encouragement"));
    }
    displayMessage(sb.toString());
  }
 
  protected void printSuggestion(KoanSuiteResult result) {
    KoanMethod failedKoan = result.getFailingMethod();
    StringBuilder sb =   buildLessonLine(failedKoan);
    buildInvestigateLine(sb, result.getFailingCase(),failedKoan.getMethod().getName());
    sb.append(EOL).append(EOL);
    buildLineClue(sb, result);
    displayMessage(sb.toString());
  }

  private StringBuilder buildInvestigateLine(StringBuilder sb, String simpleName,
      String methodName) {
    return sb.append(
        Strings.getMessage("investigate")).append(
        ": ").append(
        simpleName).append(
        " class's ").append(
        methodName).append(
        " method.");
  }

  private StringBuilder buildLineClue(StringBuilder sb, KoanSuiteResult result) {
    if(result.getLineNumber() != null && result.getLineNumber().trim().length() != 0){
      sb.appendStrings.getMessage("line")).append(" ").append(
            result.getLineNumber()).append(" ").append(
            Strings.getMessage("may_offer_clue"));
    }
    return sb;
  }

  private StringBuilder buildLessonLine(KoanMethod failedKoan) {
    String lesson = failedKoan.getLesson();
    if(lesson == null){
      return new StringBuilder(); // no lesson
    }
    return new StringBuilder(lesson).append(EOL).append(EOL);
  }

  public void displayError(String error) {
    System.err.println(error);
  }
 
  public void displayMessage(String message) {
    System.out.println(message);
  }
}
TOP

Related Classes of com.sandwich.koan.ui.ConsolePresenter

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.