Package com.sandwich.koan

Source Code of com.sandwich.koan.KoanMethod

package com.sandwich.koan;

import java.lang.reflect.Method;

import com.sandwich.koan.path.xmltransformation.KoanElementAttributes;
import com.sandwich.koan.path.xmltransformation.RbVariableInjector;
import com.sandwich.util.io.KoanSuiteCompilationListener;

public class KoanMethod {
 
  private final transient Method method;
  private final String lesson;
  private final boolean displayIncompleteException;
  private static final KoanSuiteCompilationListener listener = new KoanSuiteCompilationListener();
 
  private KoanMethod(KoanElementAttributes koanAttributes) throws SecurityException, NoSuchMethodException{
    this(null, koanAttributes);
  }
 
  public static KoanMethod getInstance(KoanElementAttributes koanAttributes){
    try {
      return new KoanMethod(koanAttributes);
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
 
  public static KoanMethod getInstance(Method method){
    return new KoanMethod(null, method, true);
  }
 
  public static KoanMethod getInstance(String lesson, Method method){
    return new KoanMethod(lesson, method, true);
  }
 
  private KoanMethod(String lesson, Method method, boolean displayIncompleteException){
    if(method == null){
      throw new IllegalArgumentException("method may not be null");
    }
    this.method = method;
    this.lesson = new RbVariableInjector(lesson, method).injectLessonVariables();
    this.displayIncompleteException = displayIncompleteException;
  }

  public KoanMethod(String lesson, KoanElementAttributes koanAttributes) throws SecurityException, NoSuchMethodException {
    thislesson,
        KoanClassLoader.getInstance().loadClass(koanAttributes.className, listener)
          .getMethod(koanAttributes.name),
        !"false".equalsIgnoreCase(koanAttributes.displayIncompleteKoanException));
  }

  public String getLesson() {
    return lesson;
  }

  public Method getMethod() {
    return method;
  }
 
  public boolean displayIncompleteException() {
    return displayIncompleteException;
  }
 
  public KoanMethod clone(Method method){
    return new KoanMethod(lesson, method, displayIncompleteException);
  }
 
  @Override public String toString(){
    return "{"+getMethod().getName()
        +" : "+ (lesson.length() > 20 ? lesson.substring(0, 20) + "..." : lesson)+"}";
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (displayIncompleteException ? 1231 : 1237);
    result = prime * result + ((lesson == null) ? 0 : lesson.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    KoanMethod other = (KoanMethod) obj;
    if (displayIncompleteException != other.displayIncompleteException)
      return false;
    if (lesson == null) {
      if (other.lesson != null)
        return false;
    } else if (!lesson.equals(other.lesson))
      return false;
    return true;
  }
 
 
}
TOP

Related Classes of com.sandwich.koan.KoanMethod

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.