package cuke4duke.internal.java;
import cuke4duke.internal.jvmclass.ClassLanguage;
import cuke4duke.internal.language.AbstractStepDefinition;
import cuke4duke.internal.language.JdkPatternArgumentMatcher;
import cuke4duke.internal.language.StepArgument;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public class JavaStepDefinition extends AbstractStepDefinition {
private final ClassLanguage classLanguage;
private final Method method;
private final Pattern regexp;
private final MethodFormat methodFormat;
private final Locale locale;
public JavaStepDefinition(ClassLanguage programmingLanguage, Method method, Pattern regexp, MethodFormat methodFormat, Locale locale) throws Throwable {
super(programmingLanguage);
this.classLanguage = programmingLanguage;
this.method = method;
this.regexp = regexp;
this.methodFormat = methodFormat;
this.locale = locale;
register();
}
public String regexp_source() {
return regexp.pattern();
}
public List<StepArgument> arguments_from(String stepName) throws UnsupportedEncodingException {
return JdkPatternArgumentMatcher.argumentsFrom(regexp, stepName);
}
public String file_colon_line() {
return methodFormat.format(method);
}
public Object invokeWithArgs(Object[] args) throws Throwable {
return classLanguage.invoke(method, args, locale);
}
}