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

E:/E/GEAMP/www/openbiz/openbiz/bin/service/compileService.php

00001 <?php 
00002 /*
00003 
00004 usage sample:
00005 include_once 'bin/app_init.php';
00006 $svcobj = BizSystem::getObject('service.compileService');
00007 $svcobj->compile("document.do.DocumentDO",'Obj');
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     public function encode($str,$key) {
00066         $td = mcrypt_module_open('twofish', '', 'ecb', '');
00067         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
00068         $ks = mcrypt_enc_get_key_size($td);
00069         $keystr = substr(md5($key), 0, $ks);
00070         mcrypt_generic_init($td, $keystr, $iv);
00071         $encrypted = mcrypt_generic($td, $str);
00072         mcrypt_module_close($td);
00073         $hexdata = bin2hex($encrypted);
00074         return $hexdata;
00075     }
00076    
00077     public function decode($str,$key) {
00078         $td = mcrypt_module_open('twofish', '', 'ecb', '');
00079         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
00080         $ks = mcrypt_enc_get_key_size($td);
00081         $keystr = substr(md5($key), 0, $ks);
00082         mcrypt_generic_init($td, $keystr, $iv);
00083         $encrypted = pack( "H*", $str);
00084         $decrypted = mdecrypt_generic($td, $encrypted);
00085         mcrypt_generic_deinit($td);
00086         mcrypt_module_close($td);
00087         return $decrypted;
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             // add by mr_a_ton , atrubut name must match with object name
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             //$package = $xmlArr[$root]["ATTRIBUTES"]["PACKAGE"];
00127             $class = $xmlArr[$root]["ATTRIBUTES"]["CLASS"];
00128             // if class has package name as prefix, change the package to the prefix
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             // set object package
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 ?>

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