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);
 | |
|   }
 | |
| }
 |