Skip to content

Instantly share code, notes, and snippets.

@ikwattro
Created July 19, 2012 09:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikwattro/3142810 to your computer and use it in GitHub Desktop.
Save ikwattro/3142810 to your computer and use it in GitHub Desktop.
Neo4j User Proxy Class
<?php
use HireVoice\Neo4j\Extension;
use HireVoice\Neo4j\EntityProxy;
use Doctrine\Common\Collections\ArrayCollection;
class neo4jProxyAcme_DemoBundle_Entity_User extends Acme\DemoBundle\Entity\User implements EntityProxy
{
private $neo4j_hydrated = array();
private $neo4j_meta;
private $neo4j_node;
private $neo4j_loadCallback;
private $neo4j_relationships = false;
function getEntity()
{
$entity = new Acme\DemoBundle\Entity\User;
foreach ($this->neo4j_meta->getProperties() as $prop) {
$prop->setValue($entity, $prop->getValue($this));
}
$prop = $this->neo4j_meta->getPrimaryKey();
$prop->setValue($entity, $prop->getValue($this));
return $entity;
}
function getId()
{
self::__load('getId');
return parent::getId();
}
function getFullName()
{
self::__load('getFullName');
return parent::getFullName();
}
function getFriends()
{
self::__load('getFriends');
return parent::getFriends();
}
function setFullName($name)
{
self::__load('setFullName');
return parent::setFullName($name);
}
function setFriends(Doctrine\Common\Collections\ArrayCollection $friends)
{
self::__load('setFriends');
return parent::setFriends($friends);
}
function addFriend($friend)
{
self::__load('addFriend');
return parent::addFriend($friend);
}
function addRole($role)
{
self::__load('addRole');
return parent::addRole($role);
}
function serialize()
{
self::__load('serialize');
return parent::serialize();
}
function unserialize($serialized)
{
self::__load('unserialize');
return parent::unserialize($serialized);
}
function eraseCredentials()
{
self::__load('eraseCredentials');
return parent::eraseCredentials();
}
function getUsername()
{
self::__load('getUsername');
return parent::getUsername();
}
function getUsernameCanonical()
{
self::__load('getUsernameCanonical');
return parent::getUsernameCanonical();
}
function getSalt()
{
self::__load('getSalt');
return parent::getSalt();
}
function getEmail()
{
self::__load('getEmail');
return parent::getEmail();
}
function getEmailCanonical()
{
self::__load('getEmailCanonical');
return parent::getEmailCanonical();
}
function getPassword()
{
self::__load('getPassword');
return parent::getPassword();
}
function getPlainPassword()
{
self::__load('getPlainPassword');
return parent::getPlainPassword();
}
function getLastLogin()
{
self::__load('getLastLogin');
return parent::getLastLogin();
}
function getConfirmationToken()
{
self::__load('getConfirmationToken');
return parent::getConfirmationToken();
}
function getRoles()
{
self::__load('getRoles');
return parent::getRoles();
}
function hasRole($role)
{
self::__load('hasRole');
return parent::hasRole($role);
}
function isAccountNonExpired()
{
self::__load('isAccountNonExpired');
return parent::isAccountNonExpired();
}
function isAccountNonLocked()
{
self::__load('isAccountNonLocked');
return parent::isAccountNonLocked();
}
function isCredentialsNonExpired()
{
self::__load('isCredentialsNonExpired');
return parent::isCredentialsNonExpired();
}
function isCredentialsExpired()
{
self::__load('isCredentialsExpired');
return parent::isCredentialsExpired();
}
function isEnabled()
{
self::__load('isEnabled');
return parent::isEnabled();
}
function isExpired()
{
self::__load('isExpired');
return parent::isExpired();
}
function isLocked()
{
self::__load('isLocked');
return parent::isLocked();
}
function isSuperAdmin()
{
self::__load('isSuperAdmin');
return parent::isSuperAdmin();
}
function isUser(FOS\UserBundle\Model\UserInterface $user = NULL)
{
self::__load('isUser');
return parent::isUser($user);
}
function removeRole($role)
{
self::__load('removeRole');
return parent::removeRole($role);
}
function setUsername($username)
{
self::__load('setUsername');
return parent::setUsername($username);
}
function setUsernameCanonical($usernameCanonical)
{
self::__load('setUsernameCanonical');
return parent::setUsernameCanonical($usernameCanonical);
}
function setCredentialsExpireAt(DateTime $date)
{
self::__load('setCredentialsExpireAt');
return parent::setCredentialsExpireAt($date);
}
function setCredentialsExpired($boolean)
{
self::__load('setCredentialsExpired');
return parent::setCredentialsExpired($boolean);
}
function setEmail($email)
{
self::__load('setEmail');
return parent::setEmail($email);
}
function setEmailCanonical($emailCanonical)
{
self::__load('setEmailCanonical');
return parent::setEmailCanonical($emailCanonical);
}
function setEnabled($boolean)
{
self::__load('setEnabled');
return parent::setEnabled($boolean);
}
function setExpired($boolean)
{
self::__load('setExpired');
return parent::setExpired($boolean);
}
function setExpiresAt(DateTime $date)
{
self::__load('setExpiresAt');
return parent::setExpiresAt($date);
}
function setPassword($password)
{
self::__load('setPassword');
return parent::setPassword($password);
}
function setSuperAdmin($boolean)
{
self::__load('setSuperAdmin');
return parent::setSuperAdmin($boolean);
}
function setPlainPassword($password)
{
self::__load('setPlainPassword');
return parent::setPlainPassword($password);
}
function setLastLogin(DateTime $time)
{
self::__load('setLastLogin');
return parent::setLastLogin($time);
}
function setLocked($boolean)
{
self::__load('setLocked');
return parent::setLocked($boolean);
}
function setConfirmationToken($confirmationToken)
{
self::__load('setConfirmationToken');
return parent::setConfirmationToken($confirmationToken);
}
function setPasswordRequestedAt(DateTime $date = NULL)
{
self::__load('setPasswordRequestedAt');
return parent::setPasswordRequestedAt($date);
}
function getPasswordRequestedAt()
{
self::__load('getPasswordRequestedAt');
return parent::getPasswordRequestedAt();
}
function isPasswordRequestNonExpired($ttl)
{
self::__load('isPasswordRequestNonExpired');
return parent::isPasswordRequestNonExpired($ttl);
}
function setRoles(array $roles)
{
self::__load('setRoles');
return parent::setRoles($roles);
}
function getGroups()
{
self::__load('getGroups');
return parent::getGroups();
}
function getGroupNames()
{
self::__load('getGroupNames');
return parent::getGroupNames();
}
function hasGroup($name)
{
self::__load('hasGroup');
return parent::hasGroup($name);
}
function addGroup(FOS\UserBundle\Model\GroupInterface $group)
{
self::__load('addGroup');
return parent::addGroup($group);
}
function removeGroup(FOS\UserBundle\Model\GroupInterface $group)
{
self::__load('removeGroup');
return parent::removeGroup($group);
}
function __toString()
{
self::__load('__toString');
return parent::__toString();
}
function __addHydrated($name)
{
$this->neo4j_hydrated[] = $name;
}
function __setMeta($meta)
{
$this->neo4j_meta = $meta;
}
function __setNode($node)
{
$this->neo4j_node = $node;
}
function __setLoadCallback(\Closure $loadCallback)
{
$this->neo4j_loadCallback = $loadCallback;
}
private function __load($name)
{
if(!is_object($this->neo4j_meta)) {
return;
}
$property = $this->neo4j_meta->findProperty($name);
if (! $property) {
return;
}
if (strpos($name, 'set') === 0) {
$this->__addHydrated($property->getName());
return;
}
if ($property->isProperty()) {
return;
}
if (in_array($property->getName(), $this->neo4j_hydrated)) {
return;
}
if (false === $this->neo4j_relationships) {
$command = new Extension\GetNodeRelationshipsLight($this->neo4j_node->getClient(), $this->neo4j_node);
$this->neo4j_relationships = $command->execute();
}
$this->__addHydrated($property->getName());
$collection = new ArrayCollection;
foreach ($this->neo4j_relationships as $relation) {
if ($relation['type'] == $property->getName()) {
// Read-only relations read the start node instead
if ($property->isTraversed()) {
$nodeUrl = $relation['end'];
} else {
$nodeUrl = $relation['start'];
}
$node = $this->neo4j_node->getClient()->getNode(basename($nodeUrl));
$loader = $this->neo4j_loadCallback;
$collection->add($loader($node));
}
}
if ($property->isRelationList()) {
$property->setValue($this, $collection);
} else {
if (count($collection)) {
$property->setValue($this, $collection->first());
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment