Example #1
0
 public function execute($entity, $url = null, $method = Client::GET, $parameters = null)
 {
     if (is_object($entity)) {
         $className = get_class($entity);
     } else {
         $className = $entity;
     }
     $configuration = $this->getEntityConfiguration($className);
     $request = new Request();
     $request->setUrl($url);
     $request->setMethod($method);
     $request->setParameters($parameters);
     $request->setUsername($configuration->getUsername());
     $request->setPassword($configuration->getPassword());
     $request->setResponseType($configuration->getResponseType());
     $request->setResponseTransformerImpl($configuration->getResponseTransformerImpl());
     $result = $this->_client->execute($request);
     if (is_array($result)) {
         $name = $configuration->getName();
         $identifierKey = $configuration->getIdentifierKey();
         $className = $configuration->getClass();
         if (isset($result[$name]) && is_array($result[$name])) {
             $collection = array();
             foreach ($result[$name] as $data) {
                 $identifier = $data[$identifierKey];
                 if (isset($this->_identityMap[$className][$identifier])) {
                     $instance = $this->_identityMap[$className][$identifier];
                 } else {
                     $instance = $configuration->newInstance();
                     $this->_identityMap[$className][$identifier] = $instance;
                 }
                 $collection[] = $this->_hydrate($configuration, $instance, $data);
             }
             return $collection;
         } else {
             if ($result) {
                 if (is_object($entity)) {
                     $instance = $entity;
                     $this->_hydrate($configuration, $instance, $result);
                     $identifier = $this->getEntityIdentifier($instance);
                     $this->_identityMap[$className][$identifier] = $instance;
                 } else {
                     $identifier = $result[$identifierKey];
                     if (isset($this->_identityMap[$className][$identifier])) {
                         $instance = $this->_identityMap[$className][$identifier];
                     } else {
                         $instance = $configuration->newInstance();
                         $this->_identityMap[$className][$identifier] = $instance;
                     }
                     $this->_hydrate($configuration, $instance, $result);
                 }
                 return $instance;
             }
         }
     } else {
         return array();
     }
 }