float
// example: Input / LiteralData:
// float
//
// 1.01
// Type_WpsProcessOutput: [ 'MimeType' => text/xml, 'Encoding' => base64, 'Schema' => http://foo.bar/gml/3.1.0/polygon.xsd ]
// supportedOutput: [ Type_WpsProcessOutput, ... ]
// [ 'MimeType' => "text/xml; subtype=wfs-collection/1.0" ],
// [ 'MimeType' => "text/xml; subtype=wfs-collection/1.1" ],
// [ 'MimeType' => "application/json" ],
// [ 'MimeType' => "application/wfs-collection-1.0" ],
// [ 'MimeType' => "application/wfs-collection-1.1" ],
// [ 'MimeType' => "application/zip" ],
static function validate($conf) {
if (empty($conf['identifier'])) throw new Exception("WpsProcess parse error - missing input identifier");
if (empty($conf['title'])) throw new Exception("WpsProcess parse error - missing input title for '{$conf['identifier']}'");
}
static function build($conf) { // @return Type_WpsProcess or throw Exception
return self::buildProcess($conf);
}
static function buildProcess($conf) { // @return Type_WpsProcess or throw Exception
self::validate($conf);
$wpsProcess = new Type_WpsProcess();
$wpsProcess->identifier = $conf['identifier'];
$wpsProcess->title = $conf['title'];
$wpsProcess->description = $conf['description'];
$wpsProcess->processVersion = V::get('processVersion', '1.0.0', $conf);
$wpsProcess->dataInputs = array_map([ self, 'buildInput' ], $conf['dataInputs']);
// $wpsProcess->dataInputs = array_map(function ($input) {
// return ($input instanceof Type_WpsProcessInput) ? $input : Type_WpsProcessInput::build($input);
$wpsProcess->defaultOutput = $conf['defaultOutput'];
$wpsProcess->supportedOutput = $conf['supportedOutput'];
return $wpsProcess;
}
static function buildInput($input) { // @return Type_WpsProcessInput or throw Exception
return ($input instanceof Type_WpsProcessInput) ? $input : Type_WpsProcessInput::build($input);
}
function __isset($name) {
return (array_key_exists($name, $this->_data));
}
function __get($name) {
if (array_key_exists($name, $this->_data)) {
return $this->_data[$name];
}
return null;
}
function __set($name, $value) {
$this->_data[$name] = $value;
}
function toArray() {
return $this->_data;
}
function __toString() {
return str_replace('"', '',
str_replace([ '{', '}', '":', ',"' ], [ '{ ', ' }', ': ', ', ' ], json_encode($this->_data))
);
}
function toWpsJson() {
return [
'processVersion' => V::get('processVersion', '1.0.0', $this->_data),
'statusSupported' => false,
'storeSupported' => false,
'identifier' => $this->_data['identifier'],
'title' => $this->_data['title'],
'abstract' => V::get('description', '', $this->_data),
'dataInputs' => array_map(function ($input) {
return $input->toWpsJson();
}, $this->_data['dataInputs']),
'processOutputs' => [ // TODO: multiple outputs?
[
'identifier' => "result",
'title' => "result",
'defaultOutput' => $this->_data['defaultOutput'],
'supportedOutput' => $this->_data['supportedOutput'],
],
]
];
// { // expected json structure:
// "processVersion": "",
// "statusSupported": false,
// "storeSupported": false,
// "identifier": "p5:selectFeature",
// "title": "Select feature",
// "abstract": "",
// "dataInputs": [{
// "maxOccurs": 1,
// "minOccurs": 1,
// "title": "Feature typeName",
// "abstract": "Feature typeName eg. default_db/PROBLEMS",
// "literalData": {
// "anyValue": true
// }
// }, {
// "maxOccurs": null,
// "minOccurs": 1,
// "title": "Feature primaryKey",
// "abstract": "Feature primaryKey",
// "literalData": {
// "anyValue": true
// }
// }],
// "processOutputs": [{
// "identifier": "result",
// "title": "result",
// "complexOutput": {
// "default": {
// "formats": {
// "text/xml; subtype=wfs-collection/1.0": true
// }
// },
// "supported": {
// "formats": {
// "text/xml; subtype=wfs-collection/1.0": true,
// "text/xml; subtype=wfs-collection/1.1": true,
// "application/json": true
// }
// }
// }
// }]
// }
}
}
class Type_WpsProcessInput {
var $_data = []; // $_data['dataType'] === $this->dataType
// $_data['dataType']: ( 'literal' | 'complex' | 'boundingBox' )
static function validate($conf) {
if (empty($conf['identifier'])) throw new Exception("WpsProcessInput parse error - missing input identifier");
if (empty($conf['title'])) throw new Exception("WpsProcessInput parse error - missing input title for '{$conf['identifier']}'");
switch ($conf['dataType']) {
case 'literal': break;
case 'complex': break;
case 'boundingBox': break;
default: throw new Exception("WpsProcessInput parse error - missing input type for '{$conf['identifier']}'");
}
}
static function build($conf) { // @return Type_WpsProcessInput or throw Exception
return self::buildInput($conf);
}
static function buildInput($conf) { // @return Type_WpsProcessInput or throw Exception
self::validate($conf);
$input = new Type_WpsProcessInput();
$input->identifier = $conf['identifier'];
$input->title = $conf['title'];
$input->description = V::get('description', "", $conf);
$input->maxOccurs = V::get('maxOccurs', 1, $conf, 'maxOccurs');
$input->minOccurs = V::get('minOccurs', 1, $conf, 'minOccurs');
$input->dataType = $conf['dataType']; // 'literal' | 'complex' | 'boundingBox'
$input->xsdType = V::get('xsdType', '', $conf);
return $input;
}
function __isset($name) {
return (array_key_exists($name, $this->_data));
}
function __get($name) {
if (array_key_exists($name, $this->_data)) {
return $this->_data[$name];
}
return null;
}
function __set($name, $value) {
$this->_data[$name] = $value;
}
function toArray() {
return $this->_data;
}
function __toString() {
return str_replace('"', '',
str_replace([ '{', '}', '":', ',"' ], [ '{ ', ' }', ': ', ', ' ], json_encode($this->_data))
);
}
function toWpsJson() {
return array_merge(
[
'identifier' => $this->_data['identifier'],
'title' => $this->_data['title'],
'abstract' => $this->_data['description'],
'maxOccurs' => $this->_data['maxOccurs'],
'minOccurs' => $this->_data['minOccurs'],
],
('literal' === $this->dataType) ? [ 'literalData' => $this->_data['literalData'] ] : [],
('complex' === $this->dataType) ? [ 'complexData' => $this->_data['complexData'] ] : [],
('boundingBox' === $this->dataType) ? [ 'boundingBoxData' => $this->_data['boundingBoxData'] ] : []
);
}
}