ChainedRow.java
package org.jbehave.core.steps;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* Implementation of Row that chains delegate Rows in resolving requests for
* values.
*/
public class ChainedRow implements Row {
private final Row[] delegates;
public ChainedRow(Row... delegates) {
this.delegates = delegates;
}
/**
* Returns values aggregated from all the delegates, without overriding
* values that already exist.
*
* @return The Map of aggregated values
*/
@Override
public Map<String, String> values() {
Map<String, String> values = new LinkedHashMap<>();
for (Row each : delegates) {
for (Entry<String, String> entry : each.values().entrySet()) {
String name = entry.getKey();
if (!values.containsKey(name)) {
values.put(name, entry.getValue());
}
}
}
return values;
}
}