| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- // class Type_WpsProcess
- // class Type_WpsProcessInput
- class Type_WpsProcess {
- var $_data = [];
- // 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
- 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(function ($input) {
- return ($input instanceof Type_WpsProcessInput) ? $input : Type_WpsProcessInput::build($input);
- }, $conf['dataInputs']);
- $wpsProcess->defaultOutput = $conf['defaultOutput'];
- $wpsProcess->supportedOutput = $conf['supportedOutput'];
- return $wpsProcess;
- }
- 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 = [];
- 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']}'");
- }
- static function build($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->literalData = [ 'anyValue' => true ]; // default string input for all functions
- $input->_xsdType = $conf['type']; // for validation
- 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 [
- 'identifier' => $this->_data['identifier'],
- 'title' => $this->_data['title'],
- 'abstract' => $this->_data['description'],
- 'literalData' => $this->_data['literalData'],
- 'maxOccurs' => $this->_data['maxOccurs'],
- 'minOccurs' => $this->_data['minOccurs'],
- ];
- }
- }
|