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(); } }