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'] ] : [] ); } }