72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\mapper\base;
 | |
| 
 | |
| use ArrayAccess;
 | |
| use nur\b\coll\TBaseArray;
 | |
| use nur\b\coll\TGenericArray;
 | |
| use nur\mapper\base\oobd\IOobdManager;
 | |
| 
 | |
| /**
 | |
|  * Class MapperAggregate: un aggrégateur de mappers
 | |
|  */
 | |
| class MapperAggregate extends Mapper implements ArrayAccess {
 | |
|   use TBaseArray, TGenericArray;
 | |
| 
 | |
|   function set($key, $mapper): self { return $this->_set($key, mapper_utils::ensure_mapper_class($mapper)); }
 | |
|   function add($mapper): self { return $this->_set(null, mapper_utils::ensure_mapper_class($mapper)); }
 | |
| 
 | |
|   function setup(): void {
 | |
|     parent::setup();
 | |
|     $this->producer = new PushProducer();
 | |
|     $this->iterator = mapper_utils::assemble_mappers($this->data, $this->producer);
 | |
|   }
 | |
| 
 | |
|   /** @var PushProducer */
 | |
|   private $producer;
 | |
| 
 | |
|   /** @var Mapper */
 | |
|   private $iterator;
 | |
| 
 | |
|   function hasOvalue(string $name): bool {
 | |
|     if ($this->_hasOobdValue($name)) {
 | |
|       return true;
 | |
|     } elseif ($this->sharedOobdManager !== null
 | |
|       && $this->sharedOobdManager->hasOvalue($name)) {
 | |
|       return true;
 | |
|     } elseif ($this->iterator instanceof IOobdManager) {
 | |
|       return $this->iterator->hasOvalue($name);
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * c'est la méthode {@link setup()} qui contruit $this->iterator. l'accès
 | |
|    * aux données OOB de la chaine de mapper n'est donc possible que dans la
 | |
|    * méthodes {@link mapper()}
 | |
|    */
 | |
|   function getOvalue(string $name, $default=null) {
 | |
|     if ($this->_hasOobdValue($name)) {
 | |
|       return $this->_getOobdValue($name, $default);
 | |
|     } elseif ($this->sharedOobdManager !== null
 | |
|       && $this->sharedOobdManager->hasOvalue($name)) {
 | |
|       return $this->sharedOobdManager->getOvalue($name, $default);
 | |
|     } elseif ($this->iterator instanceof IOobdManager) {
 | |
|       return $this->iterator->getOvalue($name, $default);
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   function mapper($item) {
 | |
|     $this->producer->push($item);
 | |
|     return $this->mapTo($this->iterator);
 | |
|   }
 | |
| 
 | |
|   function teardown(): void {
 | |
|     parent::teardown();
 | |
|     $this->producer->close();
 | |
|     $this->producer = null;
 | |
|     $this->iterator->close();
 | |
|     $this->iterator = null;
 | |
|   }
 | |
| }
 |