/**
  * Diese Methode wird für jedes geänderte Entity aufgerufen und führt die jewelige
  * Operation auf der Datenbank aus.
  *
  * Der Entity-Typ um den es geht steht in der Struktur entityAspect im Feld entityTypeName.
  * Dieses Feld enthält einen String, der aus Entity-Name und Namespace besteht. Der
  * Entity-Name steht vor dem :
  *
  * @param $changedEntity
  * @return BaseEntity|null
  * @throws \InvalidArgumentException
  */
 protected function saveEntity($changedEntity)
 {
     $aspect = $changedEntity->entityAspect;
     $parts = explode(':', $aspect->entityTypeName);
     $resourceName = $parts[0];
     if (!$this->endpoint->hasResource($resourceName)) {
         throw new \InvalidArgumentException('Resource ' . $resourceName . ' is not available in this endpoint.');
     }
     $repository = $this->endpoint->getResource($resourceName)->getRepository();
     $response = null;
     if ($aspect->entityState === 'Added') {
         $changedEntity->id = -1;
         $response = $repository->createOrUpdate($changedEntity);
     } elseif ($aspect->entityState === 'Modified') {
         $response = $repository->createOrUpdate($changedEntity);
     } elseif ($aspect->entityState === 'Deleted') {
         $repository->delete($changedEntity->id);
     }
     // Als Rückgabe wird die geänderte Entität erwartet. Da sich in den preSave Handlern,
     // was geändert haben könnte an dieser Stelle nochmal neu generieren.
     if ($response instanceof BaseEntity) {
         return $repository->getResourceFromEntity($response);
     } else {
         return $response;
     }
 }
 public function Metadata($request)
 {
     $result = new Breeze\Metadata();
     foreach ($this->endpoint->getResources() as $def) {
         /** @var ApiResourceDefinition $def */
         $result->structuralTypes[] = $def->getRepository()->getMetatadata();
     }
     return $result;
 }