You are here

final class TeamAppEdgeEntityControllerProxy in Apigee Edge 8

Team app specific entity controller implementation.

It ensures that the right SDK controllers (and with that the right API endpoints) gets used for CRUDL operations.

Hierarchy

Expanded class hierarchy of TeamAppEdgeEntityControllerProxy

1 file declares its use of TeamAppEdgeEntityControllerProxy
TeamAppStorage.php in modules/apigee_edge_teams/src/Entity/Storage/TeamAppStorage.php

File

modules/apigee_edge_teams/src/Entity/Controller/TeamAppEdgeEntityControllerProxy.php, line 36

Namespace

Drupal\apigee_edge_teams\Entity\Controller
View source
final class TeamAppEdgeEntityControllerProxy implements EdgeEntityControllerInterface {

  /**
   * The team app controller factory service.
   *
   * @var \Drupal\apigee_edge_teams\Entity\Controller\TeamAppControllerFactoryInterface
   */
  private $teamAppControllerFactory;

  /**
   * The app controller service.
   *
   * @var \Drupal\apigee_edge\Entity\Controller\AppControllerInterface
   */
  private $appController;

  /**
   * TeamAppEdgeEntityControllerProxy constructor.
   *
   * @param \Drupal\apigee_edge_teams\Entity\Controller\TeamAppControllerFactoryInterface $team_app_controller_factory
   *   The team app controller factory service.
   * @param \Drupal\apigee_edge\Entity\Controller\AppControllerInterface $app_controller
   *   The app controller service.
   */
  public function __construct(TeamAppControllerFactoryInterface $team_app_controller_factory, AppControllerInterface $app_controller) {
    $this->teamAppControllerFactory = $team_app_controller_factory;
    $this->appController = $app_controller;
  }

  /**
   * {@inheritdoc}
   */
  public function create(EntityInterface $entity) : void {

    /** @var \Apigee\Edge\Api\Management\Entity\CompanyAppInterface $entity */
    if (empty($entity
      ->getCompanyName())) {

      // Sanity check.
      throw new RuntimeException('Company name has to set on the app.');
    }
    $controller = $this->teamAppControllerFactory
      ->teamAppController($entity
      ->getCompanyName());
    $controller
      ->create($entity);
  }

  /**
   * {@inheritdoc}
   */
  public function load(string $id) : EntityInterface {
    return $this->appController
      ->loadApp($id);
  }

  /**
   * {@inheritdoc}
   */
  public function update(EntityInterface $entity) : void {

    /** @var \Apigee\Edge\Api\Management\Entity\CompanyAppInterface $entity */
    $controller = $this->teamAppControllerFactory
      ->teamAppController($entity
      ->getCompanyName());
    $controller
      ->update($entity);
  }

  /**
   * {@inheritdoc}
   */
  public function delete(string $id) : void {

    // Try to be smart here and load the app from the company app
    // entity cache (app controller's cache is probably empty unless there were
    // a load() or getEntities() call before).
    $entity = \Drupal::entityTypeManager()
      ->getStorage('team_app')
      ->load($id);
    if (!$entity) {

      // Entity has not found in the entity cache, we have it from Apigee Edge.
      $entity = $this
        ->load($id);
    }

    /** @var \Apigee\Edge\Api\Management\Entity\CompanyAppInterface $entity */
    $controller = $this->teamAppControllerFactory
      ->teamAppController($entity
      ->getCompanyName());

    // The id that we got is a UUID, what we need is an app name.
    $controller
      ->delete($entity
      ->getName());
  }

  /**
   * {@inheritdoc}
   */
  public function loadAll() : array {
    return array_filter($this->appController
      ->listApps(TRUE), function (AppInterface $app) {
      return $app instanceof CompanyAppInterface;
    });
  }

}

Members

Namesort descending Modifiers Type Description Overrides
TeamAppEdgeEntityControllerProxy::$appController private property The app controller service.
TeamAppEdgeEntityControllerProxy::$teamAppControllerFactory private property The team app controller factory service.
TeamAppEdgeEntityControllerProxy::create public function Creates an entity in Apigee Edge. Overrides EdgeEntityControllerInterface::create
TeamAppEdgeEntityControllerProxy::delete public function Removes an entity from Apigee Edge. Overrides EdgeEntityControllerInterface::delete
TeamAppEdgeEntityControllerProxy::load public function Loads an entity from Apigee Edge. Overrides EdgeEntityControllerInterface::load
TeamAppEdgeEntityControllerProxy::loadAll public function Loads _all_ entities from Apigee Edge. Overrides EdgeEntityControllerInterface::loadAll
TeamAppEdgeEntityControllerProxy::update public function Updates an entity in Apigee Edge. Overrides EdgeEntityControllerInterface::update
TeamAppEdgeEntityControllerProxy::__construct public function TeamAppEdgeEntityControllerProxy constructor.