BooleanType.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     class BooleanType extends BasePropertyType
00016     {
00017         public function getPrimitiveName()
00018         {
00019             return 'boolean';
00020         }
00021         
00026         public function setDefault($default)
00027         {
00028             static $boolean = array('true' => true, 'false' => false);
00029 
00030             if (!isset($boolean[$default]))
00031                 throw new WrongArgumentException(
00032                     "strange default value given - '{$default}'"
00033                 );
00034 
00035             $this->default = $boolean[$default];
00036 
00037             return $this;
00038         }
00039 
00040         public function getDeclaration()
00041         {
00042             if ($this->hasDefault())
00043                 return
00044                     $this->default
00045                         ? 'true'
00046                         : 'false';
00047 
00048             return 'null';
00049         }
00050 
00051         public function isMeasurable()
00052         {
00053             return false;
00054         }
00055 
00056         public function toColumnType()
00057         {
00058             return 'DataType::create(DataType::BOOLEAN)';
00059         }
00060 
00061         public function toGetter(
00062             MetaClass $class,
00063             MetaClassProperty $property,
00064             MetaClassProperty $holder = null
00065         )
00066         {
00067             $name = $property->getName();
00068             $camelName = ucfirst($name);
00069 
00070             $methodName = "is{$camelName}";
00071             $compatName = "get{$camelName}";
00072             
00073             if ($holder) {
00074                 return <<<EOT
00075 
00076 public function {$compatName}()
00077 {
00078     return \$this->{$holder->getName()}->{$compatName}();
00079 }
00080 
00081 public function {$methodName}()
00082 {
00083     return \$this->{$holder->getName()}->{$methodName}();
00084 }
00085 
00086 EOT;
00087             } else {
00088                 return <<<EOT
00089 
00090 public function {$compatName}()
00091 {
00092     return \$this->{$name};
00093 }
00094 
00095 public function {$methodName}()
00096 {
00097     return \$this->{$name};
00098 }
00099 
00100 EOT;
00101             }
00102             
00103             Assert::isUnreachable();
00104         }
00105 
00106         public function toSetter(
00107             MetaClass $class,
00108             MetaClassProperty $property,
00109             MetaClassProperty $holder = null
00110         )
00111         {
00112             $name = $property->getName();
00113             $methodName = 'set'.ucfirst($name);
00114             
00115             if ($holder) {
00116                 return <<<EOT
00117 
00121 public function {$methodName}(\${$name})
00122 {
00123     \$this->{$holder->getName()}->{$methodName}(\${$name});
00124 
00125     return \$this;
00126 }
00127 
00128 EOT;
00129             } else {
00130                 if ($property->isRequired()) {
00131                     $method = <<<EOT
00132 
00136 public function {$methodName}(\${$name} = false)
00137 {
00138     \$this->{$name} = (\${$name} === true);
00139 
00140     return \$this;
00141 }
00142 
00143 EOT;
00144                 } else {
00145                     $method = <<<EOT
00146 
00150 public function {$methodName}(\${$name} = null)
00151 {
00152     Assert::isTernaryBase(\${$name});
00153     
00154     \$this->{$name} = \${$name};
00155 
00156     return \$this;
00157 }
00158 
00159 EOT;
00160                 }
00161             }
00162             
00163             return $method;
00164         }
00165     }
00166 ?>