GivenStory.java

  1. package org.jbehave.core.model;

  2. import static java.util.regex.Pattern.DOTALL;
  3. import static java.util.regex.Pattern.compile;

  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;

  8. import org.apache.commons.lang3.StringUtils;
  9. import org.apache.commons.lang3.builder.ToStringBuilder;
  10. import org.apache.commons.lang3.builder.ToStringStyle;

  11. public class GivenStory {

  12.     private static final String PATH_REGEX = "(.*)\\#\\{(.*?)\\}";
  13.     private static final String PARAMETERS_REGEX = ".*(\\:|\\;).*";
  14.     private final String givenStoryAsString;
  15.     private Map<String, String> parameters = new HashMap<>();
  16.     private String path;
  17.     private String anchor;

  18.     public GivenStory(String givenStoryAsString) {
  19.         this.givenStoryAsString = givenStoryAsString.trim();
  20.         parse();
  21.     }

  22.     private void parse() {
  23.         Pattern pattern = compile(PATH_REGEX, DOTALL);
  24.         Matcher matcher = pattern.matcher(givenStoryAsString.trim());
  25.         if (matcher.matches()) {
  26.             path = matcher.group(1).trim();
  27.             anchor = matcher.group(2).trim();
  28.         } else {
  29.             path = givenStoryAsString;
  30.             anchor = "";
  31.         }
  32.     }

  33.     public String getPath() {
  34.         return path;
  35.     }

  36.     public String getAnchor() {
  37.         return anchor;
  38.     }

  39.     public boolean hasAnchor() {
  40.         return !StringUtils.isBlank(anchor);
  41.     }

  42.     public boolean hasAnchorParameters() {
  43.         return hasAnchor() && anchor.matches(PARAMETERS_REGEX);
  44.     }

  45.     public boolean hasAnchorWithExamplesReference() {
  46.         return hasAnchor() && !anchor.matches(PARAMETERS_REGEX);
  47.     }

  48.     public Map<String, String> getAnchorParameters() {
  49.         Map<String,String> parameters = new HashMap<>();
  50.         for (String pair : anchor.trim().split(";")) {
  51.             String[] split = pair.split(":");
  52.             if (split.length > 1) {
  53.                 parameters.put(split[0], split[1]);
  54.             }
  55.         }
  56.         return parameters;
  57.     }

  58.     public Map<String, String> getParameters() {
  59.         return parameters;
  60.     }

  61.     public void useParameters(Map<String, String> parameters) {
  62.         this.parameters = parameters;
  63.     }

  64.     public String asString() {
  65.         return givenStoryAsString;
  66.     }

  67.     public String toString() {
  68.         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  69.     }

  70. }