ChainedRow.java

  1. package org.jbehave.core.steps;

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

  5. /**
  6.  * Implementation of Row that chains delegate Rows in resolving requests for
  7.  * values.
  8.  */
  9. public class ChainedRow implements Row {
  10.     private final Row[] delegates;

  11.     public ChainedRow(Row... delegates) {
  12.         this.delegates = delegates;
  13.     }

  14.     /**
  15.      * Returns values aggregated from all the delegates, without overriding
  16.      * values that already exist.
  17.      *
  18.      * @return The Map of aggregated values
  19.      */
  20.     @Override
  21.     public Map<String, String> values() {
  22.         Map<String, String> values = new LinkedHashMap<>();
  23.         for (Row each : delegates) {
  24.             for (Entry<String, String> entry : each.values().entrySet()) {
  25.                 String name = entry.getKey();
  26.                 if (!values.containsKey(name)) {
  27.                     values.put(name, entry.getValue());
  28.                 }
  29.             }
  30.         }
  31.         return values;
  32.     }

  33. }