reviewer-1.2.x-dev/src/Reviewer/Result/CollectionResult.php

src/Reviewer/Result/CollectionResult.php
<?php

declare(strict_types=1);

namespace Drupal\reviewer\Reviewer\Result;

use Drupal\reviewer\Reviewer\Status\Status;
use Drupal\reviewer\Reviewer\Status\StatusFactoryInterface;

/**
 * A collection of results.
 *
 * The overall status of a collection is determined by the most severe status
 * of all results contained in the collection.
 */
final class CollectionResult implements CollectionResultInterface {

  /**
   * Results.
   *
   * @var array<string, \Drupal\reviewer\Reviewer\Result\ResultInterface>
   */
  private array $results = [];

  /**
   * Constructor.
   *
   * @param \Drupal\reviewer\Reviewer\Result\ResultInterface[] $results
   */
  public function __construct(
    private readonly StatusFactoryInterface $statusFactory,
    private readonly string $id,
    array $results = [],
  ) {
    foreach ($results as $result) {
      $this->add($result);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getId(): string {
    return $this->id;
  }

  /**
   * {@inheritdoc}
   */
  public function getStatus(): Status {
    return $this->statusFactory->createMostSevere($this->getIndividualResults());
  }

  /**
   * {@inheritdoc}
   */
  public function add(ResultInterface $result): CollectionResultInterface {
    $this->results[$result->getId()] = $result;
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function remove(ResultInterface $result): CollectionResultInterface {
    unset($this->results[$result->getId()]);
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function get(string $id): ResultInterface {
    return $this->results[$id];
  }

  /**
   * {@inheritdoc}
   */
  public function getAll(): array {
    return $this->results;
  }

  /**
   * {@inheritdoc}
   */
  public function getIndividualResults(): array {
    $results = [];
    foreach ($this->results as $result) {
      if ($result instanceof CollectionResultInterface) {
        $results = array_merge($results, $result->getIndividualResults());
      }
      elseif ($result instanceof IndividualResultInterface) {
        $results[$result->getId()] = $result;
      }
    }
    return $results;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc