BasePropertyType.class.php

Go to the documentation of this file.
00001 <?php
00002 /***************************************************************************
00003  *   Copyright (C) 2006-2007 by Konstantin V. Arkhipov                     *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU Lesser General Public License as        *
00007  *   published by the Free Software Foundation; either version 3 of the    *
00008  *   License, or (at your option) any later version.                       *
00009  *                                                                         *
00010  ***************************************************************************/
00011 
00015     abstract class BasePropertyType
00016     {
00017         abstract public function getDeclaration();
00018         abstract public function isMeasurable();
00019         abstract public function toColumnType();
00020         abstract public function getPrimitiveName();
00021         
00022         protected $default = null;
00023         
00024         public function isGeneric()
00025         {
00026             return true;
00027         }
00028         
00029         public function toMethods(
00030             MetaClass $class,
00031             MetaClassProperty $property,
00032             MetaClassProperty $holder = null
00033         )
00034         {
00035             return
00036                 $this->toGetter($class, $property, $holder)
00037                 .$this->toSetter($class, $property, $holder);
00038         }
00039         
00040         public function hasDefault()
00041         {
00042             return ($this->default !== null);
00043         }
00044         
00045         public function getDefault()
00046         {
00047             return $this->default;
00048         }
00049         
00050         public function setDefault($default)
00051         {
00052             throw new UnsupportedMethodException(
00053                 'only generic non-object types can have default values atm'
00054             );
00055         }
00056         
00057         public function toGetter(
00058             MetaClass $class,
00059             MetaClassProperty $property,
00060             MetaClassProperty $holder = null
00061         )
00062         {
00063             if ($holder)
00064                 $name = $holder->getName().'->get'.ucfirst($property->getName()).'()';
00065             else
00066                 $name = $property->getName();
00067             
00068             $methodName = 'get'.ucfirst($property->getName());
00069             
00070             return <<<EOT
00071 
00072 public function {$methodName}()
00073 {
00074     return \$this->{$name};
00075 }
00076 
00077 EOT;
00078         }
00079         
00080         public function toSetter(
00081             MetaClass $class,
00082             MetaClassProperty $property,
00083             MetaClassProperty $holder = null
00084         )
00085         {
00086             $name = $property->getName();
00087             $methodName = 'set'.ucfirst($name);
00088             
00089             if ($holder) {
00090                 return <<<EOT
00091 
00095 public function {$methodName}(\${$name})
00096 {
00097     \$this->{$holder->getName()}->{$methodName}(\${$name});
00098 
00099     return \$this;
00100 }
00101 
00102 EOT;
00103             } else {
00104                 return <<<EOT
00105 
00109 public function {$methodName}(\${$name})
00110 {
00111     \$this->{$name} = \${$name};
00112 
00113     return \$this;
00114 }
00115 
00116 EOT;
00117             }
00118 
00119             Assert::isUnreachable();
00120         }
00121         
00122         public function getHint()
00123         {
00124             return null;
00125         }
00126     }
00127 ?>