• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/ObjectFactory.php

00001 <?PHP
00026 class ObjectFactory
00027 {
00032     protected $_objsRefMap = array();
00033 
00034     public function __construct()
00035     {
00036     }
00037 
00038     public function __destruct()
00039     {
00040     }
00041 
00049     public function getObject($objName, $new=0)
00050     {
00051         if (array_key_exists($objName, $this->_objsRefMap) && $new==0)
00052         {
00053             return $this->_objsRefMap[$objName];
00054         }
00055 
00056         $obj = $this->constructObject($objName);
00057         if ($obj)
00058             $this->_objsRefMap[$objName] = $obj; // save object to cache
00059         if($new!=1){
00060                if (method_exists($obj, "GetSessionVars"))
00061                    $obj->getSessionVars(BizSystem::sessionContext());
00062         }
00063         return $obj;
00064     }
00065 
00073     public function createObject($objName, &$xmlArr=null)
00074     {
00075         $obj = $this->constructObject($objName, $xmlArr);
00076         return $obj;
00077     }
00078 
00079     public function setObject($objName, $obj)
00080     {
00081         $this->_objsRefMap[$objName] = $obj;
00082     }
00083 
00089     public function getAllObjects()
00090     {
00091         return $this->_objsRefMap;
00092     }
00093 
00101     protected function constructObject($objName, &$xmlArr=null)
00102     {
00103         if (!$xmlArr)
00104         {
00105             $xmlFile = BizSystem::GetXmlFileWithPath ($objName);
00106             if (!$xmlFile)
00107             {
00108                 $dotPos = strrpos($objName, ".");
00109                 $package = $dotPos>0 ? substr($objName, 0, $dotPos) : null;
00110                 $class = $dotPos>0 ? substr($objName, $dotPos+1) : $objName;
00111             }
00112             else
00113                 $xmlArr = BizSystem::getXmlArray($xmlFile);
00114         }
00115         if ($xmlArr)
00116         {
00117             $keys = array_keys($xmlArr);
00118             $root = $keys[0];
00119 
00120             // add by mr_a_ton , atrubut name must match with object name
00121             $dotPos = strrpos($objName, ".");
00122             $shortObjectName  = $dotPos > 0 ? substr($objName, $dotPos+1) : $objName;
00123             if ($xmlArr[$root]["ATTRIBUTES"]["NAME"]=="")
00124             {
00125                 $xmlArr[$root]["ATTRIBUTES"]["NAME"]=$shortObjectName;
00126             }
00127             else
00128             {
00129                 if ($shortObjectName != $xmlArr[$root]["ATTRIBUTES"]["NAME"] )
00130                 {
00131                     trigger_error("Metadata file parsing error for object $objName. Name attribut [".$xmlArr[$root]["ATTRIBUTES"]["NAME"]."] not same with object name. Please double check your metadata xml file again.", E_USER_ERROR);
00132                 }
00133             }
00134 
00135             //$package = $xmlArr[$root]["ATTRIBUTES"]["PACKAGE"];
00136             $class = $xmlArr[$root]["ATTRIBUTES"]["CLASS"];
00137             // if class has package name as prefix, change the package to the prefix
00138             $dotPos = strrpos($class, ".");
00139             $classPrefix = $dotPos>0 ? substr($class, 0, $dotPos) : null;
00140             $classPackage = $classPrefix ? $classPrefix : null;
00141             if ($classPrefix) $class = substr($class, $dotPos+1);
00142             // set object package
00143             $dotPos = strrpos($objName, ".");
00144             $package = $dotPos>0 ? substr($objName, 0, $dotPos) : null;
00145             if (strpos($package, '@') === 0) $package = substr($package, 1);
00146             if (!$classPackage) $classPackage = $package;
00147             $xmlArr[$root]["ATTRIBUTES"]["PACKAGE"] = $package;
00148         }
00149 
00150         if ($class == "BizObj")  // convert BizObj to BizDataObj, support <1.2 version
00151             $class = "BizDataObj";
00152 
00153         if (!class_exists($class, false))
00154         {            
00155             $classFile= BizSystem::getLibFileWithPath($class, $classPackage);
00156             if (!$classFile)
00157             {
00158                 if ($package)
00159                     trigger_error("Cannot find the class with name as $package.$class", E_USER_ERROR);
00160                 else
00161                     trigger_error("Cannot find the class with name as $class of $objName", E_USER_ERROR);
00162                 exit();
00163             }
00164             include_once($classFile);
00165         }
00166         if (class_exists($class, false))
00167         {
00168             //if ($objName == "collab.calendar.form.EventListForm") { print_r($xmlArr); exit; }
00169             $obj_ref = new $class($xmlArr);
00170             if ($obj_ref)
00171             {
00172                 return $obj_ref;
00173             }
00174         }
00175         else
00176             trigger_error("Cannot find the class with name as $class in $classFile", E_USER_ERROR);
00177         return null;
00178     }
00179 
00180 }
00181 
00182 ?>

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2