79 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			79 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 ProducerAggregate: un aggrégateur de producer, qui fournit les données
 | |
|  * des producers qu'il aggrège
 | |
|  */
 | |
| class ProducerAggregate extends Producer implements ArrayAccess {
 | |
|   use TBaseArray, TGenericArray;
 | |
| 
 | |
|   function setup(): void {
 | |
|     parent::setup();
 | |
|     foreach ($this->data as &$producer) {
 | |
|       $producer = producer_utils::ensure_producer($producer);
 | |
|     }; unset($producer);
 | |
|   }
 | |
| 
 | |
|   function hasOvalue(string $name): bool {
 | |
|     if ($this->_hasOobdValue($name)) {
 | |
|       return true;
 | |
|     } elseif ($this->sharedOobdManager !== null
 | |
|       && $this->sharedOobdManager->hasOvalue($name)) {
 | |
|       return true;
 | |
|     }
 | |
|     foreach ($this->data as $producer) {
 | |
|       if ($producer instanceof IOobdManager && $producer->hasOvalue($name)) {
 | |
|         return true;
 | |
|       }
 | |
|     }
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * l'accès aux données OOB de la chaine de producer n'est possible qu'après
 | |
|    * l'appel de la méthode {@link setup()}
 | |
|    */
 | |
|   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);
 | |
|     }
 | |
|     foreach ($this->data as $producer) {
 | |
|       if ($producer instanceof IOobdManager && $producer->hasOvalue($name)) {
 | |
|         return $producer->getOvalue($name, $default);
 | |
|       }
 | |
|     }
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   function producer() {
 | |
|     foreach ($this->data as $producer) {
 | |
|       if ($producer instanceof Producer) {
 | |
|         try {
 | |
|           yield from $producer;
 | |
|         } finally {
 | |
|           $producer->close();
 | |
|         }
 | |
|         $this->return = $producer->getReturn();
 | |
|       } else {
 | |
|         yield from $producer;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   protected function teardown(): void {
 | |
|     parent::teardown();
 | |
|     foreach ($this->data as $producer) {
 | |
|       $producer->close();
 | |
|     }
 | |
|   }
 | |
| }
 |