public function toSetter(MetaClass $class, MetaClassProperty $property, MetaClassProperty $holder = null)
    {
        $name = $property->getName();
        $methodName = 'set' . ucfirst($name);
        if ($holder) {
            return <<<EOT

/**
 * @return {$holder->getClass()->getName()}
**/
public function {$methodName}(\${$name})
{
\t\$this->{$holder->getName()}->{$methodName}(\${$name});

\treturn \$this;
}

EOT;
        } else {
            return <<<EOT

/**
 * @return {$class->getName()}
**/
public function {$methodName}(\${$name})
{
\t\$this->{$name} = \${$name};

\treturn \$this;
}

EOT;
        }
        Assert::isUnreachable();
    }
    public static function buildContainer(MetaClass $class, MetaClassProperty $holder)
    {
        $out = self::getHead();
        $containerName = $class->getName() . ucfirst($holder->getName()) . 'DAO';
        $out .= 'final class ' . $containerName . ' extends ' . $holder->getRelation()->toString() . 'Linked' . "\n{\n";
        $className = $class->getName();
        $propertyName = strtolower($className[0]) . substr($className, 1);
        $remoteColumnName = $holder->getType()->getClass()->getTableName();
        $out .= <<<EOT
public function __construct({$className} \${$propertyName}, \$lazy = false)
{
\tparent::__construct(
\t\t\${$propertyName},
\t\t{$holder->getType()->getClassName()}::dao(),
\t\t\$lazy
\t);
}

/**
 * @return {$containerName}
**/
public static function create({$className} \${$propertyName}, \$lazy = false)
{
\treturn new self(\${$propertyName}, \$lazy);
}

EOT;
        if ($holder->getRelation()->getId() == MetaRelation::MANY_TO_MANY) {
            $out .= <<<EOT

public function getHelperTable()
{
\treturn '{$class->getTableName()}_{$remoteColumnName}';
}

public function getChildIdField()
{
\treturn '{$remoteColumnName}_id';
}

EOT;
        }
        $out .= <<<EOT

public function getParentIdField()
{
\treturn '{$class->getTableName()}_id';
}

EOT;
        $out .= "}\n";
        $out .= self::getHeel();
        return $out;
    }
 private static function doPropertyBuild(MetaClass $class, MetaClassProperty $property, $isNamed)
 {
     if ($parentProperty = $class->isRedefinedProperty($property->getName())) {
         // check wheter property fetch strategy becomes lazy
         if ($parentProperty->getFetchStrategyId() != $property->getFetchStrategyId() && $property->getFetchStrategyId() === FetchStrategy::LAZY) {
             return true;
         }
         return false;
     }
     if ($isNamed && $property->getName() == 'name') {
         return false;
     }
     if ($property->getName() == 'id' && !$property->getClass()->getParent()) {
         return false;
     }
     // do not redefine parent's properties
     if ($property->getClass()->getParent() && array_key_exists($property->getName(), $property->getClass()->getAllParentsProperties())) {
         return false;
     }
     return true;
 }
 public function equals(MetaClassProperty $property)
 {
     return $property->getName() == $this->getName() && $property->getColumnName() == $this->getColumnName() && $property->getType() == $this->getType() && $property->getSize() == $this->getSize() && $property->getRelation() == $this->getRelation() && $property->isRequired() == $this->isRequired() && $property->isIdentifier() == $this->isIdentifier();
 }
 /**
  * @return MetaClassProperty
  **/
 private function makeProperty($name, $type, MetaClass $class, $size)
 {
     Assert::isFalse(strpos($name, '_'), 'naming convention violation spotted');
     if (!$name || !$type) {
         throw new WrongArgumentException('strange name or type given: "' . $name . '" - "' . $type . '"');
     }
     if (is_readable(ONPHP_META_TYPES . $type . 'Type' . EXT_CLASS)) {
         $typeClass = $type . 'Type';
     } else {
         $typeClass = 'ObjectType';
     }
     $property = new MetaClassProperty($name, new $typeClass($type), $class);
     if ($size) {
         $property->setSize($size);
     } else {
         Assert::isTrue(!$property->getType() instanceof FixedLengthStringType && !$property->getType() instanceof NumericType && !$property->getType() instanceof HttpUrlType, 'size is required for "' . $property->getName() . '"');
     }
     return $property;
 }
Exemplo n.º 6
0
    public function toDropper(MetaClass $class, MetaClassProperty $property, MetaClassProperty $holder = null)
    {
        if ($property->getRelationId() == MetaRelation::ONE_TO_MANY || $property->getRelationId() == MetaRelation::MANY_TO_MANY) {
            // we don't need dropper in such cases
            return null;
        }
        $name = $property->getName();
        $methodName = 'drop' . ucfirst($name);
        if ($holder) {
            $method = <<<EOT

/**
 * @return {$holder->getClass()->getName()}
**/
public function {$methodName}()
{
\t\$this->{$holder->getName()}->{$methodName}();

\treturn \$this;
}

EOT;
        } else {
            if ($property->getFetchStrategyId() == FetchStrategy::LAZY) {
                $method = <<<EOT

/**
 * @return {$class->getName()}
**/
public function {$methodName}()
{
\t\$this->{$name} = null;
\t\$this->{$name}Id = null;

\treturn \$this;
}

EOT;
            } else {
                $method = <<<EOT

/**
 * @return {$class->getName()}
**/
public function {$methodName}()
{
\t\$this->{$name} = null;

\treturn \$this;
}

EOT;
            }
        }
        return $method;
    }
 /**
  * @return MetaClass
  **/
 public function addProperty(MetaClassProperty $property)
 {
     $name = $property->getName();
     if (!isset($this->properties[$name])) {
         $this->properties[$name] = $property;
     } else {
         throw new WrongArgumentException("property '{$name}' already exist");
     }
     if ($property->isIdentifier()) {
         $this->identifier = $property;
     }
     return $this;
 }
    public function toSetter(MetaClass $class, MetaClassProperty $property, MetaClassProperty $holder = null)
    {
        $name = $property->getName();
        $methodName = 'set' . ucfirst($name);
        if ($holder) {
            return <<<EOT

/**
 * @return {$holder->getClass()->getName()}
**/
public function {$methodName}(\${$name})
{
\t\$this->{$holder->getName()}->{$methodName}(\${$name});

\treturn \$this;
}

EOT;
        } else {
            if ($property->isRequired()) {
                $method = <<<EOT

/**
 * @return {$class->getName()}
**/
public function {$methodName}(\${$name} = false)
{
\t\$this->{$name} = (\${$name} === true);

\treturn \$this;
}

EOT;
            } else {
                $method = <<<EOT

/**
 * @return {$class->getName()}
**/
public function {$methodName}(\${$name} = null)
{
\tAssert::isTernaryBase(\${$name});
\t
\t\$this->{$name} = \${$name};

\treturn \$this;
}

EOT;
            }
        }
        return $method;
    }