00001 <?php 00002 /*************************************************************************** 00003 * Copyright (C) 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 /* $Id: ClassProjection.class.php 4687 2007-12-09 18:57:18Z voxus $ */ 00012 00016 class ClassProjection implements ObjectProjection 00017 { 00018 protected $className = null; 00019 00023 public static function create($class) 00024 { 00025 return new self($class); 00026 } 00027 00028 public function __construct($class) 00029 { 00030 Assert::isTrue( 00031 ClassUtils::isInstanceOf($class, 'Prototyped') 00032 ); 00033 00034 if (is_object($class)) 00035 $this->className = get_class($class); 00036 else 00037 $this->className = $class; 00038 } 00039 00043 public function process(Criteria $criteria, JoinCapableQuery $query) 00044 { 00045 $dao = call_user_func(array($this->className, 'dao')); 00046 00047 foreach ($dao->getFields() as $field) 00048 $this->subProcess($query, $field); 00049 00050 return $query; 00051 } 00052 00053 /* void */ protected function subProcess(JoinCapableQuery $query, $field) 00054 { 00055 $query->get($field); 00056 } 00057 } 00058 ?>