Last active
August 29, 2015 14:20
-
-
Save chukShirley/4b36776a70efcdc758b9 to your computer and use it in GitHub Desktop.
Proposed code for automatically generating toolkit service params from RPG D specs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$toolkit = new ToolkitService(); | |
// Data to be passed to toolkit call | |
$data = array( | |
'testLabel' => 'testValue', | |
//... | |
); | |
// Build RpgSource object | |
$rpgSource = RpgSource::fromArray(array('MYLIB','QRPGSRC','MYRPGPGM')); | |
// Automatically generate params array from source member D specs | |
$params = $toolkit->GenerateParams($rpgSource, $data); | |
// Call program passing generated params array | |
$toolkit->PgmCall('MYRPGPGM', 'MYLIB', $params, null, null); | |
class RpgSource | |
{ | |
private $library; | |
private $file; | |
private $member; | |
private function __construct(){} | |
public static function fromArray(array $data) | |
{ | |
// Construct RpgSource object | |
$rpgSource = new RpgSource; | |
$rpgSource->library = $data[0]; | |
$rpgSource->file = $data[1]; | |
$rpgSource->member = $data[2]; | |
return $rpgSource; | |
} | |
public function getLibrary() | |
{ | |
return $this->library; | |
} | |
public function getSourceFile() | |
{ | |
return $this->file; | |
} | |
public function getSourceMember() | |
{ | |
return $this->member; | |
} | |
} | |
class ToolkitService | |
{ | |
public function GenerateParams(RpgSource $rpgSource, array $data) | |
{ | |
// Use XMLSERVICE to retrieve the source member | |
$sourceMember = $this->fetchSourceMember($rpgSource); | |
// Parse RPG source file | |
$parsedSource = $this->parseSourceMember($sourceMember); | |
// Convert RPG D specs to PHP toolkit method calls | |
$buildParamsCode = $this->generateParameterArrayFromSource($parsedSource, $data); | |
// Initialize array for parameters | |
$param = array(); | |
// Execute string as PHP code | |
eval($buildParamsCode); | |
return $param; | |
} | |
private function fetchSourceMember(RpgSource $rpgSource) | |
{ | |
// Fetch source member from cache | |
$sourceMember = zend_shm_cache_fetch('rpgSource-'.$rpgSource->getLibrary().'-'.$rpgSource->getSourceFile().'-'.$rpgSource->getSourceMember()); | |
// If source member hasn't been stored in cache, retrieve it | |
if (!$sourceMember) { | |
// Use XMLSERVICE to retrieve source member | |
// cat mylib.lib/program.file | |
// Retrieve library, source file, and source member via RpgSource::get*() methods | |
// Store the source member in cache | |
zend_shm_cache_store('rpgSource-'.$rpgSource->getLibrary().'-'.$rpgSource->getSourceFile().'-'.$rpgSource->getSourceMember(), $sourceMember, 24*3600); | |
} | |
return $sourceMember; | |
} | |
private function parseSourceMember($sourceMember) | |
{ | |
// Imitate parsing logic from D spec tool | |
return $parsedSource; | |
} | |
private function generateParameterArrayFromSource($source, $data) | |
{ | |
// Imitate conversion logic from D spec tool and inject/map values from $data | |
return $paramsCode; | |
} | |
public function pgmCall(){ | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment