00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010 class compileService
00011 {
00012 protected $m_ObjTemplateData ;
00013 protected $m_XmlTemplateData ;
00014
00015 function __construct(&$xmlArr)
00016 {
00017 $this->readMetadata($xmlArr);
00018 }
00019
00020 protected function readMetadata(&$xmlArr)
00021 {
00022 $this->m_ObjTemplateData = $xmlArr["PLUGINSERVICE"]["OBJLOADERTEMPLATE"]["VALUE"];
00023 $this->m_XmlTemplateData = $xmlArr["PLUGINSERVICE"]["XMLLOADERTEMPLATE"]["VALUE"];
00024 }
00025
00026 public function compile($objName,$type)
00027 {
00028 switch(strtoupper($type))
00029 {
00030 case 'XML':
00031 $template = $this->m_XmlTemplateData;
00032 break;
00033 default:
00034 case 'OBJ':
00035 $template = $this->m_ObjTemplateData;
00036 break;
00037 }
00038 $this->_doCompile($objName, $template);
00039 }
00040
00041 private function _doCompile($objName,$template)
00042 {
00043 $xmlArr = $this->getMetadataArray($objName);
00044 $xmlArrStr = serialize($xmlArr);
00045 $objNameNew = str_replace(".","_",$objName);
00046 $xmlArrCode = $this->encode($xmlArrStr,$objNameNew);
00047
00048 $output = str_replace("{\$className}",$objNameNew,$template);
00049 $output = str_replace("{\$metadata}",$xmlArrCode,$output);
00050
00051 $xmlFile = BizSystem::GetXmlFileWithPath ($objName);
00052 $xmlCmpFile = $xmlFile.".php";
00053 return file_put_contents($xmlCmpFile, $output);
00054 }
00055
00056 public function encode($str,$key){
00057 return base64_encode(base64_encode($str));
00058 }
00059
00060 public function decode($str,$key){
00061 return base64_decode(base64_decode($str));
00062 }
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091 private function getMetadataArray($objName)
00092 {
00093
00094 $xmlFile = BizSystem::GetXmlFileWithPath ($objName);
00095 if (!$xmlFile)
00096 {
00097 $dotPos = strrpos($objName, ".");
00098 $package = $dotPos>0 ? substr($objName, 0, $dotPos) : null;
00099 $class = $dotPos>0 ? substr($objName, $dotPos+1) : $objName;
00100 }
00101 else
00102 {
00103 $xmlArr = BizSystem::getXmlArray($xmlFile);
00104 }
00105
00106 if ($xmlArr)
00107 {
00108 $keys = array_keys($xmlArr);
00109 $root = $keys[0];
00110
00111
00112 $dotPos = strrpos($objName, ".");
00113 $shortObjectName = $dotPos > 0 ? substr($objName, $dotPos+1) : $objName;
00114 if ($xmlArr[$root]["ATTRIBUTES"]["NAME"]=="")
00115 {
00116 $xmlArr[$root]["ATTRIBUTES"]["NAME"]=$shortObjectName;
00117 }
00118 else
00119 {
00120 if ($shortObjectName != $xmlArr[$root]["ATTRIBUTES"]["NAME"] )
00121 {
00122 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);
00123 }
00124 }
00125
00126
00127 $class = $xmlArr[$root]["ATTRIBUTES"]["CLASS"];
00128
00129 $dotPos = strrpos($class, ".");
00130 $classPrefix = $dotPos>0 ? substr($class, 0, $dotPos) : null;
00131 $classPackage = $classPrefix ? $classPrefix : null;
00132 if ($classPrefix) $class = substr($class, $dotPos+1);
00133
00134 $dotPos = strrpos($objName, ".");
00135 $package = $dotPos>0 ? substr($objName, 0, $dotPos) : null;
00136 if (!$classPackage) $classPackage = $package;
00137 $xmlArr[$root]["ATTRIBUTES"]["PACKAGE"] = $package;
00138 return $xmlArr;
00139 }
00140 return ;
00141
00142 }
00143 }
00144 ?>