ParameterControls.java

  1. package org.jbehave.core.steps;

  2. import java.util.Map;
  3. import java.util.Map.Entry;

  4. import org.apache.commons.lang3.StringUtils;
  5. import org.apache.commons.lang3.builder.ToStringBuilder;
  6. import org.apache.commons.lang3.builder.ToStringStyle;

  7. public class ParameterControls {

  8.     public static final String DEFAULT_NAME_DELIMITER_LEFT = "<";
  9.     public static final String DEFAULT_NAME_DELIMITER_RIGHT = ">";

  10.     private String nameDelimiterLeft;
  11.     private String nameDelimiterRight;
  12.     private boolean delimiterNamedParameters;
  13.    
  14.     public ParameterControls() {
  15.         this(DEFAULT_NAME_DELIMITER_LEFT, DEFAULT_NAME_DELIMITER_RIGHT, true);
  16.     }

  17.     public ParameterControls(String nameDelimiterLeft, String nameDelimiterRight, boolean delimiterNamedParameters) {
  18.         this.nameDelimiterLeft = nameDelimiterLeft;
  19.         this.nameDelimiterRight = nameDelimiterRight;
  20.         this.delimiterNamedParameters = delimiterNamedParameters;
  21.     }

  22.     public String nameDelimiterLeft() {
  23.         return nameDelimiterLeft;
  24.     }

  25.     public String nameDelimiterRight() {
  26.         return nameDelimiterRight;
  27.     }

  28.     public boolean delimiterNamedParameters() {
  29.         return delimiterNamedParameters;
  30.     }    
  31.    
  32.     public ParameterControls useNameDelimiterLeft(String nameDelimiterLeft) {
  33.         this.nameDelimiterLeft = nameDelimiterLeft;
  34.         return this;
  35.     }

  36.     public ParameterControls useNameDelimiterRight(String nameDelimiterRight) {
  37.         this.nameDelimiterRight = nameDelimiterRight;
  38.         return this;
  39.     }

  40.     public ParameterControls useDelimiterNamedParameters(boolean delimiterNamedParameters) {
  41.         this.delimiterNamedParameters = delimiterNamedParameters;
  42.         return this;
  43.     }

  44.     private String createDelimitedName(String name) {
  45.         return nameDelimiterLeft + name + nameDelimiterRight;
  46.     }

  47.     public String replaceAllDelimitedNames(String text, String name, String value) {
  48.         String delimitedName = createDelimitedName(name);
  49.         if (value != null) {
  50.             return StringUtils.replace(text, delimitedName, value);
  51.         } else if (text.equals(delimitedName)) {
  52.             return null;
  53.         }
  54.         throw new IllegalArgumentException(
  55.                 "Unable to replace \"" + delimitedName + "\" in text \"" + text + "\" with \"null\" value");
  56.     }

  57.     public String replaceAllDelimitedNames(String text, Map<String, String> namedParameters) {
  58.         String textWithReplacedDelimitedNames = text;
  59.         for (Entry<String, String> parameter : namedParameters.entrySet()) {
  60.             textWithReplacedDelimitedNames = replaceAllDelimitedNames(textWithReplacedDelimitedNames,
  61.                     parameter.getKey(), parameter.getValue());
  62.         }
  63.         return textWithReplacedDelimitedNames;
  64.     }

  65.     @Override
  66.     public String toString() {
  67.         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  68.     }

  69. }