/**
  * {@inheritdoc}
  */
 public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration)
 {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->migration = $migration;
     // Set up some defaults based on the source configuration.
     $this->cacheCounts = !empty($configuration['cache_counts']);
     $this->skipCount = !empty($configuration['skip_count']);
     $this->cacheKey = !empty($configuration['cache_key']) ? !empty($configuration['cache_key']) : NULL;
     $this->trackChanges = !empty($configuration['track_changes']) ? $configuration['track_changes'] : FALSE;
     $this->idMap = $this->migration->getIdMap();
     // Pull out the current highwater mark if we have a highwater property.
     if ($this->highWaterProperty = $this->migration->get('highWaterProperty')) {
         $this->originalHighWater = $this->migration->getHighWater();
     }
     // Don't allow the use of both highwater and track changes together.
     if ($this->highWaterProperty && $this->trackChanges) {
         throw new MigrateException('You should either use a highwater mark or track changes not both. They are both designed to solve the same problem');
     }
 }