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;
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
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
00136 $class = $xmlArr[$root]["ATTRIBUTES"]["CLASS"];
00137
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
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")
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
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 ?>