59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\mapper\base;
 | 
						|
 | 
						|
use nur\mapper\base\capacitor\Capacitor;
 | 
						|
use nur\mapper\base\capacitor\ICapacitor;
 | 
						|
 | 
						|
class CapacitorConsumer extends Consumer {
 | 
						|
  function __construct(?ICapacitor $capacitor=null, $producer=null, ...$mappers) {
 | 
						|
    parent::__construct($producer, ...$mappers);
 | 
						|
    $this->setCapacitor($capacitor);
 | 
						|
  }
 | 
						|
 | 
						|
  /** @var ICapacitor */
 | 
						|
  protected $capacitor;
 | 
						|
 | 
						|
  function setCapacitor(?ICapacitor $capacitor): self {
 | 
						|
    if ($capacitor === null) $capacitor = new Capacitor();
 | 
						|
    $this->capacitor = $capacitor;
 | 
						|
    $this->setupCapacitor = true;
 | 
						|
    return $this;
 | 
						|
  }
 | 
						|
 | 
						|
  /** @var string|null */
 | 
						|
  protected $channel;
 | 
						|
 | 
						|
  function setChannel(?string $channel): self {
 | 
						|
    $this->channel = $channel;
 | 
						|
    return $this;
 | 
						|
  }
 | 
						|
 | 
						|
  protected function _setupCapacitor(): void {
 | 
						|
  }
 | 
						|
 | 
						|
  /** @var bool */
 | 
						|
  protected $setupCapacitor;
 | 
						|
 | 
						|
  protected function capacitor(): ICapacitor {
 | 
						|
    if ($this->setupCapacitor) {
 | 
						|
      $this->_setupCapacitor();
 | 
						|
      $this->setupCapacitor = false;
 | 
						|
    }
 | 
						|
    return $this->capacitor;
 | 
						|
  }
 | 
						|
 | 
						|
  function cook($item) {
 | 
						|
    $this->capacitor()->charge($item, $this->channel);
 | 
						|
  }
 | 
						|
 | 
						|
  function getItem($pkvalues, ?string $channel=null) {
 | 
						|
    if ($channel === null) $channel = $this->channel;
 | 
						|
    return $this->capacitor()->getItem($pkvalues, $channel);
 | 
						|
  }
 | 
						|
 | 
						|
  function discharge(bool $remove=true, ?string $channel=null): iterable {
 | 
						|
    if ($channel === null) $channel = $this->channel;
 | 
						|
    return $this->capacitor()->discharge($channel, $remove);
 | 
						|
  }
 | 
						|
}
 |