DelegatingTableTransformerMonitor.java

  1. package org.jbehave.core.model;

  2. import java.util.Collection;
  3. import java.util.function.Consumer;

  4. import org.jbehave.core.model.ExamplesTable.TableProperties;

  5. /**
  6.  * Monitor which collects other {@link TableTransformerMonitor}-s and delegates all
  7.  * invocations to the collected monitors.
  8.  */
  9. public class DelegatingTableTransformerMonitor implements TableTransformerMonitor {

  10.     private final Collection<TableTransformerMonitor> delegates;

  11.     /**
  12.      * Creates DelegatingTableTransformerMonitor with a given collections of delegates
  13.      *
  14.      * @param delegates the {@link TableTransformerMonitor}-s to delegate to
  15.      */
  16.     public DelegatingTableTransformerMonitor(Collection<TableTransformerMonitor> delegates) {
  17.         this.delegates = delegates;
  18.     }

  19.     @Override
  20.     public void beforeTransformerApplying(String transformerName, TableProperties properties, String inputTable) {
  21.         delegate(monitor -> monitor.beforeTransformerApplying(transformerName, properties, inputTable));
  22.     }

  23.     @Override
  24.     public void afterTransformerApplying(String transformerName, TableProperties properties, String outputTable) {
  25.         delegate(monitor -> monitor.afterTransformerApplying(transformerName, properties, outputTable));
  26.     }

  27.     private void delegate(Consumer<TableTransformerMonitor> monitorConsumer) {
  28.         delegates.forEach(monitorConsumer);
  29.     }
  30. }