public function getToArray(ClassEntity $entity = null)
 {
     $code = array();
     $code[] = sprintf('%s/**', $this->getIndentation());
     $code[] = sprintf('%s * Create the data array for the %s', $this->getIndentation(), $entity->getName());
     $code[] = sprintf('%s *', $this->getIndentation(), $entity->getName());
     $code[] = sprintf('%s * @param %s $%s The %s to convert to an array', $this->getIndentation(), $entity->getName(), lcfirst($entity->getName()), $entity->getName());
     $code[] = sprintf('%s * @return array The data array for the %s', $this->getIndentation(), $entity->getName());
     $code[] = sprintf('%s */', $this->getIndentation());
     $code[] = sprintf('%sfunction toArray(%s $%s)', $this->getIndentation(), $entity->getName(), lcfirst($entity->getName()));
     $code[] = sprintf('%s{', $this->getIndentation());
     // body
     $code[] = sprintf('%s$data = array(', $this->getIndentation(2), lcfirst($entity->getName()));
     $members = $entity->getMembers();
     foreach ($members as $member) {
         if ($member->getType() != 'property') {
             continue;
         }
         $code[] = sprintf("%s'%s' => \$%s->get%s(),", $this->getIndentation(3), $member->getName(), lcfirst($entity->getName()), ucfirst($member->getName()));
     }
     $code[] = sprintf('%s);', $this->getIndentation(2));
     $code[] = sprintf('');
     $code[] = sprintf('%sreturn $data;', $this->getIndentation(2));
     // end body
     $code[] = sprintf('%s}', $this->getIndentation());
     return $code;
 }
 public function generateArrayCreation(ClassEntity $entity)
 {
     $code = array();
     $code[] = sprintf('$%s = array(', lcFirst($entity->getName()));
     $members = $entity->getMembers();
     foreach ($members as $member) {
         if ($member->getType() != 'property') {
             continue;
         }
         $code[] = sprintf("%s'%s' => %s,", $this->getIndentation(), $member->getName(), preg_match('|' . preg_quote('[]') . '|', $member->getMemberType()) ? 'array()' : "''");
     }
     $code[] = ');';
     return implode("\n", $code);
 }
 public function outputFunctions(ClassEntity $entity)
 {
     $definitions = '';
     $members = $entity->getMembers();
     foreach ($members as $member) {
         switch ($member->getType()) {
             case 'getter':
                 $parts = array('doc' => array('Get the ' . $member->getName(), '', '@return ' . $member->getMemberType() . ' The ' . $member->getName()), 'signature' => $signature = $member->getAccess() . ' function get' . ucfirst($member->getName()) . '()', 'body' => array('return $this->' . $member->getname() . ';'));
                 break;
             case 'setter':
                 // if the type starts with a capital letter it's a classname, and we add it to the setter signature
                 $typedSet = ucfirst($member->getMemberType()) == $member->getMemberType();
                 $parts = array('doc' => array('Set the ' . $member->getName(), '', '@param ' . $member->getMemberType() . ' $' . $member->getName() . ' The ' . $member->getName(), '@return ' . $entity->getName()), 'signature' => $signature = $member->getAccess() . ' function set' . ucfirst($member->getName()) . '(' . ($typedSet ? $member->getMemberType() . ' ' : '') . '$' . $member->getName() . ')', 'body' => array('$this->' . $member->getname() . ' = $' . $member->getName() . ';', '', 'return $this;'));
                 break;
             case 'function':
                 $parts = array('doc' => array($member->getName()), 'signature' => $signature = $member->getAccess() . ' function ' . $member->getName() . '()', 'body' => array());
                 break;
             default:
                 $parts = array();
                 break;
         }
         if (empty($parts)) {
             continue;
         }
         // output
         $definitions .= $this->getIndentation() . "/**\n";
         foreach ($parts['doc'] as $docLine) {
             $definitions .= $this->getIndentation() . " * " . $docLine . "\n";
         }
         $definitions .= $this->getIndentation() . " */\n";
         $definitions .= $this->getIndentation() . $parts['signature'] . "\n";
         $definitions .= $this->getIndentation() . "{\n";
         foreach ($parts['body'] as $bodyLine) {
             $definitions .= $this->getIndentation(2) . $bodyLine . "\n";
         }
         $definitions .= $this->getIndentation() . "}\n";
         $definitions .= "\n";
     }
     return $definitions;
 }