ConditionalStepCandidate.java

  1. package org.jbehave.core.steps;

  2. import java.lang.reflect.Method;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.stream.Collectors;

  6. import org.jbehave.core.condition.StepConditionMatcher;
  7. import org.jbehave.core.configuration.Keywords;
  8. import org.jbehave.core.parsers.StepMatcher;
  9. import org.jbehave.core.steps.StepCreator.ParametrisedStep;

  10. public class ConditionalStepCandidate extends StepCandidate {

  11.     private final Map<Method, StepCreator> stepCreators;
  12.     private final StepConditionMatcher stepConditionMatcher;

  13.     private ConditionalStepCandidate(String patternAsString, int priority, StepType stepType,
  14.             Map<Method, StepCreator> stepCreators, Keywords keywords, StepMatcher stepMatcher,
  15.             String parameterPrefixString, StepCreator stepCreator, StepConditionMatcher stepConditionMatcher,
  16.             StepMonitor stepMonitor) {
  17.         super(patternAsString, priority, stepType, null, null, null, keywords, stepMatcher, parameterPrefixString,
  18.                 stepCreator, null, stepMonitor);
  19.         this.stepCreators = stepCreators;
  20.         this.stepConditionMatcher = stepConditionMatcher;
  21.     }

  22.     @Override
  23.     public Method getMethod() {
  24.         throw new UnsupportedOperationException();
  25.     }

  26.     @Override
  27.     public Step createMatchedStep(String stepAsString, Map<String, String> namedParameters, List<Step> composedSteps) {
  28.         Map<Method, ParametrisedStep> parametrisedSteps = stepCreators.entrySet().stream()
  29.                 .collect(Collectors.toMap(Map.Entry::getKey,
  30.                         e -> (ParametrisedStep) e.getValue().createParametrisedStep(e.getKey(), stepAsString,
  31.                                 stepAsString, namedParameters, composedSteps)));

  32.         return getStepCreator().createConditionalStep(stepConditionMatcher, parametrisedSteps);
  33.     }

  34.     public static StepCandidate from(StepConditionMatcher stepConditionMatcher,
  35.             List<StepCandidate> conditionalCandidates) {
  36.         Map<Method, StepCreator> stepCreators = conditionalCandidates.stream()
  37.                 .collect(Collectors.toMap(StepCandidate::getMethod, StepCandidate::getStepCreator));

  38.         StepCandidate baseCandidate = conditionalCandidates.get(0);

  39.         return new ConditionalStepCandidate(baseCandidate.getPatternAsString(), baseCandidate.getPriority(),
  40.                 baseCandidate.getStepType(), stepCreators, baseCandidate.getKeywords(),
  41.                 baseCandidate.getStepMatcher(), baseCandidate.getParameterPrefix(), baseCandidate.getStepCreator(),
  42.                 stepConditionMatcher, baseCandidate.getStepMonitor());
  43.     }
  44. }