|
@@ -7,6 +7,67 @@ class Type_WpsProcess {
|
|
|
|
|
|
|
|
var $_data = [];
|
|
var $_data = [];
|
|
|
|
|
|
|
|
|
|
+ // @see http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd
|
|
|
|
|
+
|
|
|
|
|
+ // wps:ProcessDescriptions / ProcessDescription [ @minOccurs=1, @maxOccurs=unbounded ]
|
|
|
|
|
+
|
|
|
|
|
+ // ProcessDescription / ows:Identifier [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // ProcessDescription / ows:Title [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // ProcessDescription / ows:Abstract [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // ProcessDescription / ows:Metadata [ @xlink:title, @xlink:type, @xlink:href, @about ]
|
|
|
|
|
+ // ProcessDescription / DataInputs / Input [ @minOccurs=1, @maxOccurs=unbounded ]
|
|
|
|
|
+ // ProcessDescription / ProcessOutputs / Output [ @minOccurs=1, @maxOccurs=unbounded ]
|
|
|
|
|
+
|
|
|
|
|
+ // Input / ows:Identifier [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ows:Title [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ows:Abstract [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ( LiteralData | ComplexData | BoundingBoxData )
|
|
|
|
|
+ // Input / ( LiteralData )
|
|
|
|
|
+ // Input / ( LiteralData ) / ows:DataType [ @minOccurs=0, @maxOccurs=1, @ows:reference ]
|
|
|
|
|
+ // Input / ( LiteralData ) / UOMs [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AllowedValues | ows:AnyValue | ValuesReference )
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AllowedValues )
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AllowedValues ) / ( ows:Value | ows:Range )
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AllowedValues ) / ( ows:Value )
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AllowedValues ) / ( ows:Range ) / [ @ows:MinimumValue, @ows:MaximumValue, @ows:Spacing ]
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ows:AnyValue )
|
|
|
|
|
+ // Input / ( LiteralData ) / ( ValuesReference ) / [ @ows:reference, valuesForm anyURI ]
|
|
|
|
|
+ // Input / ( LiteralData ) / DefaultValue [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ( ComplexData )
|
|
|
|
|
+ // Input / ( ComplexData ) / Default / Format [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // Input / ( ComplexData ) / Supported / Format [ @minOccurs=1, @maxOccurs=unbounded ]
|
|
|
|
|
+ // Input / ( ComplexData ) / @maximumMegabytes integer
|
|
|
|
|
+ // Input / ( BoundingBoxData )
|
|
|
|
|
+ // Input / ( BoundingBoxData ) / Default / CRS anyURI
|
|
|
|
|
+ // Input / ( BoundingBoxData ) / Supported / CRS anyURI
|
|
|
|
|
+
|
|
|
|
|
+ // Output / ows:Identifier
|
|
|
|
|
+ // Output / ows:Title
|
|
|
|
|
+ // Output / ( ComplexOutput | LiteralOutput | BoundingBoxOutput )
|
|
|
|
|
+ // Output / ( ComplexOutput )
|
|
|
|
|
+ // Output / ( ComplexOutput ) / Default / Format [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // Output / ( ComplexOutput ) / Supported / Format [ @minOccurs=1, @maxOccurs=unbounded ]
|
|
|
|
|
+ // Output / ( LiteralOutput )
|
|
|
|
|
+ // Output / ( LiteralOutput ) / ows:DataType [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Output / ( LiteralOutput ) / UOMs [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Output / ( BoundingBoxOutput )
|
|
|
|
|
+ // Output / ( BoundingBoxData ) / Default / CRS anyURI
|
|
|
|
|
+ // Output / ( BoundingBoxData ) / Supported / CRS anyURI
|
|
|
|
|
+
|
|
|
|
|
+ // Format / MimeType string [ @minOccurs=1, @maxOccurs=1 ]
|
|
|
|
|
+ // Format / Encoding AnyURI [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // Format / Schema AnyURI [ @minOccurs=0, @maxOccurs=1 ]
|
|
|
|
|
+ // UOMs / ( Default / ows:UOM | Supported / ows:UOM [ @minOccurs=1, @maxOccurs=unbounded ] )
|
|
|
|
|
+ // ows:UOM string [ @ows:reference ]
|
|
|
|
|
+
|
|
|
|
|
+ // @ows:reference - URI (local or remote) or URN (like ogc:*, xs:*)
|
|
|
|
|
+
|
|
|
|
|
+ // example: Output / LiteralOutput / <ows:DataType ows:reference="http://www.w3.org/TR/xmlschema-2/#float">float</ows:DataType>
|
|
|
|
|
+ // example: Input / LiteralData:
|
|
|
|
|
+ // <ows:DataType ows:reference="xs:float">float</ows:DataType>
|
|
|
|
|
+ // <ows:AnyValue/>
|
|
|
|
|
+ // <DefaultValue>1.01</DefaultValue>
|
|
|
|
|
+
|
|
|
// Type_WpsProcessOutput: [ 'MimeType' => text/xml, 'Encoding' => base64, 'Schema' => http://foo.bar/gml/3.1.0/polygon.xsd ]
|
|
// Type_WpsProcessOutput: [ 'MimeType' => text/xml, 'Encoding' => base64, 'Schema' => http://foo.bar/gml/3.1.0/polygon.xsd ]
|
|
|
// supportedOutput: [ Type_WpsProcessOutput, ... ]
|
|
// supportedOutput: [ Type_WpsProcessOutput, ... ]
|
|
|
// [ 'MimeType' => "text/xml; subtype=wfs-collection/1.0" ],
|
|
// [ 'MimeType' => "text/xml; subtype=wfs-collection/1.0" ],
|
|
@@ -21,19 +82,25 @@ class Type_WpsProcess {
|
|
|
if (empty($conf['title'])) throw new Exception("WpsProcess parse error - missing input title for '{$conf['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
|
|
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);
|
|
self::validate($conf);
|
|
|
$wpsProcess = new Type_WpsProcess();
|
|
$wpsProcess = new Type_WpsProcess();
|
|
|
$wpsProcess->identifier = $conf['identifier'];
|
|
$wpsProcess->identifier = $conf['identifier'];
|
|
|
$wpsProcess->title = $conf['title'];
|
|
$wpsProcess->title = $conf['title'];
|
|
|
$wpsProcess->description = $conf['description'];
|
|
$wpsProcess->description = $conf['description'];
|
|
|
$wpsProcess->processVersion = V::get('processVersion', '1.0.0', $conf);
|
|
$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->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->defaultOutput = $conf['defaultOutput'];
|
|
|
$wpsProcess->supportedOutput = $conf['supportedOutput'];
|
|
$wpsProcess->supportedOutput = $conf['supportedOutput'];
|
|
|
return $wpsProcess;
|
|
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) {
|
|
function __isset($name) {
|
|
|
return (array_key_exists($name, $this->_data));
|
|
return (array_key_exists($name, $this->_data));
|
|
@@ -130,13 +197,23 @@ class Type_WpsProcess {
|
|
|
|
|
|
|
|
class Type_WpsProcessInput {
|
|
class Type_WpsProcessInput {
|
|
|
|
|
|
|
|
- var $_data = [];
|
|
|
|
|
|
|
+ var $_data = []; // $_data['dataType'] === $this->dataType
|
|
|
|
|
+ // $_data['dataType']: ( 'literal' | 'complex' | 'boundingBox' )
|
|
|
|
|
|
|
|
static function validate($conf) {
|
|
static function validate($conf) {
|
|
|
if (empty($conf['identifier'])) throw new Exception("WpsProcessInput parse error - missing input identifier");
|
|
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']}'");
|
|
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
|
|
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);
|
|
self::validate($conf);
|
|
|
$input = new Type_WpsProcessInput();
|
|
$input = new Type_WpsProcessInput();
|
|
|
$input->identifier = $conf['identifier'];
|
|
$input->identifier = $conf['identifier'];
|
|
@@ -144,8 +221,8 @@ class Type_WpsProcessInput {
|
|
|
$input->description = V::get('description', "", $conf);
|
|
$input->description = V::get('description', "", $conf);
|
|
|
$input->maxOccurs = V::get('maxOccurs', 1, $conf, 'maxOccurs');
|
|
$input->maxOccurs = V::get('maxOccurs', 1, $conf, 'maxOccurs');
|
|
|
$input->minOccurs = V::get('minOccurs', 1, $conf, 'minOccurs');
|
|
$input->minOccurs = V::get('minOccurs', 1, $conf, 'minOccurs');
|
|
|
- $input->literalData = [ 'anyValue' => true ]; // default string input for all functions
|
|
|
|
|
- $input->_xsdType = $conf['type']; // for validation
|
|
|
|
|
|
|
+ $input->dataType = $conf['dataType']; // 'literal' | 'complex' | 'boundingBox'
|
|
|
|
|
+ $input->xsdType = V::get('xsdType', '', $conf);
|
|
|
return $input;
|
|
return $input;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -175,14 +252,18 @@ class Type_WpsProcessInput {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function toWpsJson() {
|
|
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'],
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ 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'] ] : []
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|