From 783a9ffbfb4857befd222396cb6d002db36ff856 Mon Sep 17 00:00:00 2001 From: Langbein Date: Mon, 24 Feb 2020 10:11:55 +0100 Subject: [PATCH] removed unneccessary imports --- @ukis/bundles/ukis-services-ogc.umd.js | 4244 ----------------- @ukis/bundles/ukis-services-ogc.umd.js.map | 1 - @ukis/bundles/ukis-services-ogc.umd.min.js | 16 - .../bundles/ukis-services-ogc.umd.min.js.map | 1 - @ukis/esm2015/lib/owc/owc-json.service.js | 1240 ----- @ukis/esm2015/lib/owc/types/eoc-owc-json.js | 131 - @ukis/esm2015/lib/owc/types/owc-json.js | 344 -- @ukis/esm2015/lib/services-ogc.module.js | 20 - @ukis/esm2015/lib/wmts/wmtsclient.service.js | 91 - @ukis/esm2015/lib/wps/cache.js | 40 - @ukis/esm2015/lib/wps/utils/polling.js | 96 - .../lib/wps/wps100/wps_marshaller_1.0.0.js | 422 -- @ukis/esm2015/lib/wps/wps200/helpers.js | 32 - .../lib/wps/wps200/wps_marshaller_2.0.0.js | 351 -- @ukis/esm2015/lib/wps/wps_datatypes.js | 220 - @ukis/esm2015/lib/wps/wpsclient.js | 401 -- @ukis/esm2015/public_api.js | 14 - @ukis/esm2015/ukis-services-ogc.js | 10 - @ukis/esm5/lib/owc/owc-json.service.js | 1554 ------ @ukis/esm5/lib/owc/types/eoc-owc-json.js | 131 - @ukis/esm5/lib/owc/types/owc-json.js | 344 -- @ukis/esm5/lib/services-ogc.module.js | 24 - @ukis/esm5/lib/wmts/wmtsclient.service.js | 97 - @ukis/esm5/lib/wps/cache.js | 53 - @ukis/esm5/lib/wps/utils/polling.js | 98 - .../lib/wps/wps100/wps_marshaller_1.0.0.js | 563 --- @ukis/esm5/lib/wps/wps200/helpers.js | 32 - .../lib/wps/wps200/wps_marshaller_2.0.0.js | 458 -- @ukis/esm5/lib/wps/wps_datatypes.js | 220 - @ukis/esm5/lib/wps/wpsclient.js | 494 -- @ukis/esm5/public_api.js | 14 - @ukis/esm5/ukis-services-ogc.js | 10 - @ukis/fesm2015/ukis-services-ogc.js | 3377 ------------- @ukis/fesm2015/ukis-services-ogc.js.map | 1 - @ukis/fesm5/ukis-services-ogc.js | 4047 ---------------- @ukis/fesm5/ukis-services-ogc.js.map | 1 - @ukis/lib/owc/owc-json.service.d.ts | 115 - @ukis/lib/owc/types/eoc-owc-json.d.ts | 65 - @ukis/lib/owc/types/owc-json.d.ts | 239 - @ukis/lib/services-ogc.module.d.ts | 2 - @ukis/lib/wmts/wmtsclient.service.d.ts | 9 - @ukis/lib/wps/cache.d.ts | 10 - @ukis/lib/wps/utils/polling.d.ts | 3 - @ukis/lib/wps/wps100/wps_1.0.0.d.ts | 373 -- .../lib/wps/wps100/wps_marshaller_1.0.0.d.ts | 23 - @ukis/lib/wps/wps200/helpers.d.ts | 4 - @ukis/lib/wps/wps200/wps_2.0.d.ts | 312 -- .../lib/wps/wps200/wps_marshaller_2.0.0.d.ts | 20 - @ukis/lib/wps/wps_datatypes.d.ts | 68 - @ukis/lib/wps/wpsclient.d.ts | 32 - @ukis/package.json | 36 - @ukis/public_api.d.ts | 8 - .../bundles/ukis-services-ogc.umd.js | 4244 ----------------- .../bundles/ukis-services-ogc.umd.js.map | 1 - .../bundles/ukis-services-ogc.umd.min.js | 16 - .../bundles/ukis-services-ogc.umd.min.js.map | 1 - .../esm2015/lib/owc/owc-json.service.js | 1240 ----- .../esm2015/lib/owc/types/eoc-owc-json.js | 131 - .../esm2015/lib/owc/types/owc-json.js | 344 -- .../esm2015/lib/services-ogc.module.js | 20 - .../esm2015/lib/wmts/wmtsclient.service.js | 91 - @ukis/services-ogc/esm2015/lib/wps/cache.js | 40 - .../esm2015/lib/wps/utils/polling.js | 96 - .../lib/wps/wps100/wps_marshaller_1.0.0.js | 422 -- .../esm2015/lib/wps/wps200/helpers.js | 32 - .../lib/wps/wps200/wps_marshaller_2.0.0.js | 351 -- .../esm2015/lib/wps/wps_datatypes.js | 220 - .../services-ogc/esm2015/lib/wps/wpsclient.js | 401 -- @ukis/services-ogc/esm2015/public_api.js | 14 - .../services-ogc/esm2015/ukis-services-ogc.js | 10 - .../esm5/lib/owc/owc-json.service.js | 1554 ------ .../esm5/lib/owc/types/eoc-owc-json.js | 131 - .../esm5/lib/owc/types/owc-json.js | 344 -- .../esm5/lib/services-ogc.module.js | 24 - .../esm5/lib/wmts/wmtsclient.service.js | 97 - @ukis/services-ogc/esm5/lib/wps/cache.js | 53 - .../esm5/lib/wps/utils/polling.js | 98 - .../lib/wps/wps100/wps_marshaller_1.0.0.js | 563 --- .../esm5/lib/wps/wps200/helpers.js | 32 - .../lib/wps/wps200/wps_marshaller_2.0.0.js | 458 -- .../esm5/lib/wps/wps_datatypes.js | 220 - @ukis/services-ogc/esm5/lib/wps/wpsclient.js | 494 -- @ukis/services-ogc/esm5/public_api.js | 14 - @ukis/services-ogc/esm5/ukis-services-ogc.js | 10 - .../fesm2015/ukis-services-ogc.js | 3377 ------------- .../fesm2015/ukis-services-ogc.js.map | 1 - @ukis/services-ogc/fesm5/ukis-services-ogc.js | 4047 ---------------- .../fesm5/ukis-services-ogc.js.map | 1 - .../lib/owc/owc-json.service.d.ts | 115 - .../lib/owc/types/eoc-owc-json.d.ts | 65 - .../services-ogc/lib/owc/types/owc-json.d.ts | 239 - .../services-ogc/lib/services-ogc.module.d.ts | 2 - .../lib/wmts/wmtsclient.service.d.ts | 9 - @ukis/services-ogc/lib/wps/cache.d.ts | 10 - @ukis/services-ogc/lib/wps/utils/polling.d.ts | 3 - .../lib/wps/wps100/wps_1.0.0.d.ts | 373 -- .../lib/wps/wps100/wps_marshaller_1.0.0.d.ts | 23 - .../services-ogc/lib/wps/wps200/helpers.d.ts | 4 - .../services-ogc/lib/wps/wps200/wps_2.0.d.ts | 312 -- .../lib/wps/wps200/wps_marshaller_2.0.0.d.ts | 20 - @ukis/services-ogc/lib/wps/wps_datatypes.d.ts | 68 - @ukis/services-ogc/lib/wps/wpsclient.d.ts | 32 - @ukis/services-ogc/package.json | 36 - @ukis/services-ogc/public_api.d.ts | 8 - @ukis/services-ogc/ukis-services-ogc.d.ts | 4 - .../ukis-services-ogc.metadata.json | 1 - @ukis/ukis-services-ogc.d.ts | 4 - @ukis/ukis-services-ogc.metadata.json | 1 - projects/base-layers-raster/karma.conf.js | 42 - projects/base-layers-raster/ng-package.json | 11 - projects/base-layers-raster/package.json | 9 - .../src/lib/raster-layers.spec.ts | 14 - .../src/lib/raster-layers.ts | 223 - projects/base-layers-raster/src/public_api.ts | 5 - projects/base-layers-raster/src/test.ts | 22 - projects/base-layers-raster/tsconfig.lib.json | 32 - .../base-layers-raster/tsconfig.spec.json | 18 - projects/base-layers-raster/tslint.json | 17 - .../licenses/licenses.component.html | 2 +- 119 files changed, 1 insertion(+), 41426 deletions(-) delete mode 100644 @ukis/bundles/ukis-services-ogc.umd.js delete mode 100644 @ukis/bundles/ukis-services-ogc.umd.js.map delete mode 100644 @ukis/bundles/ukis-services-ogc.umd.min.js delete mode 100644 @ukis/bundles/ukis-services-ogc.umd.min.js.map delete mode 100644 @ukis/esm2015/lib/owc/owc-json.service.js delete mode 100644 @ukis/esm2015/lib/owc/types/eoc-owc-json.js delete mode 100644 @ukis/esm2015/lib/owc/types/owc-json.js delete mode 100644 @ukis/esm2015/lib/services-ogc.module.js delete mode 100644 @ukis/esm2015/lib/wmts/wmtsclient.service.js delete mode 100644 @ukis/esm2015/lib/wps/cache.js delete mode 100644 @ukis/esm2015/lib/wps/utils/polling.js delete mode 100644 @ukis/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js delete mode 100644 @ukis/esm2015/lib/wps/wps200/helpers.js delete mode 100644 @ukis/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js delete mode 100644 @ukis/esm2015/lib/wps/wps_datatypes.js delete mode 100644 @ukis/esm2015/lib/wps/wpsclient.js delete mode 100644 @ukis/esm2015/public_api.js delete mode 100644 @ukis/esm2015/ukis-services-ogc.js delete mode 100644 @ukis/esm5/lib/owc/owc-json.service.js delete mode 100644 @ukis/esm5/lib/owc/types/eoc-owc-json.js delete mode 100644 @ukis/esm5/lib/owc/types/owc-json.js delete mode 100644 @ukis/esm5/lib/services-ogc.module.js delete mode 100644 @ukis/esm5/lib/wmts/wmtsclient.service.js delete mode 100644 @ukis/esm5/lib/wps/cache.js delete mode 100644 @ukis/esm5/lib/wps/utils/polling.js delete mode 100644 @ukis/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js delete mode 100644 @ukis/esm5/lib/wps/wps200/helpers.js delete mode 100644 @ukis/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js delete mode 100644 @ukis/esm5/lib/wps/wps_datatypes.js delete mode 100644 @ukis/esm5/lib/wps/wpsclient.js delete mode 100644 @ukis/esm5/public_api.js delete mode 100644 @ukis/esm5/ukis-services-ogc.js delete mode 100644 @ukis/fesm2015/ukis-services-ogc.js delete mode 100644 @ukis/fesm2015/ukis-services-ogc.js.map delete mode 100644 @ukis/fesm5/ukis-services-ogc.js delete mode 100644 @ukis/fesm5/ukis-services-ogc.js.map delete mode 100644 @ukis/lib/owc/owc-json.service.d.ts delete mode 100644 @ukis/lib/owc/types/eoc-owc-json.d.ts delete mode 100644 @ukis/lib/owc/types/owc-json.d.ts delete mode 100644 @ukis/lib/services-ogc.module.d.ts delete mode 100644 @ukis/lib/wmts/wmtsclient.service.d.ts delete mode 100644 @ukis/lib/wps/cache.d.ts delete mode 100644 @ukis/lib/wps/utils/polling.d.ts delete mode 100644 @ukis/lib/wps/wps100/wps_1.0.0.d.ts delete mode 100644 @ukis/lib/wps/wps100/wps_marshaller_1.0.0.d.ts delete mode 100644 @ukis/lib/wps/wps200/helpers.d.ts delete mode 100644 @ukis/lib/wps/wps200/wps_2.0.d.ts delete mode 100644 @ukis/lib/wps/wps200/wps_marshaller_2.0.0.d.ts delete mode 100644 @ukis/lib/wps/wps_datatypes.d.ts delete mode 100644 @ukis/lib/wps/wpsclient.d.ts delete mode 100644 @ukis/package.json delete mode 100644 @ukis/public_api.d.ts delete mode 100644 @ukis/services-ogc/bundles/ukis-services-ogc.umd.js delete mode 100644 @ukis/services-ogc/bundles/ukis-services-ogc.umd.js.map delete mode 100644 @ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js delete mode 100644 @ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js.map delete mode 100644 @ukis/services-ogc/esm2015/lib/owc/owc-json.service.js delete mode 100644 @ukis/services-ogc/esm2015/lib/owc/types/eoc-owc-json.js delete mode 100644 @ukis/services-ogc/esm2015/lib/owc/types/owc-json.js delete mode 100644 @ukis/services-ogc/esm2015/lib/services-ogc.module.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wmts/wmtsclient.service.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/cache.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/utils/polling.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/wps200/helpers.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/wps_datatypes.js delete mode 100644 @ukis/services-ogc/esm2015/lib/wps/wpsclient.js delete mode 100644 @ukis/services-ogc/esm2015/public_api.js delete mode 100644 @ukis/services-ogc/esm2015/ukis-services-ogc.js delete mode 100644 @ukis/services-ogc/esm5/lib/owc/owc-json.service.js delete mode 100644 @ukis/services-ogc/esm5/lib/owc/types/eoc-owc-json.js delete mode 100644 @ukis/services-ogc/esm5/lib/owc/types/owc-json.js delete mode 100644 @ukis/services-ogc/esm5/lib/services-ogc.module.js delete mode 100644 @ukis/services-ogc/esm5/lib/wmts/wmtsclient.service.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/cache.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/utils/polling.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/wps200/helpers.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/wps_datatypes.js delete mode 100644 @ukis/services-ogc/esm5/lib/wps/wpsclient.js delete mode 100644 @ukis/services-ogc/esm5/public_api.js delete mode 100644 @ukis/services-ogc/esm5/ukis-services-ogc.js delete mode 100644 @ukis/services-ogc/fesm2015/ukis-services-ogc.js delete mode 100644 @ukis/services-ogc/fesm2015/ukis-services-ogc.js.map delete mode 100644 @ukis/services-ogc/fesm5/ukis-services-ogc.js delete mode 100644 @ukis/services-ogc/fesm5/ukis-services-ogc.js.map delete mode 100644 @ukis/services-ogc/lib/owc/owc-json.service.d.ts delete mode 100644 @ukis/services-ogc/lib/owc/types/eoc-owc-json.d.ts delete mode 100644 @ukis/services-ogc/lib/owc/types/owc-json.d.ts delete mode 100644 @ukis/services-ogc/lib/services-ogc.module.d.ts delete mode 100644 @ukis/services-ogc/lib/wmts/wmtsclient.service.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/cache.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/utils/polling.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps100/wps_1.0.0.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps200/helpers.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps200/wps_2.0.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wps_datatypes.d.ts delete mode 100644 @ukis/services-ogc/lib/wps/wpsclient.d.ts delete mode 100644 @ukis/services-ogc/package.json delete mode 100644 @ukis/services-ogc/public_api.d.ts delete mode 100644 @ukis/services-ogc/ukis-services-ogc.d.ts delete mode 100644 @ukis/services-ogc/ukis-services-ogc.metadata.json delete mode 100644 @ukis/ukis-services-ogc.d.ts delete mode 100644 @ukis/ukis-services-ogc.metadata.json delete mode 100644 projects/base-layers-raster/karma.conf.js delete mode 100644 projects/base-layers-raster/ng-package.json delete mode 100644 projects/base-layers-raster/package.json delete mode 100644 projects/base-layers-raster/src/lib/raster-layers.spec.ts delete mode 100644 projects/base-layers-raster/src/lib/raster-layers.ts delete mode 100644 projects/base-layers-raster/src/public_api.ts delete mode 100644 projects/base-layers-raster/src/test.ts delete mode 100644 projects/base-layers-raster/tsconfig.lib.json delete mode 100644 projects/base-layers-raster/tsconfig.spec.json delete mode 100644 projects/base-layers-raster/tslint.json diff --git a/@ukis/bundles/ukis-services-ogc.umd.js b/@ukis/bundles/ukis-services-ogc.umd.js deleted file mode 100644 index 7ac9ffd47..000000000 --- a/@ukis/bundles/ukis-services-ogc.umd.js +++ /dev/null @@ -1,4244 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@ukis/services-layers'), require('@angular/common/http'), require('@boundlessgeo/jsonix'), require('rxjs/operators'), require('w3c-schemas/lib/XLink_1_0'), require('ogc-schemas/lib/OWS_1_1_0'), require('ogc-schemas/lib/SMIL_2_0'), require('ogc-schemas/lib/SMIL_2_0_Language'), require('ogc-schemas/lib/GML_3_1_1'), require('ogc-schemas/lib/WMTS_1_0'), require('rxjs'), require('ogc-schemas/lib/OWS_2_0'), require('ogc-schemas/lib/WPS_1_0_0'), require('ogc-schemas/lib/WPS_2_0')) : - typeof define === 'function' && define.amd ? define('@ukis/services-ogc', ['exports', '@angular/core', '@ukis/services-layers', '@angular/common/http', '@boundlessgeo/jsonix', 'rxjs/operators', 'w3c-schemas/lib/XLink_1_0', 'ogc-schemas/lib/OWS_1_1_0', 'ogc-schemas/lib/SMIL_2_0', 'ogc-schemas/lib/SMIL_2_0_Language', 'ogc-schemas/lib/GML_3_1_1', 'ogc-schemas/lib/WMTS_1_0', 'rxjs', 'ogc-schemas/lib/OWS_2_0', 'ogc-schemas/lib/WPS_1_0_0', 'ogc-schemas/lib/WPS_2_0'], factory) : - (global = global || self, factory((global.ukis = global.ukis || {}, global.ukis['services-ogc'] = {}), global.ng.core, global.servicesLayers, global.ng.common.http, global.jsonix, global.rxjs.operators, global.XLink_1_0$2, global.OWS_1_1_0$2, global.SMIL_2_0$1, global.SMIL_2_0_Language$1, global.GML_3_1_1$1, global.WMTS_1_0$1, global.rxjs, global.OWS_2_0$1, global.WPS_1_0_0$1, global.WPS_2_0$1)); -}(this, (function (exports, core, servicesLayers, http, jsonix, operators, XLink_1_0$2, OWS_1_1_0$2, SMIL_2_0$1, SMIL_2_0_Language$1, GML_3_1_1$1, WMTS_1_0$1, rxjs, OWS_2_0$1, WPS_1_0_0$1, WPS_2_0$1) { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - - function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; - } - - function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - } - - function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } - } - - function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); - } - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - } - - function __exportStar(m, exports) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; - } - - function __values(o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - } - - function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - } - - function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - } - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - }; - - function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - } - - function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } - } - - function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } - } - - function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } - } - - function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; - }; - - function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result.default = mod; - return result; - } - - function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var XLink_1_0 = XLink_1_0$2.XLink_1_0; - /** @type {?} */ - var OWS_1_1_0 = OWS_1_1_0$2.OWS_1_1_0; - /** @type {?} */ - var SMIL_2_0 = SMIL_2_0$1.SMIL_2_0; - /** @type {?} */ - var SMIL_2_0_Language = SMIL_2_0_Language$1.SMIL_2_0_Language; - /** @type {?} */ - var GML_3_1_1 = GML_3_1_1$1.GML_3_1_1; - /** @type {?} */ - var WMTS_1_0 = WMTS_1_0$1.WMTS_1_0; - var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new jsonix.Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new http.HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(operators.map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: core.Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: http.HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(core.ɵɵinject(http.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; - }()); - if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @param {?} str - * @return {?} - */ - function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; - } - /** - * @param {?} str - * @return {?} - */ - function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; - } - /** - * @param {?} str - * @return {?} - */ - function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; - } - /** - * @param {?} str - * @return {?} - */ - function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; - } - /** - * @param {?} str - * @return {?} - */ - function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; - } - /** - * @param {?} str - * @return {?} - */ - function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; - } - /** - * @param {?} str - * @return {?} - */ - function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; - } - /** - * @param {?} str - * @return {?} - */ - function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; - } - /** - * @param {?} str - * @return {?} - */ - function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; - } - /** - * @param {?} str - * @return {?} - */ - function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; - } - /** - * @param {?} str - * @return {?} - */ - function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - } - /** - * @param {?} str - * @return {?} - */ - function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - } - /** - * @param {?} v - * @return {?} - */ - function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; - } - /** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ - var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = __values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return servicesLayers.WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return servicesLayers.WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return servicesLayers.WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return servicesLayers.GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return servicesLayers.XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = __values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return rxjs.forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (servicesLayers.isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (servicesLayers.isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!servicesLayers.isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new servicesLayers.VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return rxjs.of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!servicesLayers.isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case servicesLayers.WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case servicesLayers.WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case servicesLayers.XyzLayertype: - // @TODO - break; - case servicesLayers.CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(operators.map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new servicesLayers.WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new servicesLayers.WmsLayer(options); - return rxjs.of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(operators.map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = __assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = __read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return rxjs.of(matrixSet); - } - else { - var _a = __read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(operators.map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === servicesLayers.WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = __assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (servicesLayers.isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = __assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == servicesLayers.GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case servicesLayers.WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case servicesLayers.WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case servicesLayers.GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case servicesLayers.XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case servicesLayers.GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof servicesLayers.RasterLayer) { - switch (layer.type) { - case servicesLayers.WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case servicesLayers.WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case servicesLayers.XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof servicesLayers.VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: core.Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(core.ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; - }()); - if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = __values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = __values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = __values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); - }); - /** @type {?} */ - var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); - }); - /** @type {?} */ - var isResult = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); - }); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = __values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ - function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(operators.tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = rxjs.forkJoin(tappedTask$, rxjs.timer(minWaitTime)).pipe(operators.map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(operators.mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return rxjs.of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; - } - /** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ - function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - operators.retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(operators.delay(delayMs), // <- in any case, first wait a little while ... - operators.mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return rxjs.of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function Cache() { } - if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; - } - var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return rxjs.of(null); - }; - return FakeCache; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var XLink_1_0$1 = XLink_1_0$2.XLink_1_0; - /** @type {?} */ - var OWS_1_1_0$1 = OWS_1_1_0$2.OWS_1_1_0; - /** @type {?} */ - var OWS_2_0 = OWS_2_0$1.OWS_2_0; - /** @type {?} */ - var WPS_1_0_0 = WPS_1_0_0$1.WPS_1_0_0; - /** @type {?} */ - var WPS_2_0 = WPS_2_0$1.WPS_2_0; - /** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ - var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new jsonix.Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new jsonix.Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(operators.map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - operators.mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - operators.mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - operators.tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = __values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(operators.switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return rxjs.of(results); - } - else { - return query$.pipe(operators.tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return rxjs.of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), operators.share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: core.Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: core.Inject, args: ['WpsVersion',] }] }, - { type: http.HttpClient }, - { type: undefined, decorators: [{ type: core.Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; - }()); - if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: core.NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ - function IOwsContext() { } - if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ - function IOwsResource() { } - if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsResourceProperties() { } - if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ - function IOwsOffering() { } - if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCreator() { } - if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; - } - /** - * @record - */ - function IOwsAuthor() { } - if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCategorie() { } - if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; - } - /** - * @record - */ - function IOwsLinks() { } - if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCreatorApplication() { } - if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; - } - /** - * @record - */ - function IOwsCreatorDisplay() { } - if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ - function IOwsOperation() { } - if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsContent() { } - if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsStyleSet() { } - if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function IEocOwsContext() { } - if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; - } - /** - * @record - */ - function IEocOwsResource() { } - if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; - } - /** - * @record - */ - function IEocOwsResourceProperties() { } - if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; - } - /** - * @record - */ - function IEocOwsResourceDimensions() { } - if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IEocOwsResourceDimension() { } - if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; - } - /** - * @record - */ - function IEocOwsOffering() { } - if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; - } - /** - * @record - */ - function IEocWmsOffering() { } - if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; - } - /** - * @record - */ - function IEocOwsWmtsOffering() { } - if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; - } - /** - * @record - */ - function IEocOwsWmtsMatrixSet() { } - if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; - } - /** - * @record - */ - function IEocOwsProjection() { } - if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function WpsDataDescription() { } - if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; - } - /** - * @record - */ - function WpsData() { } - if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; - } - /** - * @record - */ - function WpsBboxDescription() { } - if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; - } - /** - * @record - */ - function WpsBboxValue() { } - if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; - } - /** @type {?} */ - var isBbox = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); - }); - /** - * @record - */ - function WpsState() { } - if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; - } - /** - * @param {?} obj - * @return {?} - */ - function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); - } - /** - * @record - */ - function WpsBboxData() { } - if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; - } - /** - * @record - */ - function WpsCapability() { } - if (false) { - /** @type {?} */ - WpsCapability.prototype.id; - } - /** - * @record - */ - function WpsMarshaller() { } - if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; - } - - exports.FakeCache = FakeCache; - exports.OwcJsonService = OwcJsonService; - exports.ServicesOgcModule = ServicesOgcModule; - exports.WmtsClientService = WmtsClientService; - exports.WpsClient = WpsClient; - exports.isBbox = isBbox; - exports.isCswOffering = isCswOffering; - exports.isGMLCOVOffering = isGMLCOVOffering; - exports.isGMLJP2Offering = isGMLJP2Offering; - exports.isGeoJsonOffering = isGeoJsonOffering; - exports.isGeoTIFFOffering = isGeoTIFFOffering; - exports.isGmlOffering = isGmlOffering; - exports.isKmlOffering = isKmlOffering; - exports.isWfsOffering = isWfsOffering; - exports.isWmsOffering = isWmsOffering; - exports.isWmtsOffering = isWmtsOffering; - exports.isWpsOffering = isWpsOffering; - exports.isWpsState = isWpsState; - exports.isXyzOffering = isXyzOffering; - exports.shardsExpand = shardsExpand; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -//# sourceMappingURL=ukis-services-ogc.umd.js.map diff --git a/@ukis/bundles/ukis-services-ogc.umd.js.map b/@ukis/bundles/ukis-services-ogc.umd.js.map deleted file mode 100644 index 04bd94d34..000000000 --- a/@ukis/bundles/ukis-services-ogc.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","Jsonix","HttpHeaders","map","Injectable","HttpClient","tslib_1.__values","WmsLayertype","WmtsLayertype","WfsLayertype","GeojsonLayertype","XyzLayertype","forkJoin","isRasterLayertype","isVectorLayertype","VectorLayer","of","CustomLayertype","WmtsLayer","WmsLayer","RasterLayer","tap","timer","mergeMap","retryWhen","delay","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0","switchMap","share","Inject","NgModule"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/bundles/ukis-services-ogc.umd.min.js b/@ukis/bundles/ukis-services-ogc.umd.min.js deleted file mode 100644 index 8b9805052..000000000 --- a/@ukis/bundles/ukis-services-ogc.umd.min.js +++ /dev/null @@ -1,16 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@ukis/services-layers"),require("@angular/common/http"),require("@boundlessgeo/jsonix"),require("rxjs/operators"),require("w3c-schemas/lib/XLink_1_0"),require("ogc-schemas/lib/OWS_1_1_0"),require("ogc-schemas/lib/SMIL_2_0"),require("ogc-schemas/lib/SMIL_2_0_Language"),require("ogc-schemas/lib/GML_3_1_1"),require("ogc-schemas/lib/WMTS_1_0"),require("rxjs"),require("ogc-schemas/lib/OWS_2_0"),require("ogc-schemas/lib/WPS_1_0_0"),require("ogc-schemas/lib/WPS_2_0")):"function"==typeof define&&define.amd?define("@ukis/services-ogc",["exports","@angular/core","@ukis/services-layers","@angular/common/http","@boundlessgeo/jsonix","rxjs/operators","w3c-schemas/lib/XLink_1_0","ogc-schemas/lib/OWS_1_1_0","ogc-schemas/lib/SMIL_2_0","ogc-schemas/lib/SMIL_2_0_Language","ogc-schemas/lib/GML_3_1_1","ogc-schemas/lib/WMTS_1_0","rxjs","ogc-schemas/lib/OWS_2_0","ogc-schemas/lib/WPS_1_0_0","ogc-schemas/lib/WPS_2_0"],t):t(((e=e||self).ukis=e.ukis||{},e.ukis["services-ogc"]={}),e.ng.core,e.servicesLayers,e.ng.common.http,e.jsonix,e.rxjs.operators,e.XLink_1_0$2,e.OWS_1_1_0$2,e.SMIL_2_0$1,e.SMIL_2_0_Language$1,e.GML_3_1_1$1,e.WMTS_1_0$1,e.rxjs,e.OWS_2_0$1,e.WPS_1_0_0$1,e.WPS_2_0$1)}(this,(function(e,t,r,n,o,s,i,a,p,u,c,l,f,h,m,y){"use strict"; -/*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */var d=function(){return(d=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function w(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,s=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(o)throw o.error}}return i}var v=i.XLink_1_0,x=a.OWS_1_1_0,S=p.SMIL_2_0,b=u.SMIL_2_0_Language,O=c.GML_3_1_1,L=l.WMTS_1_0,R=function(){function e(e){this.http=e;var t=new o.Jsonix.Context([S,b,O,v,x,L]);this.xmlunmarshaller=t.createUnmarshaller(),this.xmlmarshaller=t.createMarshaller()}return e.prototype.getCapabilities=function(e,t){var r=this;void 0===t&&(t="1.1.0");var o=e+"?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION="+t,i=new n.HttpHeaders({"Content-Type":"text/xml",Accept:"text/xml, application/xml"});return this.http.get(o,{headers:i,responseType:"text"}).pipe(s.map((function(e){return r.xmlunmarshaller.unmarshalString(e)})))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:n.HttpClient}]},e.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new e(t.ɵɵinject(n.HttpClient))},token:e,providedIn:"root"}),e}();function E(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wms"===e||"http://schemas.opengis.net/wms/1.1.1"===e||"http://schemas.opengis.net/wms/1.1.0"===e}function T(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wfs"===e}function _(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts"===e||"http://schemas.opengis.net/wmts/1.0.0"===e||"http://schemas.opengis.net/wmts/1.1.0"===e}function I(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz"===e}function W(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson"===e}function C(e){if(e){var t=[];for(var r in e.split(",")){var n=e.split(",")[r].split("-");if(1==n.length)t.push(e.split(",")[r]);else if(2==n.length){var o=n[0].charCodeAt(0),s=n[1].charCodeAt(0);if(o<=s)for(var i=o;i<=s;i++)t.push(String.fromCharCode(i).toLowerCase());else for(i=o;i>=s;i--)t.push(String.fromCharCode(i).toLowerCase())}}return t}}var j=function(){function e(e){this.wmtsClient=e}return e.prototype.checkContext=function(e){var t;return(t=Array.isArray(e.properties.links)?e.properties.links.find((function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/core"===e.href})):e.properties.links.profiles.find((function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/core"===e})))||console.error("this is not a valid OWS Context v1.0!"),t},e.prototype.getContextTitle=function(e){return e.properties.title},e.prototype.getContextPublisher=function(e){return e.properties.publisher?e.properties.publisher:null},e.prototype.getContextExtent=function(e){return e.bbox?e.bbox:null},e.prototype.getResources=function(e){return e.features},e.prototype.getResourceTitle=function(e){return e.properties.title},e.prototype.getResourceUpdated=function(e){return e.properties.updated},e.prototype.getResourceDate=function(e){return e.properties.date?e.properties.date:null},e.prototype.getResourceOfferings=function(e){return e.properties.offerings?e.properties.offerings:null},e.prototype.isActive=function(e){var t=!0;return e.properties.hasOwnProperty("active")&&(t=e.properties.active),t},e.prototype.getResourceOpacity=function(e){var t=1;return e.properties.hasOwnProperty("opacity")&&(t=e.properties.opacity),t},e.prototype.getResourceAttribution=function(e){var t="";return e.properties.hasOwnProperty("attribution")&&(t=e.properties.attribution),t},e.prototype.getResourceShards=function(e){if(e.properties.hasOwnProperty("shards"))return e.properties.shards},e.prototype.convertOwcTimeToIsoTimeAndPeriodicity=function(e){var t=e.split("/"),r=3==t.length?t[0]+"/"+t[1]:e,n=3==t.length?t[2]:null;return n?{interval:r,periodicity:n}:r},e.prototype.getResourceDimensions=function(e){var t,r,n=this;if(e.properties.hasOwnProperty("dimensions")){var o={},s={};if(Array.isArray(e.properties.dimensions))try{for(var i=g(e.properties.dimensions),a=i.next();!a.done;a=i.next()){var p=a.value;s[p.name]=p}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}else s=e.properties.dimensions;for(var u in s){var c={};if(console.log(u),"time"===u||"ISO8601"==s[u].units){var l=s[u].value,f=l?l.split(",").map((function(e){return n.convertOwcTimeToIsoTimeAndPeriodicity(e)})):null;c={values:!f||f.length>1?f:f[0],units:s[u].units,display:{format:"YYYMMDD",period:s[u].display,default:"end"}}}else c=s[u];o[u]=c}return o}},e.prototype.getLayertypeFromOfferingCode=function(e){return E(e.code)?r.WmsLayertype:_(e.code)?r.WmtsLayertype:T(e.code)?r.WfsLayertype:W(e.code)?r.GeojsonLayertype:I(e.code)?r.XyzLayertype:e.code},e.prototype.checkIfServiceOffering=function(e){return!(e.contents||!e.operations)},e.prototype.checkIfDataOffering=function(e){return!(!e.contents||e.operations)},e.prototype.getOfferingContents=function(e){return this.checkIfServiceOffering(e)?e.operations:this.checkIfDataOffering(e)?e.contents:void 0},e.prototype.getLegendUrl=function(e){var t="";if(e.hasOwnProperty("styles")){var r=e.styles.filter((function(e){return e.default}));if(r.length>0)return r[0].legendURL}else e.hasOwnProperty("legendUrl")&&(t=e.legendUrl);return t},e.prototype.getIconUrl=function(e){var t="";return e.hasOwnProperty("iconUrl")&&(t=e.iconUrl),t},e.prototype.getLayers=function(e,t){var r,n,o=e.features,s=[];try{for(var i=g(o),a=i.next();!a.done;a=i.next()){var p=a.value,u=p.properties.offerings;if(u.length>0){var c=u.find((function(e){return E(e.code)}))||u.find((function(e){return _(e.code)}))||u.find((function(e){return T(e.code)}))||u[0];s.push(this.createLayerFromOffering(c,p,e,t))}}}catch(e){r={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return f.forkJoin(s)},e.prototype.createLayerFromOffering=function(e,t,n,o){var s=this.getLayertypeFromOfferingCode(e);return r.isRasterLayertype(s)?this.createRasterLayerFromOffering(e,t,n,o):r.isVectorLayertype(s)?this.createVectorLayerFromOffering(e,t,n):void console.error("This type of service ("+s+") has not been implemented yet.")},e.prototype.createVectorLayerFromOffering=function(e,t,n){var o=this.getLayertypeFromOfferingCode(e);if(!r.isVectorLayertype(o))return console.error("This type of layer '"+o+"' / offering '"+e.code+"' cannot be converted into a Vectorlayer"),null;var s,i;this.getIconUrl(e);e.operations&&(s=this.getUrlFromUri(e.operations[0].href)),e.operations&&this.getJsonFromUri(e.operations[0].href),e.contents&&(i=e.contents[0].content);var a=this.getLegendUrl(e),p={id:t.id,name:this.getResourceTitle(t),displayName:this.getDisplayName(e,t),visible:this.isActive(t),type:o,removable:!0,attribution:this.getResourceAttribution(t),continuousWorld:!1,opacity:this.getResourceOpacity(t),url:s||null,legendImg:a||null,data:i},u=new r.VectorLayer(p);return t.bbox?u.bbox=t.bbox:n&&n.bbox&&(u.bbox=n.bbox),f.of(u)},e.prototype.createRasterLayerFromOffering=function(e,t,n,o){var s,i=this.getLayertypeFromOfferingCode(e);if(!r.isRasterLayertype(i))return console.error("This type of offering '"+e.code+"' cannot be converted into a rasterlayer."),null;switch(i){case r.WmsLayertype:s=this.createWmsLayerFromOffering(e,t,n);break;case r.WmtsLayertype:s=this.createWmtsLayerFromOffering(e,t,n,o);break;case r.XyzLayertype:case r.CustomLayertype:}return s},e.prototype.createWmtsLayerFromOffering=function(e,t,n,o){return this.getWmtsOptions(e,t,n,o).pipe(s.map((function(e){return new r.WmtsLayer(e)})))},e.prototype.createWmsLayerFromOffering=function(e,t,n){var o=this.getWmsOptions(e,t,n),s=new r.WmsLayer(o);return f.of(s)},e.prototype.getWmtsOptions=function(e,t,r,n){var o,i=this.getRasterLayerOptions(e,t,r),a=this.getLayerForWMTS(e,t);if(e.styles){var p=e.styles.find((function(e){return e.default}));p&&(o=p.name)}return this.getMatrixSetForWMTS(e,t,n).pipe(s.map((function(e){var t={matrixSet:e.matrixSet,matrixIds:e.matrixIds,resolutions:e.resolutions};return d({},i,{type:"wmts",params:{layer:a,matrixSetOptions:t,projection:n,style:o,format:"image/png"}})})))},e.prototype.getLayerForWMTS=function(e,t){var r=w(this.parseOperationUrl(e,"GetTile"),2),n=(r[0],r[1]);if(n.LAYER)return n.LAYER;console.error("There is no layer-parameter in the offering "+e.code+" for resource "+t.id+".\n Cannot infer layer.",e)},e.prototype.parseOperationUrl=function(e,t){if(e.operations){var r=e.operations.find((function(e){return e.code===t}));if(r)return[this.getUrlFromUri(r.href),this.getJsonFromUri(r.href)];console.error("There is no "+t+"-operation in the offering "+e.code+".",e)}else console.error("The offering "+e.code+" has no operations.",e)},e.prototype.getMatrixSetForWMTS=function(e,t,r){if(e.matrixSets){var n=e.matrixSets.find((function(e){return e.srs===r}));return f.of(n)}var o=w(this.parseOperationUrl(e,"GetCapabilities"),2),i=o[0];o[1];return this.wmtsClient.getCapabilities(i).pipe(s.map((function(e){var t=e.value.contents.tileMatrixSet.find((function(e){return e.identifier.value===r}));return{srs:r,matrixSet:t.identifier.value,matrixIds:t.tileMatrix.map((function(e){return e.identifier.value})),resolutions:t.tileMatrix.map((function(e){return e.scaleDenominator})),origin:{x:t.tileMatrix[0].topLeftCorner[1],y:t.tileMatrix[0].topLeftCorner[0]},tilesize:t.tileMatrix[0].tileHeight}})))},e.prototype.getWmsOptions=function(e,t,n){var o=this.getRasterLayerOptions(e,t,n);if(o.type===r.WmsLayertype){var s=this.getJsonFromUri(e.operations[0].href),i=void 0;e.styles&&(i=e.styles.find((function(e){return e.default})).name);var a={LAYERS:s.LAYERS,FORMAT:s.FORMAT,TIME:s.TIME,VERSION:s.VERSION,TILED:s.TILED,TRANSPARENT:!0,STYLES:i};return d({},o,{type:"wms",params:a})}console.error("resource "+t.id+" cannot be converted into a WMS-Layer",e)},e.prototype.getRasterLayerOptions=function(e,t,n){var o=this.getLayerOptions(e,t,n);if(r.isRasterLayertype(o.type))return d({},o,{type:o.type,url:this.getUrlFromUri(e.operations[0].href),subdomains:C(this.getResourceShards(t))});console.error("The layer "+o.id+" is not a rasterlayer",o)},e.prototype.getLayerOptions=function(e,t,r){var n={id:t.id,type:this.getLayertypeFromOfferingCode(e),name:this.getResourceTitle(t),removable:!0,continuousWorld:!1,opacity:this.getResourceOpacity(t),displayName:this.getDisplayName(e,t),visible:this.isActive(t),attribution:this.getResourceAttribution(t),dimensions:this.getResourceDimensions(t),legendImg:this.getLegendUrl(e),styles:e.styles};return t.bbox?n.bbox=t.bbox:r&&r.bbox&&(n.bbox=r.bbox),n},e.prototype.getUrlFromUri=function(e){return e.substring(0,e.indexOf("?"))},e.prototype.getJsonFromUri=function(e){var t=e.substr(e.lastIndexOf("?")+1),r={};return t.split("&").forEach((function(e){var t=e.split("=");r[t[0].toUpperCase()]=decodeURIComponent(t[1])})),r},e.prototype.getDisplayName=function(e,t){var r="";return e.hasOwnProperty("title")&&(r=e.title?e.title:this.getResourceTitle(t)),r},e.prototype.generateOwsContextFrom=function(e,t,r,n){var o,s;n||(n={lang:"",links:[],title:"",updated:""});var i={id:e,type:"FeatureCollection",properties:n,features:[]};r&&(i.bbox=r);try{for(var a=g(t),p=a.next();!p.done;p=a.next()){var u=p.value,c=this.generateResourceFromLayer(u);i.features.push(c)}}catch(e){o={error:e}}finally{try{p&&!p.done&&(s=a.return)&&s.call(a)}finally{if(o)throw o.error}}return i},e.prototype.generateResourceFromLayer=function(e){return{id:e.id,properties:{title:e.name,updated:null,offerings:[this.generateOfferingFromLayer(e)],opacity:e.opacity,attribution:e.attribution},type:"Feature",geometry:null}},e.prototype.generateOfferingFromLayer=function(e,t,n){var o={code:this.getOfferingCodeFromLayer(e),title:e.name};return e.type==r.GeojsonLayertype?o.contents=this.getContentsFromLayer(e):o.operations=this.getOperationsFromLayer(e),t&&(o.legendUrl=t),n&&(o.iconUrl=n),o},e.prototype.getOfferingCodeFromLayer=function(e){switch(e.type){case r.WmsLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/wms";case r.WmtsLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts";case r.GeojsonLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson";case r.XyzLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz";default:return console.error("This type of layer ("+e.type+") has not been implemented yet."),null}},e.prototype.getContentsFromLayer=function(e){var t=[];switch(e.type){case r.GeojsonLayertype:var n={type:"FeatureCollection",content:JSON.stringify(e.data)};t.push(n);break;default:console.error("Cannot get contents for this type of vectorlayer: ("+e.type+")")}return t},e.prototype.getOperationsFromLayer=function(e){if(e instanceof r.RasterLayer)switch(e.type){case r.WmsLayertype:return this.getWmsOperationsFromLayer(e);case r.WmtsLayertype:return this.getWmtsOperationsFromLayer(e);case r.XyzLayertype:return this.getXyzOperationsFromLayer(e);default:return console.error("Cannot get operations for this type of layer: ("+e.type+")"),[]}else if(e instanceof r.VectorLayer)return e.type,console.error("This type of service ("+e.type+") has not been implemented yet."),[]},e.prototype.getXyzOperationsFromLayer=function(e){return[{code:"REST",method:"GET",type:"text/html",href:""+e.url}]},e.prototype.getTmsOperationsFromLayer=function(e){return[]},e.prototype.getWfsOperationsFromLayer=function(e){var t=e.url;e.name;return[{code:"GetFeature",method:"GET",type:"application/json",href:t+"?service=WFS&version="+(e.options.version?e.options.version:"1.1.0")+"&request=GetFeature"}]},e.prototype.getWmsOperationsFromLayer=function(e){var t=e.url,r=e.params.VERSION,n=(e.name,e.id),o="image/vnd.jpeg-png";return e.params&&e.params.FORMAT&&(o=e.params.FORMAT),[{code:"GetMap",method:"GET",type:o,href:t+"?service=WMS&version="+r+"&request=GetMap&TRANSPARENT=TRUE&LAYERS="+n+"&FORMAT="+o+"&TILED=true"},{code:"GetCapabilities",method:"GET",type:"application/xml",href:t+"?service=WMS&version="+r+"&request=GetCapabilities"},{code:"GetFeatureInfo",method:"GET",type:"text/html",href:t+"?service=WMS&version="+r+"&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS="+n+"&FORMAT="+o}]},e.prototype.getWmtsOperationsFromLayer=function(e){var t=e.url,r=e.params.version,n=(e.name,e.id),o="image/vnd.jpeg-png";return e.params&&e.params.FORMAT&&(o=e.params.FORMAT),[{code:"GetTile",href:t+"?SERVICE=WMTS&REQUEST=GetTile&FORMAT="+o+"&LAYER="+n+"&VERSION="+r,method:"GET",type:o},{code:"GetCapabilities",href:t+"?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION="+r,method:"GET",type:"application/xml"},{code:"GetFeatureInfo",href:t+"?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION="+r,method:"GET",type:"text/html"}]},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:R}]},e.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new e(t.ɵɵinject(R))},token:e,providedIn:"root"}),e}();var F=function(){function e(){}return e.prototype.getCapabilitiesUrl=function(e){return e+"?service=WPS&request=GetCapabilities&version=1.0.0"},e.prototype.executeUrl=function(e,t){return e+"?service=WPS&request=Execute&version=1.0.0&identifier="+t},e.prototype.unmarshalCapabilities=function(e){var t=[];return e.processOfferings.process.forEach((function(e){t.push({id:e.identifier.value})})),t},e.prototype.unmarshalSyncExecuteResponse=function(e,t,r,n,o){var s,i,a=[];if(e.value.status.processFailed)a.push({description:{id:e.value.process.identifier.value,reference:!0,type:"error"},value:e.value.statusLocation});else if(e.value.processOutputs)try{for(var p=g(e.value.processOutputs.output),u=p.next();!u.done;u=p.next()){var c=u.value,l=!!c.reference,f=void 0,h=void 0,m=void 0;c.reference?(f="complex",h=c.reference.href||null,m=c.reference.mimeType):(c.data&&c.data.literalData?(f="literal",m=c.data.literalData.dataType):c.data&&c.data.complexData?(f="complex",m=c.data.complexData.mimeType):(f="bbox",m=void 0),h=this.unmarshalOutputData(c.data)),a.push({description:{id:c.identifier.value,format:m,reference:l,type:f},value:h})}}catch(e){s={error:e}}finally{try{u&&!u.done&&(i=p.return)&&i.call(p)}finally{if(s)throw s.error}}else e.value.statusLocation&&a.push({description:{id:e.value.process.identifier.value,reference:!0,type:"status"},value:this.unmarshalGetStateResponse(e,t,r,n,o)});return a},e.prototype.unmarshalOutputData=function(e){if(e.complexData)switch(e.complexData.mimeType){case"application/vnd.geo+json":case"application/json":return e.complexData.content.map((function(e){return JSON.parse(e)}));case"application/WMS":return e.complexData.content;case"text/xml":return(new XMLSerializer).serializeToString(e.complexData.content[0]);default:throw new Error("Cannot unmarshal data of format "+e.complexData.mimeType)}else if(e.literalData)switch(e.literalData.dataType){case"string":default:return e.literalData.value}throw new Error("Not yet implemented: "+e)},e.prototype.unmarshalAsyncExecuteResponse=function(e,t,r,n,o){return this.unmarshalGetStateResponse(e,t,r,n,o)},e.prototype.unmarshalGetStateResponse=function(e,t,r,n,o){var s=e.value,i={status:s.status.processSucceeded?"Succeeded":s.status.processAccepted?"Accepted":s.status.processStarted?"Running":(s.status.processFailed,"Failed"),statusLocation:s.statusLocation};return s.processOutputs&&s.processOutputs.output&&(i.results=this.unmarshalSyncExecuteResponse(e,t,r,n,o)),i},e.prototype.marshalExecBody=function(e,t,r,n){return{name:{key:"{http://www.opengis.net/wps/1.0.0}Execute",localPart:"Execute",namespaceURI:"http://www.opengis.net/wps/1.0.0",prefix:"wps",string:"{http://www.opengis.net/wps/1.0.0}wps:Execute"},value:{dataInputs:this.marshalInputs(t),identifier:e,responseForm:this.marshalResponseForm(r,n),service:"WPS",version:"1.0.0"}}},e.prototype.marshalResponseForm=function(e,t){var r,n;void 0===t&&(t=!1);var o=[];try{for(var s=g(e),i=s.next();!i.done;i=s.next()){var a=i.value,p=void 0;switch(a.type){case"literal":case"complex":p={identifier:{value:a.id},asReference:a.reference,mimeType:a.format};break;default:throw new Error("This Wps-outputtype has not been implemented yet! "+a+" ")}o.push(p)}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return{responseDocument:{output:o,status:!!t,storeExecuteResponse:!!t}}},e.prototype.marshalInputs=function(e){var t,r,n=[];try{for(var o=g(e),s=o.next();!s.done;s=o.next()){var i=s.value;if(null===i.value||void 0===i.value)throw new Error("Value for input "+i.description.id+" is not set");var a=this.marshalInput(i);n.push(a)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return{input:n}},e.prototype.marshalInput=function(e){var t={identifier:{value:e.description.id},title:{value:e.description.id},_abstract:{value:""}};return e.description.reference?t.reference=this.marshalReferenceInput(e):t.data=this.marshalDataInput(e),t},e.prototype.marshalDataInput=function(e){var t;switch(e.description.type){case"literal":t={literalData:{value:String(e.value)}};break;case"bbox":var r=e.value;t={boundingBoxData:{lowerCorner:[r.lllat,r.lllon],upperCorner:[r.urlat,r.urlon]}};break;case"complex":switch(e.description.format){case"text/xml":t={complexData:{content:[e.value],mimeType:e.description.format}};break;default:t={complexData:{content:[JSON.stringify(e.value)],mimeType:e.description.format}}}break;default:throw Error("This input is of type "+e.description.type+". We can only marshal input of type literal, bbox or complex.")}return t},e.prototype.marshalReferenceInput=function(e){return{href:e.value,method:"GET",mimeType:e.description.format}},e.prototype.marshallGetStatusBody=function(e,t,r){return{}},e.prototype.marshallGetResultBody=function(e,t,r){return{}},e.prototype.dismissUrl=function(e,t,r){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e.prototype.marshalDismissBody=function(e){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e.prototype.unmarshalDismissResponse=function(e,t,r){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e}(),M=function(e){return e.hasOwnProperty("jobID")&&e.hasOwnProperty("status")},D=function(){function e(){}return e.prototype.getCapabilitiesUrl=function(e){return e+"?service=WPS&request=GetCapabilities&version=2.0.0"},e.prototype.executeUrl=function(e,t){return e+"?service=WPS&request=Execute&version=2.0.0&identifier="+t},e.prototype.unmarshalCapabilities=function(e){var t=[];return e.contents.processSummary.forEach((function(e){t.push({id:e.identifier.value})})),t},e.prototype.unmarshalSyncExecuteResponse=function(e,t,r,n,o){var s,i,a,p=[];if((a=e.value).hasOwnProperty("output")&&"object"==typeof a.output){var u=function(e){var t=o.find((function(t){return t.id===e.id}));if(!t)throw new Error("Could not find an output-description for the parameter "+e.id+".");var r=t.reference,n=t.type,s=t.format,i=void 0;if(e.reference)i=e.reference.href||null;else{if(!e.data)throw new Error("Output has neither reference nor data field.");i=c.unmarshalOutputData(e.data,t)}p.push({description:{id:e.id,format:s,reference:r,type:n},value:i})},c=this;try{for(var l=g(e.value.output),f=l.next();!f.done;f=l.next()){u(f.value)}}catch(e){s={error:e}}finally{try{f&&!f.done&&(i=l.return)&&i.call(l)}finally{if(s)throw s.error}}}else if(M(e.value)){var h={status:e.value.status,jobID:e.value.jobID,percentCompleted:e.value.percentCompleted};p.push({description:{id:r,reference:!0,type:"status"},value:h})}return p},e.prototype.unmarshalOutputData=function(e,t){if("complex"===t.type)switch(e.mimeType){case"application/vnd.geo+json":case"application/json":return e.content.map((function(e){return JSON.parse(e)}));case"application/WMS":return e.content;case"text/xml":return(new XMLSerializer).serializeToString(e.content[0]);default:throw new Error("Cannot unmarshal complex data of format "+e.mimeType)}else if("literal"===t.type)return e.content;throw new Error("Not yet implemented: "+e)},e.prototype.unmarshalAsyncExecuteResponse=function(e,t,r,n,o){return this.unmarshalGetStateResponse(e,t,r,n,o)},e.prototype.unmarshalGetStateResponse=function(e,t,r,n,o){if(M(e.value))return{status:e.value.status,jobID:e.value.jobID,percentCompleted:e.value.percentCompleted};throw new Error("Not a status-info: "+e)},e.prototype.marshalExecBody=function(e,t,r,n){return{name:{key:"{http://www.opengis.net/wps/2.0}Execute",localPart:"Execute",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:Execute"},value:{TYPE_NAME:"WPS_2_0.ExecuteRequestType",service:"WPS",version:"2.0.0",identifier:{value:e},input:this.marshalInputs(t),output:this.marshalOutputs(r),mode:n?"async":"sync",response:"document"}}},e.prototype.marshalInputs=function(e){return e.map((function(e){return e.description.reference?{id:e.description.id,reference:{href:e.value,mimeType:e.description.format}}:{id:e.description.id,data:{content:[JSON.stringify(e.value)],mimeType:e.description.format}}}))},e.prototype.marshalOutputs=function(e){return e.map((function(e){return{id:e.id,mimeType:e.format,transmission:e.reference?"reference":"value"}}))},e.prototype.marshallGetStatusBody=function(e,t,r){return{name:{key:"{http://www.opengis.net/wps/2.0}GetStatus",localPart:"GetStatus",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:GetStatus"},value:{jobID:r,service:"WPS",version:"2.0.0"}}},e.prototype.marshallGetResultBody=function(e,t,r){return{name:{key:"{http://www.opengis.net/wps/2.0}GetResult",localPart:"GetResult",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:GetResult"},value:{service:"WPS",version:"2.0.0",jobID:r}}},e.prototype.dismissUrl=function(e,t,r){return e},e.prototype.marshalDismissBody=function(e){return{name:{key:"{http://www.opengis.net/wps/2.0}Dismiss",localPart:"Dismiss",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:Dismiss"},value:{jobID:e,service:"WPS",version:"2.0.0"}}},e.prototype.unmarshalDismissResponse=function(e,t,r){return{status:e.value.status,jobID:e.value.jobID}},e}();function G(e,t){void 0===t&&(t=3);var r=1;return(function(n){return n.pipe(s.retryWhen((function(n){return n.pipe(s.delay(e),s.mergeMap((function(e){if(e.status&&400===e.status)throw e;if(r<=t)return console.log("http-error. Retrying ..."),r+=1,f.of(e);throw console.log("Persistent http-errors after "+r+" attempts. Giving up."),e})))})))})}var P=function(){function e(){}return e.prototype.set=function(e,t){},e.prototype.get=function(e){return f.of(null)},e}(),U=i.XLink_1_0,A=a.OWS_1_1_0,q=h.OWS_2_0,k=m.WPS_1_0_0,N=y.WPS_2_0,V=function(){function e(e,t,r){var n;if(void 0===e&&(e="1.0.0"),this.webclient=t,this.cache=new P,this.version=e,r&&(this.cache=r),"1.0.0"===this.version)this.wpsmarshaller=new F,n=new o.Jsonix.Context([U,A,k]);else{if("2.0.0"!==this.version)throw new Error("You entered a WPS version other than 1.0.0 or 2.0.0.");this.wpsmarshaller=new D,n=new o.Jsonix.Context([U,q,N])}this.xmlunmarshaller=n.createUnmarshaller(),this.xmlmarshaller=n.createMarshaller()}return e.prototype.getCapabilities=function(e){var t=this,r=this.wpsmarshaller.getCapabilitiesUrl(e);return this.getRaw(r).pipe(s.map((function(e){var r=t.xmlunmarshaller.unmarshalString(e);return t.wpsmarshaller.unmarshalCapabilities(r.value)})))},e.prototype.describeProcess=function(e){throw new Error("Not implemented yet")},e.prototype.executeAsync=function(e,t,r,n,o,i){var a=this;void 0===o&&(o=1e3);var p=this.executeAsyncS(e,t,r,n).pipe(s.mergeMap((function(p){return function(e,t,r,n){void 0===n&&(n=1e3),r&&r(null);var o=e.pipe(s.tap((function(e){r&&r(e)}))),i=f.forkJoin(o,f.timer(n)).pipe(s.map((function(e){return e[0]}))).pipe(s.mergeMap((function(e){return t(e)?f.of(e):i})));return i}(a.getNextState(p,e,t,r,n),(function(e){return"Succeeded"===e.status}),i,o)})),s.mergeMap((function(o){return a.fetchResults(o,e,t,r,n)})),s.tap((function(e){var t,r;try{for(var n=g(e),o=n.next();!o.done;o=n.next()){var s=o.value;if("error"===s.description.type)throw console.log("server responded with 200, but body contained an error-result: ",s),new Error(s.value)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}})));return this.cachedQuery(e,t,r,n,p)},e.prototype.cachedQuery=function(e,t,r,n,o){var i=this;return this.cache.get({url:e,processId:t,inputs:r,outputs:n}).pipe(s.switchMap((function(a){return a?f.of(a):o.pipe(s.tap((function(o){i.cache.set({url:e,processId:t,inputs:r,outputs:n},o)})))})))},e.prototype.getNextState=function(e,t,r,n,o){var i,a=this;if("1.0.0"===this.version){if(!e.statusLocation)throw Error("No status location");i=this.getRaw(e.statusLocation)}else{if("2.0.0"!==this.version)throw new Error("'GetStatus' has not yet been implemented for this WPS-Version ("+this.version+").");if(!e.jobID)throw Error("No job-Id");var p=this.wpsmarshaller.marshallGetStatusBody(t,r,e.jobID),u=this.xmlmarshaller.marshalString(p);i=this.postRaw(t,u)}return i.pipe(G(2e3,2),s.map((function(e){var s=a.xmlunmarshaller.unmarshalString(e);return a.wpsmarshaller.unmarshalGetStateResponse(s,t,r,n,o)})))},e.prototype.fetchResults=function(e,t,r,n,o){var i=this;if(e.results)return f.of(e.results);if(!e.jobID)throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!");var a=this.wpsmarshaller.marshallGetResultBody(t,r,e.jobID),p=this.xmlmarshaller.marshalString(a);return this.postRaw(t,p).pipe(s.map((function(e){var s=i.xmlunmarshaller.unmarshalString(e);return i.wpsmarshaller.unmarshalSyncExecuteResponse(s,t,r,n,o)})))},e.prototype.executeAsyncS=function(e,t,r,n){var o=this,i=this.wpsmarshaller.executeUrl(e,t),a=this.wpsmarshaller.marshalExecBody(t,r,n,!0),p=this.xmlmarshaller.marshalString(a);return this.postRaw(i,p).pipe(s.map((function(s){var i=o.xmlunmarshaller.unmarshalString(s);return o.wpsmarshaller.unmarshalAsyncExecuteResponse(i,e,t,r,n)})))},e.prototype.execute=function(e,t,r,n){var o=this,i=this.wpsmarshaller.executeUrl(e,t),a=this.wpsmarshaller.marshalExecBody(t,r,n,!1),p=this.xmlmarshaller.marshalString(a);return this.postRaw(i,p).pipe(s.map((function(s){var i=o.xmlunmarshaller.unmarshalString(s);return o.wpsmarshaller.unmarshalSyncExecuteResponse(i,e,t,r,n)})))},e.prototype.dismiss=function(e,t,r){var n=this,o=this.wpsmarshaller.dismissUrl(e,t,r),i=this.wpsmarshaller.marshalDismissBody(r),a=this.xmlmarshaller.marshalString(i);return this.postRaw(o,a).pipe(s.map((function(r){var o=n.xmlunmarshaller.unmarshalString(r);return n.wpsmarshaller.unmarshalDismissResponse(o,e,t)})))},e.prototype.postRaw=function(e,t){return this.webclient.post(e,t,{headers:{"Content-Type":"text/xml",Accept:"text/xml, application/xml"},responseType:"text"}).pipe(G(2e3,2),s.share())},e.prototype.getRaw=function(e){return this.webclient.get(e,{headers:{Accept:"text/xml, application/xml"},responseType:"text"}).pipe(G(2e3,2))},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:["WpsVersion"]}]},{type:n.HttpClient},{type:void 0,decorators:[{type:t.Inject,args:["WpsCache"]}]}]},e}();var J=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[],imports:[],exports:[],providers:[j,R,V]}]}],e}();e.FakeCache=P,e.OwcJsonService=j,e.ServicesOgcModule=J,e.WmtsClientService=R,e.WpsClient=V,e.isBbox=function(e){return e.hasOwnProperty("crs")&&e.hasOwnProperty("lllon")&&e.hasOwnProperty("lllat")&&e.hasOwnProperty("urlon")&&e.hasOwnProperty("urlat")},e.isCswOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/csw"===e},e.isGMLCOVOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov"===e},e.isGMLJP2Offering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2"===e},e.isGeoJsonOffering=W,e.isGeoTIFFOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff"===e},e.isGmlOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gml"===e},e.isKmlOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/kml"===e},e.isWfsOffering=T,e.isWmsOffering=E,e.isWmtsOffering=_,e.isWpsOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wcs"===e},e.isWpsState=function(e){return e&&e.hasOwnProperty("status")&&(e.hasOwnProperty("jobID")||e.hasOwnProperty("statusLocation"))},e.isXyzOffering=I,e.shardsExpand=C,Object.defineProperty(e,"__esModule",{value:!0})})); -//# sourceMappingURL=ukis-services-ogc.umd.min.js.map \ No newline at end of file diff --git a/@ukis/bundles/ukis-services-ogc.umd.min.js.map b/@ukis/bundles/ukis-services-ogc.umd.min.js.map deleted file mode 100644 index dacefce88..000000000 --- a/@ukis/bundles/ukis-services-ogc.umd.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__values","o","m","Symbol","iterator","next","value","done","__read","r","e","ar","push","error","XLink_1_0","XLink_1_0_Factory.XLink_1_0","OWS_1_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0","WMTS_1_0_Factory.WMTS_1_0","WmtsClientService","http","context","Jsonix","Context","xmlunmarshaller","createUnmarshaller","xmlmarshaller","createMarshaller","getCapabilities","url","version","_this","getCapabilitiesUrl","headers","HttpHeaders","Content-Type","Accept","get","responseType","pipe","map","response","unmarshalString","Injectable","args","providedIn","HttpClient","isWmsOffering","str","isWfsOffering","isWmtsOffering","isXyzOffering","isGeoJsonOffering","shardsExpand","v","split","j","start","charCodeAt","end","k","String","fromCharCode","toLowerCase","OwcJsonService","wmtsClient","checkContext","isContext_1_0","Array","isArray","properties","links","find","item","href","profiles","console","getContextTitle","title","getContextPublisher","publisher","getContextExtent","bbox","getResources","features","getResourceTitle","resource","getResourceUpdated","updated","getResourceDate","date","getResourceOfferings","offerings","isActive","active","getResourceOpacity","opacity","getResourceAttribution","attribution","getResourceShards","shards","convertOwcTimeToIsoTimeAndPeriodicity","owctime","arr","interval","periodicity","getResourceDimensions","dims","dimensions","_b","tslib_1.__values","_c","d","name","name_1","dim","log","units","values","display","format","period","default","getLayertypeFromOfferingCode","offering","code","WmsLayertype","WmtsLayertype","WfsLayertype","GeojsonLayertype","XyzLayertype","checkIfServiceOffering","contents","operations","checkIfDataOffering","getOfferingContents","getLegendUrl","legendUrl","defaultStyle","styles","filter","style","legendURL","getIconUrl","iconUrl","getLayers","owc","targetProjection","resources","layers$","resources_1","resources_1_1","createLayerFromOffering","forkJoin","layerType","isRasterLayertype","createRasterLayerFromOffering","isVectorLayertype","createVectorLayerFromOffering","layerUrl","data","getUrlFromUri","getJsonFromUri","content","layerOptions","id","displayName","getDisplayName","visible","type","removable","continuousWorld","legendImg","layer","VectorLayer","of","rasterLayer$","createWmsLayerFromOffering","createWmtsLayerFromOffering","CustomLayertype","getWmtsOptions","options","WmtsLayer","getWmsOptions","WmsLayer","rasterOptions","getRasterLayerOptions","getLayerForWMTS","styleInfo","getMatrixSetForWMTS","matrixSet","matrixSetOptions","matrixIds","resolutions","params","projection","_a","parseOperationUrl","urlParams","opCode","operation","op","matrixSets","srs","capabilities","ms","tm","origin","x","y","tilesize","LAYERS","FORMAT","TIME","VERSION","TILED","TRANSPARENT","STYLES","getLayerOptions","subdomains","uri","substring","indexOf","query","substr","lastIndexOf","result","forEach","part","toUpperCase","decodeURIComponent","generateOwsContextFrom","layers","extent","lang","layers_1","layers_1_1","generateResourceFromLayer","generateOfferingFromLayer","geometry","getOfferingCodeFromLayer","getContentsFromLayer","getOperationsFromLayer","JSON","stringify","RasterLayer","getWmsOperationsFromLayer","getWmtsOperationsFromLayer","getXyzOperationsFromLayer","method","getTmsOperationsFromLayer","getWfsOperationsFromLayer","wmsVersion","layerId","wmtsVersion","WpsMarshaller100","baseurl","executeUrl","processId","unmarshalCapabilities","out","processOfferings","process","identifier","unmarshalSyncExecuteResponse","responseJson","inputs","outputDescriptions","status","processFailed","description","reference","statusLocation","processOutputs","output","isReference","datatype","literalData","complexData","undefined","unmarshalOutputData","unmarshalGetStateResponse","mimeType","cont","parse","XMLSerializer","serializeToString","Error","dataType","unmarshalAsyncExecuteResponse","serverUrl","state","processSucceeded","processAccepted","processStarted","results","marshalExecBody","outputs","async","key","localPart","namespaceURI","prefix","string","dataInputs","marshalInputs","responseForm","marshalResponseForm","service","outputDefinitions","outputs_1","outputs_1_1","defType","asReference","responseDocument","storeExecuteResponse","inputArr","theInputs","inputArr_1","inputArr_1_1","inp","marshalledInput","marshalInput","input","inputType","_abstract","marshalReferenceInput","marshalDataInput","boundingBoxData","lowerCorner","lllat","lllon","upperCorner","urlat","urlon","marshallGetStatusBody","statusId","marshallGetResultBody","jobID","dismissUrl","jobId","marshalDismissBody","unmarshalDismissResponse","jsonResponse","isStatusInfo","obj","WpsMarshaller200","processSummary","summary","outputDescription","od","this_1","percentCompleted","TYPE_NAME","marshalOutputs","mode","transmission","delayedRetry","delayMs","maxRetries","attempts","src$","retryWhen","error$","delay","mergeMap","FakeCache","set","OWS_2_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0","WPS_2_0_Factory.WPS_2_0","WpsClient","webclient","cache","wpsmarshaller","getRaw","describeProcess","executeAsync","pollingRate","tapFunction","query$","executeAsyncS","currentState","task$","predicate","doWhile","minWaitTime","tappedTask$","tap","polledRequest$","timer","pollUntil","getNextState","lastState","fetchResults","response_1","response_1_1","cachedQuery","switchMap","request$","execbody","xmlExecbody","marshalString","postRaw","xmlResponse","execBody","xmlExecBody","execute","dismiss","dismissBody","xmlDismissBody","xmlBody","post","share","Inject","ServicesOgcModule","NgModule","declarations","imports","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"]} \ No newline at end of file diff --git a/@ukis/esm2015/lib/owc/owc-json.service.js b/@ukis/esm2015/lib/owc/owc-json.service.js deleted file mode 100644 index 55f53ac81..000000000 --- a/@ukis/esm2015/lib/owc/owc-json.service.js +++ /dev/null @@ -1,1240 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { VectorLayer, RasterLayer, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, WmtsLayer, WmsLayer } from '@ukis/services-layers'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { of, forkJoin } from 'rxjs'; -import { map } from 'rxjs/operators'; -import * as i0 from "@angular/core"; -import * as i1 from "../wmts/wmtsclient.service"; -/** - * @param {?} str - * @return {?} - */ -export function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -export function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -export function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - let o = []; - for (let i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - let start = j[0].charCodeAt(0); - /** @type {?} */ - let end = j[1].charCodeAt(0); - if (start <= end) { - for (let k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (let k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -export class OwcJsonService { - /** - * @param {?} wmtsClient - */ - constructor(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - checkContext(context) { - /** @type {?} */ - let isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - } - /** - * @param {?} context - * @return {?} - */ - getContextTitle(context) { - return context.properties.title; - } - /** - * @param {?} context - * @return {?} - */ - getContextPublisher(context) { - return (context.properties.publisher) ? context.properties.publisher : null; - } - /** - * @param {?} context - * @return {?} - */ - getContextExtent(context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - } - /** - * @param {?} context - * @return {?} - */ - getResources(context) { - return context.features; - } - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - getResourceTitle(resource) { - return resource.properties.title; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceUpdated(resource) { - return resource.properties.updated; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDate(resource) { - return (resource.properties.date) ? resource.properties.date : null; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOfferings(resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - } - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - isActive(resource) { - /** @type {?} */ - let active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOpacity(resource) { - /** @type {?} */ - let opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceAttribution(resource) { - /** @type {?} */ - let attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceShards(resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - } - /** - * @param {?} owctime - * @return {?} - */ - convertOwcTimeToIsoTimeAndPeriodicity(owctime) { - /** - * Convert from - * @type {?} - */ - let arr = owctime.split('/'); - /** @type {?} */ - let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - let p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDimensions(resource) { - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - let dims = {}; - /** @type {?} */ - let dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - for (let d of resource.properties.dimensions) { - dimensions[d.name] = d; - } - } - else { - dimensions = resource.properties.dimensions; - } - for (let name in dimensions) { - /** @type {?} */ - let dim = {}; - console.log(name); - if (name === "time" || dimensions[name].units == "ISO8601") { - /** @type {?} */ - let value = dimensions[name].value; - /** @type {?} */ - let values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - (v) => this.convertOwcTimeToIsoTimeAndPeriodicity(v))) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name].display, - "default": "end" - } - }; - } - else if (name === "elevation") { - dim = dimensions[name]; - } - else { - dim = dimensions[name]; - } - dims[name] = dim; - } - return dims; - } - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - getLayertypeFromOfferingCode(offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - } - /** - * @param {?} offering - * @return {?} - */ - checkIfServiceOffering(offering) { - return (!offering.contents && offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - checkIfDataOffering(offering) { - return (offering.contents && !offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - getOfferingContents(offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - } - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - getLegendUrl(offering) { - /** @type {?} */ - let legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - let defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - style => style.default)); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - } - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - getIconUrl(offering) { - /** @type {?} */ - let iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - } - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - getLayers(owc, targetProjection) { - /** @type {?} */ - const resources = owc.features; - /** @type {?} */ - const layers$ = []; - for (const resource of resources) { - /** @type {?} */ - const offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - const offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmtsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWfsOffering(o.code))) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - return forkJoin(layers$); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error(`This type of service (${layerType}) has not been implemented yet.`); - } - } - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - createVectorLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`); - return null; - } - /** @type {?} */ - const iconUrl = this.getIconUrl(offering); - /** @type {?} */ - let layerUrl; - /** @type {?} */ - let params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - let legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - let layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - const layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createRasterLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`); - return null; - } - /** @type {?} */ - let rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createWmtsLayerFromOffering(offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - (options) => { - /** @type {?} */ - const layer = new WmtsLayer(options); - return layer; - }))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - createWmsLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - const layer = new WmsLayer(options); - return of(layer); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - getWmtsOptions(offering, resource, context, targetProjection) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - const layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - let style; - if (offering.styles) { - /** @type {?} */ - const styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - (matrixSet) => { - /** @type {?} */ - const matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - const wmtsOptions = Object.assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getLayerForWMTS(offering, resource) { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile'); - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}. - Cannot infer layer.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - parseOperationUrl(offering, opCode) { - if (offering.operations) { - /** @type {?} */ - const operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - op => op.code === opCode)); - if (operation) { - /** @type {?} */ - const url = this.getUrlFromUri(operation.href); - /** @type {?} */ - const urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering); - } - } - else { - console.error(`The offering ${offering.code} has no operations.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - getMatrixSetForWMTS(offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - const matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - m => m.srs === targetProjection)); - return of(matrixSet); - } - else { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities'); - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - (capabilities) => { - /** @type {?} */ - const matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - const matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - ms => ms['identifier']['value'] === targetProjection)); - /** @type {?} */ - const owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['identifier']['value'])), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['scaleDenominator'])), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getWmsOptions(offering, resource, context) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - const urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let defaultStyle; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)).name; - } - /** @type {?} */ - const params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - const wmsOptions = Object.assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getRasterLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - const rasterLayerOptions = Object.assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - } - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - getUrlFromUri(uri) { - return uri.substring(0, uri.indexOf('?')); - } - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - getJsonFromUri(uri) { - /** @type {?} */ - const query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - const result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - const item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - } - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getDisplayName(offering, resource) { - /** @type {?} */ - let displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - } - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - generateOwsContextFrom(id, layers, extent, properties) { - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - let owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - for (let layer of layers) { - /** @type {?} */ - let resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - return owc; - } - /** - * @param {?} layer - * @return {?} - */ - generateResourceFromLayer(layer) { - /** @type {?} */ - let resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - } - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - generateOfferingFromLayer(layer, legendUrl, iconUrl) { - /** @type {?} */ - let offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - } - /** - * @param {?} layer - * @return {?} - */ - getOfferingCodeFromLayer(layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error(`This type of layer (${layer.type}) has not been implemented yet.`); - return null; - } - } - /** - * @param {?} layer - * @return {?} - */ - getContentsFromLayer(layer) { - /** @type {?} */ - let contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - let content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`); - } - return contents; - } - /** - * @param {?} layer - * @return {?} - */ - getOperationsFromLayer(layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error(`Cannot get operations for this type of layer: (${layer.type})`); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error(`This type of service (${layer.type}) has not been implemented yet.`); - return []; - } - } - } - /** - * @param {?} layer - * @return {?} - */ - getXyzOperationsFromLayer(layer) { - /** @type {?} */ - let restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': `${layer.url}` - }; - /** @type {?} */ - let operations = [ - restCall - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getTmsOperationsFromLayer(layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - } - /** - * @param {?} layer - * @return {?} - */ - getWfsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - let GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': `${url}?service=WFS&version=${version}&request=GetFeature` - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - let operations = [ - GetFeature, - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmsVersion = layer.params.VERSION; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true` - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities` - }; - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}` - }; - /** @type {?} */ - let operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmtsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmtsVersion = layer.params.version; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getTile = { - 'code': 'GetTile', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - let operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - } -} -OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -OwcJsonService.ctorParameters = () => [ - { type: WmtsClientService } -]; -/** @nocollapse */ OwcJsonService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(i0.ɵɵinject(i1.WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9vd2Mvb3djLWpzb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0MsT0FBTyxFQUNtRCxXQUFXLEVBQUUsV0FBVyxFQUM3RCxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBZSxlQUFlLEVBQUUsWUFBWSxFQUN4RyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFHdEQsU0FBUyxFQUVULFFBQVEsRUFJVCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUtyQyxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVc7SUFDdkMsT0FBTyxHQUFHLEtBQUsscURBQXFEO1dBQy9ELEdBQUcsS0FBSyxzQ0FBc0M7V0FDOUMsR0FBRyxLQUFLLHNDQUFzQyxDQUFDO0FBQ3RELENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8s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O1lBdnlCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFyRlEsaUJBQWlCOzs7Ozs7OztJQXdGWixvQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIElPd3NDb250ZXh0LCBJT3dzUmVzb3VyY2UsIElPd3NPZmZlcmluZywgSU93c09wZXJhdGlvbiwgSU93c0NvbnRlbnQsIFdNU19PZmZlcmluZywgV0ZTX09mZmVyaW5nLCBXQ1NfT2ZmZXJpbmcsXHJcbiAgQ1NXX09mZmVyaW5nLCBXTVRTX09mZmVyaW5nLCBHTUxfT2ZmZXJpbmcsIEtNTF9PZmZlcmluZywgR2VvVElGRl9PZmZlcmluZywgR01MSlAyX09mZmVyaW5nLCBHTUxDT1ZfT2ZmZXJpbmdcclxufSBmcm9tICcuL3R5cGVzL293Yy1qc29uJztcclxuaW1wb3J0IHtcclxuICBJRW9jT3dzQ29udGV4dCwgSUVvY093c1Jlc291cmNlLCBJRW9jT3dzT2ZmZXJpbmcsIEdlb0pzb25fT2ZmZXJpbmcsIFh5el9PZmZlcmluZywgSUVvY093c1dtdHNPZmZlcmluZyxcclxuICBJRW9jV21zT2ZmZXJpbmcsIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiwgSUVvY093c1dtdHNNYXRyaXhTZXRcclxufSBmcm9tICcuL3R5cGVzL2VvYy1vd2MtanNvbic7XHJcbmltcG9ydCB7XHJcbiAgSUxheWVyR3JvdXBPcHRpb25zLCBJTGF5ZXJPcHRpb25zLCBJUmFzdGVyTGF5ZXJPcHRpb25zLCBWZWN0b3JMYXllciwgUmFzdGVyTGF5ZXIsIElWZWN0b3JMYXllck9wdGlvbnMsXHJcbiAgTGF5ZXIsIFRMYXllcnR5cGUsIFdtc0xheWVydHlwZSwgV210c0xheWVydHlwZSwgV2ZzTGF5ZXJ0eXBlLCBHZW9qc29uTGF5ZXJ0eXBlLCBDdXN0b21MYXllciwgQ3VzdG9tTGF5ZXJ0eXBlLCBYeXpMYXllcnR5cGUsXHJcbiAgVFJhc3RlckxheWVydHlwZSwgaXNSYXN0ZXJMYXllcnR5cGUsIGlzVmVjdG9yTGF5ZXJ0eXBlLCBUVmVjdG9yTGF5ZXJ0eXBlLCBJTGF5ZXJEaW1lbnNpb25zLFxyXG4gIElMYXllckludGVydmFsQW5kUGVyaW9kLFxyXG4gIElXbXRzUGFyYW1zLFxyXG4gIFdtdHNMYXllcixcclxuICBJV210c09wdGlvbnMsXHJcbiAgV21zTGF5ZXIsXHJcbiAgSVdtc1BhcmFtcyxcclxuICBJV21zT3B0aW9ucyxcclxuICBJTGlzdE1hdHJpeFNldFxyXG59IGZyb20gJ0B1a2lzL3NlcnZpY2VzLWxheWVycyc7XHJcbmltcG9ydCB7IFRHZW9FeHRlbnQgfSBmcm9tICdAdWtpcy9zZXJ2aWNlcy1tYXAtc3RhdGUnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4uL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dtc09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNU19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcydcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMSdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ZzT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgV0ZTX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd2ZzJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBXQ1NfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nzd09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIENTV19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV210c09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNVFNfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93bXRzJ1xyXG4gICAgfHwgc3RyID09PSAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd210cy8xLjAuMCdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtdHMvMS4xLjAnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dtbE9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTF9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzS21sT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgS01MX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9USUZGT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR2VvVElGRl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dlb3RpZmYnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dNTEpQMk9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTEpQMl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzR01MQ09WT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR01MQ09WX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ21sY292JztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNYeXpPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBYeXpfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0pzb25PZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBHZW9Kc29uX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYXJkc0V4cGFuZCh2OiBzdHJpbmcpIHtcclxuICBpZiAoIXYpIHsgcmV0dXJuOyB9XHJcbiAgbGV0IG8gPSBbXVxyXG4gIGZvciAobGV0IGkgaW4gdi5zcGxpdCgnLCcpKSB7XHJcbiAgICB2YXIgaiA9IHYuc3BsaXQoJywnKVtpXS5zcGxpdChcIi1cIilcclxuICAgIGlmIChqLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIG8ucHVzaCh2LnNwbGl0KCcsJylbaV0pXHJcbiAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09IDIpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0galswXS5jaGFyQ29kZUF0KDApXHJcbiAgICAgIGxldCBlbmQgPSBqWzFdLmNoYXJDb2RlQXQoMClcclxuICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA+PSBlbmQ7IGstLSkge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvXHJcbn1cclxuLyoqXHJcbiAqIE9XUyBDb250ZXh0IFNlcnZpY2VcclxuICogT0dDIE9XUyBDb250ZXh0IEdlbyBFbmNvZGluZyBTdGFuZGFyZCBWZXJzaW9uOiAxLjBcclxuICogaHR0cDovL2RvY3Mub3Blbmdlb3NwYXRpYWwub3JnL2lzLzE0LTA1NXIyLzE0LTA1NXIyLmh0bWxcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbFxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgYWxsb3dzIHlvdSB0byByZWFkIGFuZCB3cml0ZSBPV0MtZGF0YS5cclxuICogV2UgaGF2ZSBhZGRlZCBzb21lIGN1c3RvbSBmaWVsZHMgdG8gdGhlIE9XQyBzdGFuZGFyZC5cclxuICogICAtIGFjY2VwdHMgdGhlIE9XQy1zdGFuZGFyZC1kYXRhdHlwZXMgYXMgZnVuY3Rpb24gaW5wdXRzIChzbyBhcyB0byBiZSBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlKVxyXG4gKiAgIC0gcmV0dXJucyBvdXIgZXh0ZW5kZWQgT1dDLWRhdGF0eXBlcyBhcyBmdW5jdGlvbiBvdXRwdXRzIChzbyBhcyB0byBiZSBhcyBpbmZvcm1hdGlvbi1yaWNoIGFzIHBvc3NpYmxlKVxyXG4gKlxyXG4gKi9cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE93Y0pzb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3bXRzQ2xpZW50OiBXbXRzQ2xpZW50U2VydmljZSkge1xyXG4gICAgLy9odHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVnZW9qc29uLWVuY29kaW5nLTJcclxuICB9XHJcblxyXG5cclxuICBjaGVja0NvbnRleHQoY29udGV4dDogSU93c0NvbnRleHQpIHtcclxuICAgIGxldCBpc0NvbnRleHRfMV8wO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRleHQucHJvcGVydGllcy5saW5rcykpIHtcclxuICAgICAgaXNDb250ZXh0XzFfMCA9IGNvbnRleHQucHJvcGVydGllcy5saW5rcy5wcm9maWxlcy5maW5kKGl0ZW0gPT4gaXRlbSA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzQ29udGV4dF8xXzAgPSBjb250ZXh0LnByb3BlcnRpZXMubGlua3MuZmluZChpdGVtID0+IGl0ZW0uaHJlZiA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQ29udGV4dF8xXzApIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndGhpcyBpcyBub3QgYSB2YWxpZCBPV1MgQ29udGV4dCB2MS4wIScpO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBpc0NvbnRleHRfMV8wO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFRpdGxlKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFB1Ymxpc2hlcihjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LnByb3BlcnRpZXMucHVibGlzaGVyKSA/IGNvbnRleHQucHJvcGVydGllcy5wdWJsaXNoZXIgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dEV4dGVudChjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LmJib3gpID8gY29udGV4dC5iYm94IDogbnVsbDsgLy8gb3IgWy0xODAsIC05MCwgMTgwLCA5MF07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UmVzb3VyY2VzKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5mZWF0dXJlcztcclxuICB9XHJcblxyXG4gIC8qKiBSZXNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VVcGRhdGVkKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZURhdGUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgcmV0dXJuIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmRhdGUpID8gcmVzb3VyY2UucHJvcGVydGllcy5kYXRlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlT2ZmZXJpbmdzKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiAocmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MpID8gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0cmlldmUgbGF5ZXIgc3RhdHVzIGFjdGl2ZSAvIGluYWN0aXZlIGJhc2VkIG9uIElPd3NSZXNvdXJjZVxyXG4gICAqIEBwYXJhbSByZXNvdXJjZTogSU93c1Jlc291cmNlXHJcbiAgICovXHJcbiAgaXNBY3RpdmUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlJykpIHtcclxuICAgICAgYWN0aXZlID0gcmVzb3VyY2UucHJvcGVydGllcy5hY3RpdmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBudW1iZXIge1xyXG4gICAgbGV0IG9wYWNpdHkgPSAxO1xyXG4gICAgaWYgKHJlc291cmNlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ29wYWNpdHknKSkge1xyXG4gICAgICBvcGFjaXR5ID0gcmVzb3VyY2UucHJvcGVydGllcy5vcGFjaXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHJpYnV0aW9uID0gJyc7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRpb24nKSkge1xyXG4gICAgICBhdHRyaWJ1dGlvbiA9IHJlc291cmNlLnByb3BlcnRpZXMuYXR0cmlidXRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cmlidXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNoYXJkcyhyZXNvdXJjZTogSU93c1Jlc291cmNlKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdzaGFyZHMnKSkge1xyXG4gICAgICByZXR1cm4gcmVzb3VyY2UucHJvcGVydGllcy5zaGFyZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0T3djVGltZVRvSXNvVGltZUFuZFBlcmlvZGljaXR5KG93Y3RpbWU6IHN0cmluZyk6IElMYXllckludGVydmFsQW5kUGVyaW9kIHwgc3RyaW5nIHtcclxuICAgIC8qKlxyXG4gICAgIENvbnZlcnQgZnJvbVxyXG4gICAgKi9cclxuICAgIGxldCBhcnIgPSBvd2N0aW1lLnNwbGl0KCcvJyk7XHJcbiAgICBsZXQgdCA9IChhcnIubGVuZ3RoID09IDMpID8gYXJyWzBdICsgJy8nICsgYXJyWzFdIDogb3djdGltZTtcclxuICAgIGxldCBwID0gKGFyci5sZW5ndGggPT0gMykgPyBhcnJbMl0gOiBudWxsO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgcmV0dXJuIHsgXCJpbnRlcnZhbFwiOiB0LCBcInBlcmlvZGljaXR5XCI6IHAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VEaW1lbnNpb25zKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBJTGF5ZXJEaW1lbnNpb25zIHtcclxuICAgIGlmICghcmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnZGltZW5zaW9ucycpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgZGltcyA9IHt9XHJcblxyXG4gICAgbGV0IGRpbWVuc2lvbnMgPSB7fVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UucHJvcGVydGllcy5kaW1lbnNpb25zKSkge1xyXG4gICAgICBmb3IgKGxldCBkIG9mIHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9ucykge1xyXG4gICAgICAgIGRpbWVuc2lvbnNbZC5uYW1lXSA9IGRcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGltZW5zaW9ucyA9IHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9uc1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkaW1lbnNpb25zKSB7XHJcbiAgICAgIGxldCBkaW0gPSB7fVxyXG4gICAgICBjb25zb2xlLmxvZyhuYW1lKVxyXG4gICAgICBpZiAobmFtZSA9PT0gXCJ0aW1lXCIgfHwgZGltZW5zaW9uc1tuYW1lXS51bml0cyA9PSBcIklTTzg2MDFcIikge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRpbWVuc2lvbnNbbmFtZV0udmFsdWVcclxuICAgICAgICBsZXQgdmFsdWVzID0gKHZhbHVlKSA/IHZhbHVlLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpID0+IHRoaXMuY29udmVydE93Y1RpbWVUb0lzb1RpbWVBbmRQZXJpb2RpY2l0eSh2KSkgOiBudWxsXHJcbiAgICAgICAgZGltID0ge1xyXG4gICAgICAgICAgXCJ2YWx1ZXNcIjogKCghdmFsdWVzKSB8fCB2YWx1ZXMubGVuZ3RoID4gMSkgPyB2YWx1ZXMgOiB2YWx1ZXNbMF0sXHJcbiAgICAgICAgICBcInVuaXRzXCI6IGRpbWVuc2lvbnNbbmFtZV0udW5pdHMsXHJcbiAgICAgICAgICBcImRpc3BsYXlcIjoge1xyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcIllZWU1NRERcIixcclxuICAgICAgICAgICAgXCJwZXJpb2RcIjogZGltZW5zaW9uc1tuYW1lXS5kaXNwbGF5LFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJlbmRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChuYW1lID09PSBcImVsZXZhdGlvblwiKSB7XHJcbiAgICAgICAgZGltID0gZGltZW5zaW9uc1tuYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaW0gPSBkaW1lbnNpb25zW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGRpbXNbbmFtZV0gPSBkaW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltcztcclxuICB9XHJcblxyXG4gIC8qKiBPZmZlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBUTGF5ZXJ0eXBlIHtcclxuICAgIGlmIChpc1dtc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzV210c09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXRzTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1dmc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXZnNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzR2VvSnNvbk9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBHZW9qc29uTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1h5ek9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBYeXpMYXllcnR5cGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29kZTsgLy8gYW4gb2ZmZXJpbmcgY2FuIGFsc28gYmUgYW55IG90aGVyIHN0cmluZy5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTZXJ2aWNlT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghb2ZmZXJpbmcuY29udGVudHMgJiYgb2ZmZXJpbmcub3BlcmF0aW9ucykgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAob2ZmZXJpbmcuY29udGVudHMgJiYgIW9mZmVyaW5nLm9wZXJhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmZXJpbmdDb250ZW50cyhvZmZlcmluZzogSU93c09mZmVyaW5nKTogSU93c09wZXJhdGlvbltdIHwgSU93c0NvbnRlbnRbXSB7XHJcbiAgICBpZiAodGhpcy5jaGVja0lmU2VydmljZU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcub3BlcmF0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29udGVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBsZWdlbmRVUkwgZnJvbSBwcm9qZWN0IHNwZWNpZmljIG93cyBDb250ZXh0XHJcbiAgICogQHBhcmFtIG9mZmVyaW5nIGxheWVyIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0TGVnZW5kVXJsKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpIHtcclxuICAgIGxldCBsZWdlbmRVcmwgPSAnJztcclxuXHJcbiAgICBpZiAob2ZmZXJpbmcuaGFzT3duUHJvcGVydHkoJ3N0eWxlcycpKSB7XHJcbiAgICAgIGxldCBkZWZhdWx0U3R5bGUgPSBvZmZlcmluZy5zdHlsZXMuZmlsdGVyKHN0eWxlID0+IHN0eWxlLmRlZmF1bHQpO1xyXG4gICAgICBpZiAoZGVmYXVsdFN0eWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlWzBdLmxlZ2VuZFVSTDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvZmZlcmluZy5oYXNPd25Qcm9wZXJ0eSgnbGVnZW5kVXJsJykpIHtcclxuICAgICAgbGVnZW5kVXJsID0gb2ZmZXJpbmcubGVnZW5kVXJsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ2VuZFVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGljb25VcmwgYmFzZWQgb24gSU93c09mZmVyaW5nXHJcbiAgICogQHBhcmFtIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0SWNvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nKSB7XHJcbiAgICBsZXQgaWNvblVybCA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCdpY29uVXJsJykpIHtcclxuICAgICAgaWNvblVybCA9IG9mZmVyaW5nLmljb25Vcmw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWNvblVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxheWVyIHByaW9yaXR5OiBmaXJzdCB3bXMsIHRoZW4gd210cywgdGhlbiB3ZnMsIHRoZW4gb3RoZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRMYXllcnMob3djOiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYXllcltdPiB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSBvd2MuZmVhdHVyZXM7XHJcbiAgICBjb25zdCBsYXllcnMkOiBPYnNlcnZhYmxlPExheWVyPltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuICAgICAgY29uc3Qgb2ZmZXJpbmdzID0gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3M7XHJcbiAgICAgIGlmIChvZmZlcmluZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZmVyaW5nID0gb2ZmZXJpbmdzLmZpbmQobyA9PiBpc1dtc09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV210c09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV2ZzT2ZmZXJpbmcoby5jb2RlKSlcclxuICAgICAgICAgIHx8IG9mZmVyaW5nc1swXTtcclxuICAgICAgICBsYXllcnMkLnB1c2godGhpcy5jcmVhdGVMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIG93YywgdGFyZ2V0UHJvamVjdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGxheWVycyQpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8TGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcbiAgICBpZiAoaXNSYXN0ZXJMYXllcnR5cGUobGF5ZXJUeXBlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVSYXN0ZXJMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQsIHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgfSBlbHNlIGlmIChpc1ZlY3RvckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVZlY3RvckxheWVyRnJvbU9mZmVyaW5nKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGlzIHR5cGUgb2Ygc2VydmljZSAoJHtsYXllclR5cGV9KSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlVmVjdG9yTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dD86IElPd3NDb250ZXh0KTogT2JzZXJ2YWJsZTxWZWN0b3JMYXllcj4ge1xyXG4gICAgY29uc3QgbGF5ZXJUeXBlID0gdGhpcy5nZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nKTtcclxuXHJcbiAgICBpZiAoIWlzVmVjdG9yTGF5ZXJ0eXBlKGxheWVyVHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIGxheWVyICcke2xheWVyVHlwZX0nIC8gb2ZmZXJpbmcgJyR7b2ZmZXJpbmcuY29kZX0nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgaW50byBhIFZlY3RvcmxheWVyYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLmdldEljb25Vcmwob2ZmZXJpbmcpO1xyXG5cclxuICAgIGxldCBsYXllclVybCwgcGFyYW1zO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIG9wZXJhdGlvbnMtb2ZmZXJpbmcgKHZzLiBhIGRhdGEtb2ZmZXJpbmcpOlxyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIGxheWVyVXJsID0gdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZik7XHJcbiAgICBpZiAob2ZmZXJpbmcub3BlcmF0aW9ucykgcGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG5cclxuICAgIGxldCBkYXRhO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGRhdGEtb2ZmZXJpbmc6IFxyXG4gICAgaWYgKG9mZmVyaW5nLmNvbnRlbnRzKSB7XHJcbiAgICAgIGRhdGEgPSBvZmZlcmluZy5jb250ZW50c1swXS5jb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsZWdlbmRVcmwgPSB0aGlzLmdldExlZ2VuZFVybChvZmZlcmluZyk7XHJcblxyXG4gICAgbGV0IGxheWVyT3B0aW9uczogSVZlY3RvckxheWVyT3B0aW9ucyA9IHtcclxuICAgICAgaWQ6IHJlc291cmNlLmlkIGFzIHN0cmluZyxcclxuICAgICAgbmFtZTogdGhpcy5nZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIHR5cGU6IGxheWVyVHlwZSxcclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlLFxyXG4gICAgICBhdHRyaWJ1dGlvbjogdGhpcy5nZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlKSxcclxuICAgICAgY29udGludW91c1dvcmxkOiBmYWxzZSxcclxuICAgICAgb3BhY2l0eTogdGhpcy5nZXRSZXNvdXJjZU9wYWNpdHkocmVzb3VyY2UpLFxyXG4gICAgICB1cmw6IGxheWVyVXJsID8gbGF5ZXJVcmwgOiBudWxsLFxyXG4gICAgICBsZWdlbmRJbWc6IGxlZ2VuZFVybCA/IGxlZ2VuZFVybCA6IG51bGwsXHJcbiAgICAgIGRhdGE6IGRhdGFcclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKGxheWVyT3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlLmJib3gpIHtcclxuICAgICAgbGF5ZXIuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyLmJib3ggPSBjb250ZXh0LmJib3g7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKGxheWVyKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhc3RlckxheWVyRnJvbU9mZmVyaW5nKFxyXG4gICAgb2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcblxyXG4gICAgaWYgKCFpc1Jhc3RlckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBvZmZlcmluZyAnJHtvZmZlcmluZy5jb2RlfScgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIGEgcmFzdGVybGF5ZXIuYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByYXN0ZXJMYXllciQ6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+O1xyXG4gICAgc3dpdGNoIChsYXllclR5cGUpIHtcclxuICAgICAgY2FzZSBXbXNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXNMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdtdHNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgLy8gQFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDdXN0b21MYXllcnR5cGU6XHJcbiAgICAgICAgLy8gY3VzdG9tIGxheWVycyBhcmUgbWVhbnQgdG8gYmUgdXNlcmRlZmluZWQgYW5kIG5vdCBlYXNpbHkgZW5jb2RlZCBpbiBhIE9XQy5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFzdGVyTGF5ZXIkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcoXHJcbiAgICBvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxXbXRzTGF5ZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFdtdHNPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbikucGlwZShtYXAoKG9wdGlvbnM6IElXbXRzT3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IG5ldyBXbXRzTGF5ZXIob3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBsYXllcjtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlV21zTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBPYnNlcnZhYmxlPFdtc0xheWVyPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBJV21zT3B0aW9ucyA9IHRoaXMuZ2V0V21zT3B0aW9ucyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgV21zTGF5ZXIob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gb2YobGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXbXRzT3B0aW9ucyhcclxuICAgIG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UsIGNvbnRleHQ6IElPd3NDb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElXbXRzT3B0aW9ucz4ge1xyXG4gICAgY29uc3QgcmFzdGVyT3B0aW9uczogSVJhc3RlckxheWVyT3B0aW9ucyA9IHRoaXMuZ2V0UmFzdGVyTGF5ZXJPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyRm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UpO1xyXG5cclxuICAgIGxldCBzdHlsZTogc3RyaW5nO1xyXG4gICAgaWYgKG9mZmVyaW5nLnN0eWxlcykge1xyXG4gICAgICBjb25zdCBzdHlsZUluZm8gPSBvZmZlcmluZy5zdHlsZXMuZmluZChzID0+IHMuZGVmYXVsdCk7XHJcbiAgICAgIGlmIChzdHlsZUluZm8pIHtcclxuICAgICAgICBzdHlsZSA9IHN0eWxlSW5mby5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0cml4U2V0Rm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UsIHRhcmdldFByb2plY3Rpb24pLnBpcGUobWFwKCgobWF0cml4U2V0OiBJRW9jT3dzV210c01hdHJpeFNldCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRyaXhTZXRPcHRpb25zOiBJTGlzdE1hdHJpeFNldCA9IHtcclxuICAgICAgICBtYXRyaXhTZXQ6IG1hdHJpeFNldC5tYXRyaXhTZXQsXHJcbiAgICAgICAgbWF0cml4SWRzOiBtYXRyaXhTZXQubWF0cml4SWRzLFxyXG4gICAgICAgIHJlc29sdXRpb25zOiBtYXRyaXhTZXQucmVzb2x1dGlvbnNcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgd210c09wdGlvbnM6IElXbXRzT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5yYXN0ZXJPcHRpb25zLFxyXG4gICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGxheWVyOiBsYXllcixcclxuICAgICAgICAgIG1hdHJpeFNldE9wdGlvbnM6IG1hdHJpeFNldE9wdGlvbnMsXHJcbiAgICAgICAgICBwcm9qZWN0aW9uOiB0YXJnZXRQcm9qZWN0aW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxyXG4gICAgICAgICAgZm9ybWF0OiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtdHNPcHRpb25zO1xyXG4gICAgfSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGF5ZXJGb3JXTVRTKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgW3VybCwgdXJsUGFyYW1zXSA9IHRoaXMucGFyc2VPcGVyYXRpb25Vcmwob2ZmZXJpbmcsICdHZXRUaWxlJyk7XHJcbiAgICBpZiAodXJsUGFyYW1zWydMQVlFUiddKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJhbXNbJ0xBWUVSJ107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSBpcyBubyBsYXllci1wYXJhbWV0ZXIgaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2UuaWR9LlxyXG4gICAgICBDYW5ub3QgaW5mZXIgbGF5ZXIuYCwgb2ZmZXJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9wZXJhdGlvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nLCBvcENvZGU6IHN0cmluZyk6IFtzdHJpbmcsIG9iamVjdF0ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gb2ZmZXJpbmcub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLmNvZGUgPT09IG9wQ29kZSk7XHJcbiAgICAgIGlmIChvcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybEZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZ2V0SnNvbkZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIHJldHVybiBbdXJsLCB1cmxQYXJhbXNdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZXJlIGlzIG5vICR7b3BDb2RlfS1vcGVyYXRpb24gaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0uYCwgb2ZmZXJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgb2ZmZXJpbmcgJHtvZmZlcmluZy5jb2RlfSBoYXMgbm8gb3BlcmF0aW9ucy5gLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hdHJpeFNldEZvcldNVFMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW9jT3dzV210c01hdHJpeFNldD4ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm1hdHJpeFNldHMpIHtcclxuICAgICAgY29uc3QgbWF0cml4U2V0ID0gb2ZmZXJpbmcubWF0cml4U2V0cy5maW5kKG0gPT4gbS5zcnMgPT09IHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgICByZXR1cm4gb2YobWF0cml4U2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IFt1cmwsIHVybFBhcmFtc10gPSB0aGlzLnBhcnNlT3BlcmF0aW9uVXJsKG9mZmVyaW5nLCAnR2V0Q2FwYWJpbGl0aWVzJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLndtdHNDbGllbnQuZ2V0Q2FwYWJpbGl0aWVzKHVybCkucGlwZShcclxuICAgICAgICBtYXAoKGNhcGFiaWxpdGllczogb2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXRzID0gY2FwYWJpbGl0aWVzWyd2YWx1ZSddWydjb250ZW50cyddWyd0aWxlTWF0cml4U2V0J107XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXQgPSBtYXRyaXhTZXRzLmZpbmQobXMgPT4gbXNbJ2lkZW50aWZpZXInXVsndmFsdWUnXSA9PT0gdGFyZ2V0UHJvamVjdGlvbik7XHJcbiAgICAgICAgICBjb25zdCBvd3NNYXRyaXhTZXQ6IElFb2NPd3NXbXRzTWF0cml4U2V0ID0ge1xyXG4gICAgICAgICAgICBzcnM6IHRhcmdldFByb2plY3Rpb24sXHJcbiAgICAgICAgICAgIG1hdHJpeFNldDogbWF0cml4U2V0WydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10sXHJcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10pLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydzY2FsZURlbm9taW5hdG9yJ10pLFxyXG4gICAgICAgICAgICBvcmlnaW46IHtcclxuICAgICAgICAgICAgICB4OiBtYXRyaXhTZXRbJ3RpbGVNYXRyaXgnXVswXVsndG9wTGVmdENvcm5lciddWzFdLFxyXG4gICAgICAgICAgICAgIHk6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0b3BMZWZ0Q29ybmVyJ11bMF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGlsZXNpemU6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0aWxlSGVpZ2h0J11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gb3dzTWF0cml4U2V0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdtc09wdGlvbnMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBJV21zT3B0aW9ucyB7XHJcbiAgICBjb25zdCByYXN0ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRSYXN0ZXJMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChyYXN0ZXJPcHRpb25zLnR5cGUgPT09IFdtc0xheWVydHlwZSkge1xyXG5cclxuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG4gICAgICBsZXQgZGVmYXVsdFN0eWxlO1xyXG4gICAgICBpZiAob2ZmZXJpbmcuc3R5bGVzKSB7XHJcbiAgICAgICAgZGVmYXVsdFN0eWxlID0gb2ZmZXJpbmcuc3R5bGVzLmZpbmQocyA9PiBzLmRlZmF1bHQpLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtczogSVdtc1BhcmFtcyA9IHtcclxuICAgICAgICBMQVlFUlM6IHVybFBhcmFtc1snTEFZRVJTJ10sXHJcbiAgICAgICAgRk9STUFUOiB1cmxQYXJhbXNbJ0ZPUk1BVCddLFxyXG4gICAgICAgIFRJTUU6IHVybFBhcmFtc1snVElNRSddLFxyXG4gICAgICAgIFZFUlNJT046IHVybFBhcmFtc1snVkVSU0lPTiddLFxyXG4gICAgICAgIFRJTEVEOiB1cmxQYXJhbXNbJ1RJTEVEJ10sXHJcbiAgICAgICAgVFJBTlNQQVJFTlQ6IHRydWUsXHJcbiAgICAgICAgU1RZTEVTOiBkZWZhdWx0U3R5bGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdtc09wdGlvbnM6IElXbXNPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLnJhc3Rlck9wdGlvbnMsXHJcbiAgICAgICAgdHlwZTogJ3dtcycsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtc09wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGByZXNvdXJjZSAke3Jlc291cmNlLmlkfSBjYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBXTVMtTGF5ZXJgLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhc3RlckxheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElSYXN0ZXJMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChpc1Jhc3RlckxheWVydHlwZShsYXllck9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgY29uc3QgcmFzdGVyTGF5ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmxheWVyT3B0aW9ucyxcclxuICAgICAgICB0eXBlOiBsYXllck9wdGlvbnMudHlwZSBhcyBUUmFzdGVyTGF5ZXJ0eXBlLFxyXG4gICAgICAgIHVybDogdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZiksXHJcbiAgICAgICAgc3ViZG9tYWluczogc2hhcmRzRXhwYW5kKHRoaXMuZ2V0UmVzb3VyY2VTaGFyZHMocmVzb3VyY2UpKVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmFzdGVyTGF5ZXJPcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGxheWVyICR7bGF5ZXJPcHRpb25zLmlkfSBpcyBub3QgYSByYXN0ZXJsYXllcmAsIGxheWVyT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICBpZDogcmVzb3VyY2UuaWQgYXMgc3RyaW5nLFxyXG4gICAgICB0eXBlOiB0aGlzLmdldExheWVydHlwZUZyb21PZmZlcmluZ0NvZGUob2ZmZXJpbmcpLFxyXG4gICAgICBuYW1lOiB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpLFxyXG4gICAgICByZW1vdmFibGU6IHRydWUsXHJcbiAgICAgIGNvbnRpbnVvdXNXb3JsZDogZmFsc2UsXHJcbiAgICAgIG9wYWNpdHk6IHRoaXMuZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIGF0dHJpYnV0aW9uOiB0aGlzLmdldFJlc291cmNlQXR0cmlidXRpb24ocmVzb3VyY2UpLFxyXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmdldFJlc291cmNlRGltZW5zaW9ucyhyZXNvdXJjZSksXHJcbiAgICAgIGxlZ2VuZEltZzogdGhpcy5nZXRMZWdlbmRVcmwob2ZmZXJpbmcpLFxyXG4gICAgICBzdHlsZXM6IG9mZmVyaW5nLnN0eWxlc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmVzb3VyY2UuYmJveCkge1xyXG4gICAgICBsYXllck9wdGlvbnMuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyT3B0aW9ucy5iYm94ID0gY29udGV4dC5iYm94O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllck9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKiogTWlzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgcHJpdmF0ZSBnZXRVcmxGcm9tVXJpKHVyaTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCB1cmkuaW5kZXhPZignPycpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhlbHBlciB0byBwYWNrIHF1ZXJ5LXBhcmFtZXRlcnMgb2YgYSB1cmkgaW50byBhIEpTT05cclxuICAgKiBAcGFyYW0gdXJpIGFueSB1cmkgd2l0aCBxdWVyeS1wYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRKc29uRnJvbVVyaSh1cmk6IHN0cmluZyk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHVyaS5zdWJzdHIodXJpLmxhc3RJbmRleE9mKCc/JykgKyAxKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBwYXJ0LnNwbGl0KCc9Jyk7XHJcbiAgICAgIHJlc3VsdFtpdGVtWzBdLnRvVXBwZXJDYXNlKCldID0gZGVjb2RlVVJJQ29tcG9uZW50KGl0ZW1bMV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGRpc3BsYXkgbmFtZSBvZiBsYXllciwgYmFzZWQgb24gSU93c1Jlc291cmNlIGFuZCBJT3dzT2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gb2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gcmVzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpc3BsYXlOYW1lKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIGxldCBkaXNwbGF5TmFtZSA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCd0aXRsZScpKSB7XHJcbiAgICAgIGlmIChvZmZlcmluZy50aXRsZSkge1xyXG4gICAgICAgIGRpc3BsYXlOYW1lID0gb2ZmZXJpbmcudGl0bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqLS0tLS0tLS0tLS0tIERBVEEgVE8gRklMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cclxuICAvKipcclxuICAgKiBAVE9ETzpcclxuICAgKiAgIC0gcHJvcGVydGllc1xyXG4gICAqL1xyXG4gIGdlbmVyYXRlT3dzQ29udGV4dEZyb20oaWQ6IHN0cmluZywgbGF5ZXJzOiBMYXllcltdLCBleHRlbnQ/OiBUR2VvRXh0ZW50LCBwcm9wZXJ0aWVzPyk6IElFb2NPd3NDb250ZXh0IHtcclxuXHJcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICBsYW5nOiAnJyxcclxuICAgICAgICBsaW5rczogW10sXHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZWQ6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG93YzogSUVvY093c0NvbnRleHQgPSB7XHJcbiAgICAgICdpZCc6IGlkLFxyXG4gICAgICAndHlwZSc6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgICAgICdwcm9wZXJ0aWVzJzogcHJvcGVydGllcyxcclxuICAgICAgJ2ZlYXR1cmVzJzogW11cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGV4dGVudCkge1xyXG4gICAgICBvd2NbJ2Jib3gnXSA9IGV4dGVudDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgbGV0IHJlc291cmNlOiBJRW9jT3dzUmVzb3VyY2UgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIGZvciBsYXllciB0eXBlc1xyXG4gICAgICBvd2MuZmVhdHVyZXMucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG93YztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogSUVvY093c1Jlc291cmNlIHtcclxuICAgIGxldCByZXNvdXJjZTogSUVvY093c1Jlc291cmNlID0ge1xyXG4gICAgICAnaWQnOiBsYXllci5pZCxcclxuICAgICAgJ3Byb3BlcnRpZXMnOiB7XHJcbiAgICAgICAgdGl0bGU6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgdXBkYXRlZDogbnVsbCxcclxuICAgICAgICBvZmZlcmluZ3M6IFt0aGlzLmdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXIpXSxcclxuICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxyXG4gICAgICAgIGF0dHJpYnV0aW9uOiBsYXllci5hdHRyaWJ1dGlvbixcclxuICAgICAgfSxcclxuICAgICAgJ3R5cGUnOiAnRmVhdHVyZScsXHJcbiAgICAgICdnZW9tZXRyeSc6IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXI6IExheWVyLCBsZWdlbmRVcmw/OiBzdHJpbmcsIGljb25Vcmw/OiBzdHJpbmcpOiBJRW9jT3dzT2ZmZXJpbmcge1xyXG4gICAgbGV0IG9mZmVyaW5nOiBJRW9jT3dzT2ZmZXJpbmcgPSB7XHJcbiAgICAgICdjb2RlJzogdGhpcy5nZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXIpLFxyXG4gICAgICAndGl0bGUnOiBsYXllci5uYW1lXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChsYXllci50eXBlID09IEdlb2pzb25MYXllcnR5cGUpIHtcclxuICAgICAgb2ZmZXJpbmcuY29udGVudHMgPSB0aGlzLmdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyIGFzIFZlY3RvckxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9mZmVyaW5nLm9wZXJhdGlvbnMgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZWdlbmRVcmwpIG9mZmVyaW5nLmxlZ2VuZFVybCA9IGxlZ2VuZFVybDtcclxuICAgIGlmIChpY29uVXJsKSBvZmZlcmluZy5pY29uVXJsID0gaWNvblVybDtcclxuXHJcbiAgICByZXR1cm4gb2ZmZXJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcyc7XHJcbiAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtdHMnO1xyXG4gICAgICBjYXNlIEdlb2pzb25MYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW9qc29uJztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBsYXllciAoJHtsYXllci50eXBlfSkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC5gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyOiBWZWN0b3JMYXllcik6IElPd3NDb250ZW50W10ge1xyXG4gICAgbGV0IGNvbnRlbnRzID0gW107XHJcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9qc29uTGF5ZXJ0eXBlOlxyXG4gICAgICAgIGxldCBjb250ZW50ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGxheWVyLmRhdGEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29udGVudHMgZm9yIHRoaXMgdHlwZSBvZiB2ZWN0b3JsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudHM7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBSYXN0ZXJMYXllcikge1xyXG4gICAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtdHNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBjYXNlIFh5ekxheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFh5ek9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IG9wZXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XHJcbiAgICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICAgIC8vIGNhc2UgJ3dmcyc6IDwtLS0gdGhpcyB0eXBlIG9mIGxheWVyIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQgaW4gZGF0YXR5cGVzLWxheWVycy9MYXllcnMudHMgXHJcbiAgICAgICAgLy8gICByZXR1cm4gdGhpcy5nZXRXZnNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIHNlcnZpY2UgKCR7bGF5ZXIudHlwZX0pIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0WHl6T3BlcmF0aW9uc0Zyb21MYXllcihsYXllcjogUmFzdGVyTGF5ZXIpOiBJT3dzT3BlcmF0aW9uW10ge1xyXG4gICAgbGV0IHJlc3RDYWxsOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdSRVNUJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICd0ZXh0L2h0bWwnLFxyXG4gICAgICAnaHJlZic6IGAke2xheWVyLnVybH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgcmVzdENhbGxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRUbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICAvLyBAVE9ETzogd2hhdCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIFRNUz8gaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFdmc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFZlY3RvckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IGxheWVyTmFtZSA9IGxheWVyLm5hbWU7XHJcbiAgICBsZXQgdmVyc2lvbiA9IGxheWVyLm9wdGlvbnMudmVyc2lvbiA/IGxheWVyLm9wdGlvbnMudmVyc2lvbiA6ICcxLjEuMCc7XHJcblxyXG5cclxuICAgIGxldCBHZXRGZWF0dXJlOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdHZXRGZWF0dXJlJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V0ZTJnZlcnNpb249JHt2ZXJzaW9ufSZyZXF1ZXN0PUdldEZlYXR1cmVgXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGxldCBEZXNjcmliZUZlYXR1cmVUeXBlOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBHZXRDYXBhYmlsaXRpZXM6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldFByb3BlcnR5VmFsdWU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldEZlYXR1cmVXaXRoTG9jazogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgTG9ja0ZlYXR1cmU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IFRyYW5zYWN0aW9uOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBDcmVhdGVTdG9yZWRRdWVyeTogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRHJvcFN0b3JlZFF1ZXJ5OiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBMaXN0U3RvcmVkUXVlcmllczogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRGVzY3JpYmVTdG9yZWRRdWVyaWVzOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICBsZXQgb3BlcmF0aW9ucyA9IFtcclxuICAgICAgR2V0RmVhdHVyZSxcclxuICAgICAgLy8gR2V0Q2FwYWJpbGl0aWVzLFxyXG4gICAgICAvLyBEZXNjcmliZUZlYXR1cmVUeXBlLFxyXG4gICAgICAvLyBHZXRQcm9wZXJ0eVZhbHVlLFxyXG4gICAgICAvLyBHZXRGZWF0dXJlV2l0aExvY2ssXHJcbiAgICAgIC8vIExvY2tGZWF0dXJlLFxyXG4gICAgICAvLyBUcmFuc2FjdGlvbixcclxuICAgICAgLy8gQ3JlYXRlU3RvcmVkUXVlcnksXHJcbiAgICAgIC8vIERyb3BTdG9yZWRRdWVyeSxcclxuICAgICAgLy8gTGlzdFN0b3JlZFF1ZXJpZXMsXHJcbiAgICAgIC8vIERlc2NyaWJlU3RvcmVkUXVlcmllc1xyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXRXbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcblxyXG4gICAgbGV0IHVybCA9IGxheWVyLnVybDtcclxuICAgIGxldCB3bXNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLlZFUlNJT047XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldE1hcDogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0TWFwJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6IGZvcm1hdCxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V01TJnZlcnNpb249JHt3bXNWZXJzaW9ufSZyZXF1ZXN0PUdldE1hcCZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH0mVElMRUQ9dHJ1ZWBcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/c2VydmljZT1XTVMmdmVyc2lvbj0ke3dtc1ZlcnNpb259JnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzYFxyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZXRGZWF0dXJlSW5mbzogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0RmVhdHVyZUluZm8nLFxyXG4gICAgICAnbWV0aG9kJzogJ0dFVCcsXHJcbiAgICAgICd0eXBlJzogJ3RleHQvaHRtbCcsXHJcbiAgICAgICdocmVmJzogYCR7dXJsfT9zZXJ2aWNlPVdNUyZ2ZXJzaW9uPSR7d21zVmVyc2lvbn0mcmVxdWVzdD1HZXRGZWF0dXJlSW5mbyZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgZ2V0TWFwLFxyXG4gICAgICBnZXRDYXBhYmlsaXRpZXMsXHJcbiAgICAgIGdldEZlYXR1cmVJbmZvXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBvcGVyYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0V210c09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFJhc3RlckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IHdtdHNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLnZlcnNpb247XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldFRpbGU6IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldFRpbGUnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0VGlsZSZGT1JNQVQ9JHtmb3JtYXR9JkxBWUVSPSR7bGF5ZXJJZH0mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiBmb3JtYXRcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7d210c1ZlcnNpb259YCxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnXHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90ZTogd2UgZGVsaWJlcmF0ZWx5IHVzZSB0aGUgV01TIHByb3RvY29sIGhlcmUgaW5zdGVhZCBvZiBXTVRTLlxyXG4gICAgLy8gUmVhc29uOiBXTVRTIGRlbGl2ZXJzIFJHQi12YWx1ZXMsIHdoZXJhcyBXTVMgZGVsaXZlcnMgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSBhIHRpbGUuXHJcbiAgICBsZXQgZ2V0RmVhdHVyZUluZm86IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldEZlYXR1cmVJbmZvJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01TJlJFUVVFU1Q9R2V0RmVhdHVyZUluZm8mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiAndGV4dC9odG1sJ1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcGVyYXRpb25zOiBJT3dzT3BlcmF0aW9uW10gPSBbXHJcbiAgICAgIGdldFRpbGUsXHJcbiAgICAgIGdldENhcGFiaWxpdGllcyxcclxuICAgICAgZ2V0RmVhdHVyZUluZm9cclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm2015/lib/owc/types/eoc-owc-json.js b/@ukis/esm2015/lib/owc/types/eoc-owc-json.js deleted file mode 100644 index 734e24c8b..000000000 --- a/@ukis/esm2015/lib/owc/types/eoc-owc-json.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -export function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -export function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -export function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -export function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -export function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -export function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -export function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -export function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9jLW93Yy1qc29uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL293Yy90eXBlcy9lb2Mtb3djLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFPQSxvQ0FHQzs7O0lBRkcsa0NBQTRCOztJQUM1QixxQ0FBa0M7Ozs7O0FBR3RDLHFDQUVDOzs7SUFERyxxQ0FBc0M7Ozs7O0FBRzFDLCtDQUtDOzs7SUFKRyw0Q0FBaUI7O0lBQ2pCLGdEQUFxQjs7SUFDckIsMkNBQWdCOztJQUNoQiwrQ0FBdUM7Ozs7O0FBRzNDLCtDQUlDOzs7SUFIQyx5Q0FBZ0M7O0lBQ2hDLDhDQUFxQzs7Ozs7O0FBSXZDLDhDQUtDOzs7Ozs7SUFIQywyQ0FBaUI7O0lBQ2pCLHlDQUFjOztJQUNkLHlDQUFlOzs7OztBQUdqQixxQ0FPQzs7O0lBTkcsK0JBRWdEOztJQUNoRCxvQ0FBbUI7O0lBQ25CLGtDQUFpQjs7SUFDakIsZ0NBQWU7Ozs7O0FBR25CLHFDQUVDOzs7SUFERywrQkFBbUI7Ozs7O0FBR3ZCLHlDQUdDOzs7SUFGRyxtQ0FBb0I7O0lBQ3BCLHlDQUFvQzs7Ozs7QUFHeEMsMENBY0M7Ozs7OztJQVpHLG1DQUFZOztJQUNaLHlDQUFrQjs7SUFDbEIseUNBQW9COztJQUNwQixzQ0FHRTs7SUFDRiwyQ0FBc0I7O0lBQ3RCLHdDQUdFOzs7OztBQUdOLHVDQUtDOzs7SUFKRyxpQ0FBbUI7O0lBQ25CLGlDQUFhOztJQUNiLG9DQUFrQjs7SUFDbEIsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU93c0NvbnRleHQsIElPd3NSZXNvdXJjZSwgSU93c09mZmVyaW5nLCBXTVNfT2ZmZXJpbmcsIFdGU19PZmZlcmluZywgV0NTX09mZmVyaW5nLCBXUFNfT2ZmZXJpbmcsXHJcbiAgICBDU1dfT2ZmZXJpbmcsIFdNVFNfT2ZmZXJpbmcsIEdNTF9PZmZlcmluZywgS01MX09mZmVyaW5nLCBHZW9USUZGX09mZmVyaW5nLCBHTUxKUDJfT2ZmZXJpbmcsXHJcbiAgICBHTUxDT1ZfT2ZmZXJpbmcsIElPd3NSZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tICcuL293Yy1qc29uJztcclxuXHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2VvSlNPTiBmcm9tICdnZW9qc29uJztcclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzQ29udGV4dCBleHRlbmRzIElPd3NDb250ZXh0IHtcclxuICAgIGZlYXR1cmVzOiBJRW9jT3dzUmVzb3VyY2VbXTtcclxuICAgIHByb2plY3Rpb25zPzogSUVvY093c1Byb2plY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2UgZXh0ZW5kcyBJT3dzUmVzb3VyY2Uge1xyXG4gICAgcHJvcGVydGllczogSUVvY093c1Jlc291cmNlUHJvcGVydGllcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIGV4dGVuZHMgSU93c1Jlc291cmNlUHJvcGVydGllcyB7XHJcbiAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmc7XHJcbiAgICBzaGFyZHM/OiBzdHJpbmc7XHJcbiAgICBkaW1lbnNpb25zPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VEaW1lbnNpb25zIHtcclxuICB0aW1lPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9uO1xyXG4gIGVsZXZhdGlvbj86IElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbjtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiB7XHJcbiAgLyoqIERlZmF1bHQgc3RlcCBkaXNwbGF5IG9mIHRpbWUgc2xpZGVyICovXHJcbiAgZGlzcGxheT86IHN0cmluZztcclxuICB1bml0czogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NPZmZlcmluZyBleHRlbmRzIElPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmcgfCBXRlNfT2ZmZXJpbmcgfCBXQ1NfT2ZmZXJpbmcgfCBXUFNfT2ZmZXJpbmcgfCBDU1dfT2ZmZXJpbmcgfFxyXG4gICAgICAgIFdNVFNfT2ZmZXJpbmcgfCBHTUxfT2ZmZXJpbmcgfCBLTUxfT2ZmZXJpbmcgfCBHZW9USUZGX09mZmVyaW5nIHwgR01MSlAyX09mZmVyaW5nIHxcclxuICAgICAgICBHTUxDT1ZfT2ZmZXJpbmcgfCBHZW9Kc29uX09mZmVyaW5nIHwgc3RyaW5nO1xyXG4gICAgbGVnZW5kVXJsPzogc3RyaW5nO1xyXG4gICAgaWNvblVybD86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NXbXNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVRTX09mZmVyaW5nO1xyXG4gICAgbWF0cml4U2V0cz86IElFb2NPd3NXbXRzTWF0cml4U2V0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNNYXRyaXhTZXQge1xyXG4gICAgLyoqIEVQU0ctQ29kZSAqL1xyXG4gICAgc3JzOiBzdHJpbmc7XHJcbiAgICBtYXRyaXhTZXQ6IHN0cmluZztcclxuICAgIG1hdHJpeElkczogc3RyaW5nW107XHJcbiAgICBvcmlnaW46IHtcclxuICAgICAgICB4OiBudW1iZXIsXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICB9O1xyXG4gICAgcmVzb2x1dGlvbnM6IG51bWJlcltdO1xyXG4gICAgdGlsZXNpemU6IHtcclxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgICAgICB3aWR0aDogbnVtYmVyXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NQcm9qZWN0aW9uIHtcclxuICAgIGJib3g6IEdlb0pTT04uQkJveDtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gICAgdW5pdD86IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vKipcclxuKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVleHRlbnNpb24tb2ZmZXJpbmdzXHJcbiovXHJcbmV4cG9ydCB0eXBlIEdlb0pzb25fT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbmV4cG9ydCB0eXBlIFh5el9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/lib/owc/types/owc-json.js b/@ukis/esm2015/lib/owc/types/owc-json.js deleted file mode 100644 index c6b4a00e0..000000000 --- a/@ukis/esm2015/lib/owc/types/owc-json.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -export function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -export function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -export function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -export function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -export function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -export function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -export function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvb3djL3R5cGVzL293Yy1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBLGlDQTJDQzs7Ozs7OztJQXRDQyx5QkFBb0I7O0lBQ3BCLGlDQWdDRTs7Ozs7SUFFRiwrQkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNCLGtDQVFDOzs7Ozs7O0lBSEMsMEJBQW9COztJQUNwQixrQ0FBbUM7Ozs7OztBQUlyQyw0Q0FnQ0M7Ozs7OztJQTlCQyx1Q0FBYzs7Ozs7SUFFZCx5Q0FBb0I7Ozs7O0lBRXBCLDBDQUFrQjs7Ozs7SUFFbEIseUNBQXVCOzs7OztJQUV2QiwyQ0FBbUI7Ozs7O0lBRW5CLHdDQUFnQjs7Ozs7SUFFaEIsc0NBQWtCOzs7OztJQUVsQiwyQ0FBMkI7Ozs7O0lBRTNCLHdDQUFpQjs7Ozs7SUFFakIsNENBQTZCOzs7OztJQUU3QixxREFBNkI7Ozs7O0lBRTdCLHFEQUE2Qjs7Ozs7O0lBSTdCLHdDQUFnQjs7Ozs7SUFFaEIsdUNBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QnRCLGtDQVVDOzs7Ozs7SUFSQyw0QkFDNEY7Ozs7O0lBRTVGLGtDQUE2Qjs7Ozs7SUFFN0IsZ0NBQXlCOztJQUN6Qiw4QkFBd0I7Ozs7OztBQUsxQixpQ0FJQzs7O0lBSEMsNEJBQWU7O0lBQ2YsMEJBQWE7O0lBQ2IsOEJBQWlCOzs7OztBQUduQixnQ0FNQzs7Ozs7O0lBSkMsMEJBQWM7O0lBQ2QsMkJBQWU7O0lBQ2YseUJBQWE7Ozs7OztBQUlmLG1DQUtDOzs7SUFKQywrQkFBZ0I7Ozs7O0lBRWhCLDZCQUFjOztJQUNkLDhCQUFlOzs7OztBQUdqQiwrQkFTQzs7O0lBUkMsd0JBQVk7O0lBQ1oseUJBQWM7O0lBQ2QseUJBQWM7O0lBQ2QsMEJBQWU7Ozs7O0lBRWYsK0JBQW9COztJQUNwQix5QkFBa0I7Ozs7OztBQUlwQiw0Q0FJQzs7O0lBSEMsdUNBQWU7O0lBQ2YscUNBQWE7O0lBQ2IseUNBQWlCOzs7OztBQUduQix3Q0FTQzs7Ozs7O0lBUEMsd0NBQW9COzs7OztJQUVwQix5Q0FBcUI7Ozs7OztJQUdyQix3Q0FBb0I7Ozs7Ozs7QUFPdEIsbUNBZUM7Ozs7Ozs7SUFWQyw2QkFBYTs7Ozs7SUFFYiwrQkFBZTs7SUFDZiw2QkFBYzs7Ozs7SUFFZCw2QkFBYzs7SUFDZCxnQ0FBc0I7O0lBQ3RCLCtCQUFxQjs7Ozs7O0FBTXZCLGlDQVFDOzs7Ozs7SUFOQywyQkFBYTs7SUFDYiwyQkFBYzs7SUFDZCw0QkFBZTs7Ozs7SUFFZiw4QkFBaUI7Ozs7OztBQUluQixrQ0FRQzs7O0lBUEMsNEJBQWE7O0lBQ2IsNkJBQWM7O0lBQ2QsZ0NBQWtCOztJQUNsQiwrQkFBa0I7O0lBQ2xCLGlDQUFtQjs7SUFDbkIsK0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIE9HQyBPV1MgQ29udGV4dCBHZW8gRW5jb2RpbmcgU3RhbmRhcmQgVmVyc2lvbjogMS4wXHJcbiAqIGh0dHA6Ly9kb2NzLm9wZW5nZW9zcGF0aWFsLm9yZy9pcy8xNC0wNTVyMi8xNC0wNTVyMi5odG1sXHJcbiAqIERlZmluaXRpb25zIGJ5OiBNYXRoaWFzIEJvZWNrXHJcbiAqIFR5cGVTY3JpcHQgVmVyc2lvbjogMi41LjNcclxuICpcclxuICogZGVwZW5kcyBvbiBAdHlwZXMvZ2VvanNvbkBeNzk0Ni4wLjJcclxuICovXHJcbmltcG9ydCAqIGFzIEdlb0pTT04gZnJvbSAnZ2VvanNvbic7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBPV1MgQ29udGV4dCBkZXNjcmliZXMgTWV0YWRhdGEsIEFQSSwgVGltZSBSYW5nZVxyXG4gKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWV0aGUtb3dzLWNvbnRleHQtZG9jdW1lbnQtc3RydWN0dXJlXHJcbiAqIElmIG5vIGJvdW5kaW5nIGJveCBpcyBzcGVjaWZpZWQsIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdmlldyB3aGVuIHRoZSBjb250ZXh0IGRvY3VtZW50IGlzIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRleHQgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmVDb2xsZWN0aW9uPEdlb0pTT04uR2VvbWV0cnlPYmplY3QgfCBudWxsLCBHZW9KU09OLkdlb0pzb25Qcm9wZXJ0aWVzPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGlkIGVsZW1lbnQgZGVmaW5lcyBhIG1hbmRhdG9yeSByZWZlcmVuY2UgdG8gdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50LlxyXG4gICAqIFRoZSBjb250ZW50IGZvciB0aGUgaWQgZWxlbWVudCBTSEFMTCBiZSBhbiBJUkksIGFzIGRlZmluZWQgYnkgSUVURiBbUkZDMzk4N11cclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IHtcclxuICAgIGxpbmtzOiB7IHByb2ZpbGVzOiBzdHJpbmdbXSB9IHwgSU93c0xpbmtzW107XHJcbiAgICAvKiogTGFuZ3VhZ2Ugb2YgQ29udGV4dCBkb2N1bWVudCBjb250ZW50ICovXHJcbiAgICBsYW5nOiBMYW5nU3RyaW5nO1xyXG4gICAgLyoqIFRpdGxlIGZvciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIC8qKiBEYXRlIG9mIGEgY3JlYXRpb24gb3IgdXBkYXRlIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICB1cGRhdGVkOiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50IHB1cnBvc2Ugb3IgY29udGVudCAqL1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBpbmRpY2F0ZXMgdGhlIGF1dGhvcnMgYXJyYXkgb2YgdGhlIENvbnRleHQgZG9jdW1lbnQgKi9cclxuICAgIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgICAvKiogSWRlbnRpZmllciBmb3IgdGhlIHB1Ymxpc2hlciBvZiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcHVibGlzaGVyPzogc3RyaW5nO1xyXG4gICAgLyoqIFRvb2wvYXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIENvbnRleHQgZG9jdW1lbnQgYW5kIGl0cyBwcm9wZXJ0aWVzICovXHJcbiAgICBjcmVhdG9yPzogSU93c0NyZWF0b3I7XHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnRpZXMgb2YgdGhlIGRpc3BsYXkgaW4gdXNlIHdoZW4gdGhlIGNvbnRleHQgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgKGZvciBkaXNwbGF5IGJhc2VkIGFwcGxpY2F0aW9ucyBvbmx5KS5cclxuICAgICAqIFRoaXMgY2xhc3MgaXMgb3B0aW9uYWwgYW5kIGludGVuZGVkIGZvciBjcmVhdG9yIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB3aXRoIGEgZ2VvZ3JhcGhpY2FsIGRpc3BsYXkgd2l0aGluIGEgZml4ZWQgcGl4ZWwgc2l6ZSBhbmQgbm90IHNjYWxhYmxlIHRvIGRpZmZlcmVudCBjb21wdXRhdGlvbmFsIGRldmljZXMgXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXk/OiBJT3dzQ3JlYXRvckRpc3BsYXlbXTtcclxuICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcmlnaHRzPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIHJlc291cmNlIFxyXG4gICAgKiB0aW1lIHJhbmdlIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLlxyXG4gICAgKi9cclxuICAgIGRhdGU/OiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIFRoaXMgYXJyYXkgaXMgYW4gb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBjYXRlZ29yaWVzIHJlbGF0ZWQgdG8gdGhpcyBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gICAgLyoqIEV4dGVuc2lvbiBBbnkgb3RoZXIgZWxlbWVudCAqL1xyXG4gICAgW2s6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIC8qKiBPcmRlcmVkIExpc3Qgb2YgUmVzb3VyY2VzIGF2YWlsYWJsZSBvbiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIGZlYXR1cmVzOiBJT3dzUmVzb3VyY2VbXTtcclxuICAvKiogRXh0ZW5zaW9uIEFueSBvdGhlciBlbGVtZW50ICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVhY2ggbGF5ZXIgKGEuay5hLiBmZWF0dXJlKSBpbiBhIGNvbnRleHQgZG9jdW1lbnQgaXMga25vd24gYXMgYSDigJhSZXNvdXJjZeKAmVxyXG4gKiBBIFJlc291cmNlIHJlZmVyZW5jZSBhIHNldCBvZiBnZW9zcGF0aWFsIGluZm9ybWF0aW9uIHRvIGJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGVsZW1lbnQuXHJcbiAqIFRoZSByZXNvdXJjZXMgYXJlIG9yZGVyZWQgc3VjaCB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBkb2N1bWVudCBpcyB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGZyb250LlxyXG4gKiBUaGlzIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGxheWVycyBhcmUgZHJhd24uXHJcbiAqIEEgcmVzb3VyY2UgKHdoaWNoIGluIEdJUyB0ZXJtcyBpcyBhIGxheWVyKSBjYW4gaGF2ZSBhIG51bWJlciBvZiBvZmZlcmluZ3MsIGFuZCBlYWNoIG9mZmVyaW5nXHJcbiAqIGlzIGZvY3Vzc2VkIG9uIGEgcGFydGljdWxhciByZXByZXNlbnRhdGlvbiBvZiBpbmZvcm1hdGlvbi5cclxuICogVGhlc2UgY2FuIGJlIG9uZSBvZiBhIG51bWJlciBvZiBPR0MgV2ViIFNlcnZpY2VzLCBzcGVjaWZpY2FsbHkgV01TLCBXTVRTLCBXRlMsIFdDUywgV1BTIGFuZCBDU1csXHJcbiAqIG9yIG9uZSBvZiBhIG51bWJlciBvZiBpbmxpbmUgb3IgcmVmZXJlbmNlZCBmb3JtYXRzLCBzcGVjaWZpY2FsbHkgR01MLCBLTUwsIEdlb1RJRkYsIEdNTEpQMiwgR01MQ09WLFxyXG4gKiBvciBhIGN1c3RvbSBvZmZlcmluZyB0eXBlIGRlZmluZWQgaW4gYSBwcm9maWxlIG9yIGJ5IGFuIG9yZ2FuaXNhdGlvbi5cclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVldGhlLW93cy1jb250ZXh0LWRvY3VtZW50LXN0cnVjdHVyZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2UgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIFVuYW1iaWd1b3VzIHJlZmVyZW5jZSB0byB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIENvbnRleHQgcmVzb3VyY2UgKElSSSlcclxuICAgKiBTdHJpbmcgdHlwZSB0aGF0IFNIQUxMIGNvbnRhaW4gYSBVUkkgdmFsdWVcclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IElPd3NSZXNvdXJjZVByb3BlcnRpZXM7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIHtcclxuICAvKiogVGl0bGUgZ2l2ZW4gdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEYXRlIG9mIHRoZSBsYXN0IHVwZGF0ZSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIHVwZGF0ZWQ6IERhdGVTdHJpbmc7XHJcbiAgLyoqIFRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBnZW5lcmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50IGluIGEgZm9ybWF0IHVuZGVyc3RhbmRhYmxlIGJ5IGdlbmVyaWMgcmVhZGVycyAqL1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIC8qKiBUaGlzIGVsZW1lbnQgaXMgb3B0aW9uYWwgYW5kIGluZGljYXRlcyB0aGUgYXV0aG9ycyBhcnJheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgLyoqIEVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBDb250ZXh0IHJlc291cmNlIGF2YWlsYWJsZSAqL1xyXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcclxuICAvKiogSW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICByaWdodHM/OiBzdHJpbmc7XHJcbiAgLyoqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBkYXRlPzogRGF0ZVN0cmluZztcclxuICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBjYW4gY29udGFpbiBhIG51bWJlciBvZiBvZmZlcmluZ3MgZGVmaW5lZCBieSB0aGUgY2xhc3MgT1dDOk9mZmVyaW5nICovXHJcbiAgb2ZmZXJpbmdzPzogSU93c09mZmVyaW5nW107XHJcbiAgLyoqIEZsYWcgdmFsdWUgaW5kaWNhdGluZyB0byB0aGUgY2xpZW50IGlmIHRoZSBDb250ZXh0IHJlc291cmNlIHNob3VsZCBiZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdCAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqIFRoaXMgYXJyYXkgaXMgb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBhIGNhdGVnb3J5IHJlbGF0ZWQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gIC8qKiBNaW5pbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtaW5zY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBNYXhpbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtYXhzY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBEZWZpbml0aW9uIG9mIHRoZSBmb2xkZXIgaW4gd2hpY2ggdGhlIHJlc291cmNlIGlzIHBsYWNlZCBcclxuICAqIFRoZSBmb2xkZXIgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgdGhlIGNvbmNlcHQgcHJlc2VudCBpbiBtYW55IGNsaWVudHMgb3Igb3JnYW5pc2luZyBsYXllcnMgaW50byBmb2xkZXJzLlxyXG4gICovXHJcbiAgZm9sZGVyPzogc3RyaW5nO1xyXG4gIC8qKiBUT0RPISEhIGxpbmtzIGlzIGRlZmluZWQgYXMgT2JqZWN0IGJ1dCBpbiB0aGUgZXhhbXBsZXMgYXMgQXJyYXkgICovXHJcbiAgbGlua3M/OiBJT3dzTGlua3NbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEluIHJlYWxpdHkgYSByZXNvdXJjZSBjYW4gYmUgcmVhbGlzZWQgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGFuZCBzbyBhbiBPV0MgZG9jdW1lbnQgYWxsb3dzIHZhcmlvdXMgb3B0aW9ucyB0byBiZSBzcGVjaWZpZWQuXHJcbiAqIFRoZXNlIGFyZSBrbm93biBhcyBvZmZlcmluZ3MuXHJcbiAqIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGVzZSBhcmUsIGFzIGZhciBhcyBpcyBwb3NzaWJsZSBieSB0aGUgZm9ybWF0IHVzZWQsXHJcbiAqIGVxdWl2YWxlbnQgYW5kIG5vIHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIHRoZWlyIG9yZGVyIGluIHRoZSBzdGFuZGFyZC5cclxuICogVGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgYWx0ZXJuYXRpdmVzIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRvIGFsbG93IGl0IHRvIHZpc3VhbGlzZSBvciB1c2UgdGhlIHJlc291cmNlLlxyXG4gKlxyXG4gKiBTbyBmb3IgZXhhbXBsZSBmb3VyIG9mZmVyaW5ncywgYSBXTVMsIGEgV0ZTIHdpdGggcG9ydHJheWFsIGFzIFNMRCwgYW5kIGFuIGlubGluZSBHTUwgT2ZmZXJpbmcgYWdhaW4gd2l0aCBwb3J0cmF5YWwgYXMgU0xELlxyXG4gKiBEaWZmZXJlbnQgY2xpZW50cyBjb3VsZCB1c2UgdGhlc2Ugb2ZmZXJpbmdzIGFzIGFwcHJvcHJpYXRlOlxyXG4gKiAtIGEgc2ltcGxlIGJyb3dzZXIgYmFzZWQgY2xpZW50IGNvdWxkIHVzZSB0aGUgV01TIG9mZmVyaW5nIHByb3ZpZGVkLCB1c2luZyB0aGUgc3RhbmRhcmQgcG9ydHJheWFsXHJcbiAqIC0gYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY2xpZW50LCBjb3VsZCB1c2UgdGhlIFdGUyBvZmZlcmluZyBhbmQgdGhlIGFzc29jaWF0ZWQgU0xEIERvY3VtZW50LlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9mZmVyaW5nLCBzZXJ2aWNlIG9mZmVyaW5ncyBhbmQgZGF0YSBvZmZlcmluZ3MuXHJcbiAqIEEgc2VydmljZSBvZmZlcmluZyBoYXMgYSBzZXJ2aWNlIHJlcXVlc3QgKGluIHRoZSBmb3JtIG9mIGEgY2FwYWJpbGl0aWVzIHJlcXVlc3QgYW5kIGEgZGF0YSByZXF1ZXN0KVxyXG4gKiBhbmQgb3B0aW9uYWwgY29udGVudCBhbmQgc3R5bGluZyBlbGVtZW50cy5cclxuICogQSBkYXRhIG9mZmVyaW5nIGhhcyBhIGNvbnRlbnQgZWxlbWVudCBhbmQgb3B0aW9uYWwgc3R5bGluZyBlbGVtZW50cy5cclxuICpcclxuICpcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVlbXVsdGlwbGUtb2ZmZXJpbmdzLWFuZC1wcmlvcml0eVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT2ZmZXJpbmcge1xyXG4gIC8qKiBFeHRlbnNpb24gT2ZmZXJpbmdzIHdpdGggdHlwZSAtIHN0cmluZyAqL1xyXG4gIGNvZGU6IFdNU19PZmZlcmluZyB8IFdGU19PZmZlcmluZyB8IFdDU19PZmZlcmluZyB8IFdQU19PZmZlcmluZyB8IENTV19PZmZlcmluZyB8IFdNVFNfT2ZmZXJpbmcgfFxyXG4gIEdNTF9PZmZlcmluZyB8IEtNTF9PZmZlcmluZyB8IEdlb1RJRkZfT2ZmZXJpbmcgfCBHTUxKUDJfT2ZmZXJpbmcgfCBHTUxDT1ZfT2ZmZXJpbmcgfCBzdHJpbmc7XHJcbiAgLyoqIFdlYiBTZXJ2aWNlIE9mZmVyaW5ncyBwcm92aWRlIHRoZWlyIG9wZXJhdGlvbnMgKi9cclxuICBvcGVyYXRpb25zPzogSU93c09wZXJhdGlvbltdO1xyXG4gIC8qKiBDb250ZW50IE9mZmVyaW5ncyBhbGxvdyBjb250ZW50IHRvIGJlIGVtYmVkZGVkIGluIGFuIE9XUyBDb250ZXh0IGRvY3VtZW50LiAqL1xyXG4gIGNvbnRlbnRzPzogSU93c0NvbnRlbnRbXTtcclxuICBzdHlsZXM/OiBJT3dzU3R5bGVTZXRbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzQ3JlYXRvciB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0F1dGhvciB7XHJcbiAgLyoqIEVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZW1haWw/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NhdGVnb3JpZSB7XHJcbiAgc2NoZW1lPzogc3RyaW5nO1xyXG4gIC8qKiBDYXRlZ29yeSByZWxhdGVkIHRvIHRoaXMgY29udGV4dCBkb2N1bWVudC4gSXQgTUFZIGhhdmUgYSByZWxhdGVkIGNvZGUtbGlzdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgdGhlIHNjaGVtZSBhdHRyaWJ1dGUgKi9cclxuICB0ZXJtPzogc3RyaW5nO1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPd3NMaW5rcyB7XHJcbiAgcmVsOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIC8qKiBSZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBpbiBhbHRlcm5hdGl2ZSBmb3JtYXQgKi9cclxuICBhbHRlcm5hdGVzPzogc3RyaW5nO1xyXG4gIGxhbmc/OiBMYW5nU3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JBcHBsaWNhdGlvbiB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JEaXNwbGF5IHtcclxuICAvKiogV2lkdGggbWVhc3VyZWQgaW4gcGl4ZWxzIG9mIHRoZSBkaXNwbGF5IHNob3dpbmcgdGhlIEFyZWEgb2YgSW50ZXJlc3QgKi9cclxuICBwaXhlbFdpZHRoPzogbnVtYmVyO1xyXG4gIC8qKiBXaWR0aCBtZWFzdXJlZCBpbiBwaXhlbHMgb2YgdGhlIGRpc3BsYXkgc2hvd2luZyBieSB0aGUgQXJlYSBvZiBJbnRlcmVzdCAqL1xyXG4gIHBpeGVsSGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKiBUaGUgc2l6ZSBvZiBhIHBpeGVsIG9mIHRoZSBkaXNwbGF5IGluIG1pbGltZXRlcnMgXHJcbiAgICogKGNvbWJpbmVkIHdpdGggdGhlIHByZXZpb3VzIG9uZXMgYWxsb3dzIGZvciB0aGUgcmVhbCBkaXNwbGF5IHNpemUgdG8gYmUgY2FsY3VsYXRlZCkgKi9cclxuICBtbVBlclBpeGVsPzogbnVtYmVyO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb3N0IHNlcnZpY2Ugb2ZmZXJpbmdzIGhhdmUgdHdvIG9wZXJhdGlvbnMsIGEg4oCYR2V0Q2FwYWJpbGl0aWVz4oCZIG9wZXJhdGlvbiBhbmQgYSBkYXRhIG9wZXJhdGlvbiBzdWNoIGFzIOKAmEdldE1hcOKAmSBmb3IgV01TIFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT3BlcmF0aW9uIHtcclxuICAvKipcclxuICAgKiBUaGUgY29kZSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG9wZXJhdGlvbi5cclxuICAgKiBWYWxpZCB0eXBlcyBhcmUgZGVmaW5lZCB3aXRoaW4gZWFjaCBzcGVjaWZpYyBleHRlbnNpb24gd2l0aGluIHRoZSBPV1MgQ29udGV4dCBjb25jZXB0dWFsIG1vZGVsIFtPR0MgMTItMDgwXS5cclxuICAgKi9cclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgLyoqIG1ldGhvZCBkZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kLCBmb3IgZXhhbXBsZSBHRVQgb3IgUE9TVC4gKi9cclxuICBtZXRob2Q6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIC8qKiBocmVmIGlzIHRoZSBVUkkgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmVxdWVzdCAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgcmVxdWVzdD86IElPd3NDb250ZW50O1xyXG4gIHJlc3VsdD86IElPd3NDb250ZW50O1xyXG4gIC8qKiBFeHRlbnNpb24gb2YgT3BlcmF0aW9uICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRlbnQge1xyXG4gIC8qKiBNSU1FIHR5cGUgb2YgdGhlIENvbnRlbnQgKi9cclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKiogU3RyaW5nIHR5cGUsIG5vdCBlbXB0eSB0aGF0IGNhbiBjb250YWluIGFueSB0ZXh0IGVuY29kZWQgbWVkaWEgdHlwZSAqL1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzU3R5bGVTZXQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gIGxlZ2VuZFVSTD86IHN0cmluZztcclxuICBjb250ZW50PzogSU93c0NvbnRlbnQ7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcblxyXG4vKiogSVNPLTg2MDEgZm9ybWF0IGUuZy4gWVlZWS1NTS1ERFRoaDptbTpzc1ogb3IgWVlZWS1NTS1ERFRoaDptbTpzc1ovWVlZWS1NTS1ERFRoaDptbTpzc1ogKi9cclxuZXhwb3J0IHR5cGUgRGF0ZVN0cmluZyA9IHN0cmluZztcclxuXHJcblxyXG4vKiogUkZDLTMwNjYgY29kZSBlLmcuIGVuLGRlICovXHJcbmV4cG9ydCB0eXBlIExhbmdTdHJpbmcgPSBzdHJpbmc7XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgV01TX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcycgfFxyXG4gICAgJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMScgfCAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd21zLzEuMS4wJztcclxuZXhwb3J0IHR5cGUgV0ZTX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dmcyc7XHJcbmV4cG9ydCB0eXBlIFdDU19PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG5leHBvcnQgdHlwZSBXUFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd3BzJztcclxuZXhwb3J0IHR5cGUgQ1NXX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbmV4cG9ydCB0eXBlIFdNVFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd210cyc7XHJcbmV4cG9ydCB0eXBlIEdNTF9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWwnO1xyXG5leHBvcnQgdHlwZSBLTUxfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxuZXhwb3J0IHR5cGUgR2VvVElGRl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW90aWZmJztcclxuZXhwb3J0IHR5cGUgR01MSlAyX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbmV4cG9ydCB0eXBlIEdNTENPVl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWxjb3YnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/lib/services-ogc.module.js b/@ukis/esm2015/lib/services-ogc.module.js deleted file mode 100644 index f55b4d618..000000000 --- a/@ukis/esm2015/lib/services-ogc.module.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { NgModule } from '@angular/core'; -import { OwcJsonService } from './owc/owc-json.service'; -import { WmtsClientService } from './wmts/wmtsclient.service'; -import { WpsClient } from './wps/wpsclient'; -export class ServicesOgcModule { -} -ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } -]; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMtb2djLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUTVDLE1BQU0sT0FBTyxpQkFBaUI7OztZQU43QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUM7YUFDMUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPd2NKc29uU2VydmljZSB9IGZyb20gJy4vb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4vd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXcHNDbGllbnQgfSBmcm9tICcuL3dwcy93cHNjbGllbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtdLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIGV4cG9ydHM6IFtdLFxyXG4gIHByb3ZpZGVyczogW093Y0pzb25TZXJ2aWNlLCBXbXRzQ2xpZW50U2VydmljZSwgV3BzQ2xpZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VydmljZXNPZ2NNb2R1bGUgeyB9XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm2015/lib/wmts/wmtsclient.service.js b/@ukis/esm2015/lib/wmts/wmtsclient.service.js deleted file mode 100644 index 45c6becf5..000000000 --- a/@ukis/esm2015/lib/wmts/wmtsclient.service.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map } from 'rxjs/operators'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/common/http"; -/** @type {?} */ -const XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0'; -/** @type {?} */ -const SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0; -import * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language'; -/** @type {?} */ -const SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language; -import * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1'; -/** @type {?} */ -const GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1; -import * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0'; -/** @type {?} */ -const WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0; -export class WmtsClientService { - /** - * @param {?} http - */ - constructor(http) { - this.http = http; - /** @type {?} */ - const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - getCapabilities(url, version = '1.1.0') { - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`; - /** @type {?} */ - const headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - response => { - return this.xmlunmarshaller.unmarshalString(response); - }))); - } -} -WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -WmtsClientService.ctorParameters = () => [ - { type: HttpClient } -]; -/** @nocollapse */ WmtsClientService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(i0.ɵɵinject(i1.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210c2NsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOzs7O01BQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7TUFDekQsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0MsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDBCQUEwQixDQUFDOztNQUN2RCxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUTtBQUMxQyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sbUNBQW1DLENBQUM7O01BQ3pFLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDLGlCQUFpQjtBQUNyRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O01BQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7TUFDdkQsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVE7QUFPMUMsTUFBTSxPQUFPLGlCQUFpQjs7OztJQUsxQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZOztjQUMxQixPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzs7Ozs7SUFFTSxlQUFlLENBQUUsR0FBVyxFQUFFLE9BQU8sR0FBRyxPQUFPOzs7Y0FFNUMsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLGlEQUFpRCxPQUFPLEVBQUU7O2NBQ3JGLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsR0FBRzs7OztRQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7O1lBMUJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7OztZQXJCUSxVQUFVOzs7Ozs7OztJQXdCZiwwQ0FBc0I7Ozs7O0lBQ3RCLDRDQUF3Qjs7Ozs7SUFFWixpQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEpzb25peCB9IGZyb20gJ0Bib3VuZGxlc3NnZW8vanNvbml4JztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgKiBhcyBYTGlua18xXzBfRmFjdG9yeSBmcm9tICd3M2Mtc2NoZW1hcy9saWIvWExpbmtfMV8wJztcclxuY29uc3QgWExpbmtfMV8wID0gWExpbmtfMV8wX0ZhY3RvcnkuWExpbmtfMV8wO1xyXG5pbXBvcnQgKiBhcyBPV1NfMV8xXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvT1dTXzFfMV8wJztcclxuY29uc3QgT1dTXzFfMV8wID0gT1dTXzFfMV8wX0ZhY3RvcnkuT1dTXzFfMV8wO1xyXG5pbXBvcnQgKiBhcyBTTUlMXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9TTUlMXzJfMCc7XHJcbmNvbnN0IFNNSUxfMl8wID0gU01JTF8yXzBfRmFjdG9yeS5TTUlMXzJfMDtcclxuaW1wb3J0ICogYXMgU01JTF8yXzBfTGFuZ3VhZ2VfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvU01JTF8yXzBfTGFuZ3VhZ2UnO1xyXG5jb25zdCBTTUlMXzJfMF9MYW5ndWFnZSA9IFNNSUxfMl8wX0xhbmd1YWdlX0ZhY3RvcnkuU01JTF8yXzBfTGFuZ3VhZ2U7XHJcbmltcG9ydCAqIGFzIEdNTF8zXzFfMV9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9HTUxfM18xXzEnO1xyXG5jb25zdCBHTUxfM18xXzEgPSBHTUxfM18xXzFfRmFjdG9yeS5HTUxfM18xXzE7XHJcbmltcG9ydCAqIGFzIFdNVFNfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dNVFNfMV8wJztcclxuY29uc3QgV01UU18xXzAgPSBXTVRTXzFfMF9GYWN0b3J5LldNVFNfMV8wO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdtdHNDbGllbnRTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHhtbG1hcnNoYWxsZXI7XHJcbiAgICBwcml2YXRlIHhtbHVubWFyc2hhbGxlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEpzb25peC5Db250ZXh0KFtTTUlMXzJfMCwgU01JTF8yXzBfTGFuZ3VhZ2UsIEdNTF8zXzFfMSwgWExpbmtfMV8wLCBPV1NfMV8xXzAsIFdNVFNfMV8wXSk7XHJcbiAgICAgICAgdGhpcy54bWx1bm1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpO1xyXG4gICAgICAgIHRoaXMueG1sbWFyc2hhbGxlciA9IGNvbnRleHQuY3JlYXRlTWFyc2hhbGxlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYXBhYmlsaXRpZXMgKHVybDogc3RyaW5nLCB2ZXJzaW9uID0gJzEuMS4wJyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XHJcbiAgICAgICAgLy8gZXhhbXBsZTogaHR0cHM6Ly90aWxlcy5nZW9zZXJ2aWNlLmRsci5kZS9zZXJ2aWNlL3dtdHM/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0Q2FwYWJpbGl0aWVzJlZFUlNJT049MS4xLjBcclxuICAgICAgICBjb25zdCBnZXRDYXBhYmlsaXRpZXNVcmwgPSBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7dmVyc2lvbn1gO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJyxcclxuICAgICAgICAgICAgJ0FjY2VwdCc6ICd0ZXh0L3htbCwgYXBwbGljYXRpb24veG1sJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGdldENhcGFiaWxpdGllc1VybCwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn0iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/cache.js b/@ukis/esm2015/lib/wps/cache.js deleted file mode 100644 index 3ddf364c3..000000000 --- a/@ukis/esm2015/lib/wps/cache.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { of } from "rxjs"; -/** - * @record - */ -export function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -export class FakeCache { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - set(input, output) { - } - /** - * @param {?} input - * @return {?} - */ - get(input) { - return of(null); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUd0QywyQkFHQzs7Ozs7OztJQUZHLG1EQUFzQzs7Ozs7SUFDdEMsMkNBQWlEOztBQUdyRCxNQUFNLE9BQU8sU0FBUzs7Ozs7O0lBQ2xCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBaUI7SUFDcEMsQ0FBQzs7Ozs7SUFFRCxHQUFHLENBQUMsS0FBYTtRQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc0RhdGEgfSBmcm9tIFwiLi93cHNfZGF0YXR5cGVzXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlIHtcclxuICAgIHNldChpbnB1dDogb2JqZWN0LCBvdXRwdXQ6IFdwc0RhdGFbXSk7XHJcbiAgICBnZXQoaW5wdXQ6IG9iamVjdCk6IE9ic2VydmFibGU8V3BzRGF0YVtdIHwgbnVsbD47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGYWtlQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XHJcbiAgICBzZXQoaW5wdXQ6IG9iamVjdCwgb3V0cHV0OiBXcHNEYXRhW10pIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaW5wdXQ6IG9iamVjdCk6IE9ic2VydmFibGU8V3BzRGF0YVtdIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/utils/polling.js b/@ukis/esm2015/lib/wps/utils/polling.js deleted file mode 100644 index e929eaf3a..000000000 --- a/@ukis/esm2015/lib/wps/utils/polling.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { timer, of, forkJoin } from 'rxjs'; -import { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators'; -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -export function pollUntil(task$, predicate, doWhile, minWaitTime = 1000) { - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - const tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - (r) => { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - const requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - r => r[0]))); - /** @type {?} */ - const polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - (response) => { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -export function delayedRetry(delayMs, maxRetries = 3) { - /** @type {?} */ - let attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - (src$) => { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - (error$) => { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - (error) => { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvdXRpbHMvcG9sbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFLdEUsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBb0IsRUFBRSxTQUFvQyxFQUFFLE9BQThCLEVBQUUsY0FBc0IsSUFBSTtJQUV0SCxJQUFJLE9BQU8sRUFBRTtRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqQjs7VUFFSyxXQUFXLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQ3pDLEdBQUc7Ozs7SUFBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ1gsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDZDtJQUNMLENBQUMsRUFBQyxDQUNMOztVQUVLLG9CQUFvQixHQUFrQixRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRzs7OztJQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQ2pCOztVQUVLLGNBQWMsR0FBa0Isb0JBQW9CLENBQUMsSUFBSSxDQUMzRCxRQUFROzs7O0lBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN2QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixzREFBc0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILHFFQUFxRTtZQUNyRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNMLENBQUMsRUFBQyxDQUNMO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLEVBQUUsVUFBVSxHQUFHLENBQUM7O1FBQ3BELFFBQVEsR0FBRyxDQUFDO0lBRWhCOzs7O0lBQU8sQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSTtRQUNaLHlCQUF5QjtRQUN6QixTQUFTOzs7O1FBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUU7WUFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7WUFDaEUsUUFBUTs7OztZQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtvQkFDdEMsbURBQW1EO29CQUNuRCxNQUFNLEtBQUssQ0FBQztpQkFDZjtxQkFBTSxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUU7b0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQztvQkFDZCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtpQkFDckU7cUJBQU07b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDO29CQUM3RSxNQUFNLEtBQUssQ0FBQyxDQUFDLDZDQUE2QztpQkFDN0Q7WUFDTCxDQUFDLEVBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxFQUFDLENBQ0wsQ0FBQztJQUNOLENBQUMsRUFBQztBQUVOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aW1lciwgb2YsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBtZXJnZU1hcCwgcmV0cnlXaGVuLCBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb2xsVW50aWw8VD4oXHJcbiAgICB0YXNrJDogT2JzZXJ2YWJsZTxUPiwgcHJlZGljYXRlOiAocmVzdWx0czogYW55KSA9PiBib29sZWFuLCBkb1doaWxlPzogKHQ6IFQgfCBudWxsKSA9PiBhbnksIG1pbldhaXRUaW1lOiBudW1iZXIgPSAxMDAwKTogT2JzZXJ2YWJsZTxUPiB7XHJcblxyXG4gICAgaWYgKGRvV2hpbGUpIHtcclxuICAgICAgICBkb1doaWxlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcHBlZFRhc2skOiBPYnNlcnZhYmxlPFQ+ID0gdGFzayQucGlwZShcclxuICAgICAgICB0YXAoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9XaGlsZSkge1xyXG4gICAgICAgICAgICAgICAgZG9XaGlsZShyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RUYWtlc0F0TGVhc3QkOiBPYnNlcnZhYmxlPFQ+ID0gZm9ya0pvaW4odGFwcGVkVGFzayQsIHRpbWVyKG1pbldhaXRUaW1lKSkucGlwZShcclxuICAgICAgICBtYXAociA9PiByWzBdKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwb2xsZWRSZXF1ZXN0JDogT2JzZXJ2YWJsZTxUPiA9IHJlcXVlc3RUYWtlc0F0TGVhc3QkLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvYnRhaW5lZCBjb3JyZWN0IGFuc3dlciAke3Jlc3BvbnNlfWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvYnRhaW5lZCBmYWxzZSBhbnN3ZXIgJHtyZXNwb25zZX0uIHRyeWluZyBhZ2Fpbi4uLmApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlZFJlcXVlc3QkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHBvbGxlZFJlcXVlc3QkO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5ZWRSZXRyeShkZWxheU1zOiBudW1iZXIsIG1heFJldHJpZXMgPSAzKSB7XHJcbiAgICBsZXQgYXR0ZW1wdHMgPSAxO1xyXG5cclxuICAgIHJldHVybiAoc3JjJDogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNyYyQucGlwZShcclxuICAgICAgICAgICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJzIC4uLlxyXG4gICAgICAgICAgICByZXRyeVdoZW4oKGVycm9yJDogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoZGVsYXlNcyksIC8vIDwtIGluIGFueSBjYXNlLCBmaXJzdCB3YWl0IGEgbGl0dGxlIHdoaWxlIC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlTWFwKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBzZXJ2ZXIgZXJyb3IsIHJlcGVhdGluZyB3b24ndCBoZWxwLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ZW1wdHMgPD0gbWF4UmV0cmllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2h0dHAtZXJyb3IuIFJldHJ5aW5nIC4uLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihlcnJvcik7IC8vIDwtIGFuIG9ic2VydmFibGUgY2F1c2VzIHJlcXVlc3QgdG8gYmUgcmV0cmllZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFBlcnNpc3RlbnQgaHR0cC1lcnJvcnMgYWZ0ZXIgJHthdHRlbXB0c30gYXR0ZW1wdHMuIEdpdmluZyB1cC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yOyAvLyBhbiBlcnJvciBjYXVzZXMgcmVxdWVzdCB0byBiZSBnaXZlbiB1cCBvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG5cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js b/@ukis/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js deleted file mode 100644 index 300be3f2a..000000000 --- a/@ukis/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js +++ /dev/null @@ -1,422 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export class WpsMarshaller100 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - process => { - out.push({ - id: process.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - for (const output of responseJson.value.processOutputs.output) { - /** @type {?} */ - const isReference = output.reference ? true : false; - /** @type {?} */ - let datatype; - /** @type {?} */ - let data; - /** @type {?} */ - let format; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @return {?} - */ - unmarshalOutputData(data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - cont => JSON.parse(cont))); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - const response = responseJson.value; - /** @type {?} */ - const status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - const state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - const wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - const bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - marshalResponseForm(outputs, async = false) { - /** @type {?} */ - const outputDefinitions = []; - for (const output of outputs) { - /** @type {?} */ - let defType; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `); - } - outputDefinitions.push(defType); - } - /** @type {?} */ - const responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - const form = { - responseDocument - }; - return form; - } - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - marshalInputs(inputArr) { - /** @type {?} */ - const theInputs = []; - for (const inp of inputArr) { - if (inp.value === null || inp.value === undefined) { - throw new Error(`Value for input ${inp.description.id} is not set`); - } - /** @type {?} */ - const marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - /** @type {?} */ - const inputs = { - input: theInputs - }; - return inputs; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalInput(input) { - /** @type {?} */ - const id = input.description.id; - /** @type {?} */ - const title = input.description.id; - /** @type {?} */ - const abstract = ''; - /** @type {?} */ - const inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalDataInput(input) { - /** @type {?} */ - let data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - const values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`); - } - return data; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalReferenceInput(input) { - /** @type {?} */ - const ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} processId - * @return {?} - */ - marshalDismissBody(processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMS4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sT0FBTyxnQkFBZ0I7SUFFekIsZ0JBQWdCLENBQUM7Ozs7O0lBRWpCLGtCQUFrQixDQUFDLE9BQWU7UUFDOUIsT0FBTyxHQUFHLE9BQU8sb0RBQW9ELENBQUM7SUFDMUUsQ0FBQzs7Ozs7O0lBRUQsVUFBVSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFPLEdBQUcsT0FBTyx5REFBeUQsU0FBUyxFQUFFLENBQUM7SUFDMUYsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxZQUFpQzs7Y0FDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSzthQUMvQixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7Ozs7O0lBRUQsNEJBQTRCLENBQUMsWUFBaUMsRUFBRSxHQUFXLEVBQUUsU0FBaUIsRUFDMUYsTUFBa0IsRUFBRSxrQkFBMEM7O2NBRXhELEdBQUcsR0FBZ0IsRUFBRTtRQUUzQixJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFdBQVc7WUFDdEQsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDTCxXQUFXLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO29CQUMvQyxTQUFTLEVBQUUsSUFB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LENBQUM7Ozs7OztJQUVTLHFCQUFxQixDQUFDLEtBQWU7O2NBQ3JDLEdBQUcsR0FBdUI7WUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTTtTQUNyQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFnQjtRQUN4RSx5REFBeUQ7UUFDekQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDOzs7Ozs7O0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDckUseURBQXlEO1FBQ3pELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUVELFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMxRDtnR0FDd0Y7UUFDeEYsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7O0lBRUQsa0JBQWtCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7Ozs7SUFFRCx3QkFBd0IsQ0FBQyxZQUFpQixFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzUmVzdWx0LCBXcHNDYXBhYmlsaXR5LCBXcHNCYm94VmFsdWUsIFdwc0RhdGEsIFdwc0RhdGFEZXNjcmlwdGlvbiwgV3BzU3RhdGUsIFdwc0RhdGFGb3JtYXQgfSBmcm9tICcuLi93cHNfZGF0YXR5cGVzJztcclxuaW1wb3J0IHtcclxuICAgIFdQU0NhcGFiaWxpdGllc1R5cGUsIElXcHNFeGVjdXRlUHJvY2Vzc0JvZHksIEV4ZWN1dGUsIERhdGFJbnB1dHNUeXBlLFxyXG4gICAgSW5wdXRUeXBlLCBSZXNwb25zZUZvcm1UeXBlLCBEYXRhVHlwZSwgSVdwc0V4ZWN1dGVSZXNwb25zZSwgRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZSxcclxuICAgIFJlc3BvbnNlRG9jdW1lbnRUeXBlLCBJbnB1dFJlZmVyZW5jZVR5cGUsIExpdGVyYWxEYXRhVHlwZSwgRXhlY3V0ZVJlc3BvbnNlXHJcbn0gZnJvbSAnLi93cHNfMS4wLjAnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgV3BzTWFyc2hhbGxlcjEwMCBpbXBsZW1lbnRzIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzVXJsKGJhc2V1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2Jhc2V1cmx9P3NlcnZpY2U9V1BTJnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzJnZlcnNpb249MS4wLjBgO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGVVcmwoYmFzZXVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2Jhc2V1cmx9P3NlcnZpY2U9V1BTJnJlcXVlc3Q9RXhlY3V0ZSZ2ZXJzaW9uPTEuMC4wJmlkZW50aWZpZXI9JHtwcm9jZXNzSWR9YDtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzOiBXUFNDYXBhYmlsaXRpZXNUeXBlKTogV3BzQ2FwYWJpbGl0eVtdIHtcclxuICAgICAgICBjb25zdCBvdXQ6IFdwc0NhcGFiaWxpdHlbXSA9IFtdO1xyXG4gICAgICAgIGNhcGFiaWxpdGllcy5wcm9jZXNzT2ZmZXJpbmdzLnByb2Nlc3MuZm9yRWFjaChwcm9jZXNzID0+IHtcclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHByb2Nlc3MuaWRlbnRpZmllci52YWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBJV3BzRXhlY3V0ZVJlc3BvbnNlLCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IG91dDogV3BzUmVzdWx0W10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXMucHJvY2Vzc0ZhaWxlZCkgeyAvLyBGYWlsdXJlP1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXNMb2NhdGlvblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzT3V0cHV0cykgeyAvLyBzeW5jaHJvbm91cyByZXF1ZXN0P1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzc091dHB1dHMub3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IG91dHB1dC5yZWZlcmVuY2UgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGF0eXBlOiAnbGl0ZXJhbCcgfCAnY29tcGxleCcgfCAnYmJveCcgfCAnc3RhdHVzJyB8ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQ6IFdwc0RhdGFGb3JtYXQgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0LnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2NvbXBsZXgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvdXRwdXQucmVmZXJlbmNlLmhyZWYgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQucmVmZXJlbmNlLm1pbWVUeXBlIGFzIFdwc0RhdGFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXQuZGF0YSAmJiBvdXRwdXQuZGF0YS5saXRlcmFsRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSA9ICdsaXRlcmFsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gb3V0cHV0LmRhdGEubGl0ZXJhbERhdGEuZGF0YVR5cGUgYXMgV3BzRGF0YUZvcm1hdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dHB1dC5kYXRhICYmIG91dHB1dC5kYXRhLmNvbXBsZXhEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2NvbXBsZXgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQuZGF0YS5jb21wbGV4RGF0YS5taW1lVHlwZSBhcyBXcHNEYXRhRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2Jib3gnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy51bm1hcnNoYWxPdXRwdXREYXRhKG91dHB1dC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG91dHB1dC5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiBpc1JlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YXR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXNMb2NhdGlvbikgeyAvLyBhc3luY2hyb25vdXMgcmVxdWVzdD9cclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcmVzcG9uc2VKc29uLnZhbHVlLnByb2Nlc3MuaWRlbnRpZmllci52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0YXR1cydcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVubWFyc2hhbE91dHB1dERhdGEoZGF0YTogRGF0YVR5cGUpOiBhbnkge1xyXG4gICAgICAgIGlmIChkYXRhLmNvbXBsZXhEYXRhKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5jb21wbGV4RGF0YS5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLmdlbytqc29uJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnQubWFwKGNvbnQgPT4gSlNPTi5wYXJzZShjb250KSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi9XTVMnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZGF0YS5jb21wbGV4RGF0YS5jb250ZW50WzBdKTsgLy8gQFRPRE86IGJldHRlcjogaGFuZGxlIGFjdHVhbCB4bWwtZGF0YVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1bm1hcnNoYWwgZGF0YSBvZiBmb3JtYXQgJHtkYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxpdGVyYWxEYXRhKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5saXRlcmFsRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGl0ZXJhbERhdGEudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHtkYXRhfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNEYXRhW10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBXcHNTdGF0ZSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UgPSByZXNwb25zZUpzb24udmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NTdWNjZWVkZWQgPyAnU3VjY2VlZGVkJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NBY2NlcHRlZCA/ICdBY2NlcHRlZCcgOlxyXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cy5wcm9jZXNzU3RhcnRlZCA/ICdSdW5uaW5nJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NGYWlsZWQgPyAnRmFpbGVkJyA6XHJcbiAgICAgICAgJ0ZhaWxlZCc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgc3RhdHVzTG9jYXRpb246IHJlc3BvbnNlLnN0YXR1c0xvY2F0aW9uLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5wcm9jZXNzT3V0cHV0cyAmJiByZXNwb25zZS5wcm9jZXNzT3V0cHV0cy5vdXRwdXQpIHtcclxuICAgICAgICAgICAgc3RhdGUucmVzdWx0cyA9IHRoaXMudW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb24sIHNlcnZlclVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jOiBib29sZWFuKTogSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHdwczFJbnB1dHMgPSB0aGlzLm1hcnNoYWxJbnB1dHMoaW5wdXRzKTtcclxuICAgICAgICBjb25zdCB3cHMxUmVzcG9uc2VGb3JtID0gdGhpcy5tYXJzaGFsUmVzcG9uc2VGb3JtKG91dHB1dHMsIGFzeW5jKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keVZhbHVlOiBFeGVjdXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhSW5wdXRzOiB3cHMxSW5wdXRzLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBwcm9jZXNzSWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlRm9ybTogd3BzMVJlc3BvbnNlRm9ybSxcclxuICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBib2R5OiBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjB9RXhlY3V0ZScsXHJcbiAgICAgICAgICAgICAgICBsb2NhbFBhcnQ6ICdFeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzEuMC4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjB9d3BzOkV4ZWN1dGUnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBib2R5VmFsdWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBtYXJzaGFsUmVzcG9uc2VGb3JtKG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jID0gZmFsc2UpOiBSZXNwb25zZUZvcm1UeXBlIHtcclxuXHJcbiAgICAgICAgY29uc3Qgb3V0cHV0RGVmaW5pdGlvbnM6IERvY3VtZW50T3V0cHV0RGVmaW5pdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcclxuICAgICAgICAgICAgbGV0IGRlZlR5cGU6IERvY3VtZW50T3V0cHV0RGVmaW5pdGlvblR5cGU7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3V0cHV0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpdGVyYWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIGRlZlR5cGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IG91dHB1dC5pZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1JlZmVyZW5jZTogb3V0cHV0LnJlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IG91dHB1dC5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxleCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogb3V0cHV0LmlkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUmVmZXJlbmNlOiBvdXRwdXQucmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogb3V0cHV0LmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBXcHMtb3V0cHV0dHlwZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0ISAke291dHB1dH0gYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0RGVmaW5pdGlvbnMucHVzaChkZWZUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRG9jdW1lbnQ6IFJlc3BvbnNlRG9jdW1lbnRUeXBlID0ge1xyXG4gICAgICAgICAgICBvdXRwdXQ6IG91dHB1dERlZmluaXRpb25zLFxyXG4gICAgICAgICAgICBzdGF0dXM6IGFzeW5jID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdG9yZUV4ZWN1dGVSZXNwb25zZTogYXN5bmMgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtOiBSZXNwb25zZUZvcm1UeXBlID0ge1xyXG4gICAgICAgICAgICByZXNwb25zZURvY3VtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxJbnB1dHMoaW5wdXRBcnI6IFdwc0lucHV0W10pOiBEYXRhSW5wdXRzVHlwZSB7XHJcbiAgICAgICAgY29uc3QgdGhlSW5wdXRzOiBJbnB1dFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5wIG9mIGlucHV0QXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnAudmFsdWUgPT09IG51bGwgfHwgaW5wLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgZm9yIGlucHV0ICR7aW5wLmRlc2NyaXB0aW9uLmlkfSBpcyBub3Qgc2V0YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbWFyc2hhbGxlZElucHV0ID0gdGhpcy5tYXJzaGFsSW5wdXQoaW5wKTtcclxuICAgICAgICAgICAgdGhlSW5wdXRzLnB1c2gobWFyc2hhbGxlZElucHV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRzOiBEYXRhSW5wdXRzVHlwZSA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHRoZUlucHV0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGlucHV0cztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbElucHV0KGlucHV0OiBXcHNJbnB1dCk6IElucHV0VHlwZSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBpbnB1dC5kZXNjcmlwdGlvbi5pZDtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IGlucHV0LmRlc2NyaXB0aW9uLmlkO1xyXG4gICAgICAgIGNvbnN0IGFic3RyYWN0ID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0VHlwZTogSW5wdXRUeXBlID0ge1xyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiB7IHZhbHVlOiBpZCB9LFxyXG4gICAgICAgICAgICB0aXRsZTogeyB2YWx1ZTogdGl0bGUgfSxcclxuICAgICAgICAgICAgX2Fic3RyYWN0OiB7IHZhbHVlOiBhYnN0cmFjdCB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uLnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICBpbnB1dFR5cGUucmVmZXJlbmNlID0gdGhpcy5tYXJzaGFsUmVmZXJlbmNlSW5wdXQoaW5wdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0VHlwZS5kYXRhID0gdGhpcy5tYXJzaGFsRGF0YUlucHV0KGlucHV0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbnB1dFR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxEYXRhSW5wdXQoaW5wdXQ6IFdwc0lucHV0KTogRGF0YVR5cGUge1xyXG4gICAgICAgIGxldCBkYXRhOiBEYXRhVHlwZTtcclxuICAgICAgICBzd2l0Y2ggKGlucHV0LmRlc2NyaXB0aW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpdGVyYWxEYXRhOiB7IHZhbHVlOiBTdHJpbmcoaW5wdXQudmFsdWUpIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmJveCc6XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXM6IFdwc0Jib3hWYWx1ZSA9IGlucHV0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0JveERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJDb3JuZXI6IFt2YWx1ZXMubGxsYXQsIHZhbHVlcy5sbGxvbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyQ29ybmVyOiBbdmFsdWVzLnVybGF0LCB2YWx1ZXMudXJsb25dXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb21wbGV4JzpcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dC94bWwnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbaW5wdXQudmFsdWVdLCAgLy8gQFRPRE86IHdlIGFzc3VtZSBoZXJlIHRoYXQgdGV4dC94bWwtZGF0YSBpcyBhbHJlYWR5IHN0cmluZ2lmaWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGlucHV0LmRlc2NyaXB0aW9uLmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbSlNPTi5zdHJpbmdpZnkoaW5wdXQudmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBUaGlzIGlucHV0IGlzIG9mIHR5cGUgJHtpbnB1dC5kZXNjcmlwdGlvbi50eXBlfS4gV2UgY2FuIG9ubHkgbWFyc2hhbCBpbnB1dCBvZiB0eXBlIGxpdGVyYWwsIGJib3ggb3IgY29tcGxleC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxSZWZlcmVuY2VJbnB1dChpbnB1dDogV3BzSW5wdXQpOiBJbnB1dFJlZmVyZW5jZVR5cGUge1xyXG4gICAgICAgIGNvbnN0IHJlZjogSW5wdXRSZWZlcmVuY2VUeXBlID0ge1xyXG4gICAgICAgICAgICBocmVmOiBpbnB1dC52YWx1ZSxcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgbWltZVR5cGU6IGlucHV0LmRlc2NyaXB0aW9uLmZvcm1hdFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJlZjtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gV1BTLTEuMCBkb2VzIG5vdCBzZW5kIGEgYm9keSB3aXRoIGEgR2V0U3RhdHVzIHJlcXVlc3QuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklEOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBXUFMtMS4wIGRvZXMgbm90IHNlbmQgYSBib2R5IHdpdGggYSBHZXRTdGF0dXMgcmVxdWVzdC5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzc1VybChzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8qKiB0aGlzIGRvZXMgb25seSB3b3JrIGluIGdlb3NlcnZlcjpcclxuICAgICAgICByZXR1cm4gYCR7c2VydmVyVXJsfT9zZXJ2aWNlPVdQUyZ2ZXJzaW9uPTEuMC4wJnJlcXVlc3Q9RGlzbWlzcyZleGVjdXRpb25JZD0ke2pvYklkfWA7ICovXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcHMgMS4wIGRvZXMgbm90IHN1cHBvcnQgRGlzbWlzcy1vcGVyYXRpb25zLicpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShwcm9jZXNzSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV3BzIDEuMCBkb2VzIG5vdCBzdXBwb3J0IERpc21pc3Mtb3BlcmF0aW9ucy4nKTtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxEaXNtaXNzUmVzcG9uc2UoanNvblJlc3BvbnNlOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dwcyAxLjAgZG9lcyBub3Qgc3VwcG9ydCBEaXNtaXNzLW9wZXJhdGlvbnMuJyk7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/wps200/helpers.js b/@ukis/esm2015/lib/wps/wps200/helpers.js deleted file mode 100644 index 938cfe509..000000000 --- a/@ukis/esm2015/lib/wps/wps200/helpers.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -export const isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -export const isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -export const isResult = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzMjAwL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsTUFBTSxPQUFPLFlBQVk7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBcUIsRUFBRTtJQUMzRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1dBQzVCLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFBOztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBeUIsRUFBRTtJQUNuRSxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUE7O0FBRUQsTUFBTSxPQUFPLFFBQVE7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBaUIsRUFBRTtJQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNJbmZvLCBEYXRhT3V0cHV0VHlwZSwgUmVzdWx0IH0gZnJvbSAnLi93cHNfMi4wJztcclxuXHJcblxyXG5leHBvcnQgY29uc3QgaXNTdGF0dXNJbmZvID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFN0YXR1c0luZm8gPT4ge1xyXG4gICAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKVxyXG4gICAgICAgJiYgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXMnKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0RhdGFPdXRwdXRUeXBlID0gKG9iajogb2JqZWN0KTogb2JqIGlzIERhdGFPdXRwdXRUeXBlID0+IHtcclxuICAgIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2lkJykgJiZcclxuICAgICAgICAob2JqLmhhc093blByb3BlcnR5KCdkYXRhJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdyZWZlcmVuY2UnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3VsdCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBSZXN1bHQgPT4ge1xyXG4gICAgcmV0dXJuIChvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpICYmIHR5cGVvZiBvYmpbJ291dHB1dCddID09PSAnb2JqZWN0Jyk7XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js b/@ukis/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js deleted file mode 100644 index 782d57ac8..000000000 --- a/@ukis/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js +++ /dev/null @@ -1,351 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { isStatusInfo, isResult } from './helpers'; -export class WpsMarshaller200 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - summary => { - out.push({ - id: summary.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (isResult(responseJson.value)) { - for (const output of responseJson.value.output) { - /** @type {?} */ - const outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - od => od.id === output.id)); - if (!outputDescription) { - throw new Error(`Could not find an output-description for the parameter ${output.id}.`); - } - /** @type {?} */ - const isReference = outputDescription.reference; - /** @type {?} */ - const datatype = outputDescription.type; - /** @type {?} */ - const format = outputDescription.format; - /** @type {?} */ - let data; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error(`Output has neither reference nor data field.`); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - unmarshalOutputData(data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - (cont) => JSON.parse(cont))); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error(`Not a status-info: ${responseJson}`); - } - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - const outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - const bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @private - * @param {?} inputs - * @return {?} - */ - marshalInputs(inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - i => { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - } - /** - * @private - * @param {?} outputs - * @return {?} - */ - marshalOutputs(outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - o => { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - return serverUrl; - } - /** - * @param {?} jobId - * @return {?} - */ - marshalDismissBody(jobId) { - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - /** @type {?} */ - const state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMi4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBb0IsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUdyRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLGdCQUFlLENBQUM7Ozs7O0lBRWhCLGtCQUFrQixDQUFDLE9BQWU7UUFDOUIsT0FBTyxHQUFHLE9BQU8sb0RBQW9ELENBQUM7SUFDMUUsQ0FBQzs7Ozs7O0lBRUQsVUFBVSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFPLEdBQUcsT0FBTyx5REFBeUQsU0FBUyxFQUFFLENBQUM7SUFDMUYsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxZQUFpQzs7Y0FDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU87Ozs7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNuRCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUs7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7Ozs7OztJQUVELDRCQUE0QixDQUFDLFlBQWlDLEVBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQzFGLE1BQWtCLEVBQUUsa0JBQTBDOztjQUN4RCxHQUFHLEdBQWdCLEVBQUU7UUFFM0IsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7O3NCQUN0QyxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJOzs7O2dCQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFDO2dCQUM1RSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMzRjs7c0JBRUssV0FBVyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7O3NCQUN6QyxRQUFRLEdBQUcsaUJBQWlCLENBQUMsSUFBSTs7c0JBQ2pDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNOztvQkFDbkMsSUFBSTtnQkFDUixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ2xCLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7aUJBQ3hDO3FCQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDcEIsSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7aUJBQ25FO3FCQUFNO29CQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztpQkFDbkU7Z0JBRUQsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDTCxXQUFXLEVBQUU7d0JBQ1QsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO3dCQUNiLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixJQUFJLEVBQUUsUUFBUTtxQkFDakI7b0JBQ0QsS0FBSyxFQUFFLElBQUk7aUJBQ2QsQ0FBQyxDQUFDO2FBQ047U0FDSjthQUFNLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTs7a0JBQ25DLEtBQUssR0FBYTtnQkFDcEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztnQkFDL0IsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7YUFDeEQ7WUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNMLFdBQVcsRUFBRTtvQkFDVCxFQUFFLEVBQUUsU0FBUztvQkFDYixTQUFTLEVBQUUsSUFBSTtvQkFDZixJQUFJLEVBQUUsUUFBUTtpQkFDakI7Z0JBQ0QsS0FBSyxFQUFFLEtBQUs7YUFDZixDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7OztJQUVTLG1CQUFtQixDQUFDLElBQVUsRUFBRSxXQUFpQztRQUN2RSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ2hDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsS0FBSywwQkFBMEIsQ0FBQztnQkFDaEMsS0FBSyxrQkFBa0I7b0JBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHOzs7O29CQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUM7Z0JBQzdELEtBQUssaUJBQWlCO29CQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLEtBQUssVUFBVTtvQkFDWCxPQUFPLElBQUksYUFBYSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO2dCQUMzRztvQkFDSSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUNuRjtTQUNKO2FBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDdkI7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Ozs7Ozs7OztJQUVELDZCQUE2QixDQUFDLFlBQWlCLEVBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQUUsTUFBaUIsRUFBRSxrQkFBd0M7UUFDeEksT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDcEcsQ0FBQzs7Ozs7Ozs7O0lBRUQseUJBQXlCLENBQUMsWUFBaUIsRUFBRSxTQUFpQixFQUFFLFNBQWlCLEVBQzdFLE1BQWlCLEVBQUUsa0JBQXdDO1FBQzNELElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTs7a0JBQzVCLEtBQUssR0FBYTtnQkFDcEIsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztnQkFDL0IsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7YUFDeEQ7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUN6RDtJQUNMLENBQUM7Ozs7Ozs7O0lBRUQsZUFBZSxDQUFDLFNBQWlCLEVBQUUsTUFBa0IsRUFBRSxPQUErQixFQUFFLEtBQWM7O2NBQzVGLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDOztjQUM3QyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQzs7Y0FFaEQsU0FBUyxHQUF1QjtZQUNsQyxTQUFTLEVBQUUsNEJBQTRCO1lBQ3ZDLE9BQU8sRUFBRSxLQUFLO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtZQUNoQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE1BQU0sRUFBRSxpQkFBaUI7WUFDekIsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQzlCLFFBQVEsRUFBRSxVQUFVO1NBQ3ZCOztjQUVLLElBQUksR0FBMkI7WUFDakMsSUFBSSxFQUFFO2dCQUNGLEdBQUcsRUFBRSx5Q0FBeUM7Z0JBQzlDLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixZQUFZLEVBQUUsZ0NBQWdDO2dCQUM5QyxNQUFNLEVBQUUsS0FBSztnQkFDYixNQUFNLEVBQUUsNkNBQTZDO2FBQ3hEO1lBQ0QsS0FBSyxFQUFFLFNBQVM7U0FDbkI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFFTyxhQUFhLENBQUMsTUFBaUI7UUFDbkMsT0FBTyxNQUFNLENBQUMsR0FBRzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pCLE9BQU87b0JBQ0gsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDcEIsU0FBUyxFQUFFO3dCQUNQLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSzt3QkFDYixRQUFRLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNO3FCQUNqQztpQkFDSixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsT0FBTztvQkFDSCxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNwQixJQUFJLEVBQUU7d0JBQ0YsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU07cUJBQ2pDO2lCQUNKLENBQUM7YUFDTDtRQUNMLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7O0lBRU8sY0FBYyxDQUFDLE9BQTZCO1FBQ2hELE9BQU8sT0FBTyxDQUFDLEdBQUc7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixPQUFPO2dCQUNILEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDUixRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQ2xCLFlBQVksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBRSwyQ0FBMkM7YUFDakcsQ0FBQztRQUNOLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Ozs7OztJQUVELHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFnQjs7Y0FDbEUsT0FBTyxHQUFzQjtZQUMvQixJQUFJLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLDJDQUEyQztnQkFDaEQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLFlBQVksRUFBRSxnQ0FBZ0M7Z0JBQzlDLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSwrQ0FBK0M7YUFDekQ7WUFDRCxLQUFLLEVBQUU7Z0JBQ0gsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLE9BQU87YUFDbkI7U0FDTDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTs7Y0FDL0QsT0FBTyxHQUFzQjtZQUMvQixJQUFJLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLDJDQUEyQztnQkFDaEQsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLFlBQVksRUFBRSxnQ0FBZ0M7Z0JBQzlDLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSwrQ0FBK0M7YUFDMUQ7WUFDRCxLQUFLLEVBQUU7Z0JBQ0gsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLEtBQUssRUFBRSxLQUFLO2FBQ2Y7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFRCxVQUFVLENBQUMsU0FBaUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxrQkFBa0IsQ0FBQyxLQUFhOztjQUN0QixJQUFJLEdBQW9CO1lBQzFCLElBQUksRUFBRTtnQkFDRixHQUFHLEVBQUUseUNBQXlDO2dCQUM5QyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLGdDQUFnQztnQkFDOUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLDZDQUE2QzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDSCxLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsT0FBTzthQUNuQjtTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELHdCQUF3QixDQUFDLFlBQThCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjs7Y0FDbkYsS0FBSyxHQUFhO1lBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzUmVzdWx0LCBXcHNDYXBhYmlsaXR5LCBXcHNEYXRhRGVzY3JpcHRpb24sIFdwc0RhdGEsIFdwc1N0YXRlIH0gZnJvbSAnLi4vd3BzX2RhdGF0eXBlcyc7XHJcbmltcG9ydCB7IFdQU0NhcGFiaWxpdGllc1R5cGUsIEV4ZWN1dGVSZXF1ZXN0VHlwZSwgRGF0YUlucHV0VHlwZSwgT3V0cHV0RGVmaW5pdGlvblR5cGUsIElXcHNFeGVjdXRlUHJvY2Vzc0JvZHksIElXcHNFeGVjdXRlUmVzcG9uc2UsIERhdGFPdXRwdXRUeXBlLCBJR2V0U3RhdHVzUmVxdWVzdCwgRGF0YSwgSUdldFJlc3VsdFJlcXVlc3QsIElEaXNtaXNzUmVxdWVzdCwgSURpc21pc3NSZXNwb25zZSB9IGZyb20gJy4vd3BzXzIuMCc7XHJcbmltcG9ydCB7IGlzRGF0YU91dHB1dFR5cGUsIGlzU3RhdHVzSW5mbywgaXNSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBXcHNNYXJzaGFsbGVyMjAwIGltcGxlbWVudHMgV3BzTWFyc2hhbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGdldENhcGFiaWxpdGllc1VybChiYXNldXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtiYXNldXJsfT9zZXJ2aWNlPVdQUyZyZXF1ZXN0PUdldENhcGFiaWxpdGllcyZ2ZXJzaW9uPTIuMC4wYDtcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRlVXJsKGJhc2V1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtiYXNldXJsfT9zZXJ2aWNlPVdQUyZyZXF1ZXN0PUV4ZWN1dGUmdmVyc2lvbj0yLjAuMCZpZGVudGlmaWVyPSR7cHJvY2Vzc0lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllczogV1BTQ2FwYWJpbGl0aWVzVHlwZSk6IFdwc0NhcGFiaWxpdHlbXSB7XHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNDYXBhYmlsaXR5W10gPSBbXTtcclxuICAgICAgICBjYXBhYmlsaXRpZXMuY29udGVudHMucHJvY2Vzc1N1bW1hcnkuZm9yRWFjaChzdW1tYXJ5ID0+IHtcclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHN1bW1hcnkuaWRlbnRpZmllci52YWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBJV3BzRXhlY3V0ZVJlc3BvbnNlLCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXSB7XHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoaXNSZXN1bHQocmVzcG9uc2VKc29uLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiByZXNwb25zZUpzb24udmFsdWUub3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXREZXNjcmlwdGlvbiA9IG91dHB1dERlc2NyaXB0aW9ucy5maW5kKG9kID0+IG9kLmlkID09PSBvdXRwdXQuaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvdXRwdXREZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYW4gb3V0cHV0LWRlc2NyaXB0aW9uIGZvciB0aGUgcGFyYW1ldGVyICR7b3V0cHV0LmlkfS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IG91dHB1dERlc2NyaXB0aW9uLnJlZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGF0eXBlID0gb3V0cHV0RGVzY3JpcHRpb24udHlwZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG91dHB1dERlc2NyaXB0aW9uLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dC5yZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3V0cHV0LnJlZmVyZW5jZS5ocmVmIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dHB1dC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudW5tYXJzaGFsT3V0cHV0RGF0YShvdXRwdXQuZGF0YSwgb3V0cHV0RGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE91dHB1dCBoYXMgbmVpdGhlciByZWZlcmVuY2Ugbm9yIGRhdGEgZmllbGQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBvdXRwdXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IGlzUmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBkYXRhdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdGF0dXNJbmZvKHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZUpzb24udmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5qb2JJRCxcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wbGV0ZWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wZXJjZW50Q29tcGxldGVkXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwcm9jZXNzSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdGF0dXMnXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdW5tYXJzaGFsT3V0cHV0RGF0YShkYXRhOiBEYXRhLCBkZXNjcmlwdGlvbjogV3BzT3V0cHV0RGVzY3JpcHRpb24pOiBhbnkge1xyXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi50eXBlID09PSAnY29tcGxleCcpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudC5tYXAoKGNvbnQ6IGFueSkgPT4gSlNPTi5wYXJzZShjb250KSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi9XTVMnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZGF0YS5jb250ZW50WzBdKTsgLy8gQFRPRE86IGJldHRlcjogaGFuZGxlIGFjdHVhbCB4bWwtZGF0YVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1bm1hcnNoYWwgY29tcGxleCBkYXRhIG9mIGZvcm1hdCAke2RhdGEubWltZVR5cGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdsaXRlcmFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2RhdGF9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNEYXRhW10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBXcHNTdGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShyZXNwb25zZUpzb24sIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShyZXNwb25zZUpzb246IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLFxyXG4gICAgICAgIGlucHV0czogV3BzRGF0YVtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIGlmIChpc1N0YXR1c0luZm8ocmVzcG9uc2VKc29uLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBqb2JJRDogcmVzcG9uc2VKc29uLnZhbHVlLmpvYklELFxyXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXBsZXRlZDogcmVzcG9uc2VKc29uLnZhbHVlLnBlcmNlbnRDb21wbGV0ZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGEgc3RhdHVzLWluZm86ICR7cmVzcG9uc2VKc29ufWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBpbnB1dHNNYXJzaGFsbGVkID0gdGhpcy5tYXJzaGFsSW5wdXRzKGlucHV0cyk7XHJcbiAgICAgICAgY29uc3Qgb3V0cHV0c01hcnNoYWxsZWQgPSB0aGlzLm1hcnNoYWxPdXRwdXRzKG91dHB1dHMpO1xyXG5cclxuICAgICAgICBjb25zdCBib2R5VmFsdWU6IEV4ZWN1dGVSZXF1ZXN0VHlwZSA9IHtcclxuICAgICAgICAgICAgVFlQRV9OQU1FOiAnV1BTXzJfMC5FeGVjdXRlUmVxdWVzdFR5cGUnLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJyxcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogcHJvY2Vzc0lkIH0sXHJcbiAgICAgICAgICAgIGlucHV0OiBpbnB1dHNNYXJzaGFsbGVkLFxyXG4gICAgICAgICAgICBvdXRwdXQ6IG91dHB1dHNNYXJzaGFsbGVkLFxyXG4gICAgICAgICAgICBtb2RlOiBhc3luYyA/ICdhc3luYycgOiAnc3luYycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlOiAnZG9jdW1lbnQnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keTogSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1FeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0V4ZWN1dGUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfXdwczpFeGVjdXRlJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWx1ZTogYm9keVZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXJzaGFsSW5wdXRzKGlucHV0czogV3BzRGF0YVtdKTogRGF0YUlucHV0VHlwZVtdIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRzLm1hcChpID0+IHtcclxuICAgICAgICAgICAgaWYgKGkuZGVzY3JpcHRpb24ucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpLmRlc2NyaXB0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBpLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaS5kZXNjcmlwdGlvbi5mb3JtYXQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGkuZGVzY3JpcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbSlNPTi5zdHJpbmdpZnkoaS52YWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaS5kZXNjcmlwdGlvbi5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXJzaGFsT3V0cHV0cyhvdXRwdXRzOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IE91dHB1dERlZmluaXRpb25UeXBlW10ge1xyXG4gICAgICAgIHJldHVybiBvdXRwdXRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBvLmlkLFxyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IG8uZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uOiBvLnJlZmVyZW5jZSA/ICdyZWZlcmVuY2UnIDogJ3ZhbHVlJyAgLy8gQFRPRE86IG1heWJlIGp1c3QgY29tbWVudCBvdXQgdGhpcyBsaW5lP1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJR2V0U3RhdHVzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1HZXRTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnR2V0U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6R2V0U3RhdHVzJ1xyXG4gICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgam9iSUQ6IHN0YXR1c0lkLFxyXG4gICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCdcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklEOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJR2V0UmVzdWx0UmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1HZXRSZXN1bHQnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnR2V0UmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6R2V0UmVzdWx0J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMi4wLjAnLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IGpvYklEXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3NVcmwoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc2VydmVyVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShqb2JJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYm9keTogSURpc21pc3NSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfURpc21pc3MnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnRGlzbWlzcycsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkRpc21pc3MnXHJcbiAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICBqb2JJRDogam9iSWQsXHJcbiAgICAgICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJ1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZTogSURpc21pc3NSZXNwb25zZSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogV3BzU3RhdGUge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlOiBXcHNTdGF0ZSA9IHtcclxuICAgICAgICAgICAgc3RhdHVzOiBqc29uUmVzcG9uc2UudmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICBqb2JJRDoganNvblJlc3BvbnNlLnZhbHVlLmpvYklEXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/wps_datatypes.js b/@ukis/esm2015/lib/wps/wps_datatypes.js deleted file mode 100644 index 7d6601c4f..000000000 --- a/@ukis/esm2015/lib/wps/wps_datatypes.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -export function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -export const isBbox = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -export function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -export function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -export function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -export function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -export function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX2RhdGF0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzX2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLHdDQU9DOzs7SUFORyxnQ0FBYzs7SUFDZCxrQ0FBMEQ7O0lBQzFELHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFNdkIsNkJBR0M7OztJQUZHLDhCQUFnQzs7SUFDaEMsd0JBQVc7Ozs7O0FBS2Ysd0NBT0M7OztJQU5HLGdDQUFjOztJQUNkLGtDQUFhOztJQUNiLHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFHdkIsa0NBTUM7OztJQUxHLDJCQUFZOztJQUNaLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOzs7QUFHbEIsTUFBTSxPQUFPLE1BQU07Ozs7QUFBRyxDQUFDLEdBQVcsRUFBdUIsRUFBRTtJQUN2RCxPQUFPLENBQ0gsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDekIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FDOUIsQ0FBQztBQUNOLENBQUMsQ0FBQTs7OztBQUdELDhCQVNDOzs7SUFSRywwQkFBc0U7O0lBQ3RFLG9DQUEwQjs7Ozs7SUFFMUIseUJBQWU7Ozs7O0lBRWYsa0NBQXdCOzs7OztJQUV4QiwyQkFBb0I7Ozs7OztBQUd4QixNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDeEgsQ0FBQzs7OztBQUdELGlDQUdDOzs7SUFGRyxrQ0FBZ0M7O0lBQ2hDLDRCQUFvQjs7Ozs7QUFHeEIsbUNBRUM7OztJQURHLDJCQUFXOzs7OztBQUlmLG1DQWdCQzs7Ozs7OztJQWRHLG1FQUFtRDs7Ozs7OztJQUNuRCxnRkFBd0U7Ozs7O0lBQ3hFLG9FQUE0Qzs7Ozs7Ozs7SUFFNUMsMkZBQTZHOzs7Ozs7O0lBQzdHLDhGQUFtRjs7Ozs7OztJQUNuRiwyRkFBZ0Y7Ozs7O0lBQ2hGLGtFQUF1Qzs7Ozs7SUFFdkMsZ0ZBQThEOzs7Ozs7Ozs7SUFDOUQsK0hBQTZKOzs7Ozs7Ozs7SUFDN0osZ0lBQTJKOzs7Ozs7Ozs7SUFDM0osa0lBQTZKOzs7Ozs7O0lBQzdKLHFHQUE0RiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFdwc1ZlcmlvbiA9ICcxLjAuMCcgfCAnMi4wLjAnO1xyXG5leHBvcnQgdHlwZSBXcHNEYXRhRm9ybWF0ID0gJ2FwcGxpY2F0aW9uL3ZuZC5nZW8ranNvbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAnYXBwbGljYXRpb24vV01TJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veG1sJyB8ICd0ZXh0L3htbCcgfCAnYXBwbGljYXRpb24vdGV4dCcgfCAnaW1hZ2UvZ2VvdGlmZicgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nO1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIFByb2Nlc3NJZCA9IHN0cmluZztcclxuZXhwb3J0IHR5cGUgUHJvZHVjdElkID0gc3RyaW5nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNEYXRhRGVzY3JpcHRpb24ge1xyXG4gICAgaWQ6IFByb2R1Y3RJZDtcclxuICAgIHR5cGU6ICdsaXRlcmFsJyB8ICdjb21wbGV4JyB8ICdiYm94JyB8ICdzdGF0dXMnIHwgJ2Vycm9yJztcclxuICAgIHJlZmVyZW5jZTogYm9vbGVhbjtcclxuICAgIGZvcm1hdD86IFdwc0RhdGFGb3JtYXQ7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IGFueTtcclxufVxyXG5leHBvcnQgdHlwZSBXcHNJbnB1dERlc2NyaXB0aW9uID0gV3BzRGF0YURlc2NyaXB0aW9uO1xyXG5leHBvcnQgdHlwZSBXcHNPdXRwdXREZXNjcmlwdGlvbiA9IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdwc0RhdGEge1xyXG4gICAgZGVzY3JpcHRpb246IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuICAgIHZhbHVlOiBhbnk7XHJcbn1cclxuZXhwb3J0IHR5cGUgV3BzSW5wdXQgPSBXcHNEYXRhO1xyXG5leHBvcnQgdHlwZSBXcHNSZXN1bHQgPSBXcHNEYXRhO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94RGVzY3JpcHRpb24ge1xyXG4gICAgaWQ6IFByb2R1Y3RJZDtcclxuICAgIHR5cGU6ICdiYm94JztcclxuICAgIHJlZmVyZW5jZTogYm9vbGVhbjtcclxuICAgIGZvcm1hdD86IFdwc0RhdGFGb3JtYXQ7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94VmFsdWUge1xyXG4gICAgY3JzOiBzdHJpbmc7XHJcbiAgICBsbGxvbjogbnVtYmVyO1xyXG4gICAgbGxsYXQ6IG51bWJlcjtcclxuICAgIHVybG9uOiBudW1iZXI7XHJcbiAgICB1cmxhdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNCYm94ID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFdwc0Jib3hWYWx1ZSA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eSgnY3JzJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2xsbG9uJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2xsbGF0JykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ3VybG9uJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ3VybGF0JylcclxuICAgICk7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNTdGF0ZSB7XHJcbiAgICBzdGF0dXM6ICdTdWNjZWVkZWQnIHwgJ0ZhaWxlZCcgfCAnQWNjZXB0ZWQnIHwgJ1J1bm5pbmcnIHwgJ0Rpc21pc3NlZCc7XHJcbiAgICBwZXJjZW50Q29tcGxldGVkPzogbnVtYmVyO1xyXG4gICAgLyoqIFdQUyAyLjAgb25seSAqL1xyXG4gICAgam9iSUQ/OiBzdHJpbmc7XHJcbiAgICAvKiogV1BTIDEuMCBvbmx5ICovXHJcbiAgICBzdGF0dXNMb2NhdGlvbj86IHN0cmluZztcclxuICAgIC8qKiBXUFMgMS4wIG9ubHk6IGEgc3VjY2Vzcy1zdGF0ZSBhbHJlYWR5IGNvbnRhaW5zIHRoZSByZXN1bHRzICovXHJcbiAgICByZXN1bHRzPzogV3BzRGF0YVtdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNTdGF0ZShvYmo6IG9iamVjdCk6IG9iaiBpcyBXcHNTdGF0ZSB7XHJcbiAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eSgnc3RhdHVzJykgJiYgKG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ3N0YXR1c0xvY2F0aW9uJykpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94RGF0YSB7XHJcbiAgICBkZXNjcmlwdGlvbjogV3BzQmJveERlc2NyaXB0aW9uO1xyXG4gICAgdmFsdWU6IFdwc0Jib3hWYWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNDYXBhYmlsaXR5IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGV4ZWN1dGVVcmwodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgZGlzbWlzc1VybChzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgIG1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXRzOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdLCBhc3luYzogYm9vbGVhbik6IGFueTtcclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpOiBhbnk7XHJcbiAgICBtYXJzaGFsbEdldFJlc3VsdEJvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJRDogc3RyaW5nKTogYW55O1xyXG4gICAgbWFyc2hhbERpc21pc3NCb2R5KGpvYklkOiBzdHJpbmcpOiBhbnk7XHJcblxyXG4gICAgdW5tYXJzaGFsQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllc0pzb246IGFueSk6IFdwc0NhcGFiaWxpdHlbXTtcclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXTtcclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzU3RhdGU7XHJcbiAgICB1bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKGpzb25SZXNwb25zZTogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzU3RhdGU7XHJcbiAgICB1bm1hcnNoYWxEaXNtaXNzUmVzcG9uc2UoanNvblJlc3BvbnNlOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlO1xyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm2015/lib/wps/wpsclient.js b/@ukis/esm2015/lib/wps/wpsclient.js deleted file mode 100644 index 9dc2db985..000000000 --- a/@ukis/esm2015/lib/wps/wpsclient.js +++ /dev/null @@ -1,401 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0'; -import { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0'; -import { of } from 'rxjs'; -import { map, switchMap, tap, share, mergeMap } from 'rxjs/operators'; -import { HttpClient } from '@angular/common/http'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -/** @type {?} */ -const XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; -/** @type {?} */ -const OWS_2_0 = OWS_2_0_Factory.OWS_2_0; -import * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; -/** @type {?} */ -const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0; -import * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; -/** @type {?} */ -const WPS_2_0 = WPS_2_0_Factory.WPS_2_0; -import { pollUntil, delayedRetry } from './utils/polling'; -import { Injectable, Inject } from '@angular/core'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { FakeCache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -export class WpsClient { - /** - * @param {?=} version - * @param {?=} webclient - * @param {?=} cache - */ - constructor(version = '1.0.0', webclient, cache) { - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - let context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - getCapabilities(url) { - /** @type {?} */ - const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - (response) => { - /** @type {?} */ - const responseJson = this.xmlunmarshaller.unmarshalString(response); - return this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - } - /** - * @param {?} processId - * @return {?} - */ - describeProcess(processId) { - throw new Error('Not implemented yet'); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - executeAsync(url, processId, inputs, outputs, pollingRate = 1000, tapFunction) { - /** @type {?} */ - const executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - const query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - (currentState) => { - /** @type {?} */ - const nextState$ = this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - const poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - (response) => { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - (lastState) => { - return this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - for (const result of response) { - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - cachedQuery(url, processId, inputs, outputs, query$) { - /** @type {?} */ - const cachedResponse$ = this.cache.get({ url, processId, inputs, outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - (results) => { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - this.cache.set({ url, processId, inputs, outputs }, response); - }))); - } - }))); - } - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - getNextState(currentState, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - let request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`); - } - /** @type {?} */ - const request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - } - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - fetchResults(lastState, serverUrl, processId, inputs, outputDescriptions) { - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`); - } - /** @type {?} */ - const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - const xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - executeAsyncS(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - execute(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismiss(serverUrl, processId, jobId) { - /** @type {?} */ - const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - } - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - postRaw(url, xmlBody) { - /** @type {?} */ - const headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - } - /** - * @param {?} url - * @return {?} - */ - getRaw(url) { - /** @type {?} */ - const headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - } -} -WpsClient.decorators = [ - { type: Injectable } -]; -/** @nocollapse */ -WpsClient.ctorParameters = () => [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } -]; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzY2xpZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dwcy93cHNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7TUFBTyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUztBQUM3RyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O01BQU8sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0csT0FBTyxLQUFLLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQzs7TUFBTyxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU87QUFDbkcsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOztNQUFPLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdHLE9BQU8sS0FBSyxlQUFlLE1BQU0seUJBQXlCLENBQUM7O01BQU8sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FB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Q0FDTCxDQUFDO0lBQ04sQ0FBQzs7Ozs7O0lBRUQsT0FBTyxDQUFDLEdBQVcsRUFBRSxPQUFlOztjQUMxQixPQUFPLEdBQUc7WUFDWixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDckIsS0FBSyxFQUFFLENBQUUsbUZBQW1GO1NBQy9GLENBQUM7SUFDTixDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxHQUFXOztjQUNSLE9BQU8sR0FBRztZQUNaLFFBQVEsRUFBRSwyQkFBMkI7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2xFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ3hCLENBQUM7SUFDTixDQUFDOzs7WUE5T0osVUFBVTs7Ozs0Q0FVRixNQUFNLFNBQUMsWUFBWTtZQS9CbkIsVUFBVTs0Q0FpQ1YsTUFBTSxTQUFDLFVBQVU7Ozs7Ozs7SUFUdEIsNEJBQTJCOzs7OztJQUMzQixrQ0FBMkI7Ozs7O0lBQzNCLG9DQUE2Qjs7Ozs7SUFDN0Isa0NBQXFDOzs7OztJQUNyQywwQkFBdUM7Ozs7O0lBSW5DLDhCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNWZXJpb24sIFdwc1Jlc3VsdCwgV3BzT3V0cHV0RGVzY3JpcHRpb24sIFdwc0RhdGEsIFdwc1N0YXRlLCBpc1dwc1N0YXRlLCBXcHNEYXRhRGVzY3JpcHRpb24gfSBmcm9tICcuL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQgeyBXcHNNYXJzaGFsbGVyMTAwIH0gZnJvbSAnLi93cHMxMDAvd3BzX21hcnNoYWxsZXJfMS4wLjAnO1xyXG5pbXBvcnQgeyBXcHNNYXJzaGFsbGVyMjAwIH0gZnJvbSAnLi93cHMyMDAvd3BzX21hcnNoYWxsZXJfMi4wLjAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwLCBzaGFyZSwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAqIGFzIFhMaW5rXzFfMF9GYWN0b3J5IGZyb20gJ3czYy1zY2hlbWFzL2xpYi9YTGlua18xXzAnOyBjb25zdCBYTGlua18xXzAgPSBYTGlua18xXzBfRmFjdG9yeS5YTGlua18xXzA7XHJcbmltcG9ydCAqIGFzIE9XU18xXzFfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9PV1NfMV8xXzAnOyBjb25zdCBPV1NfMV8xXzAgPSBPV1NfMV8xXzBfRmFjdG9yeS5PV1NfMV8xXzA7XHJcbmltcG9ydCAqIGFzIE9XU18yXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvT1dTXzJfMCc7IGNvbnN0IE9XU18yXzAgPSBPV1NfMl8wX0ZhY3RvcnkuT1dTXzJfMDtcclxuaW1wb3J0ICogYXMgV1BTXzFfMF8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dQU18xXzBfMCc7IGNvbnN0IFdQU18xXzBfMCA9IFdQU18xXzBfMF9GYWN0b3J5LldQU18xXzBfMDtcclxuaW1wb3J0ICogYXMgV1BTXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9XUFNfMl8wJzsgY29uc3QgV1BTXzJfMCA9IFdQU18yXzBfRmFjdG9yeS5XUFNfMl8wO1xyXG5pbXBvcnQgeyBwb2xsVW50aWwsIGRlbGF5ZWRSZXRyeSB9IGZyb20gJy4vdXRpbHMvcG9sbGluZyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKc29uaXggfSBmcm9tICdAYm91bmRsZXNzZ2VvL2pzb25peCc7XHJcbmltcG9ydCB7IENhY2hlLCBGYWtlQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBXcHMtY2xpZW50IGFic3RyYWN0cyBhd2F5IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFdwczEuMC4wIGFuZCBXcHMyLjAuMFxyXG4gKiBUaGVyZSBhcmUgdHdvIGxheWVycyBvZiBtYXJzaGFsbGluZzpcclxuICogIC0gdGhlIFdwcy1tYXJzaGFsbGVyIG1hcnNoYWxzIHVzZXItZmFjaW5nIGRhdGEgdG8gd3BzLXNwZWNpZmljIHR5cGVzXHJcbiAqICAtIEpzb25peCBtYXJzaGFscyB3cHMtc3BlY2lmaWMgZGF0YSB0byB4bWwuXHJcbiAqIHVzZXItZmFjaW5nIGRhdGEgLT4gd3BzbWFyc2hhbGxlciAtPiBXcHMtdHlwZS1zcGVjaWZpYyBkYXRhIC0+IEpzb25peC1tYXJoc2FsbGVyIC0+IFhNTCAtPlxyXG4gKiAtPiB3ZWJjbGllbnQgLT4gV1BTIC0+IFhNTCAtPiBKc29uaXgtdW5tYXJzaGFsbGVyIC0+IFdwcy10eXBlLXNwZWNpZmljIGRhdGEgLT4gd3BzbWFyc2hhbGxlciAtPiB1c2VyLWZhY2luZyBkYXRhXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXcHNDbGllbnQge1xyXG5cclxuICAgIHByaXZhdGUgdmVyc2lvbjogV3BzVmVyaW9uO1xyXG4gICAgcHJpdmF0ZSB4bWxtYXJzaGFsbGVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHhtbHVubWFyc2hhbGxlcjogYW55O1xyXG4gICAgcHJpdmF0ZSB3cHNtYXJzaGFsbGVyOiBXcHNNYXJzaGFsbGVyO1xyXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGUgPSBuZXcgRmFrZUNhY2hlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnV3BzVmVyc2lvbicpIHZlcnNpb246IFdwc1ZlcmlvbiA9ICcxLjAuMCcsXHJcbiAgICAgICAgcHJpdmF0ZSB3ZWJjbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgQEluamVjdCgnV3BzQ2FjaGUnKSBjYWNoZT86IENhY2hlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xyXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5jYWNoZSA9IGNhY2hlO1xyXG4gICAgICAgIGxldCBjb250ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICcxLjAuMCcpIHtcclxuICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyID0gbmV3IFdwc01hcnNoYWxsZXIxMDAoKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbWExpbmtfMV8wLCBPV1NfMV8xXzAsIFdQU18xXzBfMF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAnMi4wLjAnKSB7XHJcbiAgICAgICAgICAgIHRoaXMud3BzbWFyc2hhbGxlciA9IG5ldyBXcHNNYXJzaGFsbGVyMjAwKCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSnNvbml4LkNvbnRleHQoW1hMaW5rXzFfMCwgT1dTXzJfMCwgV1BTXzJfMF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGVudGVyZWQgYSBXUFMgdmVyc2lvbiBvdGhlciB0aGFuIDEuMC4wIG9yIDIuMC4wLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnhtbHVubWFyc2hhbGxlciA9IGNvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCk7XHJcbiAgICAgICAgdGhpcy54bWxtYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldENhcGFiaWxpdGllcyh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgZ2V0Q2FwYWJpbGl0aWVzVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmdldENhcGFiaWxpdGllc1VybCh1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJhdyhnZXRDYXBhYmlsaXRpZXNVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VKc29uID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsQ2FwYWJpbGl0aWVzKHJlc3BvbnNlSnNvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pIC8vIEBUT0RPOiBoYW5kbGUgY2FzZSB3aGVuIGluc3RlYWQgb2YgV3BzQ2FwYWJpbGl0ZXMgYW4gRXhjZXB0aW9uUmVwb3J0IGlzIHJldHVybmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZGVzY3JpYmVQcm9jZXNzKHByb2Nlc3NJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZXhlY3V0ZUFzeW5jKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXRzOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdLFxyXG4gICAgICAgIHBvbGxpbmdSYXRlOiBudW1iZXIgPSAxMDAwLCB0YXBGdW5jdGlvbj86IChyZXNwb25zZTogV3BzU3RhdGUgfCBudWxsKSA9PiBhbnkpOiBPYnNlcnZhYmxlPFdwc1Jlc3VsdFtdPiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVSZXF1ZXN0JDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSB0aGlzLmV4ZWN1dGVBc3luY1ModXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5JCA9IGV4ZWN1dGVSZXF1ZXN0JC5waXBlKFxyXG5cclxuICAgICAgICAgICAgLy8gcG9sbCB1bnRpbCBzdWNlZWRlZFxyXG4gICAgICAgICAgICBtZXJnZU1hcCgoY3VycmVudFN0YXRlOiBXcHNTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFN0YXRlJDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSB0aGlzLmdldE5leHRTdGF0ZShjdXJyZW50U3RhdGUsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGwkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHBvbGxVbnRpbDxXcHNTdGF0ZT4oXHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlJCxcclxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IFdwc1N0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09ICdTdWNjZWVkZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwRnVuY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcG9sbGluZ1JhdGVcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGwkO1xyXG4gICAgICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgICAgIC8vIGZldGNoIHJlc3VsdHNcclxuICAgICAgICAgICAgbWVyZ2VNYXAoKGxhc3RTdGF0ZTogV3BzU3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzdWx0cyhsYXN0U3RhdGUsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHMpO1xyXG4gICAgICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXJyb3JzOlxyXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBXcHNEYXRhW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kZXNjcmlwdGlvbi50eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggMjAwLCBidXQgYm9keSBjb250YWluZWQgYW4gZXJyb3ItcmVzdWx0OiAnLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUXVlcnkodXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cywgcXVlcnkkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhY2hlZFF1ZXJ5KHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIHF1ZXJ5JDogT2JzZXJ2YWJsZTxXcHNEYXRhW10+KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgY2FjaGVkUmVzcG9uc2UkOiBPYnNlcnZhYmxlPFdwc1Jlc3VsdFtdIHwgbnVsbD4gPSB0aGlzLmNhY2hlLmdldCh7dXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0c30pO1xyXG4gICAgICAgIHJldHVybiBjYWNoZWRSZXNwb25zZSQucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5JC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBXcHNEYXRhW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KHt1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzfSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE5leHRTdGF0ZShjdXJyZW50U3RhdGU6IFdwc1N0YXRlLCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiB7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICcxLjAuMCcpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFN0YXRlLnN0YXR1c0xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gc3RhdHVzIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVxdWVzdCQgPSB0aGlzLmdldFJhdyhjdXJyZW50U3RhdGUuc3RhdHVzTG9jYXRpb24pO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzIuMC4wJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuam9iSUQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBqb2ItSWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBleGVjYm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsLCBwcm9jZXNzSWQsIGN1cnJlbnRTdGF0ZS5qb2JJRCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdCQgPSB0aGlzLnBvc3RSYXcoc2VydmVyVXJsLCB4bWxFeGVjYm9keSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ0dldFN0YXR1cycgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhpcyBXUFMtVmVyc2lvbiAoJHt0aGlzLnZlcnNpb259KS5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QxJDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSByZXF1ZXN0JC5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMiksXHJcbiAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHhtbFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dDogV3BzRGF0YVtdIHwgV3BzU3RhdGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QxJDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZldGNoUmVzdWx0cyhsYXN0U3RhdGU6IFdwc1N0YXRlLCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4ge1xyXG5cclxuICAgICAgICBpZiAobGFzdFN0YXRlLnJlc3VsdHMpIHsgLy8gV1BTIDEuMDogcmVzdWx0cyBzaG91bGQgYWxyZWFkeSBiZSBpbiBsYXN0IHN0YXRlXHJcbiAgICAgICAgICAgIHJldHVybiBvZihsYXN0U3RhdGUucmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gV1BTIDIuMDogZ2V0IHJlc3VsdHMgd2l0aCBwb3N0IHJlcXVlc3RcclxuXHJcbiAgICAgICAgICAgIGlmICghbGFzdFN0YXRlLmpvYklEKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSB3YW50IG1lIHRvIGdldCBhIHJlc3VsdCwgYnV0IEkgY2FuJ3QgZmluZCBhIGpvYklkLiBJIGRvbid0IGtub3cgd2hhdCB0byBkbyBub3chYCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNCb2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgbGFzdFN0YXRlLmpvYklEKTtcclxuICAgICAgICAgICAgY29uc3QgeG1sRXhlY0JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjQm9keSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KHNlcnZlclVybCwgeG1sRXhlY0JvZHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGV4ZWN1dGVBc3luY1ModXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4ge1xyXG5cclxuICAgICAgICBjb25zdCBleGVjdXRlVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmV4ZWN1dGVVcmwodXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zLCB0cnVlKTtcclxuICAgICAgICBjb25zdCB4bWxFeGVjYm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGV4ZWNib2R5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJhdyhleGVjdXRlVXJsLCB4bWxFeGVjYm9keSkucGlwZShcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBXcHNTdGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRlKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzUmVzdWx0W10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZVVybCA9IHRoaXMud3BzbWFyc2hhbGxlci5leGVjdXRlVXJsKHVybCwgcHJvY2Vzc0lkKTtcclxuICAgICAgICBjb25zdCBleGVjYm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGV4ZWN1dGVVcmwsIHhtbEV4ZWNib2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQ6IFdwc0RhdGFbXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3Moc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzbWlzc1VybCA9IHRoaXMud3BzbWFyc2hhbGxlci5kaXNtaXNzVXJsKHNlcnZlclVybCwgcHJvY2Vzc0lkLCBqb2JJZCk7XHJcbiAgICAgICAgY29uc3QgZGlzbWlzc0JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbERpc21pc3NCb2R5KGpvYklkKTtcclxuICAgICAgICBjb25zdCB4bWxEaXNtaXNzQm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGRpc21pc3NCb2R5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJhdyhkaXNtaXNzVXJsLCB4bWxEaXNtaXNzQm9keSkucGlwZShcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2UsIHNlcnZlclVybCwgcHJvY2Vzc0lkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0UmF3KHVybDogc3RyaW5nLCB4bWxCb2R5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLFxyXG4gICAgICAgICAgICAnQWNjZXB0JzogJ3RleHQveG1sLCBhcHBsaWNhdGlvbi94bWwnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJjbGllbnQucG9zdCh1cmwsIHhtbEJvZHksIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgICAgZGVsYXllZFJldHJ5KDIwMDAsIDIpLFxyXG4gICAgICAgICAgICBzaGFyZSgpICAvLyB0dXJuaW5nIGhvdDogdG8gbWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgc3Vic2NyaWJlcnMgZG9udCBjYXVzZSBtdWx0aXBsZSByZXF1ZXN0c1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmF3KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICAgICAnQWNjZXB0JzogJ3RleHQveG1sLCBhcHBsaWNhdGlvbi94bWwnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJjbGllbnQuZ2V0KHVybCwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm2015/public_api.js b/@ukis/esm2015/public_api.js deleted file mode 100644 index a89c4d6b8..000000000 --- a/@ukis/esm2015/public_api.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export { ServicesOgcModule } from './lib/services-ogc.module'; -export { isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService } from './lib/owc/owc-json.service'; -export {} from './lib/owc/types/owc-json'; -export {} from './lib/owc/types/eoc-owc-json'; -export { WpsClient } from './lib/wps/wpsclient'; -export { isWpsState, isBbox } from './lib/wps/wps_datatypes'; -export { FakeCache } from './lib/wps/cache'; -export { WmtsClientService } from './lib/wmts/wmtsclient.service'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBYywyQkFBMkIsQ0FBQztBQUMxQyxnUEFBYyw0QkFBNEIsQ0FBQztBQUMzQyxlQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGVBQWMsOEJBQThCLENBQUM7QUFDN0MsMEJBQWMscUJBQXFCLENBQUM7QUFDcEMsbUNBQWMseUJBQXlCLENBQUM7QUFDeEMsMEJBQWMsaUJBQWlCLENBQUM7QUFDaEMsa0NBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvb3djLWpzb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvZW9jLW93Yy1qc29uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL3dwc2NsaWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dwcy93cHNfZGF0YXR5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL2NhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm2015/ukis-services-ogc.js b/@ukis/esm2015/ukis-services-ogc.js deleted file mode 100644 index c3d4da86a..000000000 --- a/@ukis/esm2015/ukis-services-ogc.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * Generated bundle index. Do not edit. - */ -export { ServicesOgcModule, isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService, WpsClient, isWpsState, isBbox, FakeCache, WmtsClientService } from './public_api'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWtpcy1zZXJ2aWNlcy1vZ2MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJ1a2lzLXNlcnZpY2VzLW9nYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLGdVQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/owc/owc-json.service.js b/@ukis/esm5/lib/owc/owc-json.service.js deleted file mode 100644 index 12df4a5ef..000000000 --- a/@ukis/esm5/lib/owc/owc-json.service.js +++ /dev/null @@ -1,1554 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { Injectable } from '@angular/core'; -import { VectorLayer, RasterLayer, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, WmtsLayer, WmsLayer } from '@ukis/services-layers'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { of, forkJoin } from 'rxjs'; -import { map } from 'rxjs/operators'; -import * as i0 from "@angular/core"; -import * as i1 from "../wmts/wmtsclient.service"; -/** - * @param {?} str - * @return {?} - */ -export function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -export function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -export function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = tslib_1.__values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = tslib_1.__values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new WmsLayer(options); - return of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = tslib_1.__assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = tslib_1.__read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return of(matrixSet); - } - else { - var _a = tslib_1.__read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = tslib_1.__assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = tslib_1.__assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = tslib_1.__values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(i0.ɵɵinject(i1.WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; -}()); -export { OwcJsonService }; -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9vd2Mvb3djLWpzb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUzNDLE9BQU8sRUFDbUQsV0FBVyxFQUFFLFdBQVcsRUFDN0QsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQWUsZUFBZSxFQUFFLFlBQVksRUFDeEcsaUJBQWlCLEVBQUUsaUJBQWlCLEVBR3RELFNBQVMsRUFFVCxRQUFRLEVBSVQsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsRUFBRSxFQUFjLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFLckMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRDtXQUMvRCxHQUFHLEtBQUssc0NBQXNDO1dBQzlDLEdBQUcsS0FBSyxzQ0FBc0MsQ0FBQztBQUN0RCxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBVztJQUN4QyxPQUFP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O1NBcnlCWSxjQUFjOzs7Ozs7SUFFYixvQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIElPd3NDb250ZXh0LCBJT3dzUmVzb3VyY2UsIElPd3NPZmZlcmluZywgSU93c09wZXJhdGlvbiwgSU93c0NvbnRlbnQsIFdNU19PZmZlcmluZywgV0ZTX09mZmVyaW5nLCBXQ1NfT2ZmZXJpbmcsXHJcbiAgQ1NXX09mZmVyaW5nLCBXTVRTX09mZmVyaW5nLCBHTUxfT2ZmZXJpbmcsIEtNTF9PZmZlcmluZywgR2VvVElGRl9PZmZlcmluZywgR01MSlAyX09mZmVyaW5nLCBHTUxDT1ZfT2ZmZXJpbmdcclxufSBmcm9tICcuL3R5cGVzL293Yy1qc29uJztcclxuaW1wb3J0IHtcclxuICBJRW9jT3dzQ29udGV4dCwgSUVvY093c1Jlc291cmNlLCBJRW9jT3dzT2ZmZXJpbmcsIEdlb0pzb25fT2ZmZXJpbmcsIFh5el9PZmZlcmluZywgSUVvY093c1dtdHNPZmZlcmluZyxcclxuICBJRW9jV21zT2ZmZXJpbmcsIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiwgSUVvY093c1dtdHNNYXRyaXhTZXRcclxufSBmcm9tICcuL3R5cGVzL2VvYy1vd2MtanNvbic7XHJcbmltcG9ydCB7XHJcbiAgSUxheWVyR3JvdXBPcHRpb25zLCBJTGF5ZXJPcHRpb25zLCBJUmFzdGVyTGF5ZXJPcHRpb25zLCBWZWN0b3JMYXllciwgUmFzdGVyTGF5ZXIsIElWZWN0b3JMYXllck9wdGlvbnMsXHJcbiAgTGF5ZXIsIFRMYXllcnR5cGUsIFdtc0xheWVydHlwZSwgV210c0xheWVydHlwZSwgV2ZzTGF5ZXJ0eXBlLCBHZW9qc29uTGF5ZXJ0eXBlLCBDdXN0b21MYXllciwgQ3VzdG9tTGF5ZXJ0eXBlLCBYeXpMYXllcnR5cGUsXHJcbiAgVFJhc3RlckxheWVydHlwZSwgaXNSYXN0ZXJMYXllcnR5cGUsIGlzVmVjdG9yTGF5ZXJ0eXBlLCBUVmVjdG9yTGF5ZXJ0eXBlLCBJTGF5ZXJEaW1lbnNpb25zLFxyXG4gIElMYXllckludGVydmFsQW5kUGVyaW9kLFxyXG4gIElXbXRzUGFyYW1zLFxyXG4gIFdtdHNMYXllcixcclxuICBJV210c09wdGlvbnMsXHJcbiAgV21zTGF5ZXIsXHJcbiAgSVdtc1BhcmFtcyxcclxuICBJV21zT3B0aW9ucyxcclxuICBJTGlzdE1hdHJpeFNldFxyXG59IGZyb20gJ0B1a2lzL3NlcnZpY2VzLWxheWVycyc7XHJcbmltcG9ydCB7IFRHZW9FeHRlbnQgfSBmcm9tICdAdWtpcy9zZXJ2aWNlcy1tYXAtc3RhdGUnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4uL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dtc09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNU19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcydcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMSdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ZzT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgV0ZTX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd2ZzJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBXQ1NfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nzd09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIENTV19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV210c09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNVFNfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93bXRzJ1xyXG4gICAgfHwgc3RyID09PSAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd210cy8xLjAuMCdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtdHMvMS4xLjAnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dtbE9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTF9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzS21sT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgS01MX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9USUZGT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR2VvVElGRl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dlb3RpZmYnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dNTEpQMk9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTEpQMl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzR01MQ09WT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR01MQ09WX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ21sY292JztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNYeXpPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBYeXpfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0pzb25PZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBHZW9Kc29uX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYXJkc0V4cGFuZCh2OiBzdHJpbmcpIHtcclxuICBpZiAoIXYpIHsgcmV0dXJuOyB9XHJcbiAgbGV0IG8gPSBbXVxyXG4gIGZvciAobGV0IGkgaW4gdi5zcGxpdCgnLCcpKSB7XHJcbiAgICB2YXIgaiA9IHYuc3BsaXQoJywnKVtpXS5zcGxpdChcIi1cIilcclxuICAgIGlmIChqLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIG8ucHVzaCh2LnNwbGl0KCcsJylbaV0pXHJcbiAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09IDIpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0galswXS5jaGFyQ29kZUF0KDApXHJcbiAgICAgIGxldCBlbmQgPSBqWzFdLmNoYXJDb2RlQXQoMClcclxuICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA+PSBlbmQ7IGstLSkge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvXHJcbn1cclxuLyoqXHJcbiAqIE9XUyBDb250ZXh0IFNlcnZpY2VcclxuICogT0dDIE9XUyBDb250ZXh0IEdlbyBFbmNvZGluZyBTdGFuZGFyZCBWZXJzaW9uOiAxLjBcclxuICogaHR0cDovL2RvY3Mub3Blbmdlb3NwYXRpYWwub3JnL2lzLzE0LTA1NXIyLzE0LTA1NXIyLmh0bWxcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbFxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgYWxsb3dzIHlvdSB0byByZWFkIGFuZCB3cml0ZSBPV0MtZGF0YS5cclxuICogV2UgaGF2ZSBhZGRlZCBzb21lIGN1c3RvbSBmaWVsZHMgdG8gdGhlIE9XQyBzdGFuZGFyZC5cclxuICogICAtIGFjY2VwdHMgdGhlIE9XQy1zdGFuZGFyZC1kYXRhdHlwZXMgYXMgZnVuY3Rpb24gaW5wdXRzIChzbyBhcyB0byBiZSBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlKVxyXG4gKiAgIC0gcmV0dXJucyBvdXIgZXh0ZW5kZWQgT1dDLWRhdGF0eXBlcyBhcyBmdW5jdGlvbiBvdXRwdXRzIChzbyBhcyB0byBiZSBhcyBpbmZvcm1hdGlvbi1yaWNoIGFzIHBvc3NpYmxlKVxyXG4gKlxyXG4gKi9cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE93Y0pzb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3bXRzQ2xpZW50OiBXbXRzQ2xpZW50U2VydmljZSkge1xyXG4gICAgLy9odHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVnZW9qc29uLWVuY29kaW5nLTJcclxuICB9XHJcblxyXG5cclxuICBjaGVja0NvbnRleHQoY29udGV4dDogSU93c0NvbnRleHQpIHtcclxuICAgIGxldCBpc0NvbnRleHRfMV8wO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRleHQucHJvcGVydGllcy5saW5rcykpIHtcclxuICAgICAgaXNDb250ZXh0XzFfMCA9IGNvbnRleHQucHJvcGVydGllcy5saW5rcy5wcm9maWxlcy5maW5kKGl0ZW0gPT4gaXRlbSA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzQ29udGV4dF8xXzAgPSBjb250ZXh0LnByb3BlcnRpZXMubGlua3MuZmluZChpdGVtID0+IGl0ZW0uaHJlZiA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQ29udGV4dF8xXzApIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndGhpcyBpcyBub3QgYSB2YWxpZCBPV1MgQ29udGV4dCB2MS4wIScpO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBpc0NvbnRleHRfMV8wO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFRpdGxlKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFB1Ymxpc2hlcihjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LnByb3BlcnRpZXMucHVibGlzaGVyKSA/IGNvbnRleHQucHJvcGVydGllcy5wdWJsaXNoZXIgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dEV4dGVudChjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LmJib3gpID8gY29udGV4dC5iYm94IDogbnVsbDsgLy8gb3IgWy0xODAsIC05MCwgMTgwLCA5MF07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UmVzb3VyY2VzKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5mZWF0dXJlcztcclxuICB9XHJcblxyXG4gIC8qKiBSZXNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VVcGRhdGVkKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZURhdGUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgcmV0dXJuIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmRhdGUpID8gcmVzb3VyY2UucHJvcGVydGllcy5kYXRlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlT2ZmZXJpbmdzKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiAocmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MpID8gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0cmlldmUgbGF5ZXIgc3RhdHVzIGFjdGl2ZSAvIGluYWN0aXZlIGJhc2VkIG9uIElPd3NSZXNvdXJjZVxyXG4gICAqIEBwYXJhbSByZXNvdXJjZTogSU93c1Jlc291cmNlXHJcbiAgICovXHJcbiAgaXNBY3RpdmUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlJykpIHtcclxuICAgICAgYWN0aXZlID0gcmVzb3VyY2UucHJvcGVydGllcy5hY3RpdmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBudW1iZXIge1xyXG4gICAgbGV0IG9wYWNpdHkgPSAxO1xyXG4gICAgaWYgKHJlc291cmNlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ29wYWNpdHknKSkge1xyXG4gICAgICBvcGFjaXR5ID0gcmVzb3VyY2UucHJvcGVydGllcy5vcGFjaXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHJpYnV0aW9uID0gJyc7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRpb24nKSkge1xyXG4gICAgICBhdHRyaWJ1dGlvbiA9IHJlc291cmNlLnByb3BlcnRpZXMuYXR0cmlidXRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cmlidXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNoYXJkcyhyZXNvdXJjZTogSU93c1Jlc291cmNlKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdzaGFyZHMnKSkge1xyXG4gICAgICByZXR1cm4gcmVzb3VyY2UucHJvcGVydGllcy5zaGFyZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0T3djVGltZVRvSXNvVGltZUFuZFBlcmlvZGljaXR5KG93Y3RpbWU6IHN0cmluZyk6IElMYXllckludGVydmFsQW5kUGVyaW9kIHwgc3RyaW5nIHtcclxuICAgIC8qKlxyXG4gICAgIENvbnZlcnQgZnJvbVxyXG4gICAgKi9cclxuICAgIGxldCBhcnIgPSBvd2N0aW1lLnNwbGl0KCcvJyk7XHJcbiAgICBsZXQgdCA9IChhcnIubGVuZ3RoID09IDMpID8gYXJyWzBdICsgJy8nICsgYXJyWzFdIDogb3djdGltZTtcclxuICAgIGxldCBwID0gKGFyci5sZW5ndGggPT0gMykgPyBhcnJbMl0gOiBudWxsO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgcmV0dXJuIHsgXCJpbnRlcnZhbFwiOiB0LCBcInBlcmlvZGljaXR5XCI6IHAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VEaW1lbnNpb25zKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBJTGF5ZXJEaW1lbnNpb25zIHtcclxuICAgIGlmICghcmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnZGltZW5zaW9ucycpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgZGltcyA9IHt9XHJcblxyXG4gICAgbGV0IGRpbWVuc2lvbnMgPSB7fVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UucHJvcGVydGllcy5kaW1lbnNpb25zKSkge1xyXG4gICAgICBmb3IgKGxldCBkIG9mIHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9ucykge1xyXG4gICAgICAgIGRpbWVuc2lvbnNbZC5uYW1lXSA9IGRcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGltZW5zaW9ucyA9IHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9uc1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkaW1lbnNpb25zKSB7XHJcbiAgICAgIGxldCBkaW0gPSB7fVxyXG4gICAgICBjb25zb2xlLmxvZyhuYW1lKVxyXG4gICAgICBpZiAobmFtZSA9PT0gXCJ0aW1lXCIgfHwgZGltZW5zaW9uc1tuYW1lXS51bml0cyA9PSBcIklTTzg2MDFcIikge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRpbWVuc2lvbnNbbmFtZV0udmFsdWVcclxuICAgICAgICBsZXQgdmFsdWVzID0gKHZhbHVlKSA/IHZhbHVlLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpID0+IHRoaXMuY29udmVydE93Y1RpbWVUb0lzb1RpbWVBbmRQZXJpb2RpY2l0eSh2KSkgOiBudWxsXHJcbiAgICAgICAgZGltID0ge1xyXG4gICAgICAgICAgXCJ2YWx1ZXNcIjogKCghdmFsdWVzKSB8fCB2YWx1ZXMubGVuZ3RoID4gMSkgPyB2YWx1ZXMgOiB2YWx1ZXNbMF0sXHJcbiAgICAgICAgICBcInVuaXRzXCI6IGRpbWVuc2lvbnNbbmFtZV0udW5pdHMsXHJcbiAgICAgICAgICBcImRpc3BsYXlcIjoge1xyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcIllZWU1NRERcIixcclxuICAgICAgICAgICAgXCJwZXJpb2RcIjogZGltZW5zaW9uc1tuYW1lXS5kaXNwbGF5LFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJlbmRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChuYW1lID09PSBcImVsZXZhdGlvblwiKSB7XHJcbiAgICAgICAgZGltID0gZGltZW5zaW9uc1tuYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaW0gPSBkaW1lbnNpb25zW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGRpbXNbbmFtZV0gPSBkaW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltcztcclxuICB9XHJcblxyXG4gIC8qKiBPZmZlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBUTGF5ZXJ0eXBlIHtcclxuICAgIGlmIChpc1dtc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzV210c09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXRzTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1dmc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXZnNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzR2VvSnNvbk9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBHZW9qc29uTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1h5ek9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBYeXpMYXllcnR5cGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29kZTsgLy8gYW4gb2ZmZXJpbmcgY2FuIGFsc28gYmUgYW55IG90aGVyIHN0cmluZy5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTZXJ2aWNlT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghb2ZmZXJpbmcuY29udGVudHMgJiYgb2ZmZXJpbmcub3BlcmF0aW9ucykgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAob2ZmZXJpbmcuY29udGVudHMgJiYgIW9mZmVyaW5nLm9wZXJhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmZXJpbmdDb250ZW50cyhvZmZlcmluZzogSU93c09mZmVyaW5nKTogSU93c09wZXJhdGlvbltdIHwgSU93c0NvbnRlbnRbXSB7XHJcbiAgICBpZiAodGhpcy5jaGVja0lmU2VydmljZU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcub3BlcmF0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29udGVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBsZWdlbmRVUkwgZnJvbSBwcm9qZWN0IHNwZWNpZmljIG93cyBDb250ZXh0XHJcbiAgICogQHBhcmFtIG9mZmVyaW5nIGxheWVyIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0TGVnZW5kVXJsKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpIHtcclxuICAgIGxldCBsZWdlbmRVcmwgPSAnJztcclxuXHJcbiAgICBpZiAob2ZmZXJpbmcuaGFzT3duUHJvcGVydHkoJ3N0eWxlcycpKSB7XHJcbiAgICAgIGxldCBkZWZhdWx0U3R5bGUgPSBvZmZlcmluZy5zdHlsZXMuZmlsdGVyKHN0eWxlID0+IHN0eWxlLmRlZmF1bHQpO1xyXG4gICAgICBpZiAoZGVmYXVsdFN0eWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlWzBdLmxlZ2VuZFVSTDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvZmZlcmluZy5oYXNPd25Qcm9wZXJ0eSgnbGVnZW5kVXJsJykpIHtcclxuICAgICAgbGVnZW5kVXJsID0gb2ZmZXJpbmcubGVnZW5kVXJsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ2VuZFVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGljb25VcmwgYmFzZWQgb24gSU93c09mZmVyaW5nXHJcbiAgICogQHBhcmFtIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0SWNvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nKSB7XHJcbiAgICBsZXQgaWNvblVybCA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCdpY29uVXJsJykpIHtcclxuICAgICAgaWNvblVybCA9IG9mZmVyaW5nLmljb25Vcmw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWNvblVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxheWVyIHByaW9yaXR5OiBmaXJzdCB3bXMsIHRoZW4gd210cywgdGhlbiB3ZnMsIHRoZW4gb3RoZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRMYXllcnMob3djOiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYXllcltdPiB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSBvd2MuZmVhdHVyZXM7XHJcbiAgICBjb25zdCBsYXllcnMkOiBPYnNlcnZhYmxlPExheWVyPltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuICAgICAgY29uc3Qgb2ZmZXJpbmdzID0gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3M7XHJcbiAgICAgIGlmIChvZmZlcmluZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZmVyaW5nID0gb2ZmZXJpbmdzLmZpbmQobyA9PiBpc1dtc09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV210c09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV2ZzT2ZmZXJpbmcoby5jb2RlKSlcclxuICAgICAgICAgIHx8IG9mZmVyaW5nc1swXTtcclxuICAgICAgICBsYXllcnMkLnB1c2godGhpcy5jcmVhdGVMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIG93YywgdGFyZ2V0UHJvamVjdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGxheWVycyQpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8TGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcbiAgICBpZiAoaXNSYXN0ZXJMYXllcnR5cGUobGF5ZXJUeXBlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVSYXN0ZXJMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQsIHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgfSBlbHNlIGlmIChpc1ZlY3RvckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVZlY3RvckxheWVyRnJvbU9mZmVyaW5nKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGlzIHR5cGUgb2Ygc2VydmljZSAoJHtsYXllclR5cGV9KSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlVmVjdG9yTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dD86IElPd3NDb250ZXh0KTogT2JzZXJ2YWJsZTxWZWN0b3JMYXllcj4ge1xyXG4gICAgY29uc3QgbGF5ZXJUeXBlID0gdGhpcy5nZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nKTtcclxuXHJcbiAgICBpZiAoIWlzVmVjdG9yTGF5ZXJ0eXBlKGxheWVyVHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIGxheWVyICcke2xheWVyVHlwZX0nIC8gb2ZmZXJpbmcgJyR7b2ZmZXJpbmcuY29kZX0nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgaW50byBhIFZlY3RvcmxheWVyYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLmdldEljb25Vcmwob2ZmZXJpbmcpO1xyXG5cclxuICAgIGxldCBsYXllclVybCwgcGFyYW1zO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIG9wZXJhdGlvbnMtb2ZmZXJpbmcgKHZzLiBhIGRhdGEtb2ZmZXJpbmcpOlxyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIGxheWVyVXJsID0gdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZik7XHJcbiAgICBpZiAob2ZmZXJpbmcub3BlcmF0aW9ucykgcGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG5cclxuICAgIGxldCBkYXRhO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGRhdGEtb2ZmZXJpbmc6IFxyXG4gICAgaWYgKG9mZmVyaW5nLmNvbnRlbnRzKSB7XHJcbiAgICAgIGRhdGEgPSBvZmZlcmluZy5jb250ZW50c1swXS5jb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsZWdlbmRVcmwgPSB0aGlzLmdldExlZ2VuZFVybChvZmZlcmluZyk7XHJcblxyXG4gICAgbGV0IGxheWVyT3B0aW9uczogSVZlY3RvckxheWVyT3B0aW9ucyA9IHtcclxuICAgICAgaWQ6IHJlc291cmNlLmlkIGFzIHN0cmluZyxcclxuICAgICAgbmFtZTogdGhpcy5nZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIHR5cGU6IGxheWVyVHlwZSxcclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlLFxyXG4gICAgICBhdHRyaWJ1dGlvbjogdGhpcy5nZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlKSxcclxuICAgICAgY29udGludW91c1dvcmxkOiBmYWxzZSxcclxuICAgICAgb3BhY2l0eTogdGhpcy5nZXRSZXNvdXJjZU9wYWNpdHkocmVzb3VyY2UpLFxyXG4gICAgICB1cmw6IGxheWVyVXJsID8gbGF5ZXJVcmwgOiBudWxsLFxyXG4gICAgICBsZWdlbmRJbWc6IGxlZ2VuZFVybCA/IGxlZ2VuZFVybCA6IG51bGwsXHJcbiAgICAgIGRhdGE6IGRhdGFcclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKGxheWVyT3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlLmJib3gpIHtcclxuICAgICAgbGF5ZXIuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyLmJib3ggPSBjb250ZXh0LmJib3g7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKGxheWVyKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhc3RlckxheWVyRnJvbU9mZmVyaW5nKFxyXG4gICAgb2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcblxyXG4gICAgaWYgKCFpc1Jhc3RlckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBvZmZlcmluZyAnJHtvZmZlcmluZy5jb2RlfScgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIGEgcmFzdGVybGF5ZXIuYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByYXN0ZXJMYXllciQ6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+O1xyXG4gICAgc3dpdGNoIChsYXllclR5cGUpIHtcclxuICAgICAgY2FzZSBXbXNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXNMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdtdHNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgLy8gQFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDdXN0b21MYXllcnR5cGU6XHJcbiAgICAgICAgLy8gY3VzdG9tIGxheWVycyBhcmUgbWVhbnQgdG8gYmUgdXNlcmRlZmluZWQgYW5kIG5vdCBlYXNpbHkgZW5jb2RlZCBpbiBhIE9XQy5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFzdGVyTGF5ZXIkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcoXHJcbiAgICBvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxXbXRzTGF5ZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFdtdHNPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbikucGlwZShtYXAoKG9wdGlvbnM6IElXbXRzT3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IG5ldyBXbXRzTGF5ZXIob3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBsYXllcjtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlV21zTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBPYnNlcnZhYmxlPFdtc0xheWVyPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBJV21zT3B0aW9ucyA9IHRoaXMuZ2V0V21zT3B0aW9ucyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgV21zTGF5ZXIob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gb2YobGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXbXRzT3B0aW9ucyhcclxuICAgIG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UsIGNvbnRleHQ6IElPd3NDb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElXbXRzT3B0aW9ucz4ge1xyXG4gICAgY29uc3QgcmFzdGVyT3B0aW9uczogSVJhc3RlckxheWVyT3B0aW9ucyA9IHRoaXMuZ2V0UmFzdGVyTGF5ZXJPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyRm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UpO1xyXG5cclxuICAgIGxldCBzdHlsZTogc3RyaW5nO1xyXG4gICAgaWYgKG9mZmVyaW5nLnN0eWxlcykge1xyXG4gICAgICBjb25zdCBzdHlsZUluZm8gPSBvZmZlcmluZy5zdHlsZXMuZmluZChzID0+IHMuZGVmYXVsdCk7XHJcbiAgICAgIGlmIChzdHlsZUluZm8pIHtcclxuICAgICAgICBzdHlsZSA9IHN0eWxlSW5mby5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0cml4U2V0Rm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UsIHRhcmdldFByb2plY3Rpb24pLnBpcGUobWFwKCgobWF0cml4U2V0OiBJRW9jT3dzV210c01hdHJpeFNldCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRyaXhTZXRPcHRpb25zOiBJTGlzdE1hdHJpeFNldCA9IHtcclxuICAgICAgICBtYXRyaXhTZXQ6IG1hdHJpeFNldC5tYXRyaXhTZXQsXHJcbiAgICAgICAgbWF0cml4SWRzOiBtYXRyaXhTZXQubWF0cml4SWRzLFxyXG4gICAgICAgIHJlc29sdXRpb25zOiBtYXRyaXhTZXQucmVzb2x1dGlvbnNcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgd210c09wdGlvbnM6IElXbXRzT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5yYXN0ZXJPcHRpb25zLFxyXG4gICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGxheWVyOiBsYXllcixcclxuICAgICAgICAgIG1hdHJpeFNldE9wdGlvbnM6IG1hdHJpeFNldE9wdGlvbnMsXHJcbiAgICAgICAgICBwcm9qZWN0aW9uOiB0YXJnZXRQcm9qZWN0aW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxyXG4gICAgICAgICAgZm9ybWF0OiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtdHNPcHRpb25zO1xyXG4gICAgfSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGF5ZXJGb3JXTVRTKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgW3VybCwgdXJsUGFyYW1zXSA9IHRoaXMucGFyc2VPcGVyYXRpb25Vcmwob2ZmZXJpbmcsICdHZXRUaWxlJyk7XHJcbiAgICBpZiAodXJsUGFyYW1zWydMQVlFUiddKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJhbXNbJ0xBWUVSJ107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSBpcyBubyBsYXllci1wYXJhbWV0ZXIgaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2UuaWR9LlxyXG4gICAgICBDYW5ub3QgaW5mZXIgbGF5ZXIuYCwgb2ZmZXJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9wZXJhdGlvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nLCBvcENvZGU6IHN0cmluZyk6IFtzdHJpbmcsIG9iamVjdF0ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gb2ZmZXJpbmcub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLmNvZGUgPT09IG9wQ29kZSk7XHJcbiAgICAgIGlmIChvcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybEZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZ2V0SnNvbkZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIHJldHVybiBbdXJsLCB1cmxQYXJhbXNdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZXJlIGlzIG5vICR7b3BDb2RlfS1vcGVyYXRpb24gaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0uYCwgb2ZmZXJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgb2ZmZXJpbmcgJHtvZmZlcmluZy5jb2RlfSBoYXMgbm8gb3BlcmF0aW9ucy5gLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hdHJpeFNldEZvcldNVFMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW9jT3dzV210c01hdHJpeFNldD4ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm1hdHJpeFNldHMpIHtcclxuICAgICAgY29uc3QgbWF0cml4U2V0ID0gb2ZmZXJpbmcubWF0cml4U2V0cy5maW5kKG0gPT4gbS5zcnMgPT09IHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgICByZXR1cm4gb2YobWF0cml4U2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IFt1cmwsIHVybFBhcmFtc10gPSB0aGlzLnBhcnNlT3BlcmF0aW9uVXJsKG9mZmVyaW5nLCAnR2V0Q2FwYWJpbGl0aWVzJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLndtdHNDbGllbnQuZ2V0Q2FwYWJpbGl0aWVzKHVybCkucGlwZShcclxuICAgICAgICBtYXAoKGNhcGFiaWxpdGllczogb2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXRzID0gY2FwYWJpbGl0aWVzWyd2YWx1ZSddWydjb250ZW50cyddWyd0aWxlTWF0cml4U2V0J107XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXQgPSBtYXRyaXhTZXRzLmZpbmQobXMgPT4gbXNbJ2lkZW50aWZpZXInXVsndmFsdWUnXSA9PT0gdGFyZ2V0UHJvamVjdGlvbik7XHJcbiAgICAgICAgICBjb25zdCBvd3NNYXRyaXhTZXQ6IElFb2NPd3NXbXRzTWF0cml4U2V0ID0ge1xyXG4gICAgICAgICAgICBzcnM6IHRhcmdldFByb2plY3Rpb24sXHJcbiAgICAgICAgICAgIG1hdHJpeFNldDogbWF0cml4U2V0WydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10sXHJcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10pLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydzY2FsZURlbm9taW5hdG9yJ10pLFxyXG4gICAgICAgICAgICBvcmlnaW46IHtcclxuICAgICAgICAgICAgICB4OiBtYXRyaXhTZXRbJ3RpbGVNYXRyaXgnXVswXVsndG9wTGVmdENvcm5lciddWzFdLFxyXG4gICAgICAgICAgICAgIHk6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0b3BMZWZ0Q29ybmVyJ11bMF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGlsZXNpemU6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0aWxlSGVpZ2h0J11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gb3dzTWF0cml4U2V0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdtc09wdGlvbnMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBJV21zT3B0aW9ucyB7XHJcbiAgICBjb25zdCByYXN0ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRSYXN0ZXJMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChyYXN0ZXJPcHRpb25zLnR5cGUgPT09IFdtc0xheWVydHlwZSkge1xyXG5cclxuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG4gICAgICBsZXQgZGVmYXVsdFN0eWxlO1xyXG4gICAgICBpZiAob2ZmZXJpbmcuc3R5bGVzKSB7XHJcbiAgICAgICAgZGVmYXVsdFN0eWxlID0gb2ZmZXJpbmcuc3R5bGVzLmZpbmQocyA9PiBzLmRlZmF1bHQpLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtczogSVdtc1BhcmFtcyA9IHtcclxuICAgICAgICBMQVlFUlM6IHVybFBhcmFtc1snTEFZRVJTJ10sXHJcbiAgICAgICAgRk9STUFUOiB1cmxQYXJhbXNbJ0ZPUk1BVCddLFxyXG4gICAgICAgIFRJTUU6IHVybFBhcmFtc1snVElNRSddLFxyXG4gICAgICAgIFZFUlNJT046IHVybFBhcmFtc1snVkVSU0lPTiddLFxyXG4gICAgICAgIFRJTEVEOiB1cmxQYXJhbXNbJ1RJTEVEJ10sXHJcbiAgICAgICAgVFJBTlNQQVJFTlQ6IHRydWUsXHJcbiAgICAgICAgU1RZTEVTOiBkZWZhdWx0U3R5bGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdtc09wdGlvbnM6IElXbXNPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLnJhc3Rlck9wdGlvbnMsXHJcbiAgICAgICAgdHlwZTogJ3dtcycsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtc09wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGByZXNvdXJjZSAke3Jlc291cmNlLmlkfSBjYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBXTVMtTGF5ZXJgLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhc3RlckxheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElSYXN0ZXJMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChpc1Jhc3RlckxheWVydHlwZShsYXllck9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgY29uc3QgcmFzdGVyTGF5ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmxheWVyT3B0aW9ucyxcclxuICAgICAgICB0eXBlOiBsYXllck9wdGlvbnMudHlwZSBhcyBUUmFzdGVyTGF5ZXJ0eXBlLFxyXG4gICAgICAgIHVybDogdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZiksXHJcbiAgICAgICAgc3ViZG9tYWluczogc2hhcmRzRXhwYW5kKHRoaXMuZ2V0UmVzb3VyY2VTaGFyZHMocmVzb3VyY2UpKVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmFzdGVyTGF5ZXJPcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGxheWVyICR7bGF5ZXJPcHRpb25zLmlkfSBpcyBub3QgYSByYXN0ZXJsYXllcmAsIGxheWVyT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICBpZDogcmVzb3VyY2UuaWQgYXMgc3RyaW5nLFxyXG4gICAgICB0eXBlOiB0aGlzLmdldExheWVydHlwZUZyb21PZmZlcmluZ0NvZGUob2ZmZXJpbmcpLFxyXG4gICAgICBuYW1lOiB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpLFxyXG4gICAgICByZW1vdmFibGU6IHRydWUsXHJcbiAgICAgIGNvbnRpbnVvdXNXb3JsZDogZmFsc2UsXHJcbiAgICAgIG9wYWNpdHk6IHRoaXMuZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIGF0dHJpYnV0aW9uOiB0aGlzLmdldFJlc291cmNlQXR0cmlidXRpb24ocmVzb3VyY2UpLFxyXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmdldFJlc291cmNlRGltZW5zaW9ucyhyZXNvdXJjZSksXHJcbiAgICAgIGxlZ2VuZEltZzogdGhpcy5nZXRMZWdlbmRVcmwob2ZmZXJpbmcpLFxyXG4gICAgICBzdHlsZXM6IG9mZmVyaW5nLnN0eWxlc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmVzb3VyY2UuYmJveCkge1xyXG4gICAgICBsYXllck9wdGlvbnMuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyT3B0aW9ucy5iYm94ID0gY29udGV4dC5iYm94O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllck9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKiogTWlzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgcHJpdmF0ZSBnZXRVcmxGcm9tVXJpKHVyaTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCB1cmkuaW5kZXhPZignPycpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhlbHBlciB0byBwYWNrIHF1ZXJ5LXBhcmFtZXRlcnMgb2YgYSB1cmkgaW50byBhIEpTT05cclxuICAgKiBAcGFyYW0gdXJpIGFueSB1cmkgd2l0aCBxdWVyeS1wYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRKc29uRnJvbVVyaSh1cmk6IHN0cmluZyk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHVyaS5zdWJzdHIodXJpLmxhc3RJbmRleE9mKCc/JykgKyAxKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBwYXJ0LnNwbGl0KCc9Jyk7XHJcbiAgICAgIHJlc3VsdFtpdGVtWzBdLnRvVXBwZXJDYXNlKCldID0gZGVjb2RlVVJJQ29tcG9uZW50KGl0ZW1bMV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGRpc3BsYXkgbmFtZSBvZiBsYXllciwgYmFzZWQgb24gSU93c1Jlc291cmNlIGFuZCBJT3dzT2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gb2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gcmVzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpc3BsYXlOYW1lKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIGxldCBkaXNwbGF5TmFtZSA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCd0aXRsZScpKSB7XHJcbiAgICAgIGlmIChvZmZlcmluZy50aXRsZSkge1xyXG4gICAgICAgIGRpc3BsYXlOYW1lID0gb2ZmZXJpbmcudGl0bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqLS0tLS0tLS0tLS0tIERBVEEgVE8gRklMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cclxuICAvKipcclxuICAgKiBAVE9ETzpcclxuICAgKiAgIC0gcHJvcGVydGllc1xyXG4gICAqL1xyXG4gIGdlbmVyYXRlT3dzQ29udGV4dEZyb20oaWQ6IHN0cmluZywgbGF5ZXJzOiBMYXllcltdLCBleHRlbnQ/OiBUR2VvRXh0ZW50LCBwcm9wZXJ0aWVzPyk6IElFb2NPd3NDb250ZXh0IHtcclxuXHJcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICBsYW5nOiAnJyxcclxuICAgICAgICBsaW5rczogW10sXHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZWQ6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG93YzogSUVvY093c0NvbnRleHQgPSB7XHJcbiAgICAgICdpZCc6IGlkLFxyXG4gICAgICAndHlwZSc6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgICAgICdwcm9wZXJ0aWVzJzogcHJvcGVydGllcyxcclxuICAgICAgJ2ZlYXR1cmVzJzogW11cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGV4dGVudCkge1xyXG4gICAgICBvd2NbJ2Jib3gnXSA9IGV4dGVudDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgbGV0IHJlc291cmNlOiBJRW9jT3dzUmVzb3VyY2UgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIGZvciBsYXllciB0eXBlc1xyXG4gICAgICBvd2MuZmVhdHVyZXMucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG93YztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogSUVvY093c1Jlc291cmNlIHtcclxuICAgIGxldCByZXNvdXJjZTogSUVvY093c1Jlc291cmNlID0ge1xyXG4gICAgICAnaWQnOiBsYXllci5pZCxcclxuICAgICAgJ3Byb3BlcnRpZXMnOiB7XHJcbiAgICAgICAgdGl0bGU6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgdXBkYXRlZDogbnVsbCxcclxuICAgICAgICBvZmZlcmluZ3M6IFt0aGlzLmdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXIpXSxcclxuICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxyXG4gICAgICAgIGF0dHJpYnV0aW9uOiBsYXllci5hdHRyaWJ1dGlvbixcclxuICAgICAgfSxcclxuICAgICAgJ3R5cGUnOiAnRmVhdHVyZScsXHJcbiAgICAgICdnZW9tZXRyeSc6IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXI6IExheWVyLCBsZWdlbmRVcmw/OiBzdHJpbmcsIGljb25Vcmw/OiBzdHJpbmcpOiBJRW9jT3dzT2ZmZXJpbmcge1xyXG4gICAgbGV0IG9mZmVyaW5nOiBJRW9jT3dzT2ZmZXJpbmcgPSB7XHJcbiAgICAgICdjb2RlJzogdGhpcy5nZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXIpLFxyXG4gICAgICAndGl0bGUnOiBsYXllci5uYW1lXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChsYXllci50eXBlID09IEdlb2pzb25MYXllcnR5cGUpIHtcclxuICAgICAgb2ZmZXJpbmcuY29udGVudHMgPSB0aGlzLmdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyIGFzIFZlY3RvckxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9mZmVyaW5nLm9wZXJhdGlvbnMgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZWdlbmRVcmwpIG9mZmVyaW5nLmxlZ2VuZFVybCA9IGxlZ2VuZFVybDtcclxuICAgIGlmIChpY29uVXJsKSBvZmZlcmluZy5pY29uVXJsID0gaWNvblVybDtcclxuXHJcbiAgICByZXR1cm4gb2ZmZXJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcyc7XHJcbiAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtdHMnO1xyXG4gICAgICBjYXNlIEdlb2pzb25MYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW9qc29uJztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBsYXllciAoJHtsYXllci50eXBlfSkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC5gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyOiBWZWN0b3JMYXllcik6IElPd3NDb250ZW50W10ge1xyXG4gICAgbGV0IGNvbnRlbnRzID0gW107XHJcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9qc29uTGF5ZXJ0eXBlOlxyXG4gICAgICAgIGxldCBjb250ZW50ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGxheWVyLmRhdGEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29udGVudHMgZm9yIHRoaXMgdHlwZSBvZiB2ZWN0b3JsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudHM7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBSYXN0ZXJMYXllcikge1xyXG4gICAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtdHNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBjYXNlIFh5ekxheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFh5ek9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IG9wZXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XHJcbiAgICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICAgIC8vIGNhc2UgJ3dmcyc6IDwtLS0gdGhpcyB0eXBlIG9mIGxheWVyIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQgaW4gZGF0YXR5cGVzLWxheWVycy9MYXllcnMudHMgXHJcbiAgICAgICAgLy8gICByZXR1cm4gdGhpcy5nZXRXZnNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIHNlcnZpY2UgKCR7bGF5ZXIudHlwZX0pIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0WHl6T3BlcmF0aW9uc0Zyb21MYXllcihsYXllcjogUmFzdGVyTGF5ZXIpOiBJT3dzT3BlcmF0aW9uW10ge1xyXG4gICAgbGV0IHJlc3RDYWxsOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdSRVNUJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICd0ZXh0L2h0bWwnLFxyXG4gICAgICAnaHJlZic6IGAke2xheWVyLnVybH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgcmVzdENhbGxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRUbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICAvLyBAVE9ETzogd2hhdCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIFRNUz8gaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFdmc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFZlY3RvckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IGxheWVyTmFtZSA9IGxheWVyLm5hbWU7XHJcbiAgICBsZXQgdmVyc2lvbiA9IGxheWVyLm9wdGlvbnMudmVyc2lvbiA/IGxheWVyLm9wdGlvbnMudmVyc2lvbiA6ICcxLjEuMCc7XHJcblxyXG5cclxuICAgIGxldCBHZXRGZWF0dXJlOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdHZXRGZWF0dXJlJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V0ZTJnZlcnNpb249JHt2ZXJzaW9ufSZyZXF1ZXN0PUdldEZlYXR1cmVgXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGxldCBEZXNjcmliZUZlYXR1cmVUeXBlOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBHZXRDYXBhYmlsaXRpZXM6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldFByb3BlcnR5VmFsdWU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldEZlYXR1cmVXaXRoTG9jazogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgTG9ja0ZlYXR1cmU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IFRyYW5zYWN0aW9uOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBDcmVhdGVTdG9yZWRRdWVyeTogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRHJvcFN0b3JlZFF1ZXJ5OiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBMaXN0U3RvcmVkUXVlcmllczogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRGVzY3JpYmVTdG9yZWRRdWVyaWVzOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICBsZXQgb3BlcmF0aW9ucyA9IFtcclxuICAgICAgR2V0RmVhdHVyZSxcclxuICAgICAgLy8gR2V0Q2FwYWJpbGl0aWVzLFxyXG4gICAgICAvLyBEZXNjcmliZUZlYXR1cmVUeXBlLFxyXG4gICAgICAvLyBHZXRQcm9wZXJ0eVZhbHVlLFxyXG4gICAgICAvLyBHZXRGZWF0dXJlV2l0aExvY2ssXHJcbiAgICAgIC8vIExvY2tGZWF0dXJlLFxyXG4gICAgICAvLyBUcmFuc2FjdGlvbixcclxuICAgICAgLy8gQ3JlYXRlU3RvcmVkUXVlcnksXHJcbiAgICAgIC8vIERyb3BTdG9yZWRRdWVyeSxcclxuICAgICAgLy8gTGlzdFN0b3JlZFF1ZXJpZXMsXHJcbiAgICAgIC8vIERlc2NyaWJlU3RvcmVkUXVlcmllc1xyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXRXbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcblxyXG4gICAgbGV0IHVybCA9IGxheWVyLnVybDtcclxuICAgIGxldCB3bXNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLlZFUlNJT047XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldE1hcDogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0TWFwJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6IGZvcm1hdCxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V01TJnZlcnNpb249JHt3bXNWZXJzaW9ufSZyZXF1ZXN0PUdldE1hcCZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH0mVElMRUQ9dHJ1ZWBcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/c2VydmljZT1XTVMmdmVyc2lvbj0ke3dtc1ZlcnNpb259JnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzYFxyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZXRGZWF0dXJlSW5mbzogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0RmVhdHVyZUluZm8nLFxyXG4gICAgICAnbWV0aG9kJzogJ0dFVCcsXHJcbiAgICAgICd0eXBlJzogJ3RleHQvaHRtbCcsXHJcbiAgICAgICdocmVmJzogYCR7dXJsfT9zZXJ2aWNlPVdNUyZ2ZXJzaW9uPSR7d21zVmVyc2lvbn0mcmVxdWVzdD1HZXRGZWF0dXJlSW5mbyZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgZ2V0TWFwLFxyXG4gICAgICBnZXRDYXBhYmlsaXRpZXMsXHJcbiAgICAgIGdldEZlYXR1cmVJbmZvXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBvcGVyYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0V210c09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFJhc3RlckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IHdtdHNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLnZlcnNpb247XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldFRpbGU6IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldFRpbGUnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0VGlsZSZGT1JNQVQ9JHtmb3JtYXR9JkxBWUVSPSR7bGF5ZXJJZH0mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiBmb3JtYXRcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7d210c1ZlcnNpb259YCxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnXHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90ZTogd2UgZGVsaWJlcmF0ZWx5IHVzZSB0aGUgV01TIHByb3RvY29sIGhlcmUgaW5zdGVhZCBvZiBXTVRTLlxyXG4gICAgLy8gUmVhc29uOiBXTVRTIGRlbGl2ZXJzIFJHQi12YWx1ZXMsIHdoZXJhcyBXTVMgZGVsaXZlcnMgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSBhIHRpbGUuXHJcbiAgICBsZXQgZ2V0RmVhdHVyZUluZm86IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldEZlYXR1cmVJbmZvJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01TJlJFUVVFU1Q9R2V0RmVhdHVyZUluZm8mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiAndGV4dC9odG1sJ1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcGVyYXRpb25zOiBJT3dzT3BlcmF0aW9uW10gPSBbXHJcbiAgICAgIGdldFRpbGUsXHJcbiAgICAgIGdldENhcGFiaWxpdGllcyxcclxuICAgICAgZ2V0RmVhdHVyZUluZm9cclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/owc/types/eoc-owc-json.js b/@ukis/esm5/lib/owc/types/eoc-owc-json.js deleted file mode 100644 index 734e24c8b..000000000 --- a/@ukis/esm5/lib/owc/types/eoc-owc-json.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -export function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -export function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -export function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -export function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -export function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -export function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -export function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -export function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9jLW93Yy1qc29uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL293Yy90eXBlcy9lb2Mtb3djLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFPQSxvQ0FHQzs7O0lBRkcsa0NBQTRCOztJQUM1QixxQ0FBa0M7Ozs7O0FBR3RDLHFDQUVDOzs7SUFERyxxQ0FBc0M7Ozs7O0FBRzFDLCtDQUtDOzs7SUFKRyw0Q0FBaUI7O0lBQ2pCLGdEQUFxQjs7SUFDckIsMkNBQWdCOztJQUNoQiwrQ0FBdUM7Ozs7O0FBRzNDLCtDQUlDOzs7SUFIQyx5Q0FBZ0M7O0lBQ2hDLDhDQUFxQzs7Ozs7O0FBSXZDLDhDQUtDOzs7Ozs7SUFIQywyQ0FBaUI7O0lBQ2pCLHlDQUFjOztJQUNkLHlDQUFlOzs7OztBQUdqQixxQ0FPQzs7O0lBTkcsK0JBRWdEOztJQUNoRCxvQ0FBbUI7O0lBQ25CLGtDQUFpQjs7SUFDakIsZ0NBQWU7Ozs7O0FBR25CLHFDQUVDOzs7SUFERywrQkFBbUI7Ozs7O0FBR3ZCLHlDQUdDOzs7SUFGRyxtQ0FBb0I7O0lBQ3BCLHlDQUFvQzs7Ozs7QUFHeEMsMENBY0M7Ozs7OztJQVpHLG1DQUFZOztJQUNaLHlDQUFrQjs7SUFDbEIseUNBQW9COztJQUNwQixzQ0FHRTs7SUFDRiwyQ0FBc0I7O0lBQ3RCLHdDQUdFOzs7OztBQUdOLHVDQUtDOzs7SUFKRyxpQ0FBbUI7O0lBQ25CLGlDQUFhOztJQUNiLG9DQUFrQjs7SUFDbEIsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU93c0NvbnRleHQsIElPd3NSZXNvdXJjZSwgSU93c09mZmVyaW5nLCBXTVNfT2ZmZXJpbmcsIFdGU19PZmZlcmluZywgV0NTX09mZmVyaW5nLCBXUFNfT2ZmZXJpbmcsXHJcbiAgICBDU1dfT2ZmZXJpbmcsIFdNVFNfT2ZmZXJpbmcsIEdNTF9PZmZlcmluZywgS01MX09mZmVyaW5nLCBHZW9USUZGX09mZmVyaW5nLCBHTUxKUDJfT2ZmZXJpbmcsXHJcbiAgICBHTUxDT1ZfT2ZmZXJpbmcsIElPd3NSZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tICcuL293Yy1qc29uJztcclxuXHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2VvSlNPTiBmcm9tICdnZW9qc29uJztcclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzQ29udGV4dCBleHRlbmRzIElPd3NDb250ZXh0IHtcclxuICAgIGZlYXR1cmVzOiBJRW9jT3dzUmVzb3VyY2VbXTtcclxuICAgIHByb2plY3Rpb25zPzogSUVvY093c1Byb2plY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2UgZXh0ZW5kcyBJT3dzUmVzb3VyY2Uge1xyXG4gICAgcHJvcGVydGllczogSUVvY093c1Jlc291cmNlUHJvcGVydGllcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIGV4dGVuZHMgSU93c1Jlc291cmNlUHJvcGVydGllcyB7XHJcbiAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmc7XHJcbiAgICBzaGFyZHM/OiBzdHJpbmc7XHJcbiAgICBkaW1lbnNpb25zPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VEaW1lbnNpb25zIHtcclxuICB0aW1lPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9uO1xyXG4gIGVsZXZhdGlvbj86IElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbjtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiB7XHJcbiAgLyoqIERlZmF1bHQgc3RlcCBkaXNwbGF5IG9mIHRpbWUgc2xpZGVyICovXHJcbiAgZGlzcGxheT86IHN0cmluZztcclxuICB1bml0czogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NPZmZlcmluZyBleHRlbmRzIElPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmcgfCBXRlNfT2ZmZXJpbmcgfCBXQ1NfT2ZmZXJpbmcgfCBXUFNfT2ZmZXJpbmcgfCBDU1dfT2ZmZXJpbmcgfFxyXG4gICAgICAgIFdNVFNfT2ZmZXJpbmcgfCBHTUxfT2ZmZXJpbmcgfCBLTUxfT2ZmZXJpbmcgfCBHZW9USUZGX09mZmVyaW5nIHwgR01MSlAyX09mZmVyaW5nIHxcclxuICAgICAgICBHTUxDT1ZfT2ZmZXJpbmcgfCBHZW9Kc29uX09mZmVyaW5nIHwgc3RyaW5nO1xyXG4gICAgbGVnZW5kVXJsPzogc3RyaW5nO1xyXG4gICAgaWNvblVybD86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NXbXNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVRTX09mZmVyaW5nO1xyXG4gICAgbWF0cml4U2V0cz86IElFb2NPd3NXbXRzTWF0cml4U2V0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNNYXRyaXhTZXQge1xyXG4gICAgLyoqIEVQU0ctQ29kZSAqL1xyXG4gICAgc3JzOiBzdHJpbmc7XHJcbiAgICBtYXRyaXhTZXQ6IHN0cmluZztcclxuICAgIG1hdHJpeElkczogc3RyaW5nW107XHJcbiAgICBvcmlnaW46IHtcclxuICAgICAgICB4OiBudW1iZXIsXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICB9O1xyXG4gICAgcmVzb2x1dGlvbnM6IG51bWJlcltdO1xyXG4gICAgdGlsZXNpemU6IHtcclxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgICAgICB3aWR0aDogbnVtYmVyXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NQcm9qZWN0aW9uIHtcclxuICAgIGJib3g6IEdlb0pTT04uQkJveDtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gICAgdW5pdD86IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vKipcclxuKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVleHRlbnNpb24tb2ZmZXJpbmdzXHJcbiovXHJcbmV4cG9ydCB0eXBlIEdlb0pzb25fT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbmV4cG9ydCB0eXBlIFh5el9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/lib/owc/types/owc-json.js b/@ukis/esm5/lib/owc/types/owc-json.js deleted file mode 100644 index c6b4a00e0..000000000 --- a/@ukis/esm5/lib/owc/types/owc-json.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -export function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -export function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -export function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -export function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -export function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -export function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -export function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvb3djL3R5cGVzL293Yy1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBLGlDQTJDQzs7Ozs7OztJQXRDQyx5QkFBb0I7O0lBQ3BCLGlDQWdDRTs7Ozs7SUFFRiwrQkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNCLGtDQVFDOzs7Ozs7O0lBSEMsMEJBQW9COztJQUNwQixrQ0FBbUM7Ozs7OztBQUlyQyw0Q0FnQ0M7Ozs7OztJQTlCQyx1Q0FBYzs7Ozs7SUFFZCx5Q0FBb0I7Ozs7O0lBRXBCLDBDQUFrQjs7Ozs7SUFFbEIseUNBQXVCOzs7OztJQUV2QiwyQ0FBbUI7Ozs7O0lBRW5CLHdDQUFnQjs7Ozs7SUFFaEIsc0NBQWtCOzs7OztJQUVsQiwyQ0FBMkI7Ozs7O0lBRTNCLHdDQUFpQjs7Ozs7SUFFakIsNENBQTZCOzs7OztJQUU3QixxREFBNkI7Ozs7O0lBRTdCLHFEQUE2Qjs7Ozs7O0lBSTdCLHdDQUFnQjs7Ozs7SUFFaEIsdUNBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QnRCLGtDQVVDOzs7Ozs7SUFSQyw0QkFDNEY7Ozs7O0lBRTVGLGtDQUE2Qjs7Ozs7SUFFN0IsZ0NBQXlCOztJQUN6Qiw4QkFBd0I7Ozs7OztBQUsxQixpQ0FJQzs7O0lBSEMsNEJBQWU7O0lBQ2YsMEJBQWE7O0lBQ2IsOEJBQWlCOzs7OztBQUduQixnQ0FNQzs7Ozs7O0lBSkMsMEJBQWM7O0lBQ2QsMkJBQWU7O0lBQ2YseUJBQWE7Ozs7OztBQUlmLG1DQUtDOzs7SUFKQywrQkFBZ0I7Ozs7O0lBRWhCLDZCQUFjOztJQUNkLDhCQUFlOzs7OztBQUdqQiwrQkFTQzs7O0lBUkMsd0JBQVk7O0lBQ1oseUJBQWM7O0lBQ2QseUJBQWM7O0lBQ2QsMEJBQWU7Ozs7O0lBRWYsK0JBQW9COztJQUNwQix5QkFBa0I7Ozs7OztBQUlwQiw0Q0FJQzs7O0lBSEMsdUNBQWU7O0lBQ2YscUNBQWE7O0lBQ2IseUNBQWlCOzs7OztBQUduQix3Q0FTQzs7Ozs7O0lBUEMsd0NBQW9COzs7OztJQUVwQix5Q0FBcUI7Ozs7OztJQUdyQix3Q0FBb0I7Ozs7Ozs7QUFPdEIsbUNBZUM7Ozs7Ozs7SUFWQyw2QkFBYTs7Ozs7SUFFYiwrQkFBZTs7SUFDZiw2QkFBYzs7Ozs7SUFFZCw2QkFBYzs7SUFDZCxnQ0FBc0I7O0lBQ3RCLCtCQUFxQjs7Ozs7O0FBTXZCLGlDQVFDOzs7Ozs7SUFOQywyQkFBYTs7SUFDYiwyQkFBYzs7SUFDZCw0QkFBZTs7Ozs7SUFFZiw4QkFBaUI7Ozs7OztBQUluQixrQ0FRQzs7O0lBUEMsNEJBQWE7O0lBQ2IsNkJBQWM7O0lBQ2QsZ0NBQWtCOztJQUNsQiwrQkFBa0I7O0lBQ2xCLGlDQUFtQjs7SUFDbkIsK0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIE9HQyBPV1MgQ29udGV4dCBHZW8gRW5jb2RpbmcgU3RhbmRhcmQgVmVyc2lvbjogMS4wXHJcbiAqIGh0dHA6Ly9kb2NzLm9wZW5nZW9zcGF0aWFsLm9yZy9pcy8xNC0wNTVyMi8xNC0wNTVyMi5odG1sXHJcbiAqIERlZmluaXRpb25zIGJ5OiBNYXRoaWFzIEJvZWNrXHJcbiAqIFR5cGVTY3JpcHQgVmVyc2lvbjogMi41LjNcclxuICpcclxuICogZGVwZW5kcyBvbiBAdHlwZXMvZ2VvanNvbkBeNzk0Ni4wLjJcclxuICovXHJcbmltcG9ydCAqIGFzIEdlb0pTT04gZnJvbSAnZ2VvanNvbic7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBPV1MgQ29udGV4dCBkZXNjcmliZXMgTWV0YWRhdGEsIEFQSSwgVGltZSBSYW5nZVxyXG4gKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWV0aGUtb3dzLWNvbnRleHQtZG9jdW1lbnQtc3RydWN0dXJlXHJcbiAqIElmIG5vIGJvdW5kaW5nIGJveCBpcyBzcGVjaWZpZWQsIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdmlldyB3aGVuIHRoZSBjb250ZXh0IGRvY3VtZW50IGlzIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRleHQgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmVDb2xsZWN0aW9uPEdlb0pTT04uR2VvbWV0cnlPYmplY3QgfCBudWxsLCBHZW9KU09OLkdlb0pzb25Qcm9wZXJ0aWVzPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGlkIGVsZW1lbnQgZGVmaW5lcyBhIG1hbmRhdG9yeSByZWZlcmVuY2UgdG8gdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50LlxyXG4gICAqIFRoZSBjb250ZW50IGZvciB0aGUgaWQgZWxlbWVudCBTSEFMTCBiZSBhbiBJUkksIGFzIGRlZmluZWQgYnkgSUVURiBbUkZDMzk4N11cclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IHtcclxuICAgIGxpbmtzOiB7IHByb2ZpbGVzOiBzdHJpbmdbXSB9IHwgSU93c0xpbmtzW107XHJcbiAgICAvKiogTGFuZ3VhZ2Ugb2YgQ29udGV4dCBkb2N1bWVudCBjb250ZW50ICovXHJcbiAgICBsYW5nOiBMYW5nU3RyaW5nO1xyXG4gICAgLyoqIFRpdGxlIGZvciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIC8qKiBEYXRlIG9mIGEgY3JlYXRpb24gb3IgdXBkYXRlIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICB1cGRhdGVkOiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50IHB1cnBvc2Ugb3IgY29udGVudCAqL1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBpbmRpY2F0ZXMgdGhlIGF1dGhvcnMgYXJyYXkgb2YgdGhlIENvbnRleHQgZG9jdW1lbnQgKi9cclxuICAgIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgICAvKiogSWRlbnRpZmllciBmb3IgdGhlIHB1Ymxpc2hlciBvZiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcHVibGlzaGVyPzogc3RyaW5nO1xyXG4gICAgLyoqIFRvb2wvYXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIENvbnRleHQgZG9jdW1lbnQgYW5kIGl0cyBwcm9wZXJ0aWVzICovXHJcbiAgICBjcmVhdG9yPzogSU93c0NyZWF0b3I7XHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnRpZXMgb2YgdGhlIGRpc3BsYXkgaW4gdXNlIHdoZW4gdGhlIGNvbnRleHQgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgKGZvciBkaXNwbGF5IGJhc2VkIGFwcGxpY2F0aW9ucyBvbmx5KS5cclxuICAgICAqIFRoaXMgY2xhc3MgaXMgb3B0aW9uYWwgYW5kIGludGVuZGVkIGZvciBjcmVhdG9yIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB3aXRoIGEgZ2VvZ3JhcGhpY2FsIGRpc3BsYXkgd2l0aGluIGEgZml4ZWQgcGl4ZWwgc2l6ZSBhbmQgbm90IHNjYWxhYmxlIHRvIGRpZmZlcmVudCBjb21wdXRhdGlvbmFsIGRldmljZXMgXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXk/OiBJT3dzQ3JlYXRvckRpc3BsYXlbXTtcclxuICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcmlnaHRzPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIHJlc291cmNlIFxyXG4gICAgKiB0aW1lIHJhbmdlIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLlxyXG4gICAgKi9cclxuICAgIGRhdGU/OiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIFRoaXMgYXJyYXkgaXMgYW4gb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBjYXRlZ29yaWVzIHJlbGF0ZWQgdG8gdGhpcyBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gICAgLyoqIEV4dGVuc2lvbiBBbnkgb3RoZXIgZWxlbWVudCAqL1xyXG4gICAgW2s6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIC8qKiBPcmRlcmVkIExpc3Qgb2YgUmVzb3VyY2VzIGF2YWlsYWJsZSBvbiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIGZlYXR1cmVzOiBJT3dzUmVzb3VyY2VbXTtcclxuICAvKiogRXh0ZW5zaW9uIEFueSBvdGhlciBlbGVtZW50ICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVhY2ggbGF5ZXIgKGEuay5hLiBmZWF0dXJlKSBpbiBhIGNvbnRleHQgZG9jdW1lbnQgaXMga25vd24gYXMgYSDigJhSZXNvdXJjZeKAmVxyXG4gKiBBIFJlc291cmNlIHJlZmVyZW5jZSBhIHNldCBvZiBnZW9zcGF0aWFsIGluZm9ybWF0aW9uIHRvIGJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGVsZW1lbnQuXHJcbiAqIFRoZSByZXNvdXJjZXMgYXJlIG9yZGVyZWQgc3VjaCB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBkb2N1bWVudCBpcyB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGZyb250LlxyXG4gKiBUaGlzIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGxheWVycyBhcmUgZHJhd24uXHJcbiAqIEEgcmVzb3VyY2UgKHdoaWNoIGluIEdJUyB0ZXJtcyBpcyBhIGxheWVyKSBjYW4gaGF2ZSBhIG51bWJlciBvZiBvZmZlcmluZ3MsIGFuZCBlYWNoIG9mZmVyaW5nXHJcbiAqIGlzIGZvY3Vzc2VkIG9uIGEgcGFydGljdWxhciByZXByZXNlbnRhdGlvbiBvZiBpbmZvcm1hdGlvbi5cclxuICogVGhlc2UgY2FuIGJlIG9uZSBvZiBhIG51bWJlciBvZiBPR0MgV2ViIFNlcnZpY2VzLCBzcGVjaWZpY2FsbHkgV01TLCBXTVRTLCBXRlMsIFdDUywgV1BTIGFuZCBDU1csXHJcbiAqIG9yIG9uZSBvZiBhIG51bWJlciBvZiBpbmxpbmUgb3IgcmVmZXJlbmNlZCBmb3JtYXRzLCBzcGVjaWZpY2FsbHkgR01MLCBLTUwsIEdlb1RJRkYsIEdNTEpQMiwgR01MQ09WLFxyXG4gKiBvciBhIGN1c3RvbSBvZmZlcmluZyB0eXBlIGRlZmluZWQgaW4gYSBwcm9maWxlIG9yIGJ5IGFuIG9yZ2FuaXNhdGlvbi5cclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVldGhlLW93cy1jb250ZXh0LWRvY3VtZW50LXN0cnVjdHVyZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2UgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIFVuYW1iaWd1b3VzIHJlZmVyZW5jZSB0byB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIENvbnRleHQgcmVzb3VyY2UgKElSSSlcclxuICAgKiBTdHJpbmcgdHlwZSB0aGF0IFNIQUxMIGNvbnRhaW4gYSBVUkkgdmFsdWVcclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IElPd3NSZXNvdXJjZVByb3BlcnRpZXM7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIHtcclxuICAvKiogVGl0bGUgZ2l2ZW4gdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEYXRlIG9mIHRoZSBsYXN0IHVwZGF0ZSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIHVwZGF0ZWQ6IERhdGVTdHJpbmc7XHJcbiAgLyoqIFRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBnZW5lcmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50IGluIGEgZm9ybWF0IHVuZGVyc3RhbmRhYmxlIGJ5IGdlbmVyaWMgcmVhZGVycyAqL1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIC8qKiBUaGlzIGVsZW1lbnQgaXMgb3B0aW9uYWwgYW5kIGluZGljYXRlcyB0aGUgYXV0aG9ycyBhcnJheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgLyoqIEVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBDb250ZXh0IHJlc291cmNlIGF2YWlsYWJsZSAqL1xyXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcclxuICAvKiogSW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICByaWdodHM/OiBzdHJpbmc7XHJcbiAgLyoqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBkYXRlPzogRGF0ZVN0cmluZztcclxuICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBjYW4gY29udGFpbiBhIG51bWJlciBvZiBvZmZlcmluZ3MgZGVmaW5lZCBieSB0aGUgY2xhc3MgT1dDOk9mZmVyaW5nICovXHJcbiAgb2ZmZXJpbmdzPzogSU93c09mZmVyaW5nW107XHJcbiAgLyoqIEZsYWcgdmFsdWUgaW5kaWNhdGluZyB0byB0aGUgY2xpZW50IGlmIHRoZSBDb250ZXh0IHJlc291cmNlIHNob3VsZCBiZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdCAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqIFRoaXMgYXJyYXkgaXMgb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBhIGNhdGVnb3J5IHJlbGF0ZWQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gIC8qKiBNaW5pbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtaW5zY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBNYXhpbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtYXhzY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBEZWZpbml0aW9uIG9mIHRoZSBmb2xkZXIgaW4gd2hpY2ggdGhlIHJlc291cmNlIGlzIHBsYWNlZCBcclxuICAqIFRoZSBmb2xkZXIgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgdGhlIGNvbmNlcHQgcHJlc2VudCBpbiBtYW55IGNsaWVudHMgb3Igb3JnYW5pc2luZyBsYXllcnMgaW50byBmb2xkZXJzLlxyXG4gICovXHJcbiAgZm9sZGVyPzogc3RyaW5nO1xyXG4gIC8qKiBUT0RPISEhIGxpbmtzIGlzIGRlZmluZWQgYXMgT2JqZWN0IGJ1dCBpbiB0aGUgZXhhbXBsZXMgYXMgQXJyYXkgICovXHJcbiAgbGlua3M/OiBJT3dzTGlua3NbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEluIHJlYWxpdHkgYSByZXNvdXJjZSBjYW4gYmUgcmVhbGlzZWQgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGFuZCBzbyBhbiBPV0MgZG9jdW1lbnQgYWxsb3dzIHZhcmlvdXMgb3B0aW9ucyB0byBiZSBzcGVjaWZpZWQuXHJcbiAqIFRoZXNlIGFyZSBrbm93biBhcyBvZmZlcmluZ3MuXHJcbiAqIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGVzZSBhcmUsIGFzIGZhciBhcyBpcyBwb3NzaWJsZSBieSB0aGUgZm9ybWF0IHVzZWQsXHJcbiAqIGVxdWl2YWxlbnQgYW5kIG5vIHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIHRoZWlyIG9yZGVyIGluIHRoZSBzdGFuZGFyZC5cclxuICogVGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgYWx0ZXJuYXRpdmVzIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRvIGFsbG93IGl0IHRvIHZpc3VhbGlzZSBvciB1c2UgdGhlIHJlc291cmNlLlxyXG4gKlxyXG4gKiBTbyBmb3IgZXhhbXBsZSBmb3VyIG9mZmVyaW5ncywgYSBXTVMsIGEgV0ZTIHdpdGggcG9ydHJheWFsIGFzIFNMRCwgYW5kIGFuIGlubGluZSBHTUwgT2ZmZXJpbmcgYWdhaW4gd2l0aCBwb3J0cmF5YWwgYXMgU0xELlxyXG4gKiBEaWZmZXJlbnQgY2xpZW50cyBjb3VsZCB1c2UgdGhlc2Ugb2ZmZXJpbmdzIGFzIGFwcHJvcHJpYXRlOlxyXG4gKiAtIGEgc2ltcGxlIGJyb3dzZXIgYmFzZWQgY2xpZW50IGNvdWxkIHVzZSB0aGUgV01TIG9mZmVyaW5nIHByb3ZpZGVkLCB1c2luZyB0aGUgc3RhbmRhcmQgcG9ydHJheWFsXHJcbiAqIC0gYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY2xpZW50LCBjb3VsZCB1c2UgdGhlIFdGUyBvZmZlcmluZyBhbmQgdGhlIGFzc29jaWF0ZWQgU0xEIERvY3VtZW50LlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9mZmVyaW5nLCBzZXJ2aWNlIG9mZmVyaW5ncyBhbmQgZGF0YSBvZmZlcmluZ3MuXHJcbiAqIEEgc2VydmljZSBvZmZlcmluZyBoYXMgYSBzZXJ2aWNlIHJlcXVlc3QgKGluIHRoZSBmb3JtIG9mIGEgY2FwYWJpbGl0aWVzIHJlcXVlc3QgYW5kIGEgZGF0YSByZXF1ZXN0KVxyXG4gKiBhbmQgb3B0aW9uYWwgY29udGVudCBhbmQgc3R5bGluZyBlbGVtZW50cy5cclxuICogQSBkYXRhIG9mZmVyaW5nIGhhcyBhIGNvbnRlbnQgZWxlbWVudCBhbmQgb3B0aW9uYWwgc3R5bGluZyBlbGVtZW50cy5cclxuICpcclxuICpcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVlbXVsdGlwbGUtb2ZmZXJpbmdzLWFuZC1wcmlvcml0eVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT2ZmZXJpbmcge1xyXG4gIC8qKiBFeHRlbnNpb24gT2ZmZXJpbmdzIHdpdGggdHlwZSAtIHN0cmluZyAqL1xyXG4gIGNvZGU6IFdNU19PZmZlcmluZyB8IFdGU19PZmZlcmluZyB8IFdDU19PZmZlcmluZyB8IFdQU19PZmZlcmluZyB8IENTV19PZmZlcmluZyB8IFdNVFNfT2ZmZXJpbmcgfFxyXG4gIEdNTF9PZmZlcmluZyB8IEtNTF9PZmZlcmluZyB8IEdlb1RJRkZfT2ZmZXJpbmcgfCBHTUxKUDJfT2ZmZXJpbmcgfCBHTUxDT1ZfT2ZmZXJpbmcgfCBzdHJpbmc7XHJcbiAgLyoqIFdlYiBTZXJ2aWNlIE9mZmVyaW5ncyBwcm92aWRlIHRoZWlyIG9wZXJhdGlvbnMgKi9cclxuICBvcGVyYXRpb25zPzogSU93c09wZXJhdGlvbltdO1xyXG4gIC8qKiBDb250ZW50IE9mZmVyaW5ncyBhbGxvdyBjb250ZW50IHRvIGJlIGVtYmVkZGVkIGluIGFuIE9XUyBDb250ZXh0IGRvY3VtZW50LiAqL1xyXG4gIGNvbnRlbnRzPzogSU93c0NvbnRlbnRbXTtcclxuICBzdHlsZXM/OiBJT3dzU3R5bGVTZXRbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzQ3JlYXRvciB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0F1dGhvciB7XHJcbiAgLyoqIEVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZW1haWw/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NhdGVnb3JpZSB7XHJcbiAgc2NoZW1lPzogc3RyaW5nO1xyXG4gIC8qKiBDYXRlZ29yeSByZWxhdGVkIHRvIHRoaXMgY29udGV4dCBkb2N1bWVudC4gSXQgTUFZIGhhdmUgYSByZWxhdGVkIGNvZGUtbGlzdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgdGhlIHNjaGVtZSBhdHRyaWJ1dGUgKi9cclxuICB0ZXJtPzogc3RyaW5nO1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPd3NMaW5rcyB7XHJcbiAgcmVsOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIC8qKiBSZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBpbiBhbHRlcm5hdGl2ZSBmb3JtYXQgKi9cclxuICBhbHRlcm5hdGVzPzogc3RyaW5nO1xyXG4gIGxhbmc/OiBMYW5nU3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JBcHBsaWNhdGlvbiB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JEaXNwbGF5IHtcclxuICAvKiogV2lkdGggbWVhc3VyZWQgaW4gcGl4ZWxzIG9mIHRoZSBkaXNwbGF5IHNob3dpbmcgdGhlIEFyZWEgb2YgSW50ZXJlc3QgKi9cclxuICBwaXhlbFdpZHRoPzogbnVtYmVyO1xyXG4gIC8qKiBXaWR0aCBtZWFzdXJlZCBpbiBwaXhlbHMgb2YgdGhlIGRpc3BsYXkgc2hvd2luZyBieSB0aGUgQXJlYSBvZiBJbnRlcmVzdCAqL1xyXG4gIHBpeGVsSGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKiBUaGUgc2l6ZSBvZiBhIHBpeGVsIG9mIHRoZSBkaXNwbGF5IGluIG1pbGltZXRlcnMgXHJcbiAgICogKGNvbWJpbmVkIHdpdGggdGhlIHByZXZpb3VzIG9uZXMgYWxsb3dzIGZvciB0aGUgcmVhbCBkaXNwbGF5IHNpemUgdG8gYmUgY2FsY3VsYXRlZCkgKi9cclxuICBtbVBlclBpeGVsPzogbnVtYmVyO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb3N0IHNlcnZpY2Ugb2ZmZXJpbmdzIGhhdmUgdHdvIG9wZXJhdGlvbnMsIGEg4oCYR2V0Q2FwYWJpbGl0aWVz4oCZIG9wZXJhdGlvbiBhbmQgYSBkYXRhIG9wZXJhdGlvbiBzdWNoIGFzIOKAmEdldE1hcOKAmSBmb3IgV01TIFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT3BlcmF0aW9uIHtcclxuICAvKipcclxuICAgKiBUaGUgY29kZSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG9wZXJhdGlvbi5cclxuICAgKiBWYWxpZCB0eXBlcyBhcmUgZGVmaW5lZCB3aXRoaW4gZWFjaCBzcGVjaWZpYyBleHRlbnNpb24gd2l0aGluIHRoZSBPV1MgQ29udGV4dCBjb25jZXB0dWFsIG1vZGVsIFtPR0MgMTItMDgwXS5cclxuICAgKi9cclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgLyoqIG1ldGhvZCBkZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kLCBmb3IgZXhhbXBsZSBHRVQgb3IgUE9TVC4gKi9cclxuICBtZXRob2Q6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIC8qKiBocmVmIGlzIHRoZSBVUkkgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmVxdWVzdCAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgcmVxdWVzdD86IElPd3NDb250ZW50O1xyXG4gIHJlc3VsdD86IElPd3NDb250ZW50O1xyXG4gIC8qKiBFeHRlbnNpb24gb2YgT3BlcmF0aW9uICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRlbnQge1xyXG4gIC8qKiBNSU1FIHR5cGUgb2YgdGhlIENvbnRlbnQgKi9cclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKiogU3RyaW5nIHR5cGUsIG5vdCBlbXB0eSB0aGF0IGNhbiBjb250YWluIGFueSB0ZXh0IGVuY29kZWQgbWVkaWEgdHlwZSAqL1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzU3R5bGVTZXQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gIGxlZ2VuZFVSTD86IHN0cmluZztcclxuICBjb250ZW50PzogSU93c0NvbnRlbnQ7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcblxyXG4vKiogSVNPLTg2MDEgZm9ybWF0IGUuZy4gWVlZWS1NTS1ERFRoaDptbTpzc1ogb3IgWVlZWS1NTS1ERFRoaDptbTpzc1ovWVlZWS1NTS1ERFRoaDptbTpzc1ogKi9cclxuZXhwb3J0IHR5cGUgRGF0ZVN0cmluZyA9IHN0cmluZztcclxuXHJcblxyXG4vKiogUkZDLTMwNjYgY29kZSBlLmcuIGVuLGRlICovXHJcbmV4cG9ydCB0eXBlIExhbmdTdHJpbmcgPSBzdHJpbmc7XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgV01TX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcycgfFxyXG4gICAgJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMScgfCAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd21zLzEuMS4wJztcclxuZXhwb3J0IHR5cGUgV0ZTX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dmcyc7XHJcbmV4cG9ydCB0eXBlIFdDU19PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG5leHBvcnQgdHlwZSBXUFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd3BzJztcclxuZXhwb3J0IHR5cGUgQ1NXX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbmV4cG9ydCB0eXBlIFdNVFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd210cyc7XHJcbmV4cG9ydCB0eXBlIEdNTF9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWwnO1xyXG5leHBvcnQgdHlwZSBLTUxfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxuZXhwb3J0IHR5cGUgR2VvVElGRl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW90aWZmJztcclxuZXhwb3J0IHR5cGUgR01MSlAyX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbmV4cG9ydCB0eXBlIEdNTENPVl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWxjb3YnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/lib/services-ogc.module.js b/@ukis/esm5/lib/services-ogc.module.js deleted file mode 100644 index 2c156b24c..000000000 --- a/@ukis/esm5/lib/services-ogc.module.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { NgModule } from '@angular/core'; -import { OwcJsonService } from './owc/owc-json.service'; -import { WmtsClientService } from './wmts/wmtsclient.service'; -import { WpsClient } from './wps/wpsclient'; -var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; -}()); -export { ServicesOgcModule }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMtb2djLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDO0lBQUE7SUFNaUMsQ0FBQzs7Z0JBTmpDLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztpQkFDMUQ7O0lBQ2dDLHdCQUFDO0NBQUEsQUFObEMsSUFNa0M7U0FBckIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3djSnNvblNlcnZpY2UgfSBmcm9tICcuL293Yy9vd2MtanNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV210c0NsaWVudFNlcnZpY2UgfSBmcm9tICcuL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV3BzQ2xpZW50IH0gZnJvbSAnLi93cHMvd3BzY2xpZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbXSxcclxuICBleHBvcnRzOiBbXSxcclxuICBwcm92aWRlcnM6IFtPd2NKc29uU2VydmljZSwgV210c0NsaWVudFNlcnZpY2UsIFdwc0NsaWVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VzT2djTW9kdWxlIHsgfVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/lib/wmts/wmtsclient.service.js b/@ukis/esm5/lib/wmts/wmtsclient.service.js deleted file mode 100644 index 22abeb9fd..000000000 --- a/@ukis/esm5/lib/wmts/wmtsclient.service.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map } from 'rxjs/operators'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/common/http"; -/** @type {?} */ -var XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0'; -/** @type {?} */ -var SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0; -import * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language'; -/** @type {?} */ -var SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language; -import * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1'; -/** @type {?} */ -var GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1; -import * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0'; -/** @type {?} */ -var WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0; -var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(i0.ɵɵinject(i1.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; -}()); -export { WmtsClientService }; -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210c2NsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOzs7O0lBQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7SUFDekQsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0MsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDBCQUEwQixDQUFDOztJQUN2RCxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUTtBQUMxQyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sbUNBQW1DLENBQUM7O0lBQ3pFLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDLGlCQUFpQjtBQUNyRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O0lBQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7SUFDdkQsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVE7QUFJMUM7SUFRSSwyQkFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTs7WUFDMUIsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRU0sMkNBQWU7Ozs7O0lBQXRCLFVBQXdCLEdBQVcsRUFBRSxPQUFpQjtRQUF0RCxpQkFZQztRQVpvQyx3QkFBQSxFQUFBLGlCQUFpQjs7O1lBRTVDLGtCQUFrQixHQUFNLEdBQUcsc0RBQWlELE9BQVM7O1lBQ3JGLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxTQUFBLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHOzs7O1FBQUMsVUFBQSxRQUFRO1lBQ1IsT0FBTyxLQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7Z0JBMUJKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7Z0JBckJRLFVBQVU7Ozs0QkFEbkI7Q0FnREMsQUE1QkQsSUE0QkM7U0F6QlksaUJBQWlCOzs7Ozs7SUFFMUIsMENBQXNCOzs7OztJQUN0Qiw0Q0FBd0I7Ozs7O0lBRVosaUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBKc29uaXggfSBmcm9tICdAYm91bmRsZXNzZ2VvL2pzb25peCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0ICogYXMgWExpbmtfMV8wX0ZhY3RvcnkgZnJvbSAndzNjLXNjaGVtYXMvbGliL1hMaW5rXzFfMCc7XHJcbmNvbnN0IFhMaW5rXzFfMCA9IFhMaW5rXzFfMF9GYWN0b3J5LlhMaW5rXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzFfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL09XU18xXzFfMCc7XHJcbmNvbnN0IE9XU18xXzFfMCA9IE9XU18xXzFfMF9GYWN0b3J5Lk9XU18xXzFfMDtcclxuaW1wb3J0ICogYXMgU01JTF8yXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvU01JTF8yXzAnO1xyXG5jb25zdCBTTUlMXzJfMCA9IFNNSUxfMl8wX0ZhY3RvcnkuU01JTF8yXzA7XHJcbmltcG9ydCAqIGFzIFNNSUxfMl8wX0xhbmd1YWdlX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1NNSUxfMl8wX0xhbmd1YWdlJztcclxuY29uc3QgU01JTF8yXzBfTGFuZ3VhZ2UgPSBTTUlMXzJfMF9MYW5ndWFnZV9GYWN0b3J5LlNNSUxfMl8wX0xhbmd1YWdlO1xyXG5pbXBvcnQgKiBhcyBHTUxfM18xXzFfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvR01MXzNfMV8xJztcclxuY29uc3QgR01MXzNfMV8xID0gR01MXzNfMV8xX0ZhY3RvcnkuR01MXzNfMV8xO1xyXG5pbXBvcnQgKiBhcyBXTVRTXzFfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9XTVRTXzFfMCc7XHJcbmNvbnN0IFdNVFNfMV8wID0gV01UU18xXzBfRmFjdG9yeS5XTVRTXzFfMDtcclxuXHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXbXRzQ2xpZW50U2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSB4bWxtYXJzaGFsbGVyO1xyXG4gICAgcHJpdmF0ZSB4bWx1bm1hcnNoYWxsZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbU01JTF8yXzAsIFNNSUxfMl8wX0xhbmd1YWdlLCBHTUxfM18xXzEsIFhMaW5rXzFfMCwgT1dTXzFfMV8wLCBXTVRTXzFfMF0pO1xyXG4gICAgICAgIHRoaXMueG1sdW5tYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTtcclxuICAgICAgICB0aGlzLnhtbG1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZU1hcnNoYWxsZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FwYWJpbGl0aWVzICh1cmw6IHN0cmluZywgdmVyc2lvbiA9ICcxLjEuMCcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xyXG4gICAgICAgIC8vIGV4YW1wbGU6IGh0dHBzOi8vdGlsZXMuZ2Vvc2VydmljZS5kbHIuZGUvc2VydmljZS93bXRzP1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPTEuMS4wXHJcbiAgICAgICAgY29uc3QgZ2V0Q2FwYWJpbGl0aWVzVXJsID0gYCR7dXJsfT9TRVJWSUNFPVdNVFMmUkVRVUVTVD1HZXRDYXBhYmlsaXRpZXMmVkVSU0lPTj0ke3ZlcnNpb259YDtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsXHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChnZXRDYXBhYmlsaXRpZXNVcmwsIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG59Il19 \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/cache.js b/@ukis/esm5/lib/wps/cache.js deleted file mode 100644 index b306d59f9..000000000 --- a/@ukis/esm5/lib/wps/cache.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { of } from "rxjs"; -/** - * @record - */ -export function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return of(null); - }; - return FakeCache; -}()); -export { FakeCache }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUd0QywyQkFHQzs7Ozs7OztJQUZHLG1EQUFzQzs7Ozs7SUFDdEMsMkNBQWlEOztBQUdyRDtJQUFBO0lBT0EsQ0FBQzs7Ozs7O0lBTkcsdUJBQUc7Ozs7O0lBQUgsVUFBSSxLQUFhLEVBQUUsTUFBaUI7SUFDcEMsQ0FBQzs7Ozs7SUFFRCx1QkFBRzs7OztJQUFILFVBQUksS0FBYTtRQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDTCxnQkFBQztBQUFELENBQUMsQUFQRCxJQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzRGF0YSB9IGZyb20gXCIuL3dwc19kYXRhdHlwZXNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGUge1xyXG4gICAgc2V0KGlucHV0OiBvYmplY3QsIG91dHB1dDogV3BzRGF0YVtdKTtcclxuICAgIGdldChpbnB1dDogb2JqZWN0KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10gfCBudWxsPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZha2VDYWNoZSBpbXBsZW1lbnRzIENhY2hlIHtcclxuICAgIHNldChpbnB1dDogb2JqZWN0LCBvdXRwdXQ6IFdwc0RhdGFbXSkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldChpbnB1dDogb2JqZWN0KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10gfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/utils/polling.js b/@ukis/esm5/lib/wps/utils/polling.js deleted file mode 100644 index 1242eed45..000000000 --- a/@ukis/esm5/lib/wps/utils/polling.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { timer, of, forkJoin } from 'rxjs'; -import { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators'; -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -export function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -export function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvdXRpbHMvcG9sbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFLdEUsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBb0IsRUFBRSxTQUFvQyxFQUFFLE9BQThCLEVBQUUsV0FBMEI7SUFBMUIsNEJBQUEsRUFBQSxrQkFBMEI7SUFFdEgsSUFBSSxPQUFPLEVBQUU7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakI7O1FBRUssV0FBVyxHQUFrQixLQUFLLENBQUMsSUFBSSxDQUN6QyxHQUFHOzs7O0lBQUMsVUFBQyxDQUFNO1FBQ1AsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDZDtJQUNMLENBQUMsRUFBQyxDQUNMOztRQUVLLG9CQUFvQixHQUFrQixRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRzs7OztJQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFKLENBQUksRUFBQyxDQUNqQjs7UUFFSyxjQUFjLEdBQWtCLG9CQUFvQixDQUFDLElBQUksQ0FDM0QsUUFBUTs7OztJQUFDLFVBQUMsUUFBYTtRQUNuQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixzREFBc0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILHFFQUFxRTtZQUNyRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNMLENBQUMsRUFBQyxDQUNMO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLEVBQUUsVUFBYztJQUFkLDJCQUFBLEVBQUEsY0FBYzs7UUFDcEQsUUFBUSxHQUFHLENBQUM7SUFFaEI7Ozs7SUFBTyxVQUFDLElBQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7UUFDWix5QkFBeUI7UUFDekIsU0FBUzs7OztRQUFDLFVBQUMsTUFBdUI7WUFDOUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7WUFDaEUsUUFBUTs7OztZQUFDLFVBQUMsS0FBVTtnQkFDaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO29CQUN0QyxtREFBbUQ7b0JBQ25ELE1BQU0sS0FBSyxDQUFDO2lCQUNmO3FCQUFNLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO29CQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDO29CQUNkLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0RBQWdEO2lCQUNyRTtxQkFBTTtvQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFnQyxRQUFRLDBCQUF1QixDQUFDLENBQUM7b0JBQzdFLE1BQU0sS0FBSyxDQUFDLENBQUMsNkNBQTZDO2lCQUM3RDtZQUNMLENBQUMsRUFBQyxDQUNMLENBQUM7UUFDTixDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQyxFQUFDO0FBRU4sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRpbWVyLCBvZiwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBtYXAsIG1lcmdlTWFwLCByZXRyeVdoZW4sIGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvbGxVbnRpbDxUPihcclxuICAgIHRhc2skOiBPYnNlcnZhYmxlPFQ+LCBwcmVkaWNhdGU6IChyZXN1bHRzOiBhbnkpID0+IGJvb2xlYW4sIGRvV2hpbGU/OiAodDogVCB8IG51bGwpID0+IGFueSwgbWluV2FpdFRpbWU6IG51bWJlciA9IDEwMDApOiBPYnNlcnZhYmxlPFQ+IHtcclxuXHJcbiAgICBpZiAoZG9XaGlsZSkge1xyXG4gICAgICAgIGRvV2hpbGUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFwcGVkVGFzayQ6IE9ic2VydmFibGU8VD4gPSB0YXNrJC5waXBlKFxyXG4gICAgICAgIHRhcCgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb1doaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBkb1doaWxlKHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdFRha2VzQXRMZWFzdCQ6IE9ic2VydmFibGU8VD4gPSBmb3JrSm9pbih0YXBwZWRUYXNrJCwgdGltZXIobWluV2FpdFRpbWUpKS5waXBlKFxyXG4gICAgICAgIG1hcChyID0+IHJbMF0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHBvbGxlZFJlcXVlc3QkOiBPYnNlcnZhYmxlPFQ+ID0gcmVxdWVzdFRha2VzQXRMZWFzdCQucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKHJlc3BvbnNlKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG9idGFpbmVkIGNvcnJlY3QgYW5zd2VyICR7cmVzcG9uc2V9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG9idGFpbmVkIGZhbHNlIGFuc3dlciAke3Jlc3BvbnNlfS4gdHJ5aW5nIGFnYWluLi4uYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVkUmVxdWVzdCQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gcG9sbGVkUmVxdWVzdCQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXllZFJldHJ5KGRlbGF5TXM6IG51bWJlciwgbWF4UmV0cmllcyA9IDMpIHtcclxuICAgIGxldCBhdHRlbXB0cyA9IDE7XHJcblxyXG4gICAgcmV0dXJuIChzcmMkOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gc3JjJC5waXBlKFxyXG4gICAgICAgICAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnMgLi4uXHJcbiAgICAgICAgICAgIHJldHJ5V2hlbigoZXJyb3IkOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciQucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBkZWxheShkZWxheU1zKSwgLy8gPC0gaW4gYW55IGNhc2UsIGZpcnN0IHdhaXQgYSBsaXR0bGUgd2hpbGUgLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAmJiBlcnJvci5zdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHNlcnZlciBlcnJvciwgcmVwZWF0aW5nIHdvbid0IGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRlbXB0cyA8PSBtYXhSZXRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaHR0cC1lcnJvci4gUmV0cnlpbmcgLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGVycm9yKTsgLy8gPC0gYW4gb2JzZXJ2YWJsZSBjYXVzZXMgcmVxdWVzdCB0byBiZSByZXRyaWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUGVyc2lzdGVudCBodHRwLWVycm9ycyBhZnRlciAke2F0dGVtcHRzfSBhdHRlbXB0cy4gR2l2aW5nIHVwLmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7IC8vIGFuIGVycm9yIGNhdXNlcyByZXF1ZXN0IHRvIGJlIGdpdmVuIHVwIG9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH07XHJcblxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js b/@ukis/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js deleted file mode 100644 index ca328252d..000000000 --- a/@ukis/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js +++ /dev/null @@ -1,563 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = tslib_1.__values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = tslib_1.__values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = tslib_1.__values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; -}()); -export { WpsMarshaller100 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMS4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQTtJQUVJO0lBQWdCLENBQUM7Ozs7O0lBRWpCLDZDQUFrQjs7OztJQUFsQixVQUFtQixPQUFlO1FBQzlCLE9BQVUsT0FBTyx1REFBb0QsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7SUFFRCxxQ0FBVTs7Ozs7SUFBVixVQUFXLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFVLE9BQU8sOERBQXlELFNBQVcsQ0FBQztJQUMxRixDQUFDOzs7OztJQUVELGdEQUFxQjs7OztJQUFyQixVQUFzQixZQUFpQzs7WUFDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsT0FBTztZQUNqRCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUs7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7Ozs7OztJQUVELHVEQUE0Qjs7Ozs7Ozs7SUFBNUIsVUFBNkIsWUFBaUMsRUFBRSxHQUFXLEVBQUUsU0FBaUIsRUFDMUYsTUFBa0IsRUFBRSxrQkFBMEM7OztZQUV4RCxHQUFHLEdBQWdCLEVBQUU7UUFFM0IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXO1lBQ3RELEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsV0FBVyxFQUFFO29CQUNULEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDL0MsU0FBUyxF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QUNwRSxDQUFDOzs7Ozs7O0lBRUQsbURBQXdCOzs7Ozs7SUFBeEIsVUFBeUIsWUFBaUIsRUFBRSxTQUFpQixFQUFFLFNBQWlCO1FBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0wsdUJBQUM7QUFBRCxDQUFDLEFBMVRELElBMFRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzTWFyc2hhbGxlciwgV3BzSW5wdXQsIFdwc091dHB1dERlc2NyaXB0aW9uLCBXcHNSZXN1bHQsIFdwc0NhcGFiaWxpdHksIFdwc0Jib3hWYWx1ZSwgV3BzRGF0YSwgV3BzRGF0YURlc2NyaXB0aW9uLCBXcHNTdGF0ZSwgV3BzRGF0YUZvcm1hdCB9IGZyb20gJy4uL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgV1BTQ2FwYWJpbGl0aWVzVHlwZSwgSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSwgRXhlY3V0ZSwgRGF0YUlucHV0c1R5cGUsXHJcbiAgICBJbnB1dFR5cGUsIFJlc3BvbnNlRm9ybVR5cGUsIERhdGFUeXBlLCBJV3BzRXhlY3V0ZVJlc3BvbnNlLCBEb2N1bWVudE91dHB1dERlZmluaXRpb25UeXBlLFxyXG4gICAgUmVzcG9uc2VEb2N1bWVudFR5cGUsIElucHV0UmVmZXJlbmNlVHlwZSwgTGl0ZXJhbERhdGFUeXBlLCBFeGVjdXRlUmVzcG9uc2VcclxufSBmcm9tICcuL3dwc18xLjAuMCc7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBXcHNNYXJzaGFsbGVyMTAwIGltcGxlbWVudHMgV3BzTWFyc2hhbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1HZXRDYXBhYmlsaXRpZXMmdmVyc2lvbj0xLjAuMGA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0ZVVybChiYXNldXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1FeGVjdXRlJnZlcnNpb249MS4wLjAmaWRlbnRpZmllcj0ke3Byb2Nlc3NJZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXM6IFdQU0NhcGFiaWxpdGllc1R5cGUpOiBXcHNDYXBhYmlsaXR5W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzQ2FwYWJpbGl0eVtdID0gW107XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzLnByb2Nlc3NPZmZlcmluZ3MucHJvY2Vzcy5mb3JFYWNoKHByb2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb246IElXcHNFeGVjdXRlUmVzcG9uc2UsIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1Jlc3VsdFtdIHtcclxuXHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1cy5wcm9jZXNzRmFpbGVkKSB7IC8vIEZhaWx1cmU/XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzLmlkZW50aWZpZXIudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1c0xvY2F0aW9uXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnByb2Nlc3NPdXRwdXRzKSB7IC8vIHN5bmNocm9ub3VzIHJlcXVlc3Q/XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzT3V0cHV0cy5vdXRwdXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlID0gb3V0cHV0LnJlZmVyZW5jZSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXR5cGU6ICdsaXRlcmFsJyB8ICdjb21wbGV4JyB8ICdiYm94JyB8ICdzdGF0dXMnIHwgJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdDogV3BzRGF0YUZvcm1hdCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXQucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnY29tcGxleCc7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG91dHB1dC5yZWZlcmVuY2UuaHJlZiB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG91dHB1dC5yZWZlcmVuY2UubWltZVR5cGUgYXMgV3BzRGF0YUZvcm1hdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dC5kYXRhICYmIG91dHB1dC5kYXRhLmxpdGVyYWxEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2xpdGVyYWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQuZGF0YS5saXRlcmFsRGF0YS5kYXRhVHlwZSBhcyBXcHNEYXRhRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0cHV0LmRhdGEgJiYgb3V0cHV0LmRhdGEuY29tcGxleERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnY29tcGxleCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG91dHB1dC5kYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlIGFzIFdwc0RhdGFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnYmJveCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnVubWFyc2hhbE91dHB1dERhdGEob3V0cHV0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogb3V0cHV0LmlkZW50aWZpZXIudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IGlzUmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBkYXRhdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1c0xvY2F0aW9uKSB7IC8vIGFzeW5jaHJvbm91cyByZXF1ZXN0P1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdW5tYXJzaGFsT3V0cHV0RGF0YShkYXRhOiBEYXRhVHlwZSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcGxleERhdGEpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxleERhdGEuY29udGVudC5tYXAoY29udCA9PiBKU09OLnBhcnNlKGNvbnQpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL1dNUyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxleERhdGEuY29udGVudDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQveG1sJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnRbMF0pOyAvLyBAVE9ETzogYmV0dGVyOiBoYW5kbGUgYWN0dWFsIHhtbC1kYXRhXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVubWFyc2hhbCBkYXRhIG9mIGZvcm1hdCAke2RhdGEuY29tcGxleERhdGEubWltZVR5cGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubGl0ZXJhbERhdGEpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLmxpdGVyYWxEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5saXRlcmFsRGF0YS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2RhdGF9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0RhdGFbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSA9IHJlc3BvbnNlSnNvbi52YWx1ZTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXMucHJvY2Vzc1N1Y2NlZWRlZCA/ICdTdWNjZWVkZWQnIDpcclxuICAgICAgICByZXNwb25zZS5zdGF0dXMucHJvY2Vzc0FjY2VwdGVkID8gJ0FjY2VwdGVkJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NTdGFydGVkID8gJ1J1bm5pbmcnIDpcclxuICAgICAgICByZXNwb25zZS5zdGF0dXMucHJvY2Vzc0ZhaWxlZCA/ICdGYWlsZWQnIDpcclxuICAgICAgICAnRmFpbGVkJztcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICBzdGF0dXNMb2NhdGlvbjogcmVzcG9uc2Uuc3RhdHVzTG9jYXRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnByb2Nlc3NPdXRwdXRzICYmIHJlc3BvbnNlLnByb2Nlc3NPdXRwdXRzLm91dHB1dCkge1xyXG4gICAgICAgICAgICBzdGF0ZS5yZXN1bHRzID0gdGhpcy51bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pOiBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5IHtcclxuXHJcbiAgICAgICAgY29uc3Qgd3BzMUlucHV0cyA9IHRoaXMubWFyc2hhbElucHV0cyhpbnB1dHMpO1xyXG4gICAgICAgIGNvbnN0IHdwczFSZXNwb25zZUZvcm0gPSB0aGlzLm1hcnNoYWxSZXNwb25zZUZvcm0ob3V0cHV0cywgYXN5bmMpO1xyXG5cclxuICAgICAgICBjb25zdCBib2R5VmFsdWU6IEV4ZWN1dGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGFJbnB1dHM6IHdwczFJbnB1dHMsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHByb2Nlc3NJZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VGb3JtOiB3cHMxUmVzcG9uc2VGb3JtLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJvZHk6IElXcHNFeGVjdXRlUHJvY2Vzc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8xLjAuMH1FeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0V4ZWN1dGUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8xLjAuMH13cHM6RXhlY3V0ZSdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IGJvZHlWYWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxSZXNwb25zZUZvcm0ob3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmMgPSBmYWxzZSk6IFJlc3BvbnNlRm9ybVR5cGUge1xyXG5cclxuICAgICAgICBjb25zdCBvdXRwdXREZWZpbml0aW9uczogRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZVtdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2Ygb3V0cHV0cykge1xyXG4gICAgICAgICAgICBsZXQgZGVmVHlwZTogRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZTtcclxuICAgICAgICAgICAgc3dpdGNoIChvdXRwdXQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogb3V0cHV0LmlkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUmVmZXJlbmNlOiBvdXRwdXQucmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogb3V0cHV0LmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV4JzpcclxuICAgICAgICAgICAgICAgICAgICBkZWZUeXBlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiB7IHZhbHVlOiBvdXRwdXQuaWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXNSZWZlcmVuY2U6IG91dHB1dC5yZWZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBvdXRwdXQuZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIFdwcy1vdXRwdXR0eXBlIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQhICR7b3V0cHV0fSBgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXREZWZpbml0aW9ucy5wdXNoKGRlZlR5cGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEb2N1bWVudDogUmVzcG9uc2VEb2N1bWVudFR5cGUgPSB7XHJcbiAgICAgICAgICAgIG91dHB1dDogb3V0cHV0RGVmaW5pdGlvbnMsXHJcbiAgICAgICAgICAgIHN0YXR1czogYXN5bmMgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN0b3JlRXhlY3V0ZVJlc3BvbnNlOiBhc3luYyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm06IFJlc3BvbnNlRm9ybVR5cGUgPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmb3JtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbElucHV0cyhpbnB1dEFycjogV3BzSW5wdXRbXSk6IERhdGFJbnB1dHNUeXBlIHtcclxuICAgICAgICBjb25zdCB0aGVJbnB1dHM6IElucHV0VHlwZVtdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbnAgb2YgaW5wdXRBcnIpIHtcclxuICAgICAgICAgICAgaWYgKGlucC52YWx1ZSA9PT0gbnVsbCB8fCBpbnAudmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBmb3IgaW5wdXQgJHtpbnAuZGVzY3JpcHRpb24uaWR9IGlzIG5vdCBzZXRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBtYXJzaGFsbGVkSW5wdXQgPSB0aGlzLm1hcnNoYWxJbnB1dChpbnApO1xyXG4gICAgICAgICAgICB0aGVJbnB1dHMucHVzaChtYXJzaGFsbGVkSW5wdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dHM6IERhdGFJbnB1dHNUeXBlID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogdGhlSW5wdXRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gaW5wdXRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYXJzaGFsSW5wdXQoaW5wdXQ6IFdwc0lucHV0KTogSW5wdXRUeXBlIHtcclxuICAgICAgICBjb25zdCBpZCA9IGlucHV0LmRlc2NyaXB0aW9uLmlkO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gaW5wdXQuZGVzY3JpcHRpb24uaWQ7XHJcbiAgICAgICAgY29uc3QgYWJzdHJhY3QgPSAnJztcclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXRUeXBlOiBJbnB1dFR5cGUgPSB7XHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IGlkIH0sXHJcbiAgICAgICAgICAgIHRpdGxlOiB7IHZhbHVlOiB0aXRsZSB9LFxyXG4gICAgICAgICAgICBfYWJzdHJhY3Q6IHsgdmFsdWU6IGFic3RyYWN0IH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaW5wdXQuZGVzY3JpcHRpb24ucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgIGlucHV0VHlwZS5yZWZlcmVuY2UgPSB0aGlzLm1hcnNoYWxSZWZlcmVuY2VJbnB1dChpbnB1dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5wdXRUeXBlLmRhdGEgPSB0aGlzLm1hcnNoYWxEYXRhSW5wdXQoaW5wdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbERhdGFJbnB1dChpbnB1dDogV3BzSW5wdXQpOiBEYXRhVHlwZSB7XHJcbiAgICAgICAgbGV0IGRhdGE6IERhdGFUeXBlO1xyXG4gICAgICAgIHN3aXRjaCAoaW5wdXQuZGVzY3JpcHRpb24udHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdsaXRlcmFsJzpcclxuICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbERhdGE6IHsgdmFsdWU6IFN0cmluZyhpbnB1dC52YWx1ZSkgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiYm94JzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogV3BzQmJveFZhbHVlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3dlckNvcm5lcjogW3ZhbHVlcy5sbGxhdCwgdmFsdWVzLmxsbG9uXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJDb3JuZXI6IFt2YWx1ZXMudXJsYXQsIHZhbHVlcy51cmxvbl1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXgnOlxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dC5kZXNjcmlwdGlvbi5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtpbnB1dC52YWx1ZV0sICAvLyBAVE9ETzogd2UgYXNzdW1lIGhlcmUgdGhhdCB0ZXh0L3htbC1kYXRhIGlzIGFscmVhZHkgc3RyaW5naWZpZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtKU09OLnN0cmluZ2lmeShpbnB1dC52YWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBpbnB1dC5kZXNjcmlwdGlvbi5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFRoaXMgaW5wdXQgaXMgb2YgdHlwZSAke2lucHV0LmRlc2NyaXB0aW9uLnR5cGV9LiBXZSBjYW4gb25seSBtYXJzaGFsIGlucHV0IG9mIHR5cGUgbGl0ZXJhbCwgYmJveCBvciBjb21wbGV4LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbFJlZmVyZW5jZUlucHV0KGlucHV0OiBXcHNJbnB1dCk6IElucHV0UmVmZXJlbmNlVHlwZSB7XHJcbiAgICAgICAgY29uc3QgcmVmOiBJbnB1dFJlZmVyZW5jZVR5cGUgPSB7XHJcbiAgICAgICAgICAgIGhyZWY6IGlucHV0LnZhbHVlLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBXUFMtMS4wIGRvZXMgbm90IHNlbmQgYSBib2R5IHdpdGggYSBHZXRTdGF0dXMgcmVxdWVzdC5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSUQ6IHN0cmluZykge1xyXG4gICAgICAgIC8vIFdQUy0xLjAgZG9lcyBub3Qgc2VuZCBhIGJvZHkgd2l0aCBhIEdldFN0YXR1cyByZXF1ZXN0LlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNtaXNzVXJsKHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgLyoqIHRoaXMgZG9lcyBvbmx5IHdvcmsgaW4gZ2Vvc2VydmVyOlxyXG4gICAgICAgIHJldHVybiBgJHtzZXJ2ZXJVcmx9P3NlcnZpY2U9V1BTJnZlcnNpb249MS4wLjAmcmVxdWVzdD1EaXNtaXNzJmV4ZWN1dGlvbklkPSR7am9iSWR9YDsgKi9cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dwcyAxLjAgZG9lcyBub3Qgc3VwcG9ydCBEaXNtaXNzLW9wZXJhdGlvbnMuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbERpc21pc3NCb2R5KHByb2Nlc3NJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcHMgMS4wIGRvZXMgbm90IHN1cHBvcnQgRGlzbWlzcy1vcGVyYXRpb25zLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2U6IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV3BzIDEuMCBkb2VzIG5vdCBzdXBwb3J0IERpc21pc3Mtb3BlcmF0aW9ucy4nKTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/wps200/helpers.js b/@ukis/esm5/lib/wps/wps200/helpers.js deleted file mode 100644 index 58b090c4c..000000000 --- a/@ukis/esm5/lib/wps/wps200/helpers.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -export var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -export var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -export var isResult = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzMjAwL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsTUFBTSxLQUFPLFlBQVk7Ozs7QUFBRyxVQUFDLEdBQVc7SUFDcEMsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztXQUM1QixHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQTs7QUFFRCxNQUFNLEtBQU8sZ0JBQWdCOzs7O0FBQUcsVUFBQyxHQUFXO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLENBQUMsQ0FBQTs7QUFFRCxNQUFNLEtBQU8sUUFBUTs7OztBQUFHLFVBQUMsR0FBVztJQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNJbmZvLCBEYXRhT3V0cHV0VHlwZSwgUmVzdWx0IH0gZnJvbSAnLi93cHNfMi4wJztcclxuXHJcblxyXG5leHBvcnQgY29uc3QgaXNTdGF0dXNJbmZvID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFN0YXR1c0luZm8gPT4ge1xyXG4gICAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKVxyXG4gICAgICAgJiYgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXMnKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0RhdGFPdXRwdXRUeXBlID0gKG9iajogb2JqZWN0KTogb2JqIGlzIERhdGFPdXRwdXRUeXBlID0+IHtcclxuICAgIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2lkJykgJiZcclxuICAgICAgICAob2JqLmhhc093blByb3BlcnR5KCdkYXRhJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdyZWZlcmVuY2UnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3VsdCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBSZXN1bHQgPT4ge1xyXG4gICAgcmV0dXJuIChvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpICYmIHR5cGVvZiBvYmpbJ291dHB1dCddID09PSAnb2JqZWN0Jyk7XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js b/@ukis/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js deleted file mode 100644 index c890f7481..000000000 --- a/@ukis/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js +++ /dev/null @@ -1,458 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { isStatusInfo, isResult } from './helpers'; -var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = tslib_1.__values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; -}()); -export { WpsMarshaller200 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMi4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxPQUFPLEVBQW9CLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHckU7SUFFSTtJQUFlLENBQUM7Ozs7O0lBRWhCLDZDQUFrQjs7OztJQUFsQixVQUFtQixPQUFlO1FBQzlCLE9BQVUsT0FBTyx1REFBb0QsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7SUFFRCxxQ0FBVTs7Ozs7SUFBVixVQUFXLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFVLE9BQU8sOERBQXlELFNBQVcsQ0FBQztJQUMxRixDQUFDOzs7OztJQUVELGdEQUFxQjs7OztJQUFyQixVQUFzQixZQUFpQzs7WUFDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLE9BQU87WUFDaEQsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDTCxFQUFFLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzs7Ozs7Ozs7SUFFRCx1REFBNEI7Ozs7Ozs7O0lBQTVCLFVBQTZCLFlBQWlDLEVBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQzFGLE1BQWtCLEVBQUUsa0JBQTBDOzs7WUFDeEQsR0FBRyxHQUFnQixFQUFFO1FBRTNCLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQ0FDbkIsTUFBTTs7b0JBQ1AsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUs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Q2hCLEtBQUssRUFBRSxLQUFLO2FBQ2Y7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFRCxxQ0FBVTs7Ozs7O0lBQVYsVUFBVyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMxRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELDZDQUFrQjs7OztJQUFsQixVQUFtQixLQUFhOztZQUN0QixJQUFJLEdBQW9CO1lBQzFCLElBQUksRUFBRTtnQkFDRixHQUFHLEVBQUUseUNBQXlDO2dCQUM5QyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLGdDQUFnQztnQkFDOUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLDZDQUE2QzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDSCxLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsT0FBTzthQUNuQjtTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELG1EQUF3Qjs7Ozs7O0lBQXhCLFVBQXlCLFlBQThCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjs7WUFDbkYsS0FBSyxHQUFhO1lBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTCx1QkFBQztBQUFELENBQUMsQUEvT0QsSUErT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcHNNYXJzaGFsbGVyLCBXcHNJbnB1dCwgV3BzT3V0cHV0RGVzY3JpcHRpb24sIFdwc1Jlc3VsdCwgV3BzQ2FwYWJpbGl0eSwgV3BzRGF0YURlc2NyaXB0aW9uLCBXcHNEYXRhLCBXcHNTdGF0ZSB9IGZyb20gJy4uL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQgeyBXUFNDYXBhYmlsaXRpZXNUeXBlLCBFeGVjdXRlUmVxdWVzdFR5cGUsIERhdGFJbnB1dFR5cGUsIE91dHB1dERlZmluaXRpb25UeXBlLCBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5LCBJV3BzRXhlY3V0ZVJlc3BvbnNlLCBEYXRhT3V0cHV0VHlwZSwgSUdldFN0YXR1c1JlcXVlc3QsIERhdGEsIElHZXRSZXN1bHRSZXF1ZXN0LCBJRGlzbWlzc1JlcXVlc3QsIElEaXNtaXNzUmVzcG9uc2UgfSBmcm9tICcuL3dwc18yLjAnO1xyXG5pbXBvcnQgeyBpc0RhdGFPdXRwdXRUeXBlLCBpc1N0YXR1c0luZm8sIGlzUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgV3BzTWFyc2hhbGxlcjIwMCBpbXBsZW1lbnRzIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1HZXRDYXBhYmlsaXRpZXMmdmVyc2lvbj0yLjAuMGA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0ZVVybChiYXNldXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1FeGVjdXRlJnZlcnNpb249Mi4wLjAmaWRlbnRpZmllcj0ke3Byb2Nlc3NJZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXM6IFdQU0NhcGFiaWxpdGllc1R5cGUpOiBXcHNDYXBhYmlsaXR5W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzQ2FwYWJpbGl0eVtdID0gW107XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzLmNvbnRlbnRzLnByb2Nlc3NTdW1tYXJ5LmZvckVhY2goc3VtbWFyeSA9PiB7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBzdW1tYXJ5LmlkZW50aWZpZXIudmFsdWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogSVdwc0V4ZWN1dGVSZXNwb25zZSwgdXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLFxyXG4gICAgICAgIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzUmVzdWx0W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzUmVzdWx0W10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzdWx0KHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgcmVzcG9uc2VKc29uLnZhbHVlLm91dHB1dCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0RGVzY3JpcHRpb24gPSBvdXRwdXREZXNjcmlwdGlvbnMuZmluZChvZCA9PiBvZC5pZCA9PT0gb3V0cHV0LmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghb3V0cHV0RGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFuIG91dHB1dC1kZXNjcmlwdGlvbiBmb3IgdGhlIHBhcmFtZXRlciAke291dHB1dC5pZH0uYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWZlcmVuY2UgPSBvdXRwdXREZXNjcmlwdGlvbi5yZWZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhdHlwZSA9IG91dHB1dERlc2NyaXB0aW9uLnR5cGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvdXRwdXREZXNjcmlwdGlvbi5mb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXQucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG91dHB1dC5yZWZlcmVuY2UuaHJlZiB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRwdXQuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnVubWFyc2hhbE91dHB1dERhdGEob3V0cHV0LmRhdGEsIG91dHB1dERlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPdXRwdXQgaGFzIG5laXRoZXIgcmVmZXJlbmNlIG5vciBkYXRhIGZpZWxkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogb3V0cHV0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiBpc1JlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YXR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGlzU3RhdHVzSW5mbyhyZXNwb25zZUpzb24udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBXcHNTdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIGpvYklEOiByZXNwb25zZUpzb24udmFsdWUuam9iSUQsXHJcbiAgICAgICAgICAgICAgICBwZXJjZW50Q29tcGxldGVkOiByZXNwb25zZUpzb24udmFsdWUucGVyY2VudENvbXBsZXRlZFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcHJvY2Vzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGF0ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVubWFyc2hhbE91dHB1dERhdGEoZGF0YTogRGF0YSwgZGVzY3JpcHRpb246IFdwc091dHB1dERlc2NyaXB0aW9uKTogYW55IHtcclxuICAgICAgICBpZiAoZGVzY3JpcHRpb24udHlwZSA9PT0gJ2NvbXBsZXgnKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLmdlbytqc29uJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbnRlbnQubWFwKChjb250OiBhbnkpID0+IEpTT04ucGFyc2UoY29udCkpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vV01TJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndGV4dC94bWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGRhdGEuY29udGVudFswXSk7IC8vIEBUT0RPOiBiZXR0ZXI6IGhhbmRsZSBhY3R1YWwgeG1sLWRhdGFcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdW5tYXJzaGFsIGNvbXBsZXggZGF0YSBvZiBmb3JtYXQgJHtkYXRhLm1pbWVUeXBlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvbi50eXBlID09PSAnbGl0ZXJhbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHtkYXRhfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzRGF0YVtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0RhdGFbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuICAgICAgICBpZiAoaXNTdGF0dXNJbmZvKHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZUpzb24udmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5qb2JJRCxcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wbGV0ZWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wZXJjZW50Q29tcGxldGVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIHN0YXR1cy1pbmZvOiAke3Jlc3BvbnNlSnNvbn1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRzTWFyc2hhbGxlZCA9IHRoaXMubWFyc2hhbElucHV0cyhpbnB1dHMpO1xyXG4gICAgICAgIGNvbnN0IG91dHB1dHNNYXJzaGFsbGVkID0gdGhpcy5tYXJzaGFsT3V0cHV0cyhvdXRwdXRzKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keVZhbHVlOiBFeGVjdXRlUmVxdWVzdFR5cGUgPSB7XHJcbiAgICAgICAgICAgIFRZUEVfTkFNRTogJ1dQU18yXzAuRXhlY3V0ZVJlcXVlc3RUeXBlJyxcclxuICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCcsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IHByb2Nlc3NJZCB9LFxyXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRzTWFyc2hhbGxlZCxcclxuICAgICAgICAgICAgb3V0cHV0OiBvdXRwdXRzTWFyc2hhbGxlZCxcclxuICAgICAgICAgICAgbW9kZTogYXN5bmMgPyAnYXN5bmMnIDogJ3N5bmMnLFxyXG4gICAgICAgICAgICByZXNwb25zZTogJ2RvY3VtZW50J1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJvZHk6IElXcHNFeGVjdXRlUHJvY2Vzc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9RXhlY3V0ZScsXHJcbiAgICAgICAgICAgICAgICBsb2NhbFBhcnQ6ICdFeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6RXhlY3V0ZSdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IGJvZHlWYWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFyc2hhbElucHV0cyhpbnB1dHM6IFdwc0RhdGFbXSk6IERhdGFJbnB1dFR5cGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0cy5tYXAoaSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpLmRlc2NyaXB0aW9uLnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaS5kZXNjcmlwdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogaS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGkuZGVzY3JpcHRpb24uZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpLmRlc2NyaXB0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogW0pTT04uc3RyaW5naWZ5KGkudmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGkuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFyc2hhbE91dHB1dHMob3V0cHV0czogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBPdXRwdXREZWZpbml0aW9uVHlwZVtdIHtcclxuICAgICAgICByZXR1cm4gb3V0cHV0cy5tYXAobyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogby5pZCxcclxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBvLmZvcm1hdCxcclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogby5yZWZlcmVuY2UgPyAncmVmZXJlbmNlJyA6ICd2YWx1ZScgIC8vIEBUT0RPOiBtYXliZSBqdXN0IGNvbW1lbnQgb3V0IHRoaXMgbGluZT9cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSUdldFN0YXR1c1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9R2V0U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0dldFN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkdldFN0YXR1cydcclxuICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgIGpvYklEOiBzdGF0dXNJZCxcclxuICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMi4wLjAnXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFJlc3VsdEJvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSUdldFJlc3VsdFJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9R2V0UmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0dldFJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkdldFJlc3VsdCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJyxcclxuICAgICAgICAgICAgICAgIGpvYklEOiBqb2JJRFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNtaXNzVXJsKHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHNlcnZlclVybDtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRGlzbWlzc0JvZHkoam9iSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGJvZHk6IElEaXNtaXNzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1EaXNtaXNzJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0Rpc21pc3MnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfXdwczpEaXNtaXNzJ1xyXG4gICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgam9iSUQ6IGpvYklkLFxyXG4gICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCdcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2U6IElEaXNtaXNzUmVzcG9uc2UsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlIHtcclxuICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czoganNvblJlc3BvbnNlLnZhbHVlLnN0YXR1cyxcclxuICAgICAgICAgICAgam9iSUQ6IGpzb25SZXNwb25zZS52YWx1ZS5qb2JJRFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/wps_datatypes.js b/@ukis/esm5/lib/wps/wps_datatypes.js deleted file mode 100644 index 94b1da42e..000000000 --- a/@ukis/esm5/lib/wps/wps_datatypes.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -export function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -export var isBbox = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -export function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -export function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -export function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -export function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -export function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX2RhdGF0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzX2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLHdDQU9DOzs7SUFORyxnQ0FBYzs7SUFDZCxrQ0FBMEQ7O0lBQzFELHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFNdkIsNkJBR0M7OztJQUZHLDhCQUFnQzs7SUFDaEMsd0JBQVc7Ozs7O0FBS2Ysd0NBT0M7OztJQU5HLGdDQUFjOztJQUNkLGtDQUFhOztJQUNiLHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFHdkIsa0NBTUM7OztJQUxHLDJCQUFZOztJQUNaLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOzs7QUFHbEIsTUFBTSxLQUFPLE1BQU07Ozs7QUFBRyxVQUFDLEdBQVc7SUFDOUIsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQzlCLENBQUM7QUFDTixDQUFDLENBQUE7Ozs7QUFHRCw4QkFTQzs7O0lBUkcsMEJBQXNFOztJQUN0RSxvQ0FBMEI7Ozs7O0lBRTFCLHlCQUFlOzs7OztJQUVmLGtDQUF3Qjs7Ozs7SUFFeEIsMkJBQW9COzs7Ozs7QUFHeEIsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXO0lBQ2xDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3hILENBQUM7Ozs7QUFHRCxpQ0FHQzs7O0lBRkcsa0NBQWdDOztJQUNoQyw0QkFBb0I7Ozs7O0FBR3hCLG1DQUVDOzs7SUFERywyQkFBVzs7Ozs7QUFJZixtQ0FnQkM7Ozs7Ozs7SUFkRyxtRUFBbUQ7Ozs7Ozs7SUFDbkQsZ0ZBQXdFOzs7OztJQUN4RSxvRUFBNEM7Ozs7Ozs7O0lBRTVDLDJGQUE2Rzs7Ozs7OztJQUM3Ryw4RkFBbUY7Ozs7Ozs7SUFDbkYsMkZBQWdGOzs7OztJQUNoRixrRUFBdUM7Ozs7O0lBRXZDLGdGQUE4RDs7Ozs7Ozs7O0lBQzlELCtIQUE2Sjs7Ozs7Ozs7O0lBQzdKLGdJQUEySjs7Ozs7Ozs7O0lBQzNKLGtJQUE2Sjs7Ozs7OztJQUM3SixxR0FBNEYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBXcHNWZXJpb24gPSAnMS4wLjAnIHwgJzIuMC4wJztcclxuZXhwb3J0IHR5cGUgV3BzRGF0YUZvcm1hdCA9ICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ2FwcGxpY2F0aW9uL1dNUycgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcgfCAndGV4dC94bWwnIHwgJ2FwcGxpY2F0aW9uL3RleHQnIHwgJ2ltYWdlL2dlb3RpZmYnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJztcclxuXHJcblxyXG5leHBvcnQgdHlwZSBQcm9jZXNzSWQgPSBzdHJpbmc7XHJcbmV4cG9ydCB0eXBlIFByb2R1Y3RJZCA9IHN0cmluZztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzRGF0YURlc2NyaXB0aW9uIHtcclxuICAgIGlkOiBQcm9kdWN0SWQ7XHJcbiAgICB0eXBlOiAnbGl0ZXJhbCcgfCAnY29tcGxleCcgfCAnYmJveCcgfCAnc3RhdHVzJyB8ICdlcnJvcic7XHJcbiAgICByZWZlcmVuY2U6IGJvb2xlYW47XHJcbiAgICBmb3JtYXQ/OiBXcHNEYXRhRm9ybWF0O1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbn1cclxuZXhwb3J0IHR5cGUgV3BzSW5wdXREZXNjcmlwdGlvbiA9IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuZXhwb3J0IHR5cGUgV3BzT3V0cHV0RGVzY3JpcHRpb24gPSBXcHNEYXRhRGVzY3JpcHRpb247XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNEYXRhIHtcclxuICAgIGRlc2NyaXB0aW9uOiBXcHNEYXRhRGVzY3JpcHRpb247XHJcbiAgICB2YWx1ZTogYW55O1xyXG59XHJcbmV4cG9ydCB0eXBlIFdwc0lucHV0ID0gV3BzRGF0YTtcclxuZXhwb3J0IHR5cGUgV3BzUmVzdWx0ID0gV3BzRGF0YTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveERlc2NyaXB0aW9uIHtcclxuICAgIGlkOiBQcm9kdWN0SWQ7XHJcbiAgICB0eXBlOiAnYmJveCc7XHJcbiAgICByZWZlcmVuY2U6IGJvb2xlYW47XHJcbiAgICBmb3JtYXQ/OiBXcHNEYXRhRm9ybWF0O1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveFZhbHVlIHtcclxuICAgIGNyczogc3RyaW5nO1xyXG4gICAgbGxsb246IG51bWJlcjtcclxuICAgIGxsbGF0OiBudW1iZXI7XHJcbiAgICB1cmxvbjogbnVtYmVyO1xyXG4gICAgdXJsYXQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQmJveCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBXcHNCYm94VmFsdWUgPT4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2NycycpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCdsbGxvbicpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCdsbGxhdCcpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCd1cmxvbicpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCd1cmxhdCcpXHJcbiAgICApO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzU3RhdGUge1xyXG4gICAgc3RhdHVzOiAnU3VjY2VlZGVkJyB8ICdGYWlsZWQnIHwgJ0FjY2VwdGVkJyB8ICdSdW5uaW5nJyB8ICdEaXNtaXNzZWQnO1xyXG4gICAgcGVyY2VudENvbXBsZXRlZD86IG51bWJlcjtcclxuICAgIC8qKiBXUFMgMi4wIG9ubHkgKi9cclxuICAgIGpvYklEPzogc3RyaW5nO1xyXG4gICAgLyoqIFdQUyAxLjAgb25seSAqL1xyXG4gICAgc3RhdHVzTG9jYXRpb24/OiBzdHJpbmc7XHJcbiAgICAvKiogV1BTIDEuMCBvbmx5OiBhIHN1Y2Nlc3Mtc3RhdGUgYWxyZWFkeSBjb250YWlucyB0aGUgcmVzdWx0cyAqL1xyXG4gICAgcmVzdWx0cz86IFdwc0RhdGFbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV3BzU3RhdGUob2JqOiBvYmplY3QpOiBvYmogaXMgV3BzU3RhdGUge1xyXG4gICAgcmV0dXJuIG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkoJ3N0YXR1cycpICYmIChvYmouaGFzT3duUHJvcGVydHkoJ2pvYklEJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXNMb2NhdGlvbicpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveERhdGEge1xyXG4gICAgZGVzY3JpcHRpb246IFdwc0Jib3hEZXNjcmlwdGlvbjtcclxuICAgIHZhbHVlOiBXcHNCYm94VmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQ2FwYWJpbGl0eSB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNNYXJzaGFsbGVyIHtcclxuXHJcbiAgICBleGVjdXRlVXJsKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IHN0cmluZztcclxuICAgIGRpc21pc3NVcmwoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzVXJsKGJhc2V1cmw6IHN0cmluZyk6IHN0cmluZztcclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKTogYW55O1xyXG4gICAgbWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSUQ6IHN0cmluZyk6IGFueTtcclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShqb2JJZDogc3RyaW5nKTogYW55O1xyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXNKc29uOiBhbnkpOiBXcHNDYXBhYmlsaXR5W107XHJcbiAgICB1bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzUmVzdWx0W107XHJcbiAgICB1bm1hcnNoYWxBc3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb246IGFueSwgdXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlO1xyXG4gICAgdW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShqc29uUmVzcG9uc2U6IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlO1xyXG4gICAgdW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZTogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcpOiBXcHNTdGF0ZTtcclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/lib/wps/wpsclient.js b/@ukis/esm5/lib/wps/wpsclient.js deleted file mode 100644 index a6ae1975e..000000000 --- a/@ukis/esm5/lib/wps/wpsclient.js +++ /dev/null @@ -1,494 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0'; -import { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0'; -import { of } from 'rxjs'; -import { map, switchMap, tap, share, mergeMap } from 'rxjs/operators'; -import { HttpClient } from '@angular/common/http'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -/** @type {?} */ -var XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; -/** @type {?} */ -var OWS_2_0 = OWS_2_0_Factory.OWS_2_0; -import * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; -/** @type {?} */ -var WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0; -import * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; -/** @type {?} */ -var WPS_2_0 = WPS_2_0_Factory.WPS_2_0; -import { pollUntil, delayedRetry } from './utils/polling'; -import { Injectable, Inject } from '@angular/core'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { FakeCache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = tslib_1.__values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; -}()); -export { WpsClient }; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzY2xpZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dwcy93cHNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O0lBQU8sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0csT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOztJQUFPLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdHLE9BQU8sS0FBSyxlQUFlLE1BQU0seUJBQXlCLENBQUM7O0lBQU8sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPO0FBQ25HLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7SUFBTyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUztBQUM3RyxPQUFPLEtBQUssZUFBZSxNQUFNLHlCQUF5QixDQUFDOztJQUFPLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTztBQUNuRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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O0lBQzNCLGtDQUEyQjs7Ozs7SUFDM0Isb0NBQTZCOzs7OztJQUM3QixrQ0FBcUM7Ozs7O0lBQ3JDLDBCQUF1Qzs7Ozs7SUFJbkMsOEJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzTWFyc2hhbGxlciwgV3BzSW5wdXQsIFdwc1ZlcmlvbiwgV3BzUmVzdWx0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzRGF0YSwgV3BzU3RhdGUsIGlzV3BzU3RhdGUsIFdwc0RhdGFEZXNjcmlwdGlvbiB9IGZyb20gJy4vd3BzX2RhdGF0eXBlcyc7XHJcbmltcG9ydCB7IFdwc01hcnNoYWxsZXIxMDAgfSBmcm9tICcuL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMCc7XHJcbmltcG9ydCB7IFdwc01hcnNoYWxsZXIyMDAgfSBmcm9tICcuL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAsIHNoYXJlLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0ICogYXMgWExpbmtfMV8wX0ZhY3RvcnkgZnJvbSAndzNjLXNjaGVtYXMvbGliL1hMaW5rXzFfMCc7IGNvbnN0IFhMaW5rXzFfMCA9IFhMaW5rXzFfMF9GYWN0b3J5LlhMaW5rXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzFfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL09XU18xXzFfMCc7IGNvbnN0IE9XU18xXzFfMCA9IE9XU18xXzFfMF9GYWN0b3J5Lk9XU18xXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9PV1NfMl8wJzsgY29uc3QgT1dTXzJfMCA9IE9XU18yXzBfRmFjdG9yeS5PV1NfMl8wO1xyXG5pbXBvcnQgKiBhcyBXUFNfMV8wXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvV1BTXzFfMF8wJzsgY29uc3QgV1BTXzFfMF8wID0gV1BTXzFfMF8wX0ZhY3RvcnkuV1BTXzFfMF8wO1xyXG5pbXBvcnQgKiBhcyBXUFNfMl8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dQU18yXzAnOyBjb25zdCBXUFNfMl8wID0gV1BTXzJfMF9GYWN0b3J5LldQU18yXzA7XHJcbmltcG9ydCB7IHBvbGxVbnRpbCwgZGVsYXllZFJldHJ5IH0gZnJvbSAnLi91dGlscy9wb2xsaW5nJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpzb25peCB9IGZyb20gJ0Bib3VuZGxlc3NnZW8vanNvbml4JztcclxuaW1wb3J0IHsgQ2FjaGUsIEZha2VDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xyXG5cclxuXHJcblxyXG4vKipcclxuICogVGhlIFdwcy1jbGllbnQgYWJzdHJhY3RzIGF3YXkgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gV3BzMS4wLjAgYW5kIFdwczIuMC4wXHJcbiAqIFRoZXJlIGFyZSB0d28gbGF5ZXJzIG9mIG1hcnNoYWxsaW5nOlxyXG4gKiAgLSB0aGUgV3BzLW1hcnNoYWxsZXIgbWFyc2hhbHMgdXNlci1mYWNpbmcgZGF0YSB0byB3cHMtc3BlY2lmaWMgdHlwZXNcclxuICogIC0gSnNvbml4IG1hcnNoYWxzIHdwcy1zcGVjaWZpYyBkYXRhIHRvIHhtbC5cclxuICogdXNlci1mYWNpbmcgZGF0YSAtPiB3cHNtYXJzaGFsbGVyIC0+IFdwcy10eXBlLXNwZWNpZmljIGRhdGEgLT4gSnNvbml4LW1hcmhzYWxsZXIgLT4gWE1MIC0+XHJcbiAqIC0+IHdlYmNsaWVudCAtPiBXUFMgLT4gWE1MIC0+IEpzb25peC11bm1hcnNoYWxsZXIgLT4gV3BzLXR5cGUtc3BlY2lmaWMgZGF0YSAtPiB3cHNtYXJzaGFsbGVyIC0+IHVzZXItZmFjaW5nIGRhdGFcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdwc0NsaWVudCB7XHJcblxyXG4gICAgcHJpdmF0ZSB2ZXJzaW9uOiBXcHNWZXJpb247XHJcbiAgICBwcml2YXRlIHhtbG1hcnNoYWxsZXI6IGFueTtcclxuICAgIHByaXZhdGUgeG1sdW5tYXJzaGFsbGVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHdwc21hcnNoYWxsZXI6IFdwc01hcnNoYWxsZXI7XHJcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZSA9IG5ldyBGYWtlQ2FjaGUoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdXcHNWZXJzaW9uJykgdmVyc2lvbjogV3BzVmVyaW9uID0gJzEuMC4wJyxcclxuICAgICAgICBwcml2YXRlIHdlYmNsaWVudDogSHR0cENsaWVudCxcclxuICAgICAgICBASW5qZWN0KCdXcHNDYWNoZScpIGNhY2hlPzogQ2FjaGVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XHJcbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLmNhY2hlID0gY2FjaGU7XHJcbiAgICAgICAgbGV0IGNvbnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzEuMC4wJykge1xyXG4gICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIgPSBuZXcgV3BzTWFyc2hhbGxlcjEwMCgpO1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gbmV3IEpzb25peC5Db250ZXh0KFtYTGlua18xXzAsIE9XU18xXzFfMCwgV1BTXzFfMF8wXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09ICcyLjAuMCcpIHtcclxuICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyID0gbmV3IFdwc01hcnNoYWxsZXIyMDAoKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbWExpbmtfMV8wLCBPV1NfMl8wLCBXUFNfMl8wXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgZW50ZXJlZCBhIFdQUyB2ZXJzaW9uIG90aGVyIHRoYW4gMS4wLjAgb3IgMi4wLjAuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMueG1sdW5tYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTtcclxuICAgICAgICB0aGlzLnhtbG1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZU1hcnNoYWxsZXIoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBnZXRDYXBhYmlsaXRpZXNVcmwgPSB0aGlzLndwc21hcnNoYWxsZXIuZ2V0Q2FwYWJpbGl0aWVzVXJsKHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmF3KGdldENhcGFiaWxpdGllc1VybCkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUpzb24gPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxDYXBhYmlsaXRpZXMocmVzcG9uc2VKc29uLnZhbHVlKTtcclxuICAgICAgICAgICAgfSkgLy8gQFRPRE86IGhhbmRsZSBjYXNlIHdoZW4gaW5zdGVhZCBvZiBXcHNDYXBhYmlsaXRlcyBhbiBFeGNlcHRpb25SZXBvcnQgaXMgcmV0dXJuZWRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBkZXNjcmliZVByb2Nlc3MocHJvY2Vzc0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBleGVjdXRlQXN5bmModXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sXHJcbiAgICAgICAgcG9sbGluZ1JhdGU6IG51bWJlciA9IDEwMDAsIHRhcEZ1bmN0aW9uPzogKHJlc3BvbnNlOiBXcHNTdGF0ZSB8IG51bGwpID0+IGFueSk6IE9ic2VydmFibGU8V3BzUmVzdWx0W10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZVJlcXVlc3QkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHRoaXMuZXhlY3V0ZUFzeW5jUyh1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzKTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlcnkkID0gZXhlY3V0ZVJlcXVlc3QkLnBpcGUoXHJcblxyXG4gICAgICAgICAgICAvLyBwb2xsIHVudGlsIHN1Y2VlZGVkXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKChjdXJyZW50U3RhdGU6IFdwc1N0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHRoaXMuZ2V0TmV4dFN0YXRlKGN1cnJlbnRTdGF0ZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9sbCQ6IE9ic2VydmFibGU8V3BzU3RhdGU+ID0gcG9sbFVudGlsPFdwc1N0YXRlPihcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUkLFxyXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogV3BzU3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gJ1N1Y2NlZWRlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0YXBGdW5jdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBwb2xsaW5nUmF0ZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9sbCQ7XHJcbiAgICAgICAgICAgIH0pLFxyXG5cclxuICAgICAgICAgICAgLy8gZmV0Y2ggcmVzdWx0c1xyXG4gICAgICAgICAgICBtZXJnZU1hcCgobGFzdFN0YXRlOiBXcHNTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXN1bHRzKGxhc3RTdGF0ZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcbiAgICAgICAgICAgIH0pLFxyXG5cclxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBlcnJvcnM6XHJcbiAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IFdwc0RhdGFbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlc2NyaXB0aW9uLnR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NlcnZlciByZXNwb25kZWQgd2l0aCAyMDAsIGJ1dCBib2R5IGNvbnRhaW5lZCBhbiBlcnJvci1yZXN1bHQ6ICcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRRdWVyeSh1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzLCBxdWVyeSQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FjaGVkUXVlcnkodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgcXVlcnkkOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4pOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4ge1xyXG5cclxuICAgICAgICBjb25zdCBjYWNoZWRSZXNwb25zZSQ6IE9ic2VydmFibGU8V3BzUmVzdWx0W10gfCBudWxsPiA9IHRoaXMuY2FjaGUuZ2V0KHt1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzfSk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlJC5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdHMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IFdwc0RhdGFbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQoe3VybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHN9LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TmV4dFN0YXRlKGN1cnJlbnRTdGF0ZTogV3BzU3RhdGUsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzU3RhdGU+IHtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzEuMC4wJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuc3RhdHVzTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBzdGF0dXMgbG9jYXRpb24nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXF1ZXN0JCA9IHRoaXMuZ2V0UmF3KGN1cnJlbnRTdGF0ZS5zdGF0dXNMb2NhdGlvbik7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAnMi4wLjAnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRTdGF0ZS5qb2JJRCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGpvYi1JZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgY3VycmVudFN0YXRlLmpvYklEKTtcclxuICAgICAgICAgICAgY29uc3QgeG1sRXhlY2JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjYm9keSk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0JCA9IHRoaXMucG9zdFJhdyhzZXJ2ZXJVcmwsIHhtbEV4ZWNib2R5KTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnR2V0U3RhdHVzJyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkIGZvciB0aGlzIFdQUy1WZXJzaW9uICgke3RoaXMudmVyc2lvbn0pLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDEkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5ZWRSZXRyeSgyMDAwLCAyKSxcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBXcHNEYXRhW10gfCBXcHNTdGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCBzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdDEkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hSZXN1bHRzKGxhc3RTdGF0ZTogV3BzU3RhdGUsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzRGF0YVtdPiB7XHJcblxyXG4gICAgICAgIGlmIChsYXN0U3RhdGUucmVzdWx0cykgeyAvLyBXUFMgMS4wOiByZXN1bHRzIHNob3VsZCBhbHJlYWR5IGJlIGluIGxhc3Qgc3RhdGVcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGxhc3RTdGF0ZS5yZXN1bHRzKTtcclxuICAgICAgICB9IGVsc2UgeyAvLyBXUFMgMi4wOiBnZXQgcmVzdWx0cyB3aXRoIHBvc3QgcmVxdWVzdFxyXG5cclxuICAgICAgICAgICAgaWYgKCFsYXN0U3RhdGUuam9iSUQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IHdhbnQgbWUgdG8gZ2V0IGEgcmVzdWx0LCBidXQgSSBjYW4ndCBmaW5kIGEgam9iSWQuIEkgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIG5vdyFgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZXhlY0JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybCwgcHJvY2Vzc0lkLCBsYXN0U3RhdGUuam9iSUQpO1xyXG4gICAgICAgICAgICBjb25zdCB4bWxFeGVjQm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGV4ZWNCb2R5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RSYXcoc2VydmVyVXJsLCB4bWxFeGVjQm9keSkucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCBzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgZXhlY3V0ZUFzeW5jUyh1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVVcmwgPSB0aGlzLndwc21hcnNoYWxsZXIuZXhlY3V0ZVVybCh1cmwsIHByb2Nlc3NJZCk7XHJcbiAgICAgICAgY29uc3QgZXhlY2JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMsIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGV4ZWN1dGVVcmwsIHhtbEV4ZWNib2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQ6IFdwc1N0YXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGUodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogT2JzZXJ2YWJsZTxXcHNSZXN1bHRbXT4ge1xyXG5cclxuICAgICAgICBjb25zdCBleGVjdXRlVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmV4ZWN1dGVVcmwodXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zLCBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgeG1sRXhlY2JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RSYXcoZXhlY3V0ZVVybCwgeG1sRXhlY2JvZHkpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHhtbFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dDogV3BzRGF0YVtdID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShqc29uUmVzcG9uc2UsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzcyhzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgICAgICBjb25zdCBkaXNtaXNzVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmRpc21pc3NVcmwoc2VydmVyVXJsLCBwcm9jZXNzSWQsIGpvYklkKTtcclxuICAgICAgICBjb25zdCBkaXNtaXNzQm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsRGlzbWlzc0JvZHkoam9iSWQpO1xyXG4gICAgICAgIGNvbnN0IHhtbERpc21pc3NCb2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZGlzbWlzc0JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGRpc21pc3NVcmwsIHhtbERpc21pc3NCb2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RSYXcodXJsOiBzdHJpbmcsIHhtbEJvZHk6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsXHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYmNsaWVudC5wb3N0KHVybCwgeG1sQm9keSwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMiksXHJcbiAgICAgICAgICAgIHNoYXJlKCkgIC8vIHR1cm5pbmcgaG90OiB0byBtYWtlIHN1cmUgdGhhdCBtdWx0aXBsZSBzdWJzY3JpYmVycyBkb250IGNhdXNlIG11bHRpcGxlIHJlcXVlc3RzXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSYXcodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYmNsaWVudC5nZXQodXJsLCB7IGhlYWRlcnMsIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5ZWRSZXRyeSgyMDAwLCAyKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/esm5/public_api.js b/@ukis/esm5/public_api.js deleted file mode 100644 index a89c4d6b8..000000000 --- a/@ukis/esm5/public_api.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export { ServicesOgcModule } from './lib/services-ogc.module'; -export { isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService } from './lib/owc/owc-json.service'; -export {} from './lib/owc/types/owc-json'; -export {} from './lib/owc/types/eoc-owc-json'; -export { WpsClient } from './lib/wps/wpsclient'; -export { isWpsState, isBbox } from './lib/wps/wps_datatypes'; -export { FakeCache } from './lib/wps/cache'; -export { WmtsClientService } from './lib/wmts/wmtsclient.service'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBYywyQkFBMkIsQ0FBQztBQUMxQyxnUEFBYyw0QkFBNEIsQ0FBQztBQUMzQyxlQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGVBQWMsOEJBQThCLENBQUM7QUFDN0MsMEJBQWMscUJBQXFCLENBQUM7QUFDcEMsbUNBQWMseUJBQXlCLENBQUM7QUFDeEMsMEJBQWMsaUJBQWlCLENBQUM7QUFDaEMsa0NBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvb3djLWpzb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvZW9jLW93Yy1qc29uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL3dwc2NsaWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dwcy93cHNfZGF0YXR5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL2NhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/esm5/ukis-services-ogc.js b/@ukis/esm5/ukis-services-ogc.js deleted file mode 100644 index c3d4da86a..000000000 --- a/@ukis/esm5/ukis-services-ogc.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * Generated bundle index. Do not edit. - */ -export { ServicesOgcModule, isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService, WpsClient, isWpsState, isBbox, FakeCache, WmtsClientService } from './public_api'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWtpcy1zZXJ2aWNlcy1vZ2MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJ1a2lzLXNlcnZpY2VzLW9nYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLGdVQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ== \ No newline at end of file diff --git a/@ukis/fesm2015/ukis-services-ogc.js b/@ukis/fesm2015/ukis-services-ogc.js deleted file mode 100644 index 37cdc1dcc..000000000 --- a/@ukis/fesm2015/ukis-services-ogc.js +++ /dev/null @@ -1,3377 +0,0 @@ -import { Injectable, ɵɵdefineInjectable, ɵɵinject, Inject, NgModule } from '@angular/core'; -import { WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, VectorLayer, CustomLayertype, WmtsLayer, WmsLayer, RasterLayer } from '@ukis/services-layers'; -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map, tap, mergeMap, retryWhen, delay, switchMap, share } from 'rxjs/operators'; -import { XLink_1_0 as XLink_1_0$2 } from 'w3c-schemas/lib/XLink_1_0'; -import { OWS_1_1_0 as OWS_1_1_0$2 } from 'ogc-schemas/lib/OWS_1_1_0'; -import { SMIL_2_0 as SMIL_2_0$1 } from 'ogc-schemas/lib/SMIL_2_0'; -import { SMIL_2_0_Language as SMIL_2_0_Language$1 } from 'ogc-schemas/lib/SMIL_2_0_Language'; -import { GML_3_1_1 as GML_3_1_1$1 } from 'ogc-schemas/lib/GML_3_1_1'; -import { WMTS_1_0 as WMTS_1_0$1 } from 'ogc-schemas/lib/WMTS_1_0'; -import { forkJoin, of, timer } from 'rxjs'; -import { OWS_2_0 as OWS_2_0$1 } from 'ogc-schemas/lib/OWS_2_0'; -import { WPS_1_0_0 as WPS_1_0_0$1 } from 'ogc-schemas/lib/WPS_1_0_0'; -import { WPS_2_0 as WPS_2_0$1 } from 'ogc-schemas/lib/WPS_2_0'; - -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const XLink_1_0 = XLink_1_0$2; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0$2; -/** @type {?} */ -const SMIL_2_0 = SMIL_2_0$1; -/** @type {?} */ -const SMIL_2_0_Language = SMIL_2_0_Language$1; -/** @type {?} */ -const GML_3_1_1 = GML_3_1_1$1; -/** @type {?} */ -const WMTS_1_0 = WMTS_1_0$1; -class WmtsClientService { - /** - * @param {?} http - */ - constructor(http) { - this.http = http; - /** @type {?} */ - const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - getCapabilities(url, version = '1.1.0') { - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`; - /** @type {?} */ - const headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - response => { - return this.xmlunmarshaller.unmarshalString(response); - }))); - } -} -WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -WmtsClientService.ctorParameters = () => [ - { type: HttpClient } -]; -/** @nocollapse */ WmtsClientService.ngInjectableDef = ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(ɵɵinject(HttpClient)); }, token: WmtsClientService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @param {?} str - * @return {?} - */ -function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - let o = []; - for (let i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - let start = j[0].charCodeAt(0); - /** @type {?} */ - let end = j[1].charCodeAt(0); - if (start <= end) { - for (let k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (let k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -class OwcJsonService { - /** - * @param {?} wmtsClient - */ - constructor(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - checkContext(context) { - /** @type {?} */ - let isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - } - /** - * @param {?} context - * @return {?} - */ - getContextTitle(context) { - return context.properties.title; - } - /** - * @param {?} context - * @return {?} - */ - getContextPublisher(context) { - return (context.properties.publisher) ? context.properties.publisher : null; - } - /** - * @param {?} context - * @return {?} - */ - getContextExtent(context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - } - /** - * @param {?} context - * @return {?} - */ - getResources(context) { - return context.features; - } - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - getResourceTitle(resource) { - return resource.properties.title; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceUpdated(resource) { - return resource.properties.updated; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDate(resource) { - return (resource.properties.date) ? resource.properties.date : null; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOfferings(resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - } - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - isActive(resource) { - /** @type {?} */ - let active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOpacity(resource) { - /** @type {?} */ - let opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceAttribution(resource) { - /** @type {?} */ - let attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceShards(resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - } - /** - * @param {?} owctime - * @return {?} - */ - convertOwcTimeToIsoTimeAndPeriodicity(owctime) { - /** - * Convert from - * @type {?} - */ - let arr = owctime.split('/'); - /** @type {?} */ - let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - let p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDimensions(resource) { - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - let dims = {}; - /** @type {?} */ - let dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - for (let d of resource.properties.dimensions) { - dimensions[d.name] = d; - } - } - else { - dimensions = resource.properties.dimensions; - } - for (let name in dimensions) { - /** @type {?} */ - let dim = {}; - console.log(name); - if (name === "time" || dimensions[name].units == "ISO8601") { - /** @type {?} */ - let value = dimensions[name].value; - /** @type {?} */ - let values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - (v) => this.convertOwcTimeToIsoTimeAndPeriodicity(v))) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name].display, - "default": "end" - } - }; - } - else if (name === "elevation") { - dim = dimensions[name]; - } - else { - dim = dimensions[name]; - } - dims[name] = dim; - } - return dims; - } - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - getLayertypeFromOfferingCode(offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - } - /** - * @param {?} offering - * @return {?} - */ - checkIfServiceOffering(offering) { - return (!offering.contents && offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - checkIfDataOffering(offering) { - return (offering.contents && !offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - getOfferingContents(offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - } - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - getLegendUrl(offering) { - /** @type {?} */ - let legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - let defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - style => style.default)); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - } - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - getIconUrl(offering) { - /** @type {?} */ - let iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - } - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - getLayers(owc, targetProjection) { - /** @type {?} */ - const resources = owc.features; - /** @type {?} */ - const layers$ = []; - for (const resource of resources) { - /** @type {?} */ - const offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - const offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmtsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWfsOffering(o.code))) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - return forkJoin(layers$); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error(`This type of service (${layerType}) has not been implemented yet.`); - } - } - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - createVectorLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`); - return null; - } - /** @type {?} */ - const iconUrl = this.getIconUrl(offering); - /** @type {?} */ - let layerUrl; - /** @type {?} */ - let params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - let legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - let layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - const layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createRasterLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`); - return null; - } - /** @type {?} */ - let rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createWmtsLayerFromOffering(offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - (options) => { - /** @type {?} */ - const layer = new WmtsLayer(options); - return layer; - }))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - createWmsLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - const layer = new WmsLayer(options); - return of(layer); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - getWmtsOptions(offering, resource, context, targetProjection) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - const layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - let style; - if (offering.styles) { - /** @type {?} */ - const styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - (matrixSet) => { - /** @type {?} */ - const matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - const wmtsOptions = Object.assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getLayerForWMTS(offering, resource) { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile'); - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}. - Cannot infer layer.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - parseOperationUrl(offering, opCode) { - if (offering.operations) { - /** @type {?} */ - const operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - op => op.code === opCode)); - if (operation) { - /** @type {?} */ - const url = this.getUrlFromUri(operation.href); - /** @type {?} */ - const urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering); - } - } - else { - console.error(`The offering ${offering.code} has no operations.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - getMatrixSetForWMTS(offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - const matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - m => m.srs === targetProjection)); - return of(matrixSet); - } - else { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities'); - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - (capabilities) => { - /** @type {?} */ - const matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - const matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - ms => ms['identifier']['value'] === targetProjection)); - /** @type {?} */ - const owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['identifier']['value'])), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['scaleDenominator'])), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getWmsOptions(offering, resource, context) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - const urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let defaultStyle; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)).name; - } - /** @type {?} */ - const params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - const wmsOptions = Object.assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getRasterLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - const rasterLayerOptions = Object.assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - } - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - getUrlFromUri(uri) { - return uri.substring(0, uri.indexOf('?')); - } - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - getJsonFromUri(uri) { - /** @type {?} */ - const query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - const result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - const item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - } - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getDisplayName(offering, resource) { - /** @type {?} */ - let displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - } - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - generateOwsContextFrom(id, layers, extent, properties) { - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - let owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - for (let layer of layers) { - /** @type {?} */ - let resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - return owc; - } - /** - * @param {?} layer - * @return {?} - */ - generateResourceFromLayer(layer) { - /** @type {?} */ - let resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - } - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - generateOfferingFromLayer(layer, legendUrl, iconUrl) { - /** @type {?} */ - let offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - } - /** - * @param {?} layer - * @return {?} - */ - getOfferingCodeFromLayer(layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error(`This type of layer (${layer.type}) has not been implemented yet.`); - return null; - } - } - /** - * @param {?} layer - * @return {?} - */ - getContentsFromLayer(layer) { - /** @type {?} */ - let contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - let content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`); - } - return contents; - } - /** - * @param {?} layer - * @return {?} - */ - getOperationsFromLayer(layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error(`Cannot get operations for this type of layer: (${layer.type})`); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error(`This type of service (${layer.type}) has not been implemented yet.`); - return []; - } - } - } - /** - * @param {?} layer - * @return {?} - */ - getXyzOperationsFromLayer(layer) { - /** @type {?} */ - let restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': `${layer.url}` - }; - /** @type {?} */ - let operations = [ - restCall - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getTmsOperationsFromLayer(layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - } - /** - * @param {?} layer - * @return {?} - */ - getWfsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - let GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': `${url}?service=WFS&version=${version}&request=GetFeature` - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - let operations = [ - GetFeature, - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmsVersion = layer.params.VERSION; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true` - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities` - }; - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}` - }; - /** @type {?} */ - let operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmtsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmtsVersion = layer.params.version; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getTile = { - 'code': 'GetTile', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - let operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - } -} -OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -OwcJsonService.ctorParameters = () => [ - { type: WmtsClientService } -]; -/** @nocollapse */ OwcJsonService.ngInjectableDef = ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class WpsMarshaller100 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - process => { - out.push({ - id: process.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - for (const output of responseJson.value.processOutputs.output) { - /** @type {?} */ - const isReference = output.reference ? true : false; - /** @type {?} */ - let datatype; - /** @type {?} */ - let data; - /** @type {?} */ - let format; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @return {?} - */ - unmarshalOutputData(data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - cont => JSON.parse(cont))); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - const response = responseJson.value; - /** @type {?} */ - const status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - const state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - const wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - const bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - marshalResponseForm(outputs, async = false) { - /** @type {?} */ - const outputDefinitions = []; - for (const output of outputs) { - /** @type {?} */ - let defType; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `); - } - outputDefinitions.push(defType); - } - /** @type {?} */ - const responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - const form = { - responseDocument - }; - return form; - } - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - marshalInputs(inputArr) { - /** @type {?} */ - const theInputs = []; - for (const inp of inputArr) { - if (inp.value === null || inp.value === undefined) { - throw new Error(`Value for input ${inp.description.id} is not set`); - } - /** @type {?} */ - const marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - /** @type {?} */ - const inputs = { - input: theInputs - }; - return inputs; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalInput(input) { - /** @type {?} */ - const id = input.description.id; - /** @type {?} */ - const title = input.description.id; - /** @type {?} */ - const abstract = ''; - /** @type {?} */ - const inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalDataInput(input) { - /** @type {?} */ - let data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - const values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`); - } - return data; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalReferenceInput(input) { - /** @type {?} */ - const ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} processId - * @return {?} - */ - marshalDismissBody(processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -const isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -const isResult = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class WpsMarshaller200 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - summary => { - out.push({ - id: summary.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (isResult(responseJson.value)) { - for (const output of responseJson.value.output) { - /** @type {?} */ - const outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - od => od.id === output.id)); - if (!outputDescription) { - throw new Error(`Could not find an output-description for the parameter ${output.id}.`); - } - /** @type {?} */ - const isReference = outputDescription.reference; - /** @type {?} */ - const datatype = outputDescription.type; - /** @type {?} */ - const format = outputDescription.format; - /** @type {?} */ - let data; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error(`Output has neither reference nor data field.`); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - unmarshalOutputData(data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - (cont) => JSON.parse(cont))); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error(`Not a status-info: ${responseJson}`); - } - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - const outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - const bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @private - * @param {?} inputs - * @return {?} - */ - marshalInputs(inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - i => { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - } - /** - * @private - * @param {?} outputs - * @return {?} - */ - marshalOutputs(outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - o => { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - return serverUrl; - } - /** - * @param {?} jobId - * @return {?} - */ - marshalDismissBody(jobId) { - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - /** @type {?} */ - const state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -function pollUntil(task$, predicate, doWhile, minWaitTime = 1000) { - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - const tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - (r) => { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - const requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - r => r[0]))); - /** @type {?} */ - const polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - (response) => { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -function delayedRetry(delayMs, maxRetries = 3) { - /** @type {?} */ - let attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - (src$) => { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - (error$) => { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - (error) => { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -class FakeCache { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - set(input, output) { - } - /** - * @param {?} input - * @return {?} - */ - get(input) { - return of(null); - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const XLink_1_0$1 = XLink_1_0$2; -/** @type {?} */ -const OWS_1_1_0$1 = OWS_1_1_0$2; -/** @type {?} */ -const OWS_2_0 = OWS_2_0$1; -/** @type {?} */ -const WPS_1_0_0 = WPS_1_0_0$1; -/** @type {?} */ -const WPS_2_0 = WPS_2_0$1; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -class WpsClient { - /** - * @param {?=} version - * @param {?=} webclient - * @param {?=} cache - */ - constructor(version = '1.0.0', webclient, cache) { - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - let context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - getCapabilities(url) { - /** @type {?} */ - const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - (response) => { - /** @type {?} */ - const responseJson = this.xmlunmarshaller.unmarshalString(response); - return this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - } - /** - * @param {?} processId - * @return {?} - */ - describeProcess(processId) { - throw new Error('Not implemented yet'); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - executeAsync(url, processId, inputs, outputs, pollingRate = 1000, tapFunction) { - /** @type {?} */ - const executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - const query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - (currentState) => { - /** @type {?} */ - const nextState$ = this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - const poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - (response) => { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - (lastState) => { - return this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - for (const result of response) { - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - cachedQuery(url, processId, inputs, outputs, query$) { - /** @type {?} */ - const cachedResponse$ = this.cache.get({ url, processId, inputs, outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - (results) => { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - this.cache.set({ url, processId, inputs, outputs }, response); - }))); - } - }))); - } - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - getNextState(currentState, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - let request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`); - } - /** @type {?} */ - const request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - } - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - fetchResults(lastState, serverUrl, processId, inputs, outputDescriptions) { - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`); - } - /** @type {?} */ - const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - const xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - executeAsyncS(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - execute(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismiss(serverUrl, processId, jobId) { - /** @type {?} */ - const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - } - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - postRaw(url, xmlBody) { - /** @type {?} */ - const headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - } - /** - * @param {?} url - * @return {?} - */ - getRaw(url) { - /** @type {?} */ - const headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - } -} -WpsClient.decorators = [ - { type: Injectable } -]; -/** @nocollapse */ -WpsClient.ctorParameters = () => [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } -]; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class ServicesOgcModule { -} -ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } -]; - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -const isBbox = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} - -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -export { FakeCache, OwcJsonService, ServicesOgcModule, WmtsClientService, WpsClient, isBbox, isCswOffering, isGMLCOVOffering, isGMLJP2Offering, isGeoJsonOffering, isGeoTIFFOffering, isGmlOffering, isKmlOffering, isWfsOffering, isWmsOffering, isWmtsOffering, isWpsOffering, isWpsState, isXyzOffering, shardsExpand }; -//# sourceMappingURL=ukis-services-ogc.js.map diff --git a/@ukis/fesm2015/ukis-services-ogc.js.map b/@ukis/fesm2015/ukis-services-ogc.js.map deleted file mode 100644 index e6788a9d5..000000000 --- a/@ukis/fesm2015/ukis-services-ogc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.js","sources":["ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/fesm5/ukis-services-ogc.js b/@ukis/fesm5/ukis-services-ogc.js deleted file mode 100644 index 41485271b..000000000 --- a/@ukis/fesm5/ukis-services-ogc.js +++ /dev/null @@ -1,4047 +0,0 @@ -import { Injectable, ɵɵdefineInjectable, ɵɵinject, Inject, NgModule } from '@angular/core'; -import { __values, __assign, __read } from 'tslib'; -import { WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, VectorLayer, CustomLayertype, WmtsLayer, WmsLayer, RasterLayer } from '@ukis/services-layers'; -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map, tap, mergeMap, retryWhen, delay, switchMap, share } from 'rxjs/operators'; -import { XLink_1_0 as XLink_1_0$2 } from 'w3c-schemas/lib/XLink_1_0'; -import { OWS_1_1_0 as OWS_1_1_0$2 } from 'ogc-schemas/lib/OWS_1_1_0'; -import { SMIL_2_0 as SMIL_2_0$1 } from 'ogc-schemas/lib/SMIL_2_0'; -import { SMIL_2_0_Language as SMIL_2_0_Language$1 } from 'ogc-schemas/lib/SMIL_2_0_Language'; -import { GML_3_1_1 as GML_3_1_1$1 } from 'ogc-schemas/lib/GML_3_1_1'; -import { WMTS_1_0 as WMTS_1_0$1 } from 'ogc-schemas/lib/WMTS_1_0'; -import { forkJoin, of, timer } from 'rxjs'; -import { OWS_2_0 as OWS_2_0$1 } from 'ogc-schemas/lib/OWS_2_0'; -import { WPS_1_0_0 as WPS_1_0_0$1 } from 'ogc-schemas/lib/WPS_1_0_0'; -import { WPS_2_0 as WPS_2_0$1 } from 'ogc-schemas/lib/WPS_2_0'; - -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var XLink_1_0 = XLink_1_0$2; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0$2; -/** @type {?} */ -var SMIL_2_0 = SMIL_2_0$1; -/** @type {?} */ -var SMIL_2_0_Language = SMIL_2_0_Language$1; -/** @type {?} */ -var GML_3_1_1 = GML_3_1_1$1; -/** @type {?} */ -var WMTS_1_0 = WMTS_1_0$1; -var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(ɵɵinject(HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; -}()); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @param {?} str - * @return {?} - */ -function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = __values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = __values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new WmsLayer(options); - return of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = __assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = __read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return of(matrixSet); - } - else { - var _a = __read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = __assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = __assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; -}()); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = __values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = __values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = __values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -var isResult = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = __values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return of(null); - }; - return FakeCache; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var XLink_1_0$1 = XLink_1_0$2; -/** @type {?} */ -var OWS_1_1_0$1 = OWS_1_1_0$2; -/** @type {?} */ -var OWS_2_0 = OWS_2_0$1; -/** @type {?} */ -var WPS_1_0_0 = WPS_1_0_0$1; -/** @type {?} */ -var WPS_2_0 = WPS_2_0$1; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = __values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; -}()); -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -var isBbox = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} - -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -export { FakeCache, OwcJsonService, ServicesOgcModule, WmtsClientService, WpsClient, isBbox, isCswOffering, isGMLCOVOffering, isGMLJP2Offering, isGeoJsonOffering, isGeoTIFFOffering, isGmlOffering, isKmlOffering, isWfsOffering, isWmsOffering, isWmtsOffering, isWpsOffering, isWpsState, isXyzOffering, shardsExpand }; -//# sourceMappingURL=ukis-services-ogc.js.map diff --git a/@ukis/fesm5/ukis-services-ogc.js.map b/@ukis/fesm5/ukis-services-ogc.js.map deleted file mode 100644 index 763be983d..000000000 --- a/@ukis/fesm5/ukis-services-ogc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.js","sources":["ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","tslib_1.__values","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/lib/owc/owc-json.service.d.ts b/@ukis/lib/owc/owc-json.service.d.ts deleted file mode 100644 index 7b2e2b12b..000000000 --- a/@ukis/lib/owc/owc-json.service.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering, CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering } from './types/owc-json'; -import { IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering } from './types/eoc-owc-json'; -import { VectorLayer, RasterLayer, Layer, TLayertype, ILayerDimensions, ILayerIntervalAndPeriod } from '@ukis/services-layers'; -import { TGeoExtent } from '@ukis/services-map-state'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { Observable } from 'rxjs'; -export declare function isWmsOffering(str: string): str is WMS_Offering; -export declare function isWfsOffering(str: string): str is WFS_Offering; -export declare function isWpsOffering(str: string): str is WCS_Offering; -export declare function isCswOffering(str: string): str is CSW_Offering; -export declare function isWmtsOffering(str: string): str is WMTS_Offering; -export declare function isGmlOffering(str: string): str is GML_Offering; -export declare function isKmlOffering(str: string): str is KML_Offering; -export declare function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering; -export declare function isGMLJP2Offering(str: string): str is GMLJP2_Offering; -export declare function isGMLCOVOffering(str: string): str is GMLCOV_Offering; -export declare function isXyzOffering(str: string): str is Xyz_Offering; -export declare function isGeoJsonOffering(str: string): str is GeoJson_Offering; -export declare function shardsExpand(v: string): any[]; -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -export declare class OwcJsonService { - private wmtsClient; - constructor(wmtsClient: WmtsClientService); - checkContext(context: IOwsContext): any; - getContextTitle(context: IOwsContext): string; - getContextPublisher(context: IOwsContext): string; - getContextExtent(context: IOwsContext): import("geojson").BBox; - getResources(context: IOwsContext): IOwsResource[]; - /** Resource --------------------------------------------------- */ - getResourceTitle(resource: IOwsResource): string; - getResourceUpdated(resource: IOwsResource): string; - getResourceDate(resource: IOwsResource): string; - getResourceOfferings(resource: IOwsResource): IOwsOffering[]; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - isActive(resource: IOwsResource): boolean; - getResourceOpacity(resource: IOwsResource): number; - getResourceAttribution(resource: IOwsResource): string; - getResourceShards(resource: IOwsResource): string; - convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string; - getResourceDimensions(resource: IOwsResource): ILayerDimensions; - /** Offering --------------------------------------------------- */ - getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype; - checkIfServiceOffering(offering: IOwsOffering): boolean; - checkIfDataOffering(offering: IOwsOffering): boolean; - getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[]; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - getLegendUrl(offering: IOwsOffering): string; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - getIconUrl(offering: IOwsOffering): string; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - getLayers(owc: IOwsContext, targetProjection: string): Observable; - createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable; - createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable; - createRasterLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable; - private createWmtsLayerFromOffering; - private createWmsLayerFromOffering; - private getWmtsOptions; - private getLayerForWMTS; - private parseOperationUrl; - private getMatrixSetForWMTS; - private getWmsOptions; - private getRasterLayerOptions; - private getLayerOptions; - /** Misc --------------------------------------------------- */ - private getUrlFromUri; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - private getJsonFromUri; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - private getDisplayName; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?: any): IEocOwsContext; - generateResourceFromLayer(layer: Layer): IEocOwsResource; - generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering; - getOfferingCodeFromLayer(layer: Layer): string; - getContentsFromLayer(layer: VectorLayer): IOwsContent[]; - getOperationsFromLayer(layer: Layer): IOwsOperation[]; - getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[]; - getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; -} diff --git a/@ukis/lib/owc/types/eoc-owc-json.d.ts b/@ukis/lib/owc/types/eoc-owc-json.d.ts deleted file mode 100644 index 7993d836a..000000000 --- a/@ukis/lib/owc/types/eoc-owc-json.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering, CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering, IOwsResourceProperties } from './owc-json'; -import * as GeoJSON from 'geojson'; -export interface IEocOwsContext extends IOwsContext { - features: IEocOwsResource[]; - projections?: IEocOwsProjection[]; -} -export interface IEocOwsResource extends IOwsResource { - properties: IEocOwsResourceProperties; -} -export interface IEocOwsResourceProperties extends IOwsResourceProperties { - opacity?: number; - attribution?: string; - shards?: string; - dimensions?: IEocOwsResourceDimensions; -} -export interface IEocOwsResourceDimensions { - time?: IEocOwsResourceDimension; - elevation?: IEocOwsResourceDimension; - [k: string]: any; -} -export interface IEocOwsResourceDimension { - /** Default step display of time slider */ - display?: string; - units: string; - value?: string; -} -export interface IEocOwsOffering extends IOwsOffering { - code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | GeoJson_Offering | string; - legendUrl?: string; - iconUrl?: string; - title?: string; -} -export interface IEocWmsOffering extends IEocOwsOffering { - code: WMS_Offering; -} -export interface IEocOwsWmtsOffering extends IEocOwsOffering { - code: WMTS_Offering; - matrixSets?: IEocOwsWmtsMatrixSet[]; -} -export interface IEocOwsWmtsMatrixSet { - /** EPSG-Code */ - srs: string; - matrixSet: string; - matrixIds: string[]; - origin: { - x: number; - y: number; - }; - resolutions: number[]; - tilesize: { - height: number; - width: number; - }; -} -export interface IEocOwsProjection { - bbox: GeoJSON.BBox; - code: string; - default?: boolean; - unit?: string | number; -} -/** -* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings -*/ -export declare type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -export declare type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; diff --git a/@ukis/lib/owc/types/owc-json.d.ts b/@ukis/lib/owc/types/owc-json.d.ts deleted file mode 100644 index 1f293189c..000000000 --- a/@ukis/lib/owc/types/owc-json.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * Definitions by: Mathias Boeck - * TypeScript Version: 2.5.3 - * - * depends on @types/geojson@^7946.0.2 - */ -import * as GeoJSON from 'geojson'; -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - */ -export interface IOwsContext extends GeoJSON.FeatureCollection { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - */ - id: string | number; - properties: { - links: { - profiles: string[]; - } | IOwsLinks[]; - /** Language of Context document content */ - lang: LangString; - /** Title for the Context document */ - title: string; - /** Date of a creation or update of the Context document */ - updated: DateString; - /** Description of the Context document purpose or content */ - subtitle?: string; - /** This element is optional and indicates the authors array of the Context document */ - authors?: IOwsAuthor[]; - /** Identifier for the publisher of the Context document */ - publisher?: string; - /** Tool/application used to create the Context document and its properties */ - creator?: IOwsCreator; - /** - * Properties of the display in use when the context document was created (for display based applications only). - * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices - */ - display?: IOwsCreatorDisplay[]; - /** Information about rights held in and over the Context document */ - rights?: string; - /** - * Date or range of dates relevant to the resource - * time range which is expected to be of interest to the user. - */ - date?: DateString; - /** This array is an optional and expresses categories related to this Context document */ - categories?: IOwsCategorie[]; - /** Extension Any other element */ - [k: string]: any; - }; - /** Ordered List of Resources available on the Context document */ - features: IOwsResource[]; - /** Extension Any other element */ - [k: string]: any; -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - */ -export interface IOwsResource extends GeoJSON.Feature { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - */ - id: string | number; - properties: IOwsResourceProperties; - [k: string]: any; -} -export interface IOwsResourceProperties { - /** Title given to the Context resource */ - title: string; - /** Date of the last update of the Context resource */ - updated: DateString; - /** The purpose is to provide a generic description of the content in a format understandable by generic readers */ - abstract?: string; - /** This element is optional and indicates the authors array of the Context resource */ - authors?: IOwsAuthor[]; - /** Entity responsible for making the Context resource available */ - publisher?: string; - /** Information about rights held in and over the Context resource */ - rights?: string; - /** Date or range of dates relevant to the Context resource */ - date?: DateString; - /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */ - offerings?: IOwsOffering[]; - /** Flag value indicating to the client if the Context resource should be displayed by default */ - active?: boolean; - /** This array is optional and expresses a category related to the Context resource */ - categories?: IOwsCategorie[]; - /** Minimum scale for the display of the Context resource Double */ - minscaledenominator?: number; - /** Maximum scale for the display of the Context resource Double */ - maxscaledenominator?: number; - /** Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - */ - folder?: string; - /** TODO!!! links is defined as Object but in the examples as Array */ - links?: IOwsLinks[]; - [k: string]: any; -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - */ -export interface IOwsOffering { - /** Extension Offerings with type - string */ - code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string; - /** Web Service Offerings provide their operations */ - operations?: IOwsOperation[]; - /** Content Offerings allow content to be embedded in an OWS Context document. */ - contents?: IOwsContent[]; - styles?: IOwsStyleSet[]; - [k: string]: any; -} -export interface IOwsCreator { - title?: string; - uri?: string; - version?: string; -} -export interface IOwsAuthor { - /** Entity primarily responsible for making the Context document */ - name?: string; - email?: string; - uri?: string; - [k: string]: any; -} -export interface IOwsCategorie { - scheme?: string; - /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */ - term?: string; - label?: string; -} -export interface IOwsLinks { - rel: string; - href?: string; - type?: string; - title?: string; - /** Reference to a description of the Context resource in alternative format */ - alternates?: string; - lang?: LangString; - [k: string]: any; -} -export interface IOwsCreatorApplication { - title?: string; - uri?: string; - version?: string; -} -export interface IOwsCreatorDisplay { - /** Width measured in pixels of the display showing the Area of Interest */ - pixelWidth?: number; - /** Width measured in pixels of the display showing by the Area of Interest */ - pixelHeight?: number; - /** The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) */ - mmPerPixel?: number; - [k: string]: any; -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - */ -export interface IOwsOperation { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - */ - code: string; - /** method defines the access method, for example GET or POST. */ - method: string; - type?: string; - /** href is the URI containing the definition of the request */ - href?: string; - request?: IOwsContent; - result?: IOwsContent; - /** Extension of Operation */ - [k: string]: any; -} -export interface IOwsContent { - /** MIME type of the Content */ - type: string; - href?: string; - title?: string; - /** String type, not empty that can contain any text encoded media type */ - content?: string; - [k: string]: any; -} -export interface IOwsStyleSet { - name: string; - title: string; - abstract?: string; - default?: boolean; - legendURL?: string; - content?: IOwsContent; - [k: string]: any; -} -/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */ -export declare type DateString = string; -/** RFC-3066 code e.g. en,de */ -export declare type LangString = string; -export declare type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' | 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0'; -export declare type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -export declare type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -export declare type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps'; -export declare type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -export declare type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; -export declare type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -export declare type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -export declare type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -export declare type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -export declare type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; diff --git a/@ukis/lib/services-ogc.module.d.ts b/@ukis/lib/services-ogc.module.d.ts deleted file mode 100644 index 440443540..000000000 --- a/@ukis/lib/services-ogc.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class ServicesOgcModule { -} diff --git a/@ukis/lib/wmts/wmtsclient.service.d.ts b/@ukis/lib/wmts/wmtsclient.service.d.ts deleted file mode 100644 index f80b06895..000000000 --- a/@ukis/lib/wmts/wmtsclient.service.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; -export declare class WmtsClientService { - private http; - private xmlmarshaller; - private xmlunmarshaller; - constructor(http: HttpClient); - getCapabilities(url: string, version?: string): Observable; -} diff --git a/@ukis/lib/wps/cache.d.ts b/@ukis/lib/wps/cache.d.ts deleted file mode 100644 index 015be15ad..000000000 --- a/@ukis/lib/wps/cache.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { WpsData } from "./wps_datatypes"; -import { Observable } from "rxjs"; -export interface Cache { - set(input: object, output: WpsData[]): any; - get(input: object): Observable; -} -export declare class FakeCache implements Cache { - set(input: object, output: WpsData[]): void; - get(input: object): Observable; -} diff --git a/@ukis/lib/wps/utils/polling.d.ts b/@ukis/lib/wps/utils/polling.d.ts deleted file mode 100644 index c58cf2c4c..000000000 --- a/@ukis/lib/wps/utils/polling.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Observable } from 'rxjs'; -export declare function pollUntil(task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime?: number): Observable; -export declare function delayedRetry(delayMs: number, maxRetries?: number): (src$: Observable) => Observable; diff --git a/@ukis/lib/wps/wps100/wps_1.0.0.d.ts b/@ukis/lib/wps/wps100/wps_1.0.0.d.ts deleted file mode 100644 index d0f0d2dc6..000000000 --- a/@ukis/lib/wps/wps100/wps_1.0.0.d.ts +++ /dev/null @@ -1,373 +0,0 @@ -export type ExceptionReport = any; - - -export interface BoundingBoxType { - lowerCorner: number[], - upperCorner: number[], - crs?: string, - dimensions?: number, -} - -export interface CodeType { - value: string -} - -export interface LanguageStringType { - value: string -} - -export interface AllowedValuesType { - valueOrRange: ValueType[] -} - -export interface ValueType { - value: string -} - -export interface DomainMetadataType { - reference?: string, - value: LiteralInputType -} - -export interface LiteralInputType { - allowedValues: any; - anyValue: any; - valuesReference: any; - defaultValue?: any; -} - -export interface OutputReferenceType { - href: string; - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface ResponseFormType { - responseDocument?: ResponseDocumentType; - rawDataOutput?: OutputDefinitionType; -} - -export interface DataType { - complexData?: ComplexDataType; - literalData?: LiteralDataType; - boundingBoxData?: BoundingBoxType; -} - -export interface ComplexDataCombinationsType { - format: any; -} - -export interface ResponseDocumentType { - output: DocumentOutputDefinitionType[]; - storeExecuteResponse?: boolean; - lineage?: boolean; - status?: boolean; -} - -export interface ProcessDescriptionType_ProcessOutputs { - output: any; -} - -export interface InputReferenceType_Header { - key: string; - value: string; -} - -export interface ProcessOfferings { - process: any; -} - -export interface SupportedComplexDataInputType { - maximumMegabytes?: any; -} - -export interface SupportedComplexDataType { - _default: ComplexDataCombinationType; - supported: ComplexDataCombinationsType; -} - -export interface ValuesReferenceType { - reference?: string; - valuesForm?: string; -} - -export interface ComplexDataType { - otherAttributes?: any; - content: any[]; // string[]; // <-- should actually be any, but jsonix disagrees... - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface ProcessBriefType { - identifier: CodeType; - processVersion: any; - profile?: any; - wsdl?: any; -} - -export interface Languages { - _default: Languages_Default; - supported: LanguagesType; -} - -export interface ExecuteResponse_ProcessOutputs { - output: OutputDataType[]; -} - -export interface DescriptionType { - identifier: CodeType; - title: LanguageStringType; - _abstract?: LanguageStringType; - metadata?: any; -} - -export interface WpsProcessBriefType { - title: LanguageStringType[], - identifier: CodeType, - processVersion?: string, - metadata?: Object, - abstract?: Object, - profile?: Object, - WSDL?: Object -} - -export interface ProcesOfferings { - process: WpsProcessBriefType[] -} - -export interface WPSCapabilitiesType { - processOfferings: ProcesOfferings; - languages: any; - service: any; - lang: any; - wsdl?: any; -} - -export interface ProcessStartedType { - value?: string; - percentCompleted?: number; -} - -export interface DescribeProcess { - identifier: any; -} - -export interface OutputDescriptionType { - complexOutput: any; - literalOutput: any; - boundingBoxOutput: any; -} - -export interface ProcessDescriptions { - processDescription: any; -} - -export interface InputDescriptionType { - complexData: any; - literalData: any; - boundingBoxData: any; - minOccurs: any; - maxOccurs: any; -} - -export interface RequestBaseType { - service: string; - version: string; - language?: string; -} - -export interface InputReferenceType { - href: string; - mimeType?: string; - encoding?: string; - schema?: string; - body?: any; - bodyReference?: InputReferenceType_BodyReference; - header?: any; - method?: 'GET' | 'POST' | 'PUT' | 'HEAD' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'PATCH'; -} - -export interface LiteralOutputType { - dataType?: DomainMetadataType; - uoMs?: SupportedUOMsType; -} - -export interface ProcessDescriptionType { - processOutputs: any; - dataInputs?: any; - storeSupported?: any; - statusSupported?: any; -} - -export interface StatusType { - processAccepted: string; - processStarted: ProcessStartedType; - processPaused: ProcessStartedType; - processSucceeded: string; - processFailed: ProcessFailedType; - creationTime: string; -} - -export interface UOMsType { - uom: any; -} - -export interface ComplexDataCombinationType { - format: ComplexDataDescriptionType; -} - -export interface CRSsType { - crs: any; -} - -export interface LiteralDataType { - value?: string; - dataType?: string; - uom?: string; -} - -export interface Execute { - identifier: any; - dataInputs?: DataInputsType; - responseForm?: any; - service: "WPS"; - version: "1.0.0"; -} - -export interface ComplexDataDescriptionType { - mimeType: string; - encoding?: string; - schema?: string; -} - -export interface SupportedCRSsType_Default { - crs: string; -} - -export interface ExecuteResponse { - process: ProcessBriefType; - status: StatusType; - serviceInstance: any; - dataInputs?: any; - outputDefinitions?: any; - processOutputs?: ExecuteResponse_ProcessOutputs; - statusLocation?: any; -} - -export interface SupportedUOMsType_Default { - uom: DomainMetadataType; -} - -export interface ProcessFailedType { - exceptionReport: ExceptionReport; -} - -export interface LanguagesType { - language: any; -} - -export interface OutputDefinitionsType { - output: any; -} - -export interface WSDL { - href: string; -} - -export interface SupportedUOMsType { - _default: SupportedUOMsType_Default; - supported: UOMsType; -} - -export interface InputReferenceType_BodyReference { - href: string; -} - -export interface DataInputsType { - input: InputType[]; -} - -export interface SupportedCRSsType { - _default: SupportedCRSsType_Default; - supported: CRSsType; -} - -export interface Languages_Default { - language: any; -} - -export interface DocumentOutputDefinitionType { - title?: any; - _abstract?: any; - asReference?: boolean; - identifier: CodeType, - mimeType?: string, - encoding?: string, - schema?: string, - uom?: string -} - -export interface ProcessDescriptionType_DataInputs { - input: any; -} - -export interface OutputDefinitionType { - identifier: CodeType; - uom?: string; - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface OutputDataType { - identifier: CodeType; - reference?: OutputReferenceType; - data?: DataType; -} - -export interface InputType { - identifier: CodeType; - reference?: InputReferenceType; - data?: DataType; - title?: LanguageStringType; - _abstract?: LanguageStringType; -} - -export interface ResponseBaseType { - service: string; - version: string; - lang: string; -} - -export interface GetCapabilities { - service: string; - acceptVersions?: any; - language?: string; -} - - -export interface IWpsExecuteProcessBody { - name: { - key: "{http://www.opengis.net/wps/1.0.0}Execute", - localPart: "Execute", - namespaceURI: "http://www.opengis.net/wps/1.0.0", - prefix: "wps", - string: "{http://www.opengis.net/wps/1.0.0}wps:Execute" - }; - value: Execute -} - -export interface IWpsExecuteResponse { - name: { - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - localPart: 'ExecuteResponse', - prefix: 'wps', - key: '{http://www.opengis.net/wps/1.0.0}ExecuteResponse', - string: '{http://www.opengis.net/wps/1.0.0}wps:ExecuteResponse' - }, - value: ExecuteResponse -} - - diff --git a/@ukis/lib/wps/wps100/wps_marshaller_1.0.0.d.ts b/@ukis/lib/wps/wps100/wps_marshaller_1.0.0.d.ts deleted file mode 100644 index beb1c9bd1..000000000 --- a/@ukis/lib/wps/wps100/wps_marshaller_1.0.0.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsData, WpsDataDescription, WpsState } from '../wps_datatypes'; -import { WPSCapabilitiesType, IWpsExecuteProcessBody, DataInputsType, InputType, ResponseFormType, DataType, IWpsExecuteResponse, InputReferenceType } from './wps_1.0.0'; -export declare class WpsMarshaller100 implements WpsMarshaller { - constructor(); - getCapabilitiesUrl(baseurl: string): string; - executeUrl(baseurl: string, processId: string): string; - unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - protected unmarshalOutputData(data: DataType): any; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState; - unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody; - protected marshalResponseForm(outputs: WpsOutputDescription[], async?: boolean): ResponseFormType; - protected marshalInputs(inputArr: WpsInput[]): DataInputsType; - protected marshalInput(input: WpsInput): InputType; - protected marshalDataInput(input: WpsInput): DataType; - protected marshalReferenceInput(input: WpsInput): InputReferenceType; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): {}; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): {}; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - marshalDismissBody(processId: string): void; - unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/lib/wps/wps200/helpers.d.ts b/@ukis/lib/wps/wps200/helpers.d.ts deleted file mode 100644 index 88f8f2e3a..000000000 --- a/@ukis/lib/wps/wps200/helpers.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { StatusInfo, DataOutputType, Result } from './wps_2.0'; -export declare const isStatusInfo: (obj: object) => obj is StatusInfo; -export declare const isDataOutputType: (obj: object) => obj is DataOutputType; -export declare const isResult: (obj: object) => obj is Result; diff --git a/@ukis/lib/wps/wps200/wps_2.0.d.ts b/@ukis/lib/wps/wps200/wps_2.0.d.ts deleted file mode 100644 index 137fd6167..000000000 --- a/@ukis/lib/wps/wps200/wps_2.0.d.ts +++ /dev/null @@ -1,312 +0,0 @@ -export type BoundingBoxType = any; -export type ExceptionReport = any; - - -export interface CodeType { - value: string -} - -export interface LanguageStringType { - value: string -} - -export interface AllowedValuesType { - valueOrRange: ValueType[] -} - -export interface ValueType { - value: string -} - - -export interface OutputDescriptionType { - dataDescription: any; - output: any; -} - -export interface DataOutputType { - id: string; - data?: Data; - reference?: ReferenceType; - output?: DataOutputType; -} - -export interface WPSCapabilitiesType_Extension { - any?: any; -} - -export interface Dismiss extends RequestBaseType { - jobID: any; - service: 'WPS', - version: '2.0.0' -} - -export interface LiteralDataType { - literalDataDomain: any; -} - -export interface GetCapabilitiesType { - service: any; -} - -export interface Contents { - processSummary: ProcessSummaryType[]; -} - -export interface DataInputType { - id: string; - /** Raw data. Only use one of the following: data, reference, input. */ - data?: Data; - /** Data per reference. Only use one of the following: data, reference, input. */ - reference?: ReferenceType; - /** Nested data. Only use one of the following: data, reference, input. */ - input?: DataInputType; -} - -export interface GetResult extends RequestBaseType { - jobID: any; - service: 'WPS'; - version: '2.0.0'; -} - -export interface SupportedCRS { - value?: string; - _default?: boolean; -} - -export interface LiteralDataDomainType { - allowedValues: AllowedValuesType; - anyValue: any; - valuesReference: any; - dataType?: any; - uom?: any; - defaultValue?: ValueType; -} - -export interface DataDescriptionType { - format: any; -} - -export interface StatusInfo { - jobID: string; - status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed'; - expirationDate?: string; - estimatedCompletion?: string; - nextPoll?: string; - percentCompleted?: number; -} - -export interface DataEncodingAttributes { - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface OutputDefinitionType extends DataEncodingAttributes { - transmission?: string; - id: string; - /** Include only for nested outputs. */ - output?: OutputDefinitionType; -} - -export interface LiteralValue { - dataType?: any; - uom?: any; -} - -export interface RequestBaseType { - service: string; - version: string; - Extension?: any; -} - -export interface LiteralDataType_LiteralDataDomain { - _default?: any; -} - -export interface DescribeProcess { - identifier: any; - lang?: any; -} - -export interface Result { - output: DataOutputType[]; - jobID?: string; - expirationDate?: string; -} - -export interface GenericInputType { - input?: any; - minOccurs?: any; - maxOccurs?: any; -} - -export interface Data extends DataEncodingAttributes { - otherAttributes?: any; - content?: any; -} - -export interface Format extends DataEncodingAttributes { - maximumMegabytes?: number; - _default?: boolean; -} - -export interface BoundingBoxData { - supportedCRS: any; -} - -export interface ProcessDescriptionType { - output: any; - input?: any; - lang?: any; -} - -export interface InputDescriptionType { - dataDescription: any; - input: any; - minOccurs?: any; - maxOccurs?: any; -} - -export type OutputTransmissionType = 'value' | 'reference'; - -export interface ProcessSummaryType { - processVersion?: string; - jobControlOptions: any[]; - outputTransmission?: OutputTransmissionType[]; - title: LanguageStringType[]; - identifier: CodeType; - processModel?: any; -} - -export interface BodyReferenceType { - href: string; -} - -export interface ProcessOfferings { - processOffering: any; -} - -export interface GenericOutputType { - output?: any; -} - -export interface ComplexDataType { - any?: any; -} - -export interface GenericProcessType { - output: any; - input?: any; -} - -export interface RequestBodyType { - body?: any; - bodyReference?: BodyReferenceType; -} - -export interface ReferenceType extends DataEncodingAttributes { - requestBody?: RequestBodyType; - href: string; -} - -export interface GetStatus extends RequestBaseType { - jobID: any; - service: 'WPS', - version: '2.0.0', -} - - -export interface ProcessOffering { - process: ProcessDescriptionType; - any: any; - jobControlOptions: any; - outputTransmission?: any; - processVersion?: string; - processModel?: string; -} - -export interface DescriptionType { -} - -export interface ExecuteRequestType extends RequestBaseType { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - identifier: CodeType; - mode: 'sync' | 'async' | 'auto'; - response: 'raw' | 'document'; - input?: DataInputType[]; - output?: OutputDefinitionType[]; -} - -export interface WPSCapabilitiesType extends RequestBaseType { - contents: Contents; - service: 'WPS', - version: '2.0.0', - extension?: any; -} - -export interface IWpsExecuteProcessBody { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }; - value: ExecuteRequestType -} - -export interface IWpsExecuteResponse { - name: { - key: '{http://www.opengis.net/wps/2.0}Result', - localPart: 'Result', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Result' - }, - value: Result | StatusInfo -} - -export interface IGetStatusRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: GetStatus -} - -export interface IGetResultRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: GetResult -} - -export interface IDismissRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: Dismiss -} - -export interface IDismissResponse { - name: { - key: '{http://www.opengis.net/wps/2.0}StatusInfo', - localPart: 'StatusInfo', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:StatusInfo' - }, - value: StatusInfo -} \ No newline at end of file diff --git a/@ukis/lib/wps/wps200/wps_marshaller_2.0.0.d.ts b/@ukis/lib/wps/wps200/wps_marshaller_2.0.0.d.ts deleted file mode 100644 index 96f3a3a44..000000000 --- a/@ukis/lib/wps/wps200/wps_marshaller_2.0.0.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes'; -import { WPSCapabilitiesType, IWpsExecuteProcessBody, IWpsExecuteResponse, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0'; -export declare class WpsMarshaller200 implements WpsMarshaller { - constructor(); - getCapabilitiesUrl(baseurl: string): string; - executeUrl(baseurl: string, processId: string): string; - unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody; - private marshalInputs; - private marshalOutputs; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): IGetStatusRequest; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): IGetResultRequest; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - marshalDismissBody(jobId: string): IDismissRequest; - unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/lib/wps/wps_datatypes.d.ts b/@ukis/lib/wps/wps_datatypes.d.ts deleted file mode 100644 index c794aa613..000000000 --- a/@ukis/lib/wps/wps_datatypes.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -export declare type WpsVerion = '1.0.0' | '2.0.0'; -export declare type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' | 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' | 'text/plain'; -export declare type ProcessId = string; -export declare type ProductId = string; -export interface WpsDataDescription { - id: ProductId; - type: 'literal' | 'complex' | 'bbox' | 'status' | 'error'; - reference: boolean; - format?: WpsDataFormat; - description?: string; - defaultValue?: any; -} -export declare type WpsInputDescription = WpsDataDescription; -export declare type WpsOutputDescription = WpsDataDescription; -export interface WpsData { - description: WpsDataDescription; - value: any; -} -export declare type WpsInput = WpsData; -export declare type WpsResult = WpsData; -export interface WpsBboxDescription { - id: ProductId; - type: 'bbox'; - reference: boolean; - format?: WpsDataFormat; - description?: string; - defaultValue?: any; -} -export interface WpsBboxValue { - crs: string; - lllon: number; - lllat: number; - urlon: number; - urlat: number; -} -export declare const isBbox: (obj: object) => obj is WpsBboxValue; -export interface WpsState { - status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed'; - percentCompleted?: number; - /** WPS 2.0 only */ - jobID?: string; - /** WPS 1.0 only */ - statusLocation?: string; - /** WPS 1.0 only: a success-state already contains the results */ - results?: WpsData[]; -} -export declare function isWpsState(obj: object): obj is WpsState; -export interface WpsBboxData { - description: WpsBboxDescription; - value: WpsBboxValue; -} -export interface WpsCapability { - id: string; -} -export interface WpsMarshaller { - executeUrl(url: string, processId: string): string; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - getCapabilitiesUrl(baseurl: string): string; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any; - marshalDismissBody(jobId: string): any; - unmarshalCapabilities(capabilitiesJson: any): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState; - unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState; - unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/lib/wps/wpsclient.d.ts b/@ukis/lib/wps/wpsclient.d.ts deleted file mode 100644 index a6c253342..000000000 --- a/@ukis/lib/wps/wpsclient.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsState } from './wps_datatypes'; -import { Observable } from 'rxjs'; -import { HttpClient } from '@angular/common/http'; -import { Cache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -export declare class WpsClient { - private webclient; - private version; - private xmlmarshaller; - private xmlunmarshaller; - private wpsmarshaller; - private cache; - constructor(version: WpsVerion, webclient: HttpClient, cache?: Cache); - getCapabilities(url: string): Observable; - describeProcess(processId: string): Observable; - executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], pollingRate?: number, tapFunction?: (response: WpsState | null) => any): Observable; - private cachedQuery; - private getNextState; - private fetchResults; - private executeAsyncS; - execute(url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): Observable; - dismiss(serverUrl: string, processId: string, jobId: string): Observable; - postRaw(url: string, xmlBody: string): Observable; - getRaw(url: string): Observable; -} diff --git a/@ukis/package.json b/@ukis/package.json deleted file mode 100644 index e1ab6caf6..000000000 --- a/@ukis/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@ukis/services-ogc", - "main": "bundles/ukis-services-ogc.umd.js", - "version": "0.0.0-PLACEHOLDER", - "peerDependencies": { - "@angular/common": "0.0.0-NG-PLACEHOLDER", - "@angular/core": "0.0.0-NG-PLACEHOLDER", - "rxjs": "0.0.0-rxjs-PLACEHOLDER" - }, - "dependencies": { - "@ukis/services-layers": "0.0.0-PLACEHOLDER", - "@ukis/services-util-store": "0.0.0-PLACEHOLDER", - "@ukis/base-layers-raster": "0.0.0-PLACEHOLDER", - "@ukis/services-map-state": "0.0.0-PLACEHOLDER", - "md5": "0.0.0-md5-PLACEHOLDER", - "w3c-schemas": "^1.4.0", - "ogc-schemas": "^2.6.1", - "ol": "^6.1.1", - "@boundlessgeo/jsonix": "^2.4.3", - "tslib": "^1.9.0" - }, - "devDependencies": { - "core-js": "0.0.0-corejs-PLACEHOLDER", - "zone.js": "0.0.0-zonejs-PLACEHOLDER", - "@angular/platform-browser-dynamic": "0.0.0-NG-PLACEHOLDER" - }, - "module": "fesm5/ukis-services-ogc.js", - "es2015": "fesm2015/ukis-services-ogc.js", - "esm5": "esm5/ukis-services-ogc.js", - "esm2015": "esm2015/ukis-services-ogc.js", - "fesm5": "fesm5/ukis-services-ogc.js", - "fesm2015": "fesm2015/ukis-services-ogc.js", - "typings": "ukis-services-ogc.d.ts", - "metadata": "ukis-services-ogc.metadata.json", - "sideEffects": false -} diff --git a/@ukis/public_api.d.ts b/@ukis/public_api.d.ts deleted file mode 100644 index 21e1937d7..000000000 --- a/@ukis/public_api.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './lib/services-ogc.module'; -export * from './lib/owc/owc-json.service'; -export * from './lib/owc/types/owc-json'; -export * from './lib/owc/types/eoc-owc-json'; -export * from './lib/wps/wpsclient'; -export * from './lib/wps/wps_datatypes'; -export * from './lib/wps/cache'; -export * from './lib/wmts/wmtsclient.service'; diff --git a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js b/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js deleted file mode 100644 index 7ac9ffd47..000000000 --- a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js +++ /dev/null @@ -1,4244 +0,0 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@ukis/services-layers'), require('@angular/common/http'), require('@boundlessgeo/jsonix'), require('rxjs/operators'), require('w3c-schemas/lib/XLink_1_0'), require('ogc-schemas/lib/OWS_1_1_0'), require('ogc-schemas/lib/SMIL_2_0'), require('ogc-schemas/lib/SMIL_2_0_Language'), require('ogc-schemas/lib/GML_3_1_1'), require('ogc-schemas/lib/WMTS_1_0'), require('rxjs'), require('ogc-schemas/lib/OWS_2_0'), require('ogc-schemas/lib/WPS_1_0_0'), require('ogc-schemas/lib/WPS_2_0')) : - typeof define === 'function' && define.amd ? define('@ukis/services-ogc', ['exports', '@angular/core', '@ukis/services-layers', '@angular/common/http', '@boundlessgeo/jsonix', 'rxjs/operators', 'w3c-schemas/lib/XLink_1_0', 'ogc-schemas/lib/OWS_1_1_0', 'ogc-schemas/lib/SMIL_2_0', 'ogc-schemas/lib/SMIL_2_0_Language', 'ogc-schemas/lib/GML_3_1_1', 'ogc-schemas/lib/WMTS_1_0', 'rxjs', 'ogc-schemas/lib/OWS_2_0', 'ogc-schemas/lib/WPS_1_0_0', 'ogc-schemas/lib/WPS_2_0'], factory) : - (global = global || self, factory((global.ukis = global.ukis || {}, global.ukis['services-ogc'] = {}), global.ng.core, global.servicesLayers, global.ng.common.http, global.jsonix, global.rxjs.operators, global.XLink_1_0$2, global.OWS_1_1_0$2, global.SMIL_2_0$1, global.SMIL_2_0_Language$1, global.GML_3_1_1$1, global.WMTS_1_0$1, global.rxjs, global.OWS_2_0$1, global.WPS_1_0_0$1, global.WPS_2_0$1)); -}(this, (function (exports, core, servicesLayers, http, jsonix, operators, XLink_1_0$2, OWS_1_1_0$2, SMIL_2_0$1, SMIL_2_0_Language$1, GML_3_1_1$1, WMTS_1_0$1, rxjs, OWS_2_0$1, WPS_1_0_0$1, WPS_2_0$1) { 'use strict'; - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */ - /* global Reflect, Promise */ - - var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - - function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - } - - var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); - }; - - function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; - } - - function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; - } - - function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } - } - - function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); - } - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } - } - - function __exportStar(m, exports) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; - } - - function __values(o) { - var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; - if (m) return m.call(o); - return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - } - - function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; - } - - function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; - } - - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; - }; - - function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); - } - - function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } - } - - function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } - } - - function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } - } - - function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; - }; - - function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result.default = mod; - return result; - } - - function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var XLink_1_0 = XLink_1_0$2.XLink_1_0; - /** @type {?} */ - var OWS_1_1_0 = OWS_1_1_0$2.OWS_1_1_0; - /** @type {?} */ - var SMIL_2_0 = SMIL_2_0$1.SMIL_2_0; - /** @type {?} */ - var SMIL_2_0_Language = SMIL_2_0_Language$1.SMIL_2_0_Language; - /** @type {?} */ - var GML_3_1_1 = GML_3_1_1$1.GML_3_1_1; - /** @type {?} */ - var WMTS_1_0 = WMTS_1_0$1.WMTS_1_0; - var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new jsonix.Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new http.HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(operators.map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: core.Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: http.HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(core.ɵɵinject(http.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; - }()); - if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @param {?} str - * @return {?} - */ - function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; - } - /** - * @param {?} str - * @return {?} - */ - function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; - } - /** - * @param {?} str - * @return {?} - */ - function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; - } - /** - * @param {?} str - * @return {?} - */ - function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; - } - /** - * @param {?} str - * @return {?} - */ - function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; - } - /** - * @param {?} str - * @return {?} - */ - function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; - } - /** - * @param {?} str - * @return {?} - */ - function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; - } - /** - * @param {?} str - * @return {?} - */ - function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; - } - /** - * @param {?} str - * @return {?} - */ - function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; - } - /** - * @param {?} str - * @return {?} - */ - function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; - } - /** - * @param {?} str - * @return {?} - */ - function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - } - /** - * @param {?} str - * @return {?} - */ - function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - } - /** - * @param {?} v - * @return {?} - */ - function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; - } - /** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ - var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = __values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return servicesLayers.WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return servicesLayers.WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return servicesLayers.WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return servicesLayers.GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return servicesLayers.XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = __values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return rxjs.forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (servicesLayers.isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (servicesLayers.isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!servicesLayers.isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new servicesLayers.VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return rxjs.of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!servicesLayers.isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case servicesLayers.WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case servicesLayers.WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case servicesLayers.XyzLayertype: - // @TODO - break; - case servicesLayers.CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(operators.map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new servicesLayers.WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new servicesLayers.WmsLayer(options); - return rxjs.of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(operators.map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = __assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = __read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return rxjs.of(matrixSet); - } - else { - var _a = __read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(operators.map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === servicesLayers.WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = __assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (servicesLayers.isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = __assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == servicesLayers.GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case servicesLayers.WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case servicesLayers.WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case servicesLayers.GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case servicesLayers.XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case servicesLayers.GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof servicesLayers.RasterLayer) { - switch (layer.type) { - case servicesLayers.WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case servicesLayers.WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case servicesLayers.XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof servicesLayers.VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: core.Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(core.ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; - }()); - if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = __values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = __values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = __values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); - }); - /** @type {?} */ - var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); - }); - /** @type {?} */ - var isResult = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); - }); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = __values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ - function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(operators.tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = rxjs.forkJoin(tappedTask$, rxjs.timer(minWaitTime)).pipe(operators.map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(operators.mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return rxjs.of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; - } - /** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ - function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - operators.retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(operators.delay(delayMs), // <- in any case, first wait a little while ... - operators.mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return rxjs.of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function Cache() { } - if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; - } - var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return rxjs.of(null); - }; - return FakeCache; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** @type {?} */ - var XLink_1_0$1 = XLink_1_0$2.XLink_1_0; - /** @type {?} */ - var OWS_1_1_0$1 = OWS_1_1_0$2.OWS_1_1_0; - /** @type {?} */ - var OWS_2_0 = OWS_2_0$1.OWS_2_0; - /** @type {?} */ - var WPS_1_0_0 = WPS_1_0_0$1.WPS_1_0_0; - /** @type {?} */ - var WPS_2_0 = WPS_2_0$1.WPS_2_0; - /** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ - var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new jsonix.Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new jsonix.Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(operators.map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - operators.mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - operators.mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - operators.tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = __values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(operators.switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return rxjs.of(results); - } - else { - return query$.pipe(operators.tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return rxjs.of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(operators.map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), operators.share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: core.Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: core.Inject, args: ['WpsVersion',] }] }, - { type: http.HttpClient }, - { type: undefined, decorators: [{ type: core.Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; - }()); - if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: core.NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; - }()); - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ - function IOwsContext() { } - if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ - function IOwsResource() { } - if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsResourceProperties() { } - if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ - function IOwsOffering() { } - if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCreator() { } - if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; - } - /** - * @record - */ - function IOwsAuthor() { } - if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCategorie() { } - if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; - } - /** - * @record - */ - function IOwsLinks() { } - if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsCreatorApplication() { } - if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; - } - /** - * @record - */ - function IOwsCreatorDisplay() { } - if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ - function IOwsOperation() { } - if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsContent() { } - if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IOwsStyleSet() { } - if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function IEocOwsContext() { } - if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; - } - /** - * @record - */ - function IEocOwsResource() { } - if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; - } - /** - * @record - */ - function IEocOwsResourceProperties() { } - if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; - } - /** - * @record - */ - function IEocOwsResourceDimensions() { } - if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ - } - /** - * @record - */ - function IEocOwsResourceDimension() { } - if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; - } - /** - * @record - */ - function IEocOwsOffering() { } - if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; - } - /** - * @record - */ - function IEocWmsOffering() { } - if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; - } - /** - * @record - */ - function IEocOwsWmtsOffering() { } - if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; - } - /** - * @record - */ - function IEocOwsWmtsMatrixSet() { } - if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; - } - /** - * @record - */ - function IEocOwsProjection() { } - if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; - } - - /** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - /** - * @record - */ - function WpsDataDescription() { } - if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; - } - /** - * @record - */ - function WpsData() { } - if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; - } - /** - * @record - */ - function WpsBboxDescription() { } - if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; - } - /** - * @record - */ - function WpsBboxValue() { } - if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; - } - /** @type {?} */ - var isBbox = (/** - * @param {?} obj - * @return {?} - */ - function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); - }); - /** - * @record - */ - function WpsState() { } - if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; - } - /** - * @param {?} obj - * @return {?} - */ - function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); - } - /** - * @record - */ - function WpsBboxData() { } - if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; - } - /** - * @record - */ - function WpsCapability() { } - if (false) { - /** @type {?} */ - WpsCapability.prototype.id; - } - /** - * @record - */ - function WpsMarshaller() { } - if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; - } - - exports.FakeCache = FakeCache; - exports.OwcJsonService = OwcJsonService; - exports.ServicesOgcModule = ServicesOgcModule; - exports.WmtsClientService = WmtsClientService; - exports.WpsClient = WpsClient; - exports.isBbox = isBbox; - exports.isCswOffering = isCswOffering; - exports.isGMLCOVOffering = isGMLCOVOffering; - exports.isGMLJP2Offering = isGMLJP2Offering; - exports.isGeoJsonOffering = isGeoJsonOffering; - exports.isGeoTIFFOffering = isGeoTIFFOffering; - exports.isGmlOffering = isGmlOffering; - exports.isKmlOffering = isKmlOffering; - exports.isWfsOffering = isWfsOffering; - exports.isWmsOffering = isWmsOffering; - exports.isWmtsOffering = isWmtsOffering; - exports.isWpsOffering = isWpsOffering; - exports.isWpsState = isWpsState; - exports.isXyzOffering = isXyzOffering; - exports.shardsExpand = shardsExpand; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -//# sourceMappingURL=ukis-services-ogc.umd.js.map diff --git a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js.map b/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js.map deleted file mode 100644 index 04bd94d34..000000000 --- a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","Jsonix","HttpHeaders","map","Injectable","HttpClient","tslib_1.__values","WmsLayertype","WmtsLayertype","WfsLayertype","GeojsonLayertype","XyzLayertype","forkJoin","isRasterLayertype","isVectorLayertype","VectorLayer","of","CustomLayertype","WmtsLayer","WmsLayer","RasterLayer","tap","timer","mergeMap","retryWhen","delay","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0","switchMap","share","Inject","NgModule"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js b/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js deleted file mode 100644 index 8b9805052..000000000 --- a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js +++ /dev/null @@ -1,16 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@ukis/services-layers"),require("@angular/common/http"),require("@boundlessgeo/jsonix"),require("rxjs/operators"),require("w3c-schemas/lib/XLink_1_0"),require("ogc-schemas/lib/OWS_1_1_0"),require("ogc-schemas/lib/SMIL_2_0"),require("ogc-schemas/lib/SMIL_2_0_Language"),require("ogc-schemas/lib/GML_3_1_1"),require("ogc-schemas/lib/WMTS_1_0"),require("rxjs"),require("ogc-schemas/lib/OWS_2_0"),require("ogc-schemas/lib/WPS_1_0_0"),require("ogc-schemas/lib/WPS_2_0")):"function"==typeof define&&define.amd?define("@ukis/services-ogc",["exports","@angular/core","@ukis/services-layers","@angular/common/http","@boundlessgeo/jsonix","rxjs/operators","w3c-schemas/lib/XLink_1_0","ogc-schemas/lib/OWS_1_1_0","ogc-schemas/lib/SMIL_2_0","ogc-schemas/lib/SMIL_2_0_Language","ogc-schemas/lib/GML_3_1_1","ogc-schemas/lib/WMTS_1_0","rxjs","ogc-schemas/lib/OWS_2_0","ogc-schemas/lib/WPS_1_0_0","ogc-schemas/lib/WPS_2_0"],t):t(((e=e||self).ukis=e.ukis||{},e.ukis["services-ogc"]={}),e.ng.core,e.servicesLayers,e.ng.common.http,e.jsonix,e.rxjs.operators,e.XLink_1_0$2,e.OWS_1_1_0$2,e.SMIL_2_0$1,e.SMIL_2_0_Language$1,e.GML_3_1_1$1,e.WMTS_1_0$1,e.rxjs,e.OWS_2_0$1,e.WPS_1_0_0$1,e.WPS_2_0$1)}(this,(function(e,t,r,n,o,s,i,a,p,u,c,l,f,h,m,y){"use strict"; -/*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 - - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. - - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. - ***************************************************************************** */var d=function(){return(d=Object.assign||function(e){for(var t,r=1,n=arguments.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}function w(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,s=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=s.return)&&r.call(s)}finally{if(o)throw o.error}}return i}var v=i.XLink_1_0,x=a.OWS_1_1_0,S=p.SMIL_2_0,b=u.SMIL_2_0_Language,O=c.GML_3_1_1,L=l.WMTS_1_0,R=function(){function e(e){this.http=e;var t=new o.Jsonix.Context([S,b,O,v,x,L]);this.xmlunmarshaller=t.createUnmarshaller(),this.xmlmarshaller=t.createMarshaller()}return e.prototype.getCapabilities=function(e,t){var r=this;void 0===t&&(t="1.1.0");var o=e+"?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION="+t,i=new n.HttpHeaders({"Content-Type":"text/xml",Accept:"text/xml, application/xml"});return this.http.get(o,{headers:i,responseType:"text"}).pipe(s.map((function(e){return r.xmlunmarshaller.unmarshalString(e)})))},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:n.HttpClient}]},e.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new e(t.ɵɵinject(n.HttpClient))},token:e,providedIn:"root"}),e}();function E(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wms"===e||"http://schemas.opengis.net/wms/1.1.1"===e||"http://schemas.opengis.net/wms/1.1.0"===e}function T(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wfs"===e}function _(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts"===e||"http://schemas.opengis.net/wmts/1.0.0"===e||"http://schemas.opengis.net/wmts/1.1.0"===e}function I(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz"===e}function W(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson"===e}function C(e){if(e){var t=[];for(var r in e.split(",")){var n=e.split(",")[r].split("-");if(1==n.length)t.push(e.split(",")[r]);else if(2==n.length){var o=n[0].charCodeAt(0),s=n[1].charCodeAt(0);if(o<=s)for(var i=o;i<=s;i++)t.push(String.fromCharCode(i).toLowerCase());else for(i=o;i>=s;i--)t.push(String.fromCharCode(i).toLowerCase())}}return t}}var j=function(){function e(e){this.wmtsClient=e}return e.prototype.checkContext=function(e){var t;return(t=Array.isArray(e.properties.links)?e.properties.links.find((function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/core"===e.href})):e.properties.links.profiles.find((function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/core"===e})))||console.error("this is not a valid OWS Context v1.0!"),t},e.prototype.getContextTitle=function(e){return e.properties.title},e.prototype.getContextPublisher=function(e){return e.properties.publisher?e.properties.publisher:null},e.prototype.getContextExtent=function(e){return e.bbox?e.bbox:null},e.prototype.getResources=function(e){return e.features},e.prototype.getResourceTitle=function(e){return e.properties.title},e.prototype.getResourceUpdated=function(e){return e.properties.updated},e.prototype.getResourceDate=function(e){return e.properties.date?e.properties.date:null},e.prototype.getResourceOfferings=function(e){return e.properties.offerings?e.properties.offerings:null},e.prototype.isActive=function(e){var t=!0;return e.properties.hasOwnProperty("active")&&(t=e.properties.active),t},e.prototype.getResourceOpacity=function(e){var t=1;return e.properties.hasOwnProperty("opacity")&&(t=e.properties.opacity),t},e.prototype.getResourceAttribution=function(e){var t="";return e.properties.hasOwnProperty("attribution")&&(t=e.properties.attribution),t},e.prototype.getResourceShards=function(e){if(e.properties.hasOwnProperty("shards"))return e.properties.shards},e.prototype.convertOwcTimeToIsoTimeAndPeriodicity=function(e){var t=e.split("/"),r=3==t.length?t[0]+"/"+t[1]:e,n=3==t.length?t[2]:null;return n?{interval:r,periodicity:n}:r},e.prototype.getResourceDimensions=function(e){var t,r,n=this;if(e.properties.hasOwnProperty("dimensions")){var o={},s={};if(Array.isArray(e.properties.dimensions))try{for(var i=g(e.properties.dimensions),a=i.next();!a.done;a=i.next()){var p=a.value;s[p.name]=p}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}else s=e.properties.dimensions;for(var u in s){var c={};if(console.log(u),"time"===u||"ISO8601"==s[u].units){var l=s[u].value,f=l?l.split(",").map((function(e){return n.convertOwcTimeToIsoTimeAndPeriodicity(e)})):null;c={values:!f||f.length>1?f:f[0],units:s[u].units,display:{format:"YYYMMDD",period:s[u].display,default:"end"}}}else c=s[u];o[u]=c}return o}},e.prototype.getLayertypeFromOfferingCode=function(e){return E(e.code)?r.WmsLayertype:_(e.code)?r.WmtsLayertype:T(e.code)?r.WfsLayertype:W(e.code)?r.GeojsonLayertype:I(e.code)?r.XyzLayertype:e.code},e.prototype.checkIfServiceOffering=function(e){return!(e.contents||!e.operations)},e.prototype.checkIfDataOffering=function(e){return!(!e.contents||e.operations)},e.prototype.getOfferingContents=function(e){return this.checkIfServiceOffering(e)?e.operations:this.checkIfDataOffering(e)?e.contents:void 0},e.prototype.getLegendUrl=function(e){var t="";if(e.hasOwnProperty("styles")){var r=e.styles.filter((function(e){return e.default}));if(r.length>0)return r[0].legendURL}else e.hasOwnProperty("legendUrl")&&(t=e.legendUrl);return t},e.prototype.getIconUrl=function(e){var t="";return e.hasOwnProperty("iconUrl")&&(t=e.iconUrl),t},e.prototype.getLayers=function(e,t){var r,n,o=e.features,s=[];try{for(var i=g(o),a=i.next();!a.done;a=i.next()){var p=a.value,u=p.properties.offerings;if(u.length>0){var c=u.find((function(e){return E(e.code)}))||u.find((function(e){return _(e.code)}))||u.find((function(e){return T(e.code)}))||u[0];s.push(this.createLayerFromOffering(c,p,e,t))}}}catch(e){r={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return f.forkJoin(s)},e.prototype.createLayerFromOffering=function(e,t,n,o){var s=this.getLayertypeFromOfferingCode(e);return r.isRasterLayertype(s)?this.createRasterLayerFromOffering(e,t,n,o):r.isVectorLayertype(s)?this.createVectorLayerFromOffering(e,t,n):void console.error("This type of service ("+s+") has not been implemented yet.")},e.prototype.createVectorLayerFromOffering=function(e,t,n){var o=this.getLayertypeFromOfferingCode(e);if(!r.isVectorLayertype(o))return console.error("This type of layer '"+o+"' / offering '"+e.code+"' cannot be converted into a Vectorlayer"),null;var s,i;this.getIconUrl(e);e.operations&&(s=this.getUrlFromUri(e.operations[0].href)),e.operations&&this.getJsonFromUri(e.operations[0].href),e.contents&&(i=e.contents[0].content);var a=this.getLegendUrl(e),p={id:t.id,name:this.getResourceTitle(t),displayName:this.getDisplayName(e,t),visible:this.isActive(t),type:o,removable:!0,attribution:this.getResourceAttribution(t),continuousWorld:!1,opacity:this.getResourceOpacity(t),url:s||null,legendImg:a||null,data:i},u=new r.VectorLayer(p);return t.bbox?u.bbox=t.bbox:n&&n.bbox&&(u.bbox=n.bbox),f.of(u)},e.prototype.createRasterLayerFromOffering=function(e,t,n,o){var s,i=this.getLayertypeFromOfferingCode(e);if(!r.isRasterLayertype(i))return console.error("This type of offering '"+e.code+"' cannot be converted into a rasterlayer."),null;switch(i){case r.WmsLayertype:s=this.createWmsLayerFromOffering(e,t,n);break;case r.WmtsLayertype:s=this.createWmtsLayerFromOffering(e,t,n,o);break;case r.XyzLayertype:case r.CustomLayertype:}return s},e.prototype.createWmtsLayerFromOffering=function(e,t,n,o){return this.getWmtsOptions(e,t,n,o).pipe(s.map((function(e){return new r.WmtsLayer(e)})))},e.prototype.createWmsLayerFromOffering=function(e,t,n){var o=this.getWmsOptions(e,t,n),s=new r.WmsLayer(o);return f.of(s)},e.prototype.getWmtsOptions=function(e,t,r,n){var o,i=this.getRasterLayerOptions(e,t,r),a=this.getLayerForWMTS(e,t);if(e.styles){var p=e.styles.find((function(e){return e.default}));p&&(o=p.name)}return this.getMatrixSetForWMTS(e,t,n).pipe(s.map((function(e){var t={matrixSet:e.matrixSet,matrixIds:e.matrixIds,resolutions:e.resolutions};return d({},i,{type:"wmts",params:{layer:a,matrixSetOptions:t,projection:n,style:o,format:"image/png"}})})))},e.prototype.getLayerForWMTS=function(e,t){var r=w(this.parseOperationUrl(e,"GetTile"),2),n=(r[0],r[1]);if(n.LAYER)return n.LAYER;console.error("There is no layer-parameter in the offering "+e.code+" for resource "+t.id+".\n Cannot infer layer.",e)},e.prototype.parseOperationUrl=function(e,t){if(e.operations){var r=e.operations.find((function(e){return e.code===t}));if(r)return[this.getUrlFromUri(r.href),this.getJsonFromUri(r.href)];console.error("There is no "+t+"-operation in the offering "+e.code+".",e)}else console.error("The offering "+e.code+" has no operations.",e)},e.prototype.getMatrixSetForWMTS=function(e,t,r){if(e.matrixSets){var n=e.matrixSets.find((function(e){return e.srs===r}));return f.of(n)}var o=w(this.parseOperationUrl(e,"GetCapabilities"),2),i=o[0];o[1];return this.wmtsClient.getCapabilities(i).pipe(s.map((function(e){var t=e.value.contents.tileMatrixSet.find((function(e){return e.identifier.value===r}));return{srs:r,matrixSet:t.identifier.value,matrixIds:t.tileMatrix.map((function(e){return e.identifier.value})),resolutions:t.tileMatrix.map((function(e){return e.scaleDenominator})),origin:{x:t.tileMatrix[0].topLeftCorner[1],y:t.tileMatrix[0].topLeftCorner[0]},tilesize:t.tileMatrix[0].tileHeight}})))},e.prototype.getWmsOptions=function(e,t,n){var o=this.getRasterLayerOptions(e,t,n);if(o.type===r.WmsLayertype){var s=this.getJsonFromUri(e.operations[0].href),i=void 0;e.styles&&(i=e.styles.find((function(e){return e.default})).name);var a={LAYERS:s.LAYERS,FORMAT:s.FORMAT,TIME:s.TIME,VERSION:s.VERSION,TILED:s.TILED,TRANSPARENT:!0,STYLES:i};return d({},o,{type:"wms",params:a})}console.error("resource "+t.id+" cannot be converted into a WMS-Layer",e)},e.prototype.getRasterLayerOptions=function(e,t,n){var o=this.getLayerOptions(e,t,n);if(r.isRasterLayertype(o.type))return d({},o,{type:o.type,url:this.getUrlFromUri(e.operations[0].href),subdomains:C(this.getResourceShards(t))});console.error("The layer "+o.id+" is not a rasterlayer",o)},e.prototype.getLayerOptions=function(e,t,r){var n={id:t.id,type:this.getLayertypeFromOfferingCode(e),name:this.getResourceTitle(t),removable:!0,continuousWorld:!1,opacity:this.getResourceOpacity(t),displayName:this.getDisplayName(e,t),visible:this.isActive(t),attribution:this.getResourceAttribution(t),dimensions:this.getResourceDimensions(t),legendImg:this.getLegendUrl(e),styles:e.styles};return t.bbox?n.bbox=t.bbox:r&&r.bbox&&(n.bbox=r.bbox),n},e.prototype.getUrlFromUri=function(e){return e.substring(0,e.indexOf("?"))},e.prototype.getJsonFromUri=function(e){var t=e.substr(e.lastIndexOf("?")+1),r={};return t.split("&").forEach((function(e){var t=e.split("=");r[t[0].toUpperCase()]=decodeURIComponent(t[1])})),r},e.prototype.getDisplayName=function(e,t){var r="";return e.hasOwnProperty("title")&&(r=e.title?e.title:this.getResourceTitle(t)),r},e.prototype.generateOwsContextFrom=function(e,t,r,n){var o,s;n||(n={lang:"",links:[],title:"",updated:""});var i={id:e,type:"FeatureCollection",properties:n,features:[]};r&&(i.bbox=r);try{for(var a=g(t),p=a.next();!p.done;p=a.next()){var u=p.value,c=this.generateResourceFromLayer(u);i.features.push(c)}}catch(e){o={error:e}}finally{try{p&&!p.done&&(s=a.return)&&s.call(a)}finally{if(o)throw o.error}}return i},e.prototype.generateResourceFromLayer=function(e){return{id:e.id,properties:{title:e.name,updated:null,offerings:[this.generateOfferingFromLayer(e)],opacity:e.opacity,attribution:e.attribution},type:"Feature",geometry:null}},e.prototype.generateOfferingFromLayer=function(e,t,n){var o={code:this.getOfferingCodeFromLayer(e),title:e.name};return e.type==r.GeojsonLayertype?o.contents=this.getContentsFromLayer(e):o.operations=this.getOperationsFromLayer(e),t&&(o.legendUrl=t),n&&(o.iconUrl=n),o},e.prototype.getOfferingCodeFromLayer=function(e){switch(e.type){case r.WmsLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/wms";case r.WmtsLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts";case r.GeojsonLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson";case r.XyzLayertype:return"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz";default:return console.error("This type of layer ("+e.type+") has not been implemented yet."),null}},e.prototype.getContentsFromLayer=function(e){var t=[];switch(e.type){case r.GeojsonLayertype:var n={type:"FeatureCollection",content:JSON.stringify(e.data)};t.push(n);break;default:console.error("Cannot get contents for this type of vectorlayer: ("+e.type+")")}return t},e.prototype.getOperationsFromLayer=function(e){if(e instanceof r.RasterLayer)switch(e.type){case r.WmsLayertype:return this.getWmsOperationsFromLayer(e);case r.WmtsLayertype:return this.getWmtsOperationsFromLayer(e);case r.XyzLayertype:return this.getXyzOperationsFromLayer(e);default:return console.error("Cannot get operations for this type of layer: ("+e.type+")"),[]}else if(e instanceof r.VectorLayer)return e.type,console.error("This type of service ("+e.type+") has not been implemented yet."),[]},e.prototype.getXyzOperationsFromLayer=function(e){return[{code:"REST",method:"GET",type:"text/html",href:""+e.url}]},e.prototype.getTmsOperationsFromLayer=function(e){return[]},e.prototype.getWfsOperationsFromLayer=function(e){var t=e.url;e.name;return[{code:"GetFeature",method:"GET",type:"application/json",href:t+"?service=WFS&version="+(e.options.version?e.options.version:"1.1.0")+"&request=GetFeature"}]},e.prototype.getWmsOperationsFromLayer=function(e){var t=e.url,r=e.params.VERSION,n=(e.name,e.id),o="image/vnd.jpeg-png";return e.params&&e.params.FORMAT&&(o=e.params.FORMAT),[{code:"GetMap",method:"GET",type:o,href:t+"?service=WMS&version="+r+"&request=GetMap&TRANSPARENT=TRUE&LAYERS="+n+"&FORMAT="+o+"&TILED=true"},{code:"GetCapabilities",method:"GET",type:"application/xml",href:t+"?service=WMS&version="+r+"&request=GetCapabilities"},{code:"GetFeatureInfo",method:"GET",type:"text/html",href:t+"?service=WMS&version="+r+"&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS="+n+"&FORMAT="+o}]},e.prototype.getWmtsOperationsFromLayer=function(e){var t=e.url,r=e.params.version,n=(e.name,e.id),o="image/vnd.jpeg-png";return e.params&&e.params.FORMAT&&(o=e.params.FORMAT),[{code:"GetTile",href:t+"?SERVICE=WMTS&REQUEST=GetTile&FORMAT="+o+"&LAYER="+n+"&VERSION="+r,method:"GET",type:o},{code:"GetCapabilities",href:t+"?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION="+r,method:"GET",type:"application/xml"},{code:"GetFeatureInfo",href:t+"?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION="+r,method:"GET",type:"text/html"}]},e.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],e.ctorParameters=function(){return[{type:R}]},e.ngInjectableDef=t.ɵɵdefineInjectable({factory:function(){return new e(t.ɵɵinject(R))},token:e,providedIn:"root"}),e}();var F=function(){function e(){}return e.prototype.getCapabilitiesUrl=function(e){return e+"?service=WPS&request=GetCapabilities&version=1.0.0"},e.prototype.executeUrl=function(e,t){return e+"?service=WPS&request=Execute&version=1.0.0&identifier="+t},e.prototype.unmarshalCapabilities=function(e){var t=[];return e.processOfferings.process.forEach((function(e){t.push({id:e.identifier.value})})),t},e.prototype.unmarshalSyncExecuteResponse=function(e,t,r,n,o){var s,i,a=[];if(e.value.status.processFailed)a.push({description:{id:e.value.process.identifier.value,reference:!0,type:"error"},value:e.value.statusLocation});else if(e.value.processOutputs)try{for(var p=g(e.value.processOutputs.output),u=p.next();!u.done;u=p.next()){var c=u.value,l=!!c.reference,f=void 0,h=void 0,m=void 0;c.reference?(f="complex",h=c.reference.href||null,m=c.reference.mimeType):(c.data&&c.data.literalData?(f="literal",m=c.data.literalData.dataType):c.data&&c.data.complexData?(f="complex",m=c.data.complexData.mimeType):(f="bbox",m=void 0),h=this.unmarshalOutputData(c.data)),a.push({description:{id:c.identifier.value,format:m,reference:l,type:f},value:h})}}catch(e){s={error:e}}finally{try{u&&!u.done&&(i=p.return)&&i.call(p)}finally{if(s)throw s.error}}else e.value.statusLocation&&a.push({description:{id:e.value.process.identifier.value,reference:!0,type:"status"},value:this.unmarshalGetStateResponse(e,t,r,n,o)});return a},e.prototype.unmarshalOutputData=function(e){if(e.complexData)switch(e.complexData.mimeType){case"application/vnd.geo+json":case"application/json":return e.complexData.content.map((function(e){return JSON.parse(e)}));case"application/WMS":return e.complexData.content;case"text/xml":return(new XMLSerializer).serializeToString(e.complexData.content[0]);default:throw new Error("Cannot unmarshal data of format "+e.complexData.mimeType)}else if(e.literalData)switch(e.literalData.dataType){case"string":default:return e.literalData.value}throw new Error("Not yet implemented: "+e)},e.prototype.unmarshalAsyncExecuteResponse=function(e,t,r,n,o){return this.unmarshalGetStateResponse(e,t,r,n,o)},e.prototype.unmarshalGetStateResponse=function(e,t,r,n,o){var s=e.value,i={status:s.status.processSucceeded?"Succeeded":s.status.processAccepted?"Accepted":s.status.processStarted?"Running":(s.status.processFailed,"Failed"),statusLocation:s.statusLocation};return s.processOutputs&&s.processOutputs.output&&(i.results=this.unmarshalSyncExecuteResponse(e,t,r,n,o)),i},e.prototype.marshalExecBody=function(e,t,r,n){return{name:{key:"{http://www.opengis.net/wps/1.0.0}Execute",localPart:"Execute",namespaceURI:"http://www.opengis.net/wps/1.0.0",prefix:"wps",string:"{http://www.opengis.net/wps/1.0.0}wps:Execute"},value:{dataInputs:this.marshalInputs(t),identifier:e,responseForm:this.marshalResponseForm(r,n),service:"WPS",version:"1.0.0"}}},e.prototype.marshalResponseForm=function(e,t){var r,n;void 0===t&&(t=!1);var o=[];try{for(var s=g(e),i=s.next();!i.done;i=s.next()){var a=i.value,p=void 0;switch(a.type){case"literal":case"complex":p={identifier:{value:a.id},asReference:a.reference,mimeType:a.format};break;default:throw new Error("This Wps-outputtype has not been implemented yet! "+a+" ")}o.push(p)}}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return{responseDocument:{output:o,status:!!t,storeExecuteResponse:!!t}}},e.prototype.marshalInputs=function(e){var t,r,n=[];try{for(var o=g(e),s=o.next();!s.done;s=o.next()){var i=s.value;if(null===i.value||void 0===i.value)throw new Error("Value for input "+i.description.id+" is not set");var a=this.marshalInput(i);n.push(a)}}catch(e){t={error:e}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return{input:n}},e.prototype.marshalInput=function(e){var t={identifier:{value:e.description.id},title:{value:e.description.id},_abstract:{value:""}};return e.description.reference?t.reference=this.marshalReferenceInput(e):t.data=this.marshalDataInput(e),t},e.prototype.marshalDataInput=function(e){var t;switch(e.description.type){case"literal":t={literalData:{value:String(e.value)}};break;case"bbox":var r=e.value;t={boundingBoxData:{lowerCorner:[r.lllat,r.lllon],upperCorner:[r.urlat,r.urlon]}};break;case"complex":switch(e.description.format){case"text/xml":t={complexData:{content:[e.value],mimeType:e.description.format}};break;default:t={complexData:{content:[JSON.stringify(e.value)],mimeType:e.description.format}}}break;default:throw Error("This input is of type "+e.description.type+". We can only marshal input of type literal, bbox or complex.")}return t},e.prototype.marshalReferenceInput=function(e){return{href:e.value,method:"GET",mimeType:e.description.format}},e.prototype.marshallGetStatusBody=function(e,t,r){return{}},e.prototype.marshallGetResultBody=function(e,t,r){return{}},e.prototype.dismissUrl=function(e,t,r){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e.prototype.marshalDismissBody=function(e){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e.prototype.unmarshalDismissResponse=function(e,t,r){throw new Error("Wps 1.0 does not support Dismiss-operations.")},e}(),M=function(e){return e.hasOwnProperty("jobID")&&e.hasOwnProperty("status")},D=function(){function e(){}return e.prototype.getCapabilitiesUrl=function(e){return e+"?service=WPS&request=GetCapabilities&version=2.0.0"},e.prototype.executeUrl=function(e,t){return e+"?service=WPS&request=Execute&version=2.0.0&identifier="+t},e.prototype.unmarshalCapabilities=function(e){var t=[];return e.contents.processSummary.forEach((function(e){t.push({id:e.identifier.value})})),t},e.prototype.unmarshalSyncExecuteResponse=function(e,t,r,n,o){var s,i,a,p=[];if((a=e.value).hasOwnProperty("output")&&"object"==typeof a.output){var u=function(e){var t=o.find((function(t){return t.id===e.id}));if(!t)throw new Error("Could not find an output-description for the parameter "+e.id+".");var r=t.reference,n=t.type,s=t.format,i=void 0;if(e.reference)i=e.reference.href||null;else{if(!e.data)throw new Error("Output has neither reference nor data field.");i=c.unmarshalOutputData(e.data,t)}p.push({description:{id:e.id,format:s,reference:r,type:n},value:i})},c=this;try{for(var l=g(e.value.output),f=l.next();!f.done;f=l.next()){u(f.value)}}catch(e){s={error:e}}finally{try{f&&!f.done&&(i=l.return)&&i.call(l)}finally{if(s)throw s.error}}}else if(M(e.value)){var h={status:e.value.status,jobID:e.value.jobID,percentCompleted:e.value.percentCompleted};p.push({description:{id:r,reference:!0,type:"status"},value:h})}return p},e.prototype.unmarshalOutputData=function(e,t){if("complex"===t.type)switch(e.mimeType){case"application/vnd.geo+json":case"application/json":return e.content.map((function(e){return JSON.parse(e)}));case"application/WMS":return e.content;case"text/xml":return(new XMLSerializer).serializeToString(e.content[0]);default:throw new Error("Cannot unmarshal complex data of format "+e.mimeType)}else if("literal"===t.type)return e.content;throw new Error("Not yet implemented: "+e)},e.prototype.unmarshalAsyncExecuteResponse=function(e,t,r,n,o){return this.unmarshalGetStateResponse(e,t,r,n,o)},e.prototype.unmarshalGetStateResponse=function(e,t,r,n,o){if(M(e.value))return{status:e.value.status,jobID:e.value.jobID,percentCompleted:e.value.percentCompleted};throw new Error("Not a status-info: "+e)},e.prototype.marshalExecBody=function(e,t,r,n){return{name:{key:"{http://www.opengis.net/wps/2.0}Execute",localPart:"Execute",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:Execute"},value:{TYPE_NAME:"WPS_2_0.ExecuteRequestType",service:"WPS",version:"2.0.0",identifier:{value:e},input:this.marshalInputs(t),output:this.marshalOutputs(r),mode:n?"async":"sync",response:"document"}}},e.prototype.marshalInputs=function(e){return e.map((function(e){return e.description.reference?{id:e.description.id,reference:{href:e.value,mimeType:e.description.format}}:{id:e.description.id,data:{content:[JSON.stringify(e.value)],mimeType:e.description.format}}}))},e.prototype.marshalOutputs=function(e){return e.map((function(e){return{id:e.id,mimeType:e.format,transmission:e.reference?"reference":"value"}}))},e.prototype.marshallGetStatusBody=function(e,t,r){return{name:{key:"{http://www.opengis.net/wps/2.0}GetStatus",localPart:"GetStatus",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:GetStatus"},value:{jobID:r,service:"WPS",version:"2.0.0"}}},e.prototype.marshallGetResultBody=function(e,t,r){return{name:{key:"{http://www.opengis.net/wps/2.0}GetResult",localPart:"GetResult",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:GetResult"},value:{service:"WPS",version:"2.0.0",jobID:r}}},e.prototype.dismissUrl=function(e,t,r){return e},e.prototype.marshalDismissBody=function(e){return{name:{key:"{http://www.opengis.net/wps/2.0}Dismiss",localPart:"Dismiss",namespaceURI:"http://www.opengis.net/wps/2.0",prefix:"wps",string:"{http://www.opengis.net/wps/2.0}wps:Dismiss"},value:{jobID:e,service:"WPS",version:"2.0.0"}}},e.prototype.unmarshalDismissResponse=function(e,t,r){return{status:e.value.status,jobID:e.value.jobID}},e}();function G(e,t){void 0===t&&(t=3);var r=1;return(function(n){return n.pipe(s.retryWhen((function(n){return n.pipe(s.delay(e),s.mergeMap((function(e){if(e.status&&400===e.status)throw e;if(r<=t)return console.log("http-error. Retrying ..."),r+=1,f.of(e);throw console.log("Persistent http-errors after "+r+" attempts. Giving up."),e})))})))})}var P=function(){function e(){}return e.prototype.set=function(e,t){},e.prototype.get=function(e){return f.of(null)},e}(),U=i.XLink_1_0,A=a.OWS_1_1_0,q=h.OWS_2_0,k=m.WPS_1_0_0,N=y.WPS_2_0,V=function(){function e(e,t,r){var n;if(void 0===e&&(e="1.0.0"),this.webclient=t,this.cache=new P,this.version=e,r&&(this.cache=r),"1.0.0"===this.version)this.wpsmarshaller=new F,n=new o.Jsonix.Context([U,A,k]);else{if("2.0.0"!==this.version)throw new Error("You entered a WPS version other than 1.0.0 or 2.0.0.");this.wpsmarshaller=new D,n=new o.Jsonix.Context([U,q,N])}this.xmlunmarshaller=n.createUnmarshaller(),this.xmlmarshaller=n.createMarshaller()}return e.prototype.getCapabilities=function(e){var t=this,r=this.wpsmarshaller.getCapabilitiesUrl(e);return this.getRaw(r).pipe(s.map((function(e){var r=t.xmlunmarshaller.unmarshalString(e);return t.wpsmarshaller.unmarshalCapabilities(r.value)})))},e.prototype.describeProcess=function(e){throw new Error("Not implemented yet")},e.prototype.executeAsync=function(e,t,r,n,o,i){var a=this;void 0===o&&(o=1e3);var p=this.executeAsyncS(e,t,r,n).pipe(s.mergeMap((function(p){return function(e,t,r,n){void 0===n&&(n=1e3),r&&r(null);var o=e.pipe(s.tap((function(e){r&&r(e)}))),i=f.forkJoin(o,f.timer(n)).pipe(s.map((function(e){return e[0]}))).pipe(s.mergeMap((function(e){return t(e)?f.of(e):i})));return i}(a.getNextState(p,e,t,r,n),(function(e){return"Succeeded"===e.status}),i,o)})),s.mergeMap((function(o){return a.fetchResults(o,e,t,r,n)})),s.tap((function(e){var t,r;try{for(var n=g(e),o=n.next();!o.done;o=n.next()){var s=o.value;if("error"===s.description.type)throw console.log("server responded with 200, but body contained an error-result: ",s),new Error(s.value)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}})));return this.cachedQuery(e,t,r,n,p)},e.prototype.cachedQuery=function(e,t,r,n,o){var i=this;return this.cache.get({url:e,processId:t,inputs:r,outputs:n}).pipe(s.switchMap((function(a){return a?f.of(a):o.pipe(s.tap((function(o){i.cache.set({url:e,processId:t,inputs:r,outputs:n},o)})))})))},e.prototype.getNextState=function(e,t,r,n,o){var i,a=this;if("1.0.0"===this.version){if(!e.statusLocation)throw Error("No status location");i=this.getRaw(e.statusLocation)}else{if("2.0.0"!==this.version)throw new Error("'GetStatus' has not yet been implemented for this WPS-Version ("+this.version+").");if(!e.jobID)throw Error("No job-Id");var p=this.wpsmarshaller.marshallGetStatusBody(t,r,e.jobID),u=this.xmlmarshaller.marshalString(p);i=this.postRaw(t,u)}return i.pipe(G(2e3,2),s.map((function(e){var s=a.xmlunmarshaller.unmarshalString(e);return a.wpsmarshaller.unmarshalGetStateResponse(s,t,r,n,o)})))},e.prototype.fetchResults=function(e,t,r,n,o){var i=this;if(e.results)return f.of(e.results);if(!e.jobID)throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!");var a=this.wpsmarshaller.marshallGetResultBody(t,r,e.jobID),p=this.xmlmarshaller.marshalString(a);return this.postRaw(t,p).pipe(s.map((function(e){var s=i.xmlunmarshaller.unmarshalString(e);return i.wpsmarshaller.unmarshalSyncExecuteResponse(s,t,r,n,o)})))},e.prototype.executeAsyncS=function(e,t,r,n){var o=this,i=this.wpsmarshaller.executeUrl(e,t),a=this.wpsmarshaller.marshalExecBody(t,r,n,!0),p=this.xmlmarshaller.marshalString(a);return this.postRaw(i,p).pipe(s.map((function(s){var i=o.xmlunmarshaller.unmarshalString(s);return o.wpsmarshaller.unmarshalAsyncExecuteResponse(i,e,t,r,n)})))},e.prototype.execute=function(e,t,r,n){var o=this,i=this.wpsmarshaller.executeUrl(e,t),a=this.wpsmarshaller.marshalExecBody(t,r,n,!1),p=this.xmlmarshaller.marshalString(a);return this.postRaw(i,p).pipe(s.map((function(s){var i=o.xmlunmarshaller.unmarshalString(s);return o.wpsmarshaller.unmarshalSyncExecuteResponse(i,e,t,r,n)})))},e.prototype.dismiss=function(e,t,r){var n=this,o=this.wpsmarshaller.dismissUrl(e,t,r),i=this.wpsmarshaller.marshalDismissBody(r),a=this.xmlmarshaller.marshalString(i);return this.postRaw(o,a).pipe(s.map((function(r){var o=n.xmlunmarshaller.unmarshalString(r);return n.wpsmarshaller.unmarshalDismissResponse(o,e,t)})))},e.prototype.postRaw=function(e,t){return this.webclient.post(e,t,{headers:{"Content-Type":"text/xml",Accept:"text/xml, application/xml"},responseType:"text"}).pipe(G(2e3,2),s.share())},e.prototype.getRaw=function(e){return this.webclient.get(e,{headers:{Accept:"text/xml, application/xml"},responseType:"text"}).pipe(G(2e3,2))},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[{type:void 0,decorators:[{type:t.Inject,args:["WpsVersion"]}]},{type:n.HttpClient},{type:void 0,decorators:[{type:t.Inject,args:["WpsCache"]}]}]},e}();var J=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{declarations:[],imports:[],exports:[],providers:[j,R,V]}]}],e}();e.FakeCache=P,e.OwcJsonService=j,e.ServicesOgcModule=J,e.WmtsClientService=R,e.WpsClient=V,e.isBbox=function(e){return e.hasOwnProperty("crs")&&e.hasOwnProperty("lllon")&&e.hasOwnProperty("lllat")&&e.hasOwnProperty("urlon")&&e.hasOwnProperty("urlat")},e.isCswOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/csw"===e},e.isGMLCOVOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov"===e},e.isGMLJP2Offering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2"===e},e.isGeoJsonOffering=W,e.isGeoTIFFOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff"===e},e.isGmlOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/gml"===e},e.isKmlOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/kml"===e},e.isWfsOffering=T,e.isWmsOffering=E,e.isWmtsOffering=_,e.isWpsOffering=function(e){return"http://www.opengis.net/spec/owc-geojson/1.0/req/wcs"===e},e.isWpsState=function(e){return e&&e.hasOwnProperty("status")&&(e.hasOwnProperty("jobID")||e.hasOwnProperty("statusLocation"))},e.isXyzOffering=I,e.shardsExpand=C,Object.defineProperty(e,"__esModule",{value:!0})})); -//# sourceMappingURL=ukis-services-ogc.umd.min.js.map \ No newline at end of file diff --git a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js.map b/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js.map deleted file mode 100644 index dacefce88..000000000 --- a/@ukis/services-ogc/bundles/ukis-services-ogc.umd.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__values","o","m","Symbol","iterator","next","value","done","__read","r","e","ar","push","error","XLink_1_0","XLink_1_0_Factory.XLink_1_0","OWS_1_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0","WMTS_1_0_Factory.WMTS_1_0","WmtsClientService","http","context","Jsonix","Context","xmlunmarshaller","createUnmarshaller","xmlmarshaller","createMarshaller","getCapabilities","url","version","_this","getCapabilitiesUrl","headers","HttpHeaders","Content-Type","Accept","get","responseType","pipe","map","response","unmarshalString","Injectable","args","providedIn","HttpClient","isWmsOffering","str","isWfsOffering","isWmtsOffering","isXyzOffering","isGeoJsonOffering","shardsExpand","v","split","j","start","charCodeAt","end","k","String","fromCharCode","toLowerCase","OwcJsonService","wmtsClient","checkContext","isContext_1_0","Array","isArray","properties","links","find","item","href","profiles","console","getContextTitle","title","getContextPublisher","publisher","getContextExtent","bbox","getResources","features","getResourceTitle","resource","getResourceUpdated","updated","getResourceDate","date","getResourceOfferings","offerings","isActive","active","getResourceOpacity","opacity","getResourceAttribution","attribution","getResourceShards","shards","convertOwcTimeToIsoTimeAndPeriodicity","owctime","arr","interval","periodicity","getResourceDimensions","dims","dimensions","_b","tslib_1.__values","_c","d","name","name_1","dim","log","units","values","display","format","period","default","getLayertypeFromOfferingCode","offering","code","WmsLayertype","WmtsLayertype","WfsLayertype","GeojsonLayertype","XyzLayertype","checkIfServiceOffering","contents","operations","checkIfDataOffering","getOfferingContents","getLegendUrl","legendUrl","defaultStyle","styles","filter","style","legendURL","getIconUrl","iconUrl","getLayers","owc","targetProjection","resources","layers$","resources_1","resources_1_1","createLayerFromOffering","forkJoin","layerType","isRasterLayertype","createRasterLayerFromOffering","isVectorLayertype","createVectorLayerFromOffering","layerUrl","data","getUrlFromUri","getJsonFromUri","content","layerOptions","id","displayName","getDisplayName","visible","type","removable","continuousWorld","legendImg","layer","VectorLayer","of","rasterLayer$","createWmsLayerFromOffering","createWmtsLayerFromOffering","CustomLayertype","getWmtsOptions","options","WmtsLayer","getWmsOptions","WmsLayer","rasterOptions","getRasterLayerOptions","getLayerForWMTS","styleInfo","getMatrixSetForWMTS","matrixSet","matrixSetOptions","matrixIds","resolutions","params","projection","_a","parseOperationUrl","urlParams","opCode","operation","op","matrixSets","srs","capabilities","ms","tm","origin","x","y","tilesize","LAYERS","FORMAT","TIME","VERSION","TILED","TRANSPARENT","STYLES","getLayerOptions","subdomains","uri","substring","indexOf","query","substr","lastIndexOf","result","forEach","part","toUpperCase","decodeURIComponent","generateOwsContextFrom","layers","extent","lang","layers_1","layers_1_1","generateResourceFromLayer","generateOfferingFromLayer","geometry","getOfferingCodeFromLayer","getContentsFromLayer","getOperationsFromLayer","JSON","stringify","RasterLayer","getWmsOperationsFromLayer","getWmtsOperationsFromLayer","getXyzOperationsFromLayer","method","getTmsOperationsFromLayer","getWfsOperationsFromLayer","wmsVersion","layerId","wmtsVersion","WpsMarshaller100","baseurl","executeUrl","processId","unmarshalCapabilities","out","processOfferings","process","identifier","unmarshalSyncExecuteResponse","responseJson","inputs","outputDescriptions","status","processFailed","description","reference","statusLocation","processOutputs","output","isReference","datatype","literalData","complexData","undefined","unmarshalOutputData","unmarshalGetStateResponse","mimeType","cont","parse","XMLSerializer","serializeToString","Error","dataType","unmarshalAsyncExecuteResponse","serverUrl","state","processSucceeded","processAccepted","processStarted","results","marshalExecBody","outputs","async","key","localPart","namespaceURI","prefix","string","dataInputs","marshalInputs","responseForm","marshalResponseForm","service","outputDefinitions","outputs_1","outputs_1_1","defType","asReference","responseDocument","storeExecuteResponse","inputArr","theInputs","inputArr_1","inputArr_1_1","inp","marshalledInput","marshalInput","input","inputType","_abstract","marshalReferenceInput","marshalDataInput","boundingBoxData","lowerCorner","lllat","lllon","upperCorner","urlat","urlon","marshallGetStatusBody","statusId","marshallGetResultBody","jobID","dismissUrl","jobId","marshalDismissBody","unmarshalDismissResponse","jsonResponse","isStatusInfo","obj","WpsMarshaller200","processSummary","summary","outputDescription","od","this_1","percentCompleted","TYPE_NAME","marshalOutputs","mode","transmission","delayedRetry","delayMs","maxRetries","attempts","src$","retryWhen","error$","delay","mergeMap","FakeCache","set","OWS_2_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0","WPS_2_0_Factory.WPS_2_0","WpsClient","webclient","cache","wpsmarshaller","getRaw","describeProcess","executeAsync","pollingRate","tapFunction","query$","executeAsyncS","currentState","task$","predicate","doWhile","minWaitTime","tappedTask$","tap","polledRequest$","timer","pollUntil","getNextState","lastState","fetchResults","response_1","response_1_1","cachedQuery","switchMap","request$","execbody","xmlExecbody","marshalString","postRaw","xmlResponse","execBody","xmlExecBody","execute","dismiss","dismissBody","xmlDismissBody","xmlBody","post","share","Inject","ServicesOgcModule","NgModule","declarations","imports","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"]} \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/owc/owc-json.service.js b/@ukis/services-ogc/esm2015/lib/owc/owc-json.service.js deleted file mode 100644 index 55f53ac81..000000000 --- a/@ukis/services-ogc/esm2015/lib/owc/owc-json.service.js +++ /dev/null @@ -1,1240 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { VectorLayer, RasterLayer, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, WmtsLayer, WmsLayer } from '@ukis/services-layers'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { of, forkJoin } from 'rxjs'; -import { map } from 'rxjs/operators'; -import * as i0 from "@angular/core"; -import * as i1 from "../wmts/wmtsclient.service"; -/** - * @param {?} str - * @return {?} - */ -export function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -export function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -export function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - let o = []; - for (let i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - let start = j[0].charCodeAt(0); - /** @type {?} */ - let end = j[1].charCodeAt(0); - if (start <= end) { - for (let k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (let k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -export class OwcJsonService { - /** - * @param {?} wmtsClient - */ - constructor(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - checkContext(context) { - /** @type {?} */ - let isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - } - /** - * @param {?} context - * @return {?} - */ - getContextTitle(context) { - return context.properties.title; - } - /** - * @param {?} context - * @return {?} - */ - getContextPublisher(context) { - return (context.properties.publisher) ? context.properties.publisher : null; - } - /** - * @param {?} context - * @return {?} - */ - getContextExtent(context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - } - /** - * @param {?} context - * @return {?} - */ - getResources(context) { - return context.features; - } - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - getResourceTitle(resource) { - return resource.properties.title; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceUpdated(resource) { - return resource.properties.updated; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDate(resource) { - return (resource.properties.date) ? resource.properties.date : null; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOfferings(resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - } - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - isActive(resource) { - /** @type {?} */ - let active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOpacity(resource) { - /** @type {?} */ - let opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceAttribution(resource) { - /** @type {?} */ - let attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceShards(resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - } - /** - * @param {?} owctime - * @return {?} - */ - convertOwcTimeToIsoTimeAndPeriodicity(owctime) { - /** - * Convert from - * @type {?} - */ - let arr = owctime.split('/'); - /** @type {?} */ - let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - let p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDimensions(resource) { - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - let dims = {}; - /** @type {?} */ - let dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - for (let d of resource.properties.dimensions) { - dimensions[d.name] = d; - } - } - else { - dimensions = resource.properties.dimensions; - } - for (let name in dimensions) { - /** @type {?} */ - let dim = {}; - console.log(name); - if (name === "time" || dimensions[name].units == "ISO8601") { - /** @type {?} */ - let value = dimensions[name].value; - /** @type {?} */ - let values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - (v) => this.convertOwcTimeToIsoTimeAndPeriodicity(v))) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name].display, - "default": "end" - } - }; - } - else if (name === "elevation") { - dim = dimensions[name]; - } - else { - dim = dimensions[name]; - } - dims[name] = dim; - } - return dims; - } - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - getLayertypeFromOfferingCode(offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - } - /** - * @param {?} offering - * @return {?} - */ - checkIfServiceOffering(offering) { - return (!offering.contents && offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - checkIfDataOffering(offering) { - return (offering.contents && !offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - getOfferingContents(offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - } - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - getLegendUrl(offering) { - /** @type {?} */ - let legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - let defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - style => style.default)); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - } - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - getIconUrl(offering) { - /** @type {?} */ - let iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - } - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - getLayers(owc, targetProjection) { - /** @type {?} */ - const resources = owc.features; - /** @type {?} */ - const layers$ = []; - for (const resource of resources) { - /** @type {?} */ - const offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - const offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmtsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWfsOffering(o.code))) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - return forkJoin(layers$); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error(`This type of service (${layerType}) has not been implemented yet.`); - } - } - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - createVectorLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`); - return null; - } - /** @type {?} */ - const iconUrl = this.getIconUrl(offering); - /** @type {?} */ - let layerUrl; - /** @type {?} */ - let params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - let legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - let layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - const layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createRasterLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`); - return null; - } - /** @type {?} */ - let rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createWmtsLayerFromOffering(offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - (options) => { - /** @type {?} */ - const layer = new WmtsLayer(options); - return layer; - }))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - createWmsLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - const layer = new WmsLayer(options); - return of(layer); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - getWmtsOptions(offering, resource, context, targetProjection) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - const layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - let style; - if (offering.styles) { - /** @type {?} */ - const styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - (matrixSet) => { - /** @type {?} */ - const matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - const wmtsOptions = Object.assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getLayerForWMTS(offering, resource) { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile'); - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}. - Cannot infer layer.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - parseOperationUrl(offering, opCode) { - if (offering.operations) { - /** @type {?} */ - const operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - op => op.code === opCode)); - if (operation) { - /** @type {?} */ - const url = this.getUrlFromUri(operation.href); - /** @type {?} */ - const urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering); - } - } - else { - console.error(`The offering ${offering.code} has no operations.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - getMatrixSetForWMTS(offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - const matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - m => m.srs === targetProjection)); - return of(matrixSet); - } - else { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities'); - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - (capabilities) => { - /** @type {?} */ - const matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - const matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - ms => ms['identifier']['value'] === targetProjection)); - /** @type {?} */ - const owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['identifier']['value'])), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['scaleDenominator'])), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getWmsOptions(offering, resource, context) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - const urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let defaultStyle; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)).name; - } - /** @type {?} */ - const params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - const wmsOptions = Object.assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getRasterLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - const rasterLayerOptions = Object.assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - } - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - getUrlFromUri(uri) { - return uri.substring(0, uri.indexOf('?')); - } - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - getJsonFromUri(uri) { - /** @type {?} */ - const query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - const result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - const item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - } - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getDisplayName(offering, resource) { - /** @type {?} */ - let displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - } - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - generateOwsContextFrom(id, layers, extent, properties) { - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - let owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - for (let layer of layers) { - /** @type {?} */ - let resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - return owc; - } - /** - * @param {?} layer - * @return {?} - */ - generateResourceFromLayer(layer) { - /** @type {?} */ - let resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - } - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - generateOfferingFromLayer(layer, legendUrl, iconUrl) { - /** @type {?} */ - let offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - } - /** - * @param {?} layer - * @return {?} - */ - getOfferingCodeFromLayer(layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error(`This type of layer (${layer.type}) has not been implemented yet.`); - return null; - } - } - /** - * @param {?} layer - * @return {?} - */ - getContentsFromLayer(layer) { - /** @type {?} */ - let contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - let content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`); - } - return contents; - } - /** - * @param {?} layer - * @return {?} - */ - getOperationsFromLayer(layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error(`Cannot get operations for this type of layer: (${layer.type})`); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error(`This type of service (${layer.type}) has not been implemented yet.`); - return []; - } - } - } - /** - * @param {?} layer - * @return {?} - */ - getXyzOperationsFromLayer(layer) { - /** @type {?} */ - let restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': `${layer.url}` - }; - /** @type {?} */ - let operations = [ - restCall - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getTmsOperationsFromLayer(layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - } - /** - * @param {?} layer - * @return {?} - */ - getWfsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - let GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': `${url}?service=WFS&version=${version}&request=GetFeature` - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - let operations = [ - GetFeature, - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmsVersion = layer.params.VERSION; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true` - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities` - }; - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}` - }; - /** @type {?} */ - let operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmtsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmtsVersion = layer.params.version; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getTile = { - 'code': 'GetTile', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - let operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - } -} -OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -OwcJsonService.ctorParameters = () => [ - { type: WmtsClientService } -]; -/** @nocollapse */ OwcJsonService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(i0.ɵɵinject(i1.WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9vd2Mvb3djLWpzb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTM0MsT0FBTyxFQUNtRCxXQUFXLEVBQUUsV0FBVyxFQUM3RCxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBZSxlQUFlLEVBQUUsWUFBWSxFQUN4RyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFHdEQsU0FBUyxFQUVULFFBQVEsRUFJVCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQUtyQyxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQVc7SUFDdkMsT0FBTyxHQUFHLEtBQUsscURBQXFEO1dBQy9ELEdBQUcsS0FBSyxzQ0FBc0M7V0FDOUMsR0FBRyxLQUFLLHNDQUFzQyxDQUFDO0FBQ3RELENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRCxDQUFDO0FBQ3ZFLENBQUM7Ozs7O0FBQ0QsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFXO0lBQ3hDLE9BQU8s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O1lBdnlCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFyRlEsaUJBQWlCOzs7Ozs7OztJQXdGWixvQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIElPd3NDb250ZXh0LCBJT3dzUmVzb3VyY2UsIElPd3NPZmZlcmluZywgSU93c09wZXJhdGlvbiwgSU93c0NvbnRlbnQsIFdNU19PZmZlcmluZywgV0ZTX09mZmVyaW5nLCBXQ1NfT2ZmZXJpbmcsXHJcbiAgQ1NXX09mZmVyaW5nLCBXTVRTX09mZmVyaW5nLCBHTUxfT2ZmZXJpbmcsIEtNTF9PZmZlcmluZywgR2VvVElGRl9PZmZlcmluZywgR01MSlAyX09mZmVyaW5nLCBHTUxDT1ZfT2ZmZXJpbmdcclxufSBmcm9tICcuL3R5cGVzL293Yy1qc29uJztcclxuaW1wb3J0IHtcclxuICBJRW9jT3dzQ29udGV4dCwgSUVvY093c1Jlc291cmNlLCBJRW9jT3dzT2ZmZXJpbmcsIEdlb0pzb25fT2ZmZXJpbmcsIFh5el9PZmZlcmluZywgSUVvY093c1dtdHNPZmZlcmluZyxcclxuICBJRW9jV21zT2ZmZXJpbmcsIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiwgSUVvY093c1dtdHNNYXRyaXhTZXRcclxufSBmcm9tICcuL3R5cGVzL2VvYy1vd2MtanNvbic7XHJcbmltcG9ydCB7XHJcbiAgSUxheWVyR3JvdXBPcHRpb25zLCBJTGF5ZXJPcHRpb25zLCBJUmFzdGVyTGF5ZXJPcHRpb25zLCBWZWN0b3JMYXllciwgUmFzdGVyTGF5ZXIsIElWZWN0b3JMYXllck9wdGlvbnMsXHJcbiAgTGF5ZXIsIFRMYXllcnR5cGUsIFdtc0xheWVydHlwZSwgV210c0xheWVydHlwZSwgV2ZzTGF5ZXJ0eXBlLCBHZW9qc29uTGF5ZXJ0eXBlLCBDdXN0b21MYXllciwgQ3VzdG9tTGF5ZXJ0eXBlLCBYeXpMYXllcnR5cGUsXHJcbiAgVFJhc3RlckxheWVydHlwZSwgaXNSYXN0ZXJMYXllcnR5cGUsIGlzVmVjdG9yTGF5ZXJ0eXBlLCBUVmVjdG9yTGF5ZXJ0eXBlLCBJTGF5ZXJEaW1lbnNpb25zLFxyXG4gIElMYXllckludGVydmFsQW5kUGVyaW9kLFxyXG4gIElXbXRzUGFyYW1zLFxyXG4gIFdtdHNMYXllcixcclxuICBJV210c09wdGlvbnMsXHJcbiAgV21zTGF5ZXIsXHJcbiAgSVdtc1BhcmFtcyxcclxuICBJV21zT3B0aW9ucyxcclxuICBJTGlzdE1hdHJpeFNldFxyXG59IGZyb20gJ0B1a2lzL3NlcnZpY2VzLWxheWVycyc7XHJcbmltcG9ydCB7IFRHZW9FeHRlbnQgfSBmcm9tICdAdWtpcy9zZXJ2aWNlcy1tYXAtc3RhdGUnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4uL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dtc09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNU19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcydcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMSdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ZzT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgV0ZTX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd2ZzJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBXQ1NfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nzd09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIENTV19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV210c09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNVFNfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93bXRzJ1xyXG4gICAgfHwgc3RyID09PSAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd210cy8xLjAuMCdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtdHMvMS4xLjAnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dtbE9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTF9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzS21sT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgS01MX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9USUZGT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR2VvVElGRl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dlb3RpZmYnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dNTEpQMk9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTEpQMl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzR01MQ09WT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR01MQ09WX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ21sY292JztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNYeXpPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBYeXpfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0pzb25PZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBHZW9Kc29uX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYXJkc0V4cGFuZCh2OiBzdHJpbmcpIHtcclxuICBpZiAoIXYpIHsgcmV0dXJuOyB9XHJcbiAgbGV0IG8gPSBbXVxyXG4gIGZvciAobGV0IGkgaW4gdi5zcGxpdCgnLCcpKSB7XHJcbiAgICB2YXIgaiA9IHYuc3BsaXQoJywnKVtpXS5zcGxpdChcIi1cIilcclxuICAgIGlmIChqLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIG8ucHVzaCh2LnNwbGl0KCcsJylbaV0pXHJcbiAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09IDIpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0galswXS5jaGFyQ29kZUF0KDApXHJcbiAgICAgIGxldCBlbmQgPSBqWzFdLmNoYXJDb2RlQXQoMClcclxuICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA+PSBlbmQ7IGstLSkge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvXHJcbn1cclxuLyoqXHJcbiAqIE9XUyBDb250ZXh0IFNlcnZpY2VcclxuICogT0dDIE9XUyBDb250ZXh0IEdlbyBFbmNvZGluZyBTdGFuZGFyZCBWZXJzaW9uOiAxLjBcclxuICogaHR0cDovL2RvY3Mub3Blbmdlb3NwYXRpYWwub3JnL2lzLzE0LTA1NXIyLzE0LTA1NXIyLmh0bWxcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbFxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgYWxsb3dzIHlvdSB0byByZWFkIGFuZCB3cml0ZSBPV0MtZGF0YS5cclxuICogV2UgaGF2ZSBhZGRlZCBzb21lIGN1c3RvbSBmaWVsZHMgdG8gdGhlIE9XQyBzdGFuZGFyZC5cclxuICogICAtIGFjY2VwdHMgdGhlIE9XQy1zdGFuZGFyZC1kYXRhdHlwZXMgYXMgZnVuY3Rpb24gaW5wdXRzIChzbyBhcyB0byBiZSBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlKVxyXG4gKiAgIC0gcmV0dXJucyBvdXIgZXh0ZW5kZWQgT1dDLWRhdGF0eXBlcyBhcyBmdW5jdGlvbiBvdXRwdXRzIChzbyBhcyB0byBiZSBhcyBpbmZvcm1hdGlvbi1yaWNoIGFzIHBvc3NpYmxlKVxyXG4gKlxyXG4gKi9cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE93Y0pzb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3bXRzQ2xpZW50OiBXbXRzQ2xpZW50U2VydmljZSkge1xyXG4gICAgLy9odHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVnZW9qc29uLWVuY29kaW5nLTJcclxuICB9XHJcblxyXG5cclxuICBjaGVja0NvbnRleHQoY29udGV4dDogSU93c0NvbnRleHQpIHtcclxuICAgIGxldCBpc0NvbnRleHRfMV8wO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRleHQucHJvcGVydGllcy5saW5rcykpIHtcclxuICAgICAgaXNDb250ZXh0XzFfMCA9IGNvbnRleHQucHJvcGVydGllcy5saW5rcy5wcm9maWxlcy5maW5kKGl0ZW0gPT4gaXRlbSA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzQ29udGV4dF8xXzAgPSBjb250ZXh0LnByb3BlcnRpZXMubGlua3MuZmluZChpdGVtID0+IGl0ZW0uaHJlZiA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQ29udGV4dF8xXzApIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndGhpcyBpcyBub3QgYSB2YWxpZCBPV1MgQ29udGV4dCB2MS4wIScpO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBpc0NvbnRleHRfMV8wO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFRpdGxlKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFB1Ymxpc2hlcihjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LnByb3BlcnRpZXMucHVibGlzaGVyKSA/IGNvbnRleHQucHJvcGVydGllcy5wdWJsaXNoZXIgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dEV4dGVudChjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LmJib3gpID8gY29udGV4dC5iYm94IDogbnVsbDsgLy8gb3IgWy0xODAsIC05MCwgMTgwLCA5MF07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UmVzb3VyY2VzKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5mZWF0dXJlcztcclxuICB9XHJcblxyXG4gIC8qKiBSZXNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VVcGRhdGVkKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZURhdGUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgcmV0dXJuIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmRhdGUpID8gcmVzb3VyY2UucHJvcGVydGllcy5kYXRlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlT2ZmZXJpbmdzKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiAocmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MpID8gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0cmlldmUgbGF5ZXIgc3RhdHVzIGFjdGl2ZSAvIGluYWN0aXZlIGJhc2VkIG9uIElPd3NSZXNvdXJjZVxyXG4gICAqIEBwYXJhbSByZXNvdXJjZTogSU93c1Jlc291cmNlXHJcbiAgICovXHJcbiAgaXNBY3RpdmUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlJykpIHtcclxuICAgICAgYWN0aXZlID0gcmVzb3VyY2UucHJvcGVydGllcy5hY3RpdmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBudW1iZXIge1xyXG4gICAgbGV0IG9wYWNpdHkgPSAxO1xyXG4gICAgaWYgKHJlc291cmNlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ29wYWNpdHknKSkge1xyXG4gICAgICBvcGFjaXR5ID0gcmVzb3VyY2UucHJvcGVydGllcy5vcGFjaXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHJpYnV0aW9uID0gJyc7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRpb24nKSkge1xyXG4gICAgICBhdHRyaWJ1dGlvbiA9IHJlc291cmNlLnByb3BlcnRpZXMuYXR0cmlidXRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cmlidXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNoYXJkcyhyZXNvdXJjZTogSU93c1Jlc291cmNlKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdzaGFyZHMnKSkge1xyXG4gICAgICByZXR1cm4gcmVzb3VyY2UucHJvcGVydGllcy5zaGFyZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0T3djVGltZVRvSXNvVGltZUFuZFBlcmlvZGljaXR5KG93Y3RpbWU6IHN0cmluZyk6IElMYXllckludGVydmFsQW5kUGVyaW9kIHwgc3RyaW5nIHtcclxuICAgIC8qKlxyXG4gICAgIENvbnZlcnQgZnJvbVxyXG4gICAgKi9cclxuICAgIGxldCBhcnIgPSBvd2N0aW1lLnNwbGl0KCcvJyk7XHJcbiAgICBsZXQgdCA9IChhcnIubGVuZ3RoID09IDMpID8gYXJyWzBdICsgJy8nICsgYXJyWzFdIDogb3djdGltZTtcclxuICAgIGxldCBwID0gKGFyci5sZW5ndGggPT0gMykgPyBhcnJbMl0gOiBudWxsO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgcmV0dXJuIHsgXCJpbnRlcnZhbFwiOiB0LCBcInBlcmlvZGljaXR5XCI6IHAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VEaW1lbnNpb25zKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBJTGF5ZXJEaW1lbnNpb25zIHtcclxuICAgIGlmICghcmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnZGltZW5zaW9ucycpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgZGltcyA9IHt9XHJcblxyXG4gICAgbGV0IGRpbWVuc2lvbnMgPSB7fVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UucHJvcGVydGllcy5kaW1lbnNpb25zKSkge1xyXG4gICAgICBmb3IgKGxldCBkIG9mIHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9ucykge1xyXG4gICAgICAgIGRpbWVuc2lvbnNbZC5uYW1lXSA9IGRcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGltZW5zaW9ucyA9IHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9uc1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkaW1lbnNpb25zKSB7XHJcbiAgICAgIGxldCBkaW0gPSB7fVxyXG4gICAgICBjb25zb2xlLmxvZyhuYW1lKVxyXG4gICAgICBpZiAobmFtZSA9PT0gXCJ0aW1lXCIgfHwgZGltZW5zaW9uc1tuYW1lXS51bml0cyA9PSBcIklTTzg2MDFcIikge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRpbWVuc2lvbnNbbmFtZV0udmFsdWVcclxuICAgICAgICBsZXQgdmFsdWVzID0gKHZhbHVlKSA/IHZhbHVlLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpID0+IHRoaXMuY29udmVydE93Y1RpbWVUb0lzb1RpbWVBbmRQZXJpb2RpY2l0eSh2KSkgOiBudWxsXHJcbiAgICAgICAgZGltID0ge1xyXG4gICAgICAgICAgXCJ2YWx1ZXNcIjogKCghdmFsdWVzKSB8fCB2YWx1ZXMubGVuZ3RoID4gMSkgPyB2YWx1ZXMgOiB2YWx1ZXNbMF0sXHJcbiAgICAgICAgICBcInVuaXRzXCI6IGRpbWVuc2lvbnNbbmFtZV0udW5pdHMsXHJcbiAgICAgICAgICBcImRpc3BsYXlcIjoge1xyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcIllZWU1NRERcIixcclxuICAgICAgICAgICAgXCJwZXJpb2RcIjogZGltZW5zaW9uc1tuYW1lXS5kaXNwbGF5LFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJlbmRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChuYW1lID09PSBcImVsZXZhdGlvblwiKSB7XHJcbiAgICAgICAgZGltID0gZGltZW5zaW9uc1tuYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaW0gPSBkaW1lbnNpb25zW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGRpbXNbbmFtZV0gPSBkaW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltcztcclxuICB9XHJcblxyXG4gIC8qKiBPZmZlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBUTGF5ZXJ0eXBlIHtcclxuICAgIGlmIChpc1dtc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzV210c09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXRzTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1dmc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXZnNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzR2VvSnNvbk9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBHZW9qc29uTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1h5ek9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBYeXpMYXllcnR5cGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29kZTsgLy8gYW4gb2ZmZXJpbmcgY2FuIGFsc28gYmUgYW55IG90aGVyIHN0cmluZy5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTZXJ2aWNlT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghb2ZmZXJpbmcuY29udGVudHMgJiYgb2ZmZXJpbmcub3BlcmF0aW9ucykgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAob2ZmZXJpbmcuY29udGVudHMgJiYgIW9mZmVyaW5nLm9wZXJhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmZXJpbmdDb250ZW50cyhvZmZlcmluZzogSU93c09mZmVyaW5nKTogSU93c09wZXJhdGlvbltdIHwgSU93c0NvbnRlbnRbXSB7XHJcbiAgICBpZiAodGhpcy5jaGVja0lmU2VydmljZU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcub3BlcmF0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29udGVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBsZWdlbmRVUkwgZnJvbSBwcm9qZWN0IHNwZWNpZmljIG93cyBDb250ZXh0XHJcbiAgICogQHBhcmFtIG9mZmVyaW5nIGxheWVyIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0TGVnZW5kVXJsKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpIHtcclxuICAgIGxldCBsZWdlbmRVcmwgPSAnJztcclxuXHJcbiAgICBpZiAob2ZmZXJpbmcuaGFzT3duUHJvcGVydHkoJ3N0eWxlcycpKSB7XHJcbiAgICAgIGxldCBkZWZhdWx0U3R5bGUgPSBvZmZlcmluZy5zdHlsZXMuZmlsdGVyKHN0eWxlID0+IHN0eWxlLmRlZmF1bHQpO1xyXG4gICAgICBpZiAoZGVmYXVsdFN0eWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlWzBdLmxlZ2VuZFVSTDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvZmZlcmluZy5oYXNPd25Qcm9wZXJ0eSgnbGVnZW5kVXJsJykpIHtcclxuICAgICAgbGVnZW5kVXJsID0gb2ZmZXJpbmcubGVnZW5kVXJsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ2VuZFVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGljb25VcmwgYmFzZWQgb24gSU93c09mZmVyaW5nXHJcbiAgICogQHBhcmFtIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0SWNvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nKSB7XHJcbiAgICBsZXQgaWNvblVybCA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCdpY29uVXJsJykpIHtcclxuICAgICAgaWNvblVybCA9IG9mZmVyaW5nLmljb25Vcmw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWNvblVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxheWVyIHByaW9yaXR5OiBmaXJzdCB3bXMsIHRoZW4gd210cywgdGhlbiB3ZnMsIHRoZW4gb3RoZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRMYXllcnMob3djOiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYXllcltdPiB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSBvd2MuZmVhdHVyZXM7XHJcbiAgICBjb25zdCBsYXllcnMkOiBPYnNlcnZhYmxlPExheWVyPltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuICAgICAgY29uc3Qgb2ZmZXJpbmdzID0gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3M7XHJcbiAgICAgIGlmIChvZmZlcmluZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZmVyaW5nID0gb2ZmZXJpbmdzLmZpbmQobyA9PiBpc1dtc09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV210c09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV2ZzT2ZmZXJpbmcoby5jb2RlKSlcclxuICAgICAgICAgIHx8IG9mZmVyaW5nc1swXTtcclxuICAgICAgICBsYXllcnMkLnB1c2godGhpcy5jcmVhdGVMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIG93YywgdGFyZ2V0UHJvamVjdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGxheWVycyQpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8TGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcbiAgICBpZiAoaXNSYXN0ZXJMYXllcnR5cGUobGF5ZXJUeXBlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVSYXN0ZXJMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQsIHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgfSBlbHNlIGlmIChpc1ZlY3RvckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVZlY3RvckxheWVyRnJvbU9mZmVyaW5nKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGlzIHR5cGUgb2Ygc2VydmljZSAoJHtsYXllclR5cGV9KSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlVmVjdG9yTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dD86IElPd3NDb250ZXh0KTogT2JzZXJ2YWJsZTxWZWN0b3JMYXllcj4ge1xyXG4gICAgY29uc3QgbGF5ZXJUeXBlID0gdGhpcy5nZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nKTtcclxuXHJcbiAgICBpZiAoIWlzVmVjdG9yTGF5ZXJ0eXBlKGxheWVyVHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIGxheWVyICcke2xheWVyVHlwZX0nIC8gb2ZmZXJpbmcgJyR7b2ZmZXJpbmcuY29kZX0nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgaW50byBhIFZlY3RvcmxheWVyYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLmdldEljb25Vcmwob2ZmZXJpbmcpO1xyXG5cclxuICAgIGxldCBsYXllclVybCwgcGFyYW1zO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIG9wZXJhdGlvbnMtb2ZmZXJpbmcgKHZzLiBhIGRhdGEtb2ZmZXJpbmcpOlxyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIGxheWVyVXJsID0gdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZik7XHJcbiAgICBpZiAob2ZmZXJpbmcub3BlcmF0aW9ucykgcGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG5cclxuICAgIGxldCBkYXRhO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGRhdGEtb2ZmZXJpbmc6IFxyXG4gICAgaWYgKG9mZmVyaW5nLmNvbnRlbnRzKSB7XHJcbiAgICAgIGRhdGEgPSBvZmZlcmluZy5jb250ZW50c1swXS5jb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsZWdlbmRVcmwgPSB0aGlzLmdldExlZ2VuZFVybChvZmZlcmluZyk7XHJcblxyXG4gICAgbGV0IGxheWVyT3B0aW9uczogSVZlY3RvckxheWVyT3B0aW9ucyA9IHtcclxuICAgICAgaWQ6IHJlc291cmNlLmlkIGFzIHN0cmluZyxcclxuICAgICAgbmFtZTogdGhpcy5nZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIHR5cGU6IGxheWVyVHlwZSxcclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlLFxyXG4gICAgICBhdHRyaWJ1dGlvbjogdGhpcy5nZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlKSxcclxuICAgICAgY29udGludW91c1dvcmxkOiBmYWxzZSxcclxuICAgICAgb3BhY2l0eTogdGhpcy5nZXRSZXNvdXJjZU9wYWNpdHkocmVzb3VyY2UpLFxyXG4gICAgICB1cmw6IGxheWVyVXJsID8gbGF5ZXJVcmwgOiBudWxsLFxyXG4gICAgICBsZWdlbmRJbWc6IGxlZ2VuZFVybCA/IGxlZ2VuZFVybCA6IG51bGwsXHJcbiAgICAgIGRhdGE6IGRhdGFcclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKGxheWVyT3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlLmJib3gpIHtcclxuICAgICAgbGF5ZXIuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyLmJib3ggPSBjb250ZXh0LmJib3g7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKGxheWVyKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhc3RlckxheWVyRnJvbU9mZmVyaW5nKFxyXG4gICAgb2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcblxyXG4gICAgaWYgKCFpc1Jhc3RlckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBvZmZlcmluZyAnJHtvZmZlcmluZy5jb2RlfScgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIGEgcmFzdGVybGF5ZXIuYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByYXN0ZXJMYXllciQ6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+O1xyXG4gICAgc3dpdGNoIChsYXllclR5cGUpIHtcclxuICAgICAgY2FzZSBXbXNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXNMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdtdHNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgLy8gQFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDdXN0b21MYXllcnR5cGU6XHJcbiAgICAgICAgLy8gY3VzdG9tIGxheWVycyBhcmUgbWVhbnQgdG8gYmUgdXNlcmRlZmluZWQgYW5kIG5vdCBlYXNpbHkgZW5jb2RlZCBpbiBhIE9XQy5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFzdGVyTGF5ZXIkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcoXHJcbiAgICBvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxXbXRzTGF5ZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFdtdHNPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbikucGlwZShtYXAoKG9wdGlvbnM6IElXbXRzT3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IG5ldyBXbXRzTGF5ZXIob3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBsYXllcjtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlV21zTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBPYnNlcnZhYmxlPFdtc0xheWVyPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBJV21zT3B0aW9ucyA9IHRoaXMuZ2V0V21zT3B0aW9ucyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgV21zTGF5ZXIob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gb2YobGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXbXRzT3B0aW9ucyhcclxuICAgIG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UsIGNvbnRleHQ6IElPd3NDb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElXbXRzT3B0aW9ucz4ge1xyXG4gICAgY29uc3QgcmFzdGVyT3B0aW9uczogSVJhc3RlckxheWVyT3B0aW9ucyA9IHRoaXMuZ2V0UmFzdGVyTGF5ZXJPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyRm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UpO1xyXG5cclxuICAgIGxldCBzdHlsZTogc3RyaW5nO1xyXG4gICAgaWYgKG9mZmVyaW5nLnN0eWxlcykge1xyXG4gICAgICBjb25zdCBzdHlsZUluZm8gPSBvZmZlcmluZy5zdHlsZXMuZmluZChzID0+IHMuZGVmYXVsdCk7XHJcbiAgICAgIGlmIChzdHlsZUluZm8pIHtcclxuICAgICAgICBzdHlsZSA9IHN0eWxlSW5mby5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0cml4U2V0Rm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UsIHRhcmdldFByb2plY3Rpb24pLnBpcGUobWFwKCgobWF0cml4U2V0OiBJRW9jT3dzV210c01hdHJpeFNldCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRyaXhTZXRPcHRpb25zOiBJTGlzdE1hdHJpeFNldCA9IHtcclxuICAgICAgICBtYXRyaXhTZXQ6IG1hdHJpeFNldC5tYXRyaXhTZXQsXHJcbiAgICAgICAgbWF0cml4SWRzOiBtYXRyaXhTZXQubWF0cml4SWRzLFxyXG4gICAgICAgIHJlc29sdXRpb25zOiBtYXRyaXhTZXQucmVzb2x1dGlvbnNcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgd210c09wdGlvbnM6IElXbXRzT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5yYXN0ZXJPcHRpb25zLFxyXG4gICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGxheWVyOiBsYXllcixcclxuICAgICAgICAgIG1hdHJpeFNldE9wdGlvbnM6IG1hdHJpeFNldE9wdGlvbnMsXHJcbiAgICAgICAgICBwcm9qZWN0aW9uOiB0YXJnZXRQcm9qZWN0aW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxyXG4gICAgICAgICAgZm9ybWF0OiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtdHNPcHRpb25zO1xyXG4gICAgfSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGF5ZXJGb3JXTVRTKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgW3VybCwgdXJsUGFyYW1zXSA9IHRoaXMucGFyc2VPcGVyYXRpb25Vcmwob2ZmZXJpbmcsICdHZXRUaWxlJyk7XHJcbiAgICBpZiAodXJsUGFyYW1zWydMQVlFUiddKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJhbXNbJ0xBWUVSJ107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSBpcyBubyBsYXllci1wYXJhbWV0ZXIgaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2UuaWR9LlxyXG4gICAgICBDYW5ub3QgaW5mZXIgbGF5ZXIuYCwgb2ZmZXJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9wZXJhdGlvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nLCBvcENvZGU6IHN0cmluZyk6IFtzdHJpbmcsIG9iamVjdF0ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gb2ZmZXJpbmcub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLmNvZGUgPT09IG9wQ29kZSk7XHJcbiAgICAgIGlmIChvcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybEZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZ2V0SnNvbkZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIHJldHVybiBbdXJsLCB1cmxQYXJhbXNdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZXJlIGlzIG5vICR7b3BDb2RlfS1vcGVyYXRpb24gaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0uYCwgb2ZmZXJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgb2ZmZXJpbmcgJHtvZmZlcmluZy5jb2RlfSBoYXMgbm8gb3BlcmF0aW9ucy5gLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hdHJpeFNldEZvcldNVFMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW9jT3dzV210c01hdHJpeFNldD4ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm1hdHJpeFNldHMpIHtcclxuICAgICAgY29uc3QgbWF0cml4U2V0ID0gb2ZmZXJpbmcubWF0cml4U2V0cy5maW5kKG0gPT4gbS5zcnMgPT09IHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgICByZXR1cm4gb2YobWF0cml4U2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IFt1cmwsIHVybFBhcmFtc10gPSB0aGlzLnBhcnNlT3BlcmF0aW9uVXJsKG9mZmVyaW5nLCAnR2V0Q2FwYWJpbGl0aWVzJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLndtdHNDbGllbnQuZ2V0Q2FwYWJpbGl0aWVzKHVybCkucGlwZShcclxuICAgICAgICBtYXAoKGNhcGFiaWxpdGllczogb2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXRzID0gY2FwYWJpbGl0aWVzWyd2YWx1ZSddWydjb250ZW50cyddWyd0aWxlTWF0cml4U2V0J107XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXQgPSBtYXRyaXhTZXRzLmZpbmQobXMgPT4gbXNbJ2lkZW50aWZpZXInXVsndmFsdWUnXSA9PT0gdGFyZ2V0UHJvamVjdGlvbik7XHJcbiAgICAgICAgICBjb25zdCBvd3NNYXRyaXhTZXQ6IElFb2NPd3NXbXRzTWF0cml4U2V0ID0ge1xyXG4gICAgICAgICAgICBzcnM6IHRhcmdldFByb2plY3Rpb24sXHJcbiAgICAgICAgICAgIG1hdHJpeFNldDogbWF0cml4U2V0WydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10sXHJcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10pLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydzY2FsZURlbm9taW5hdG9yJ10pLFxyXG4gICAgICAgICAgICBvcmlnaW46IHtcclxuICAgICAgICAgICAgICB4OiBtYXRyaXhTZXRbJ3RpbGVNYXRyaXgnXVswXVsndG9wTGVmdENvcm5lciddWzFdLFxyXG4gICAgICAgICAgICAgIHk6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0b3BMZWZ0Q29ybmVyJ11bMF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGlsZXNpemU6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0aWxlSGVpZ2h0J11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gb3dzTWF0cml4U2V0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdtc09wdGlvbnMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBJV21zT3B0aW9ucyB7XHJcbiAgICBjb25zdCByYXN0ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRSYXN0ZXJMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChyYXN0ZXJPcHRpb25zLnR5cGUgPT09IFdtc0xheWVydHlwZSkge1xyXG5cclxuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG4gICAgICBsZXQgZGVmYXVsdFN0eWxlO1xyXG4gICAgICBpZiAob2ZmZXJpbmcuc3R5bGVzKSB7XHJcbiAgICAgICAgZGVmYXVsdFN0eWxlID0gb2ZmZXJpbmcuc3R5bGVzLmZpbmQocyA9PiBzLmRlZmF1bHQpLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtczogSVdtc1BhcmFtcyA9IHtcclxuICAgICAgICBMQVlFUlM6IHVybFBhcmFtc1snTEFZRVJTJ10sXHJcbiAgICAgICAgRk9STUFUOiB1cmxQYXJhbXNbJ0ZPUk1BVCddLFxyXG4gICAgICAgIFRJTUU6IHVybFBhcmFtc1snVElNRSddLFxyXG4gICAgICAgIFZFUlNJT046IHVybFBhcmFtc1snVkVSU0lPTiddLFxyXG4gICAgICAgIFRJTEVEOiB1cmxQYXJhbXNbJ1RJTEVEJ10sXHJcbiAgICAgICAgVFJBTlNQQVJFTlQ6IHRydWUsXHJcbiAgICAgICAgU1RZTEVTOiBkZWZhdWx0U3R5bGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdtc09wdGlvbnM6IElXbXNPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLnJhc3Rlck9wdGlvbnMsXHJcbiAgICAgICAgdHlwZTogJ3dtcycsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtc09wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGByZXNvdXJjZSAke3Jlc291cmNlLmlkfSBjYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBXTVMtTGF5ZXJgLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhc3RlckxheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElSYXN0ZXJMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChpc1Jhc3RlckxheWVydHlwZShsYXllck9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgY29uc3QgcmFzdGVyTGF5ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmxheWVyT3B0aW9ucyxcclxuICAgICAgICB0eXBlOiBsYXllck9wdGlvbnMudHlwZSBhcyBUUmFzdGVyTGF5ZXJ0eXBlLFxyXG4gICAgICAgIHVybDogdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZiksXHJcbiAgICAgICAgc3ViZG9tYWluczogc2hhcmRzRXhwYW5kKHRoaXMuZ2V0UmVzb3VyY2VTaGFyZHMocmVzb3VyY2UpKVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmFzdGVyTGF5ZXJPcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGxheWVyICR7bGF5ZXJPcHRpb25zLmlkfSBpcyBub3QgYSByYXN0ZXJsYXllcmAsIGxheWVyT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICBpZDogcmVzb3VyY2UuaWQgYXMgc3RyaW5nLFxyXG4gICAgICB0eXBlOiB0aGlzLmdldExheWVydHlwZUZyb21PZmZlcmluZ0NvZGUob2ZmZXJpbmcpLFxyXG4gICAgICBuYW1lOiB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpLFxyXG4gICAgICByZW1vdmFibGU6IHRydWUsXHJcbiAgICAgIGNvbnRpbnVvdXNXb3JsZDogZmFsc2UsXHJcbiAgICAgIG9wYWNpdHk6IHRoaXMuZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIGF0dHJpYnV0aW9uOiB0aGlzLmdldFJlc291cmNlQXR0cmlidXRpb24ocmVzb3VyY2UpLFxyXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmdldFJlc291cmNlRGltZW5zaW9ucyhyZXNvdXJjZSksXHJcbiAgICAgIGxlZ2VuZEltZzogdGhpcy5nZXRMZWdlbmRVcmwob2ZmZXJpbmcpLFxyXG4gICAgICBzdHlsZXM6IG9mZmVyaW5nLnN0eWxlc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmVzb3VyY2UuYmJveCkge1xyXG4gICAgICBsYXllck9wdGlvbnMuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyT3B0aW9ucy5iYm94ID0gY29udGV4dC5iYm94O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllck9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKiogTWlzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgcHJpdmF0ZSBnZXRVcmxGcm9tVXJpKHVyaTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCB1cmkuaW5kZXhPZignPycpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhlbHBlciB0byBwYWNrIHF1ZXJ5LXBhcmFtZXRlcnMgb2YgYSB1cmkgaW50byBhIEpTT05cclxuICAgKiBAcGFyYW0gdXJpIGFueSB1cmkgd2l0aCBxdWVyeS1wYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRKc29uRnJvbVVyaSh1cmk6IHN0cmluZyk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHVyaS5zdWJzdHIodXJpLmxhc3RJbmRleE9mKCc/JykgKyAxKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBwYXJ0LnNwbGl0KCc9Jyk7XHJcbiAgICAgIHJlc3VsdFtpdGVtWzBdLnRvVXBwZXJDYXNlKCldID0gZGVjb2RlVVJJQ29tcG9uZW50KGl0ZW1bMV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGRpc3BsYXkgbmFtZSBvZiBsYXllciwgYmFzZWQgb24gSU93c1Jlc291cmNlIGFuZCBJT3dzT2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gb2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gcmVzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpc3BsYXlOYW1lKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIGxldCBkaXNwbGF5TmFtZSA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCd0aXRsZScpKSB7XHJcbiAgICAgIGlmIChvZmZlcmluZy50aXRsZSkge1xyXG4gICAgICAgIGRpc3BsYXlOYW1lID0gb2ZmZXJpbmcudGl0bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqLS0tLS0tLS0tLS0tIERBVEEgVE8gRklMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cclxuICAvKipcclxuICAgKiBAVE9ETzpcclxuICAgKiAgIC0gcHJvcGVydGllc1xyXG4gICAqL1xyXG4gIGdlbmVyYXRlT3dzQ29udGV4dEZyb20oaWQ6IHN0cmluZywgbGF5ZXJzOiBMYXllcltdLCBleHRlbnQ/OiBUR2VvRXh0ZW50LCBwcm9wZXJ0aWVzPyk6IElFb2NPd3NDb250ZXh0IHtcclxuXHJcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICBsYW5nOiAnJyxcclxuICAgICAgICBsaW5rczogW10sXHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZWQ6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG93YzogSUVvY093c0NvbnRleHQgPSB7XHJcbiAgICAgICdpZCc6IGlkLFxyXG4gICAgICAndHlwZSc6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgICAgICdwcm9wZXJ0aWVzJzogcHJvcGVydGllcyxcclxuICAgICAgJ2ZlYXR1cmVzJzogW11cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGV4dGVudCkge1xyXG4gICAgICBvd2NbJ2Jib3gnXSA9IGV4dGVudDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgbGV0IHJlc291cmNlOiBJRW9jT3dzUmVzb3VyY2UgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIGZvciBsYXllciB0eXBlc1xyXG4gICAgICBvd2MuZmVhdHVyZXMucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG93YztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogSUVvY093c1Jlc291cmNlIHtcclxuICAgIGxldCByZXNvdXJjZTogSUVvY093c1Jlc291cmNlID0ge1xyXG4gICAgICAnaWQnOiBsYXllci5pZCxcclxuICAgICAgJ3Byb3BlcnRpZXMnOiB7XHJcbiAgICAgICAgdGl0bGU6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgdXBkYXRlZDogbnVsbCxcclxuICAgICAgICBvZmZlcmluZ3M6IFt0aGlzLmdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXIpXSxcclxuICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxyXG4gICAgICAgIGF0dHJpYnV0aW9uOiBsYXllci5hdHRyaWJ1dGlvbixcclxuICAgICAgfSxcclxuICAgICAgJ3R5cGUnOiAnRmVhdHVyZScsXHJcbiAgICAgICdnZW9tZXRyeSc6IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXI6IExheWVyLCBsZWdlbmRVcmw/OiBzdHJpbmcsIGljb25Vcmw/OiBzdHJpbmcpOiBJRW9jT3dzT2ZmZXJpbmcge1xyXG4gICAgbGV0IG9mZmVyaW5nOiBJRW9jT3dzT2ZmZXJpbmcgPSB7XHJcbiAgICAgICdjb2RlJzogdGhpcy5nZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXIpLFxyXG4gICAgICAndGl0bGUnOiBsYXllci5uYW1lXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChsYXllci50eXBlID09IEdlb2pzb25MYXllcnR5cGUpIHtcclxuICAgICAgb2ZmZXJpbmcuY29udGVudHMgPSB0aGlzLmdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyIGFzIFZlY3RvckxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9mZmVyaW5nLm9wZXJhdGlvbnMgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZWdlbmRVcmwpIG9mZmVyaW5nLmxlZ2VuZFVybCA9IGxlZ2VuZFVybDtcclxuICAgIGlmIChpY29uVXJsKSBvZmZlcmluZy5pY29uVXJsID0gaWNvblVybDtcclxuXHJcbiAgICByZXR1cm4gb2ZmZXJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcyc7XHJcbiAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtdHMnO1xyXG4gICAgICBjYXNlIEdlb2pzb25MYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW9qc29uJztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBsYXllciAoJHtsYXllci50eXBlfSkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC5gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyOiBWZWN0b3JMYXllcik6IElPd3NDb250ZW50W10ge1xyXG4gICAgbGV0IGNvbnRlbnRzID0gW107XHJcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9qc29uTGF5ZXJ0eXBlOlxyXG4gICAgICAgIGxldCBjb250ZW50ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGxheWVyLmRhdGEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29udGVudHMgZm9yIHRoaXMgdHlwZSBvZiB2ZWN0b3JsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudHM7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBSYXN0ZXJMYXllcikge1xyXG4gICAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtdHNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBjYXNlIFh5ekxheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFh5ek9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IG9wZXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XHJcbiAgICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICAgIC8vIGNhc2UgJ3dmcyc6IDwtLS0gdGhpcyB0eXBlIG9mIGxheWVyIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQgaW4gZGF0YXR5cGVzLWxheWVycy9MYXllcnMudHMgXHJcbiAgICAgICAgLy8gICByZXR1cm4gdGhpcy5nZXRXZnNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIHNlcnZpY2UgKCR7bGF5ZXIudHlwZX0pIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0WHl6T3BlcmF0aW9uc0Zyb21MYXllcihsYXllcjogUmFzdGVyTGF5ZXIpOiBJT3dzT3BlcmF0aW9uW10ge1xyXG4gICAgbGV0IHJlc3RDYWxsOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdSRVNUJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICd0ZXh0L2h0bWwnLFxyXG4gICAgICAnaHJlZic6IGAke2xheWVyLnVybH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgcmVzdENhbGxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRUbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICAvLyBAVE9ETzogd2hhdCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIFRNUz8gaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFdmc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFZlY3RvckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IGxheWVyTmFtZSA9IGxheWVyLm5hbWU7XHJcbiAgICBsZXQgdmVyc2lvbiA9IGxheWVyLm9wdGlvbnMudmVyc2lvbiA/IGxheWVyLm9wdGlvbnMudmVyc2lvbiA6ICcxLjEuMCc7XHJcblxyXG5cclxuICAgIGxldCBHZXRGZWF0dXJlOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdHZXRGZWF0dXJlJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V0ZTJnZlcnNpb249JHt2ZXJzaW9ufSZyZXF1ZXN0PUdldEZlYXR1cmVgXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGxldCBEZXNjcmliZUZlYXR1cmVUeXBlOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBHZXRDYXBhYmlsaXRpZXM6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldFByb3BlcnR5VmFsdWU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldEZlYXR1cmVXaXRoTG9jazogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgTG9ja0ZlYXR1cmU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IFRyYW5zYWN0aW9uOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBDcmVhdGVTdG9yZWRRdWVyeTogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRHJvcFN0b3JlZFF1ZXJ5OiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBMaXN0U3RvcmVkUXVlcmllczogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRGVzY3JpYmVTdG9yZWRRdWVyaWVzOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICBsZXQgb3BlcmF0aW9ucyA9IFtcclxuICAgICAgR2V0RmVhdHVyZSxcclxuICAgICAgLy8gR2V0Q2FwYWJpbGl0aWVzLFxyXG4gICAgICAvLyBEZXNjcmliZUZlYXR1cmVUeXBlLFxyXG4gICAgICAvLyBHZXRQcm9wZXJ0eVZhbHVlLFxyXG4gICAgICAvLyBHZXRGZWF0dXJlV2l0aExvY2ssXHJcbiAgICAgIC8vIExvY2tGZWF0dXJlLFxyXG4gICAgICAvLyBUcmFuc2FjdGlvbixcclxuICAgICAgLy8gQ3JlYXRlU3RvcmVkUXVlcnksXHJcbiAgICAgIC8vIERyb3BTdG9yZWRRdWVyeSxcclxuICAgICAgLy8gTGlzdFN0b3JlZFF1ZXJpZXMsXHJcbiAgICAgIC8vIERlc2NyaWJlU3RvcmVkUXVlcmllc1xyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXRXbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcblxyXG4gICAgbGV0IHVybCA9IGxheWVyLnVybDtcclxuICAgIGxldCB3bXNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLlZFUlNJT047XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldE1hcDogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0TWFwJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6IGZvcm1hdCxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V01TJnZlcnNpb249JHt3bXNWZXJzaW9ufSZyZXF1ZXN0PUdldE1hcCZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH0mVElMRUQ9dHJ1ZWBcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/c2VydmljZT1XTVMmdmVyc2lvbj0ke3dtc1ZlcnNpb259JnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzYFxyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZXRGZWF0dXJlSW5mbzogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0RmVhdHVyZUluZm8nLFxyXG4gICAgICAnbWV0aG9kJzogJ0dFVCcsXHJcbiAgICAgICd0eXBlJzogJ3RleHQvaHRtbCcsXHJcbiAgICAgICdocmVmJzogYCR7dXJsfT9zZXJ2aWNlPVdNUyZ2ZXJzaW9uPSR7d21zVmVyc2lvbn0mcmVxdWVzdD1HZXRGZWF0dXJlSW5mbyZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgZ2V0TWFwLFxyXG4gICAgICBnZXRDYXBhYmlsaXRpZXMsXHJcbiAgICAgIGdldEZlYXR1cmVJbmZvXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBvcGVyYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0V210c09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFJhc3RlckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IHdtdHNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLnZlcnNpb247XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldFRpbGU6IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldFRpbGUnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0VGlsZSZGT1JNQVQ9JHtmb3JtYXR9JkxBWUVSPSR7bGF5ZXJJZH0mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiBmb3JtYXRcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7d210c1ZlcnNpb259YCxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnXHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90ZTogd2UgZGVsaWJlcmF0ZWx5IHVzZSB0aGUgV01TIHByb3RvY29sIGhlcmUgaW5zdGVhZCBvZiBXTVRTLlxyXG4gICAgLy8gUmVhc29uOiBXTVRTIGRlbGl2ZXJzIFJHQi12YWx1ZXMsIHdoZXJhcyBXTVMgZGVsaXZlcnMgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSBhIHRpbGUuXHJcbiAgICBsZXQgZ2V0RmVhdHVyZUluZm86IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldEZlYXR1cmVJbmZvJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01TJlJFUVVFU1Q9R2V0RmVhdHVyZUluZm8mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiAndGV4dC9odG1sJ1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcGVyYXRpb25zOiBJT3dzT3BlcmF0aW9uW10gPSBbXHJcbiAgICAgIGdldFRpbGUsXHJcbiAgICAgIGdldENhcGFiaWxpdGllcyxcclxuICAgICAgZ2V0RmVhdHVyZUluZm9cclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/owc/types/eoc-owc-json.js b/@ukis/services-ogc/esm2015/lib/owc/types/eoc-owc-json.js deleted file mode 100644 index 734e24c8b..000000000 --- a/@ukis/services-ogc/esm2015/lib/owc/types/eoc-owc-json.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -export function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -export function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -export function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -export function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -export function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -export function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -export function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -export function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9jLW93Yy1qc29uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL293Yy90eXBlcy9lb2Mtb3djLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFPQSxvQ0FHQzs7O0lBRkcsa0NBQTRCOztJQUM1QixxQ0FBa0M7Ozs7O0FBR3RDLHFDQUVDOzs7SUFERyxxQ0FBc0M7Ozs7O0FBRzFDLCtDQUtDOzs7SUFKRyw0Q0FBaUI7O0lBQ2pCLGdEQUFxQjs7SUFDckIsMkNBQWdCOztJQUNoQiwrQ0FBdUM7Ozs7O0FBRzNDLCtDQUlDOzs7SUFIQyx5Q0FBZ0M7O0lBQ2hDLDhDQUFxQzs7Ozs7O0FBSXZDLDhDQUtDOzs7Ozs7SUFIQywyQ0FBaUI7O0lBQ2pCLHlDQUFjOztJQUNkLHlDQUFlOzs7OztBQUdqQixxQ0FPQzs7O0lBTkcsK0JBRWdEOztJQUNoRCxvQ0FBbUI7O0lBQ25CLGtDQUFpQjs7SUFDakIsZ0NBQWU7Ozs7O0FBR25CLHFDQUVDOzs7SUFERywrQkFBbUI7Ozs7O0FBR3ZCLHlDQUdDOzs7SUFGRyxtQ0FBb0I7O0lBQ3BCLHlDQUFvQzs7Ozs7QUFHeEMsMENBY0M7Ozs7OztJQVpHLG1DQUFZOztJQUNaLHlDQUFrQjs7SUFDbEIseUNBQW9COztJQUNwQixzQ0FHRTs7SUFDRiwyQ0FBc0I7O0lBQ3RCLHdDQUdFOzs7OztBQUdOLHVDQUtDOzs7SUFKRyxpQ0FBbUI7O0lBQ25CLGlDQUFhOztJQUNiLG9DQUFrQjs7SUFDbEIsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU93c0NvbnRleHQsIElPd3NSZXNvdXJjZSwgSU93c09mZmVyaW5nLCBXTVNfT2ZmZXJpbmcsIFdGU19PZmZlcmluZywgV0NTX09mZmVyaW5nLCBXUFNfT2ZmZXJpbmcsXHJcbiAgICBDU1dfT2ZmZXJpbmcsIFdNVFNfT2ZmZXJpbmcsIEdNTF9PZmZlcmluZywgS01MX09mZmVyaW5nLCBHZW9USUZGX09mZmVyaW5nLCBHTUxKUDJfT2ZmZXJpbmcsXHJcbiAgICBHTUxDT1ZfT2ZmZXJpbmcsIElPd3NSZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tICcuL293Yy1qc29uJztcclxuXHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2VvSlNPTiBmcm9tICdnZW9qc29uJztcclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzQ29udGV4dCBleHRlbmRzIElPd3NDb250ZXh0IHtcclxuICAgIGZlYXR1cmVzOiBJRW9jT3dzUmVzb3VyY2VbXTtcclxuICAgIHByb2plY3Rpb25zPzogSUVvY093c1Byb2plY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2UgZXh0ZW5kcyBJT3dzUmVzb3VyY2Uge1xyXG4gICAgcHJvcGVydGllczogSUVvY093c1Jlc291cmNlUHJvcGVydGllcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIGV4dGVuZHMgSU93c1Jlc291cmNlUHJvcGVydGllcyB7XHJcbiAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmc7XHJcbiAgICBzaGFyZHM/OiBzdHJpbmc7XHJcbiAgICBkaW1lbnNpb25zPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VEaW1lbnNpb25zIHtcclxuICB0aW1lPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9uO1xyXG4gIGVsZXZhdGlvbj86IElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbjtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiB7XHJcbiAgLyoqIERlZmF1bHQgc3RlcCBkaXNwbGF5IG9mIHRpbWUgc2xpZGVyICovXHJcbiAgZGlzcGxheT86IHN0cmluZztcclxuICB1bml0czogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NPZmZlcmluZyBleHRlbmRzIElPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmcgfCBXRlNfT2ZmZXJpbmcgfCBXQ1NfT2ZmZXJpbmcgfCBXUFNfT2ZmZXJpbmcgfCBDU1dfT2ZmZXJpbmcgfFxyXG4gICAgICAgIFdNVFNfT2ZmZXJpbmcgfCBHTUxfT2ZmZXJpbmcgfCBLTUxfT2ZmZXJpbmcgfCBHZW9USUZGX09mZmVyaW5nIHwgR01MSlAyX09mZmVyaW5nIHxcclxuICAgICAgICBHTUxDT1ZfT2ZmZXJpbmcgfCBHZW9Kc29uX09mZmVyaW5nIHwgc3RyaW5nO1xyXG4gICAgbGVnZW5kVXJsPzogc3RyaW5nO1xyXG4gICAgaWNvblVybD86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NXbXNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVRTX09mZmVyaW5nO1xyXG4gICAgbWF0cml4U2V0cz86IElFb2NPd3NXbXRzTWF0cml4U2V0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNNYXRyaXhTZXQge1xyXG4gICAgLyoqIEVQU0ctQ29kZSAqL1xyXG4gICAgc3JzOiBzdHJpbmc7XHJcbiAgICBtYXRyaXhTZXQ6IHN0cmluZztcclxuICAgIG1hdHJpeElkczogc3RyaW5nW107XHJcbiAgICBvcmlnaW46IHtcclxuICAgICAgICB4OiBudW1iZXIsXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICB9O1xyXG4gICAgcmVzb2x1dGlvbnM6IG51bWJlcltdO1xyXG4gICAgdGlsZXNpemU6IHtcclxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgICAgICB3aWR0aDogbnVtYmVyXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NQcm9qZWN0aW9uIHtcclxuICAgIGJib3g6IEdlb0pTT04uQkJveDtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gICAgdW5pdD86IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vKipcclxuKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVleHRlbnNpb24tb2ZmZXJpbmdzXHJcbiovXHJcbmV4cG9ydCB0eXBlIEdlb0pzb25fT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbmV4cG9ydCB0eXBlIFh5el9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/owc/types/owc-json.js b/@ukis/services-ogc/esm2015/lib/owc/types/owc-json.js deleted file mode 100644 index c6b4a00e0..000000000 --- a/@ukis/services-ogc/esm2015/lib/owc/types/owc-json.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -export function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -export function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -export function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -export function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -export function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -export function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -export function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvb3djL3R5cGVzL293Yy1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBLGlDQTJDQzs7Ozs7OztJQXRDQyx5QkFBb0I7O0lBQ3BCLGlDQWdDRTs7Ozs7SUFFRiwrQkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNCLGtDQVFDOzs7Ozs7O0lBSEMsMEJBQW9COztJQUNwQixrQ0FBbUM7Ozs7OztBQUlyQyw0Q0FnQ0M7Ozs7OztJQTlCQyx1Q0FBYzs7Ozs7SUFFZCx5Q0FBb0I7Ozs7O0lBRXBCLDBDQUFrQjs7Ozs7SUFFbEIseUNBQXVCOzs7OztJQUV2QiwyQ0FBbUI7Ozs7O0lBRW5CLHdDQUFnQjs7Ozs7SUFFaEIsc0NBQWtCOzs7OztJQUVsQiwyQ0FBMkI7Ozs7O0lBRTNCLHdDQUFpQjs7Ozs7SUFFakIsNENBQTZCOzs7OztJQUU3QixxREFBNkI7Ozs7O0lBRTdCLHFEQUE2Qjs7Ozs7O0lBSTdCLHdDQUFnQjs7Ozs7SUFFaEIsdUNBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QnRCLGtDQVVDOzs7Ozs7SUFSQyw0QkFDNEY7Ozs7O0lBRTVGLGtDQUE2Qjs7Ozs7SUFFN0IsZ0NBQXlCOztJQUN6Qiw4QkFBd0I7Ozs7OztBQUsxQixpQ0FJQzs7O0lBSEMsNEJBQWU7O0lBQ2YsMEJBQWE7O0lBQ2IsOEJBQWlCOzs7OztBQUduQixnQ0FNQzs7Ozs7O0lBSkMsMEJBQWM7O0lBQ2QsMkJBQWU7O0lBQ2YseUJBQWE7Ozs7OztBQUlmLG1DQUtDOzs7SUFKQywrQkFBZ0I7Ozs7O0lBRWhCLDZCQUFjOztJQUNkLDhCQUFlOzs7OztBQUdqQiwrQkFTQzs7O0lBUkMsd0JBQVk7O0lBQ1oseUJBQWM7O0lBQ2QseUJBQWM7O0lBQ2QsMEJBQWU7Ozs7O0lBRWYsK0JBQW9COztJQUNwQix5QkFBa0I7Ozs7OztBQUlwQiw0Q0FJQzs7O0lBSEMsdUNBQWU7O0lBQ2YscUNBQWE7O0lBQ2IseUNBQWlCOzs7OztBQUduQix3Q0FTQzs7Ozs7O0lBUEMsd0NBQW9COzs7OztJQUVwQix5Q0FBcUI7Ozs7OztJQUdyQix3Q0FBb0I7Ozs7Ozs7QUFPdEIsbUNBZUM7Ozs7Ozs7SUFWQyw2QkFBYTs7Ozs7SUFFYiwrQkFBZTs7SUFDZiw2QkFBYzs7Ozs7SUFFZCw2QkFBYzs7SUFDZCxnQ0FBc0I7O0lBQ3RCLCtCQUFxQjs7Ozs7O0FBTXZCLGlDQVFDOzs7Ozs7SUFOQywyQkFBYTs7SUFDYiwyQkFBYzs7SUFDZCw0QkFBZTs7Ozs7SUFFZiw4QkFBaUI7Ozs7OztBQUluQixrQ0FRQzs7O0lBUEMsNEJBQWE7O0lBQ2IsNkJBQWM7O0lBQ2QsZ0NBQWtCOztJQUNsQiwrQkFBa0I7O0lBQ2xCLGlDQUFtQjs7SUFDbkIsK0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIE9HQyBPV1MgQ29udGV4dCBHZW8gRW5jb2RpbmcgU3RhbmRhcmQgVmVyc2lvbjogMS4wXHJcbiAqIGh0dHA6Ly9kb2NzLm9wZW5nZW9zcGF0aWFsLm9yZy9pcy8xNC0wNTVyMi8xNC0wNTVyMi5odG1sXHJcbiAqIERlZmluaXRpb25zIGJ5OiBNYXRoaWFzIEJvZWNrXHJcbiAqIFR5cGVTY3JpcHQgVmVyc2lvbjogMi41LjNcclxuICpcclxuICogZGVwZW5kcyBvbiBAdHlwZXMvZ2VvanNvbkBeNzk0Ni4wLjJcclxuICovXHJcbmltcG9ydCAqIGFzIEdlb0pTT04gZnJvbSAnZ2VvanNvbic7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBPV1MgQ29udGV4dCBkZXNjcmliZXMgTWV0YWRhdGEsIEFQSSwgVGltZSBSYW5nZVxyXG4gKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWV0aGUtb3dzLWNvbnRleHQtZG9jdW1lbnQtc3RydWN0dXJlXHJcbiAqIElmIG5vIGJvdW5kaW5nIGJveCBpcyBzcGVjaWZpZWQsIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdmlldyB3aGVuIHRoZSBjb250ZXh0IGRvY3VtZW50IGlzIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRleHQgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmVDb2xsZWN0aW9uPEdlb0pTT04uR2VvbWV0cnlPYmplY3QgfCBudWxsLCBHZW9KU09OLkdlb0pzb25Qcm9wZXJ0aWVzPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGlkIGVsZW1lbnQgZGVmaW5lcyBhIG1hbmRhdG9yeSByZWZlcmVuY2UgdG8gdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50LlxyXG4gICAqIFRoZSBjb250ZW50IGZvciB0aGUgaWQgZWxlbWVudCBTSEFMTCBiZSBhbiBJUkksIGFzIGRlZmluZWQgYnkgSUVURiBbUkZDMzk4N11cclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IHtcclxuICAgIGxpbmtzOiB7IHByb2ZpbGVzOiBzdHJpbmdbXSB9IHwgSU93c0xpbmtzW107XHJcbiAgICAvKiogTGFuZ3VhZ2Ugb2YgQ29udGV4dCBkb2N1bWVudCBjb250ZW50ICovXHJcbiAgICBsYW5nOiBMYW5nU3RyaW5nO1xyXG4gICAgLyoqIFRpdGxlIGZvciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIC8qKiBEYXRlIG9mIGEgY3JlYXRpb24gb3IgdXBkYXRlIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICB1cGRhdGVkOiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50IHB1cnBvc2Ugb3IgY29udGVudCAqL1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBpbmRpY2F0ZXMgdGhlIGF1dGhvcnMgYXJyYXkgb2YgdGhlIENvbnRleHQgZG9jdW1lbnQgKi9cclxuICAgIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgICAvKiogSWRlbnRpZmllciBmb3IgdGhlIHB1Ymxpc2hlciBvZiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcHVibGlzaGVyPzogc3RyaW5nO1xyXG4gICAgLyoqIFRvb2wvYXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIENvbnRleHQgZG9jdW1lbnQgYW5kIGl0cyBwcm9wZXJ0aWVzICovXHJcbiAgICBjcmVhdG9yPzogSU93c0NyZWF0b3I7XHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnRpZXMgb2YgdGhlIGRpc3BsYXkgaW4gdXNlIHdoZW4gdGhlIGNvbnRleHQgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgKGZvciBkaXNwbGF5IGJhc2VkIGFwcGxpY2F0aW9ucyBvbmx5KS5cclxuICAgICAqIFRoaXMgY2xhc3MgaXMgb3B0aW9uYWwgYW5kIGludGVuZGVkIGZvciBjcmVhdG9yIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB3aXRoIGEgZ2VvZ3JhcGhpY2FsIGRpc3BsYXkgd2l0aGluIGEgZml4ZWQgcGl4ZWwgc2l6ZSBhbmQgbm90IHNjYWxhYmxlIHRvIGRpZmZlcmVudCBjb21wdXRhdGlvbmFsIGRldmljZXMgXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXk/OiBJT3dzQ3JlYXRvckRpc3BsYXlbXTtcclxuICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcmlnaHRzPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIHJlc291cmNlIFxyXG4gICAgKiB0aW1lIHJhbmdlIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLlxyXG4gICAgKi9cclxuICAgIGRhdGU/OiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIFRoaXMgYXJyYXkgaXMgYW4gb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBjYXRlZ29yaWVzIHJlbGF0ZWQgdG8gdGhpcyBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gICAgLyoqIEV4dGVuc2lvbiBBbnkgb3RoZXIgZWxlbWVudCAqL1xyXG4gICAgW2s6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIC8qKiBPcmRlcmVkIExpc3Qgb2YgUmVzb3VyY2VzIGF2YWlsYWJsZSBvbiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIGZlYXR1cmVzOiBJT3dzUmVzb3VyY2VbXTtcclxuICAvKiogRXh0ZW5zaW9uIEFueSBvdGhlciBlbGVtZW50ICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVhY2ggbGF5ZXIgKGEuay5hLiBmZWF0dXJlKSBpbiBhIGNvbnRleHQgZG9jdW1lbnQgaXMga25vd24gYXMgYSDigJhSZXNvdXJjZeKAmVxyXG4gKiBBIFJlc291cmNlIHJlZmVyZW5jZSBhIHNldCBvZiBnZW9zcGF0aWFsIGluZm9ybWF0aW9uIHRvIGJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGVsZW1lbnQuXHJcbiAqIFRoZSByZXNvdXJjZXMgYXJlIG9yZGVyZWQgc3VjaCB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBkb2N1bWVudCBpcyB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGZyb250LlxyXG4gKiBUaGlzIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGxheWVycyBhcmUgZHJhd24uXHJcbiAqIEEgcmVzb3VyY2UgKHdoaWNoIGluIEdJUyB0ZXJtcyBpcyBhIGxheWVyKSBjYW4gaGF2ZSBhIG51bWJlciBvZiBvZmZlcmluZ3MsIGFuZCBlYWNoIG9mZmVyaW5nXHJcbiAqIGlzIGZvY3Vzc2VkIG9uIGEgcGFydGljdWxhciByZXByZXNlbnRhdGlvbiBvZiBpbmZvcm1hdGlvbi5cclxuICogVGhlc2UgY2FuIGJlIG9uZSBvZiBhIG51bWJlciBvZiBPR0MgV2ViIFNlcnZpY2VzLCBzcGVjaWZpY2FsbHkgV01TLCBXTVRTLCBXRlMsIFdDUywgV1BTIGFuZCBDU1csXHJcbiAqIG9yIG9uZSBvZiBhIG51bWJlciBvZiBpbmxpbmUgb3IgcmVmZXJlbmNlZCBmb3JtYXRzLCBzcGVjaWZpY2FsbHkgR01MLCBLTUwsIEdlb1RJRkYsIEdNTEpQMiwgR01MQ09WLFxyXG4gKiBvciBhIGN1c3RvbSBvZmZlcmluZyB0eXBlIGRlZmluZWQgaW4gYSBwcm9maWxlIG9yIGJ5IGFuIG9yZ2FuaXNhdGlvbi5cclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVldGhlLW93cy1jb250ZXh0LWRvY3VtZW50LXN0cnVjdHVyZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2UgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIFVuYW1iaWd1b3VzIHJlZmVyZW5jZSB0byB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIENvbnRleHQgcmVzb3VyY2UgKElSSSlcclxuICAgKiBTdHJpbmcgdHlwZSB0aGF0IFNIQUxMIGNvbnRhaW4gYSBVUkkgdmFsdWVcclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IElPd3NSZXNvdXJjZVByb3BlcnRpZXM7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIHtcclxuICAvKiogVGl0bGUgZ2l2ZW4gdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEYXRlIG9mIHRoZSBsYXN0IHVwZGF0ZSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIHVwZGF0ZWQ6IERhdGVTdHJpbmc7XHJcbiAgLyoqIFRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBnZW5lcmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50IGluIGEgZm9ybWF0IHVuZGVyc3RhbmRhYmxlIGJ5IGdlbmVyaWMgcmVhZGVycyAqL1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIC8qKiBUaGlzIGVsZW1lbnQgaXMgb3B0aW9uYWwgYW5kIGluZGljYXRlcyB0aGUgYXV0aG9ycyBhcnJheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgLyoqIEVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBDb250ZXh0IHJlc291cmNlIGF2YWlsYWJsZSAqL1xyXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcclxuICAvKiogSW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICByaWdodHM/OiBzdHJpbmc7XHJcbiAgLyoqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBkYXRlPzogRGF0ZVN0cmluZztcclxuICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBjYW4gY29udGFpbiBhIG51bWJlciBvZiBvZmZlcmluZ3MgZGVmaW5lZCBieSB0aGUgY2xhc3MgT1dDOk9mZmVyaW5nICovXHJcbiAgb2ZmZXJpbmdzPzogSU93c09mZmVyaW5nW107XHJcbiAgLyoqIEZsYWcgdmFsdWUgaW5kaWNhdGluZyB0byB0aGUgY2xpZW50IGlmIHRoZSBDb250ZXh0IHJlc291cmNlIHNob3VsZCBiZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdCAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqIFRoaXMgYXJyYXkgaXMgb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBhIGNhdGVnb3J5IHJlbGF0ZWQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gIC8qKiBNaW5pbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtaW5zY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBNYXhpbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtYXhzY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBEZWZpbml0aW9uIG9mIHRoZSBmb2xkZXIgaW4gd2hpY2ggdGhlIHJlc291cmNlIGlzIHBsYWNlZCBcclxuICAqIFRoZSBmb2xkZXIgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgdGhlIGNvbmNlcHQgcHJlc2VudCBpbiBtYW55IGNsaWVudHMgb3Igb3JnYW5pc2luZyBsYXllcnMgaW50byBmb2xkZXJzLlxyXG4gICovXHJcbiAgZm9sZGVyPzogc3RyaW5nO1xyXG4gIC8qKiBUT0RPISEhIGxpbmtzIGlzIGRlZmluZWQgYXMgT2JqZWN0IGJ1dCBpbiB0aGUgZXhhbXBsZXMgYXMgQXJyYXkgICovXHJcbiAgbGlua3M/OiBJT3dzTGlua3NbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEluIHJlYWxpdHkgYSByZXNvdXJjZSBjYW4gYmUgcmVhbGlzZWQgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGFuZCBzbyBhbiBPV0MgZG9jdW1lbnQgYWxsb3dzIHZhcmlvdXMgb3B0aW9ucyB0byBiZSBzcGVjaWZpZWQuXHJcbiAqIFRoZXNlIGFyZSBrbm93biBhcyBvZmZlcmluZ3MuXHJcbiAqIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGVzZSBhcmUsIGFzIGZhciBhcyBpcyBwb3NzaWJsZSBieSB0aGUgZm9ybWF0IHVzZWQsXHJcbiAqIGVxdWl2YWxlbnQgYW5kIG5vIHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIHRoZWlyIG9yZGVyIGluIHRoZSBzdGFuZGFyZC5cclxuICogVGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgYWx0ZXJuYXRpdmVzIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRvIGFsbG93IGl0IHRvIHZpc3VhbGlzZSBvciB1c2UgdGhlIHJlc291cmNlLlxyXG4gKlxyXG4gKiBTbyBmb3IgZXhhbXBsZSBmb3VyIG9mZmVyaW5ncywgYSBXTVMsIGEgV0ZTIHdpdGggcG9ydHJheWFsIGFzIFNMRCwgYW5kIGFuIGlubGluZSBHTUwgT2ZmZXJpbmcgYWdhaW4gd2l0aCBwb3J0cmF5YWwgYXMgU0xELlxyXG4gKiBEaWZmZXJlbnQgY2xpZW50cyBjb3VsZCB1c2UgdGhlc2Ugb2ZmZXJpbmdzIGFzIGFwcHJvcHJpYXRlOlxyXG4gKiAtIGEgc2ltcGxlIGJyb3dzZXIgYmFzZWQgY2xpZW50IGNvdWxkIHVzZSB0aGUgV01TIG9mZmVyaW5nIHByb3ZpZGVkLCB1c2luZyB0aGUgc3RhbmRhcmQgcG9ydHJheWFsXHJcbiAqIC0gYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY2xpZW50LCBjb3VsZCB1c2UgdGhlIFdGUyBvZmZlcmluZyBhbmQgdGhlIGFzc29jaWF0ZWQgU0xEIERvY3VtZW50LlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9mZmVyaW5nLCBzZXJ2aWNlIG9mZmVyaW5ncyBhbmQgZGF0YSBvZmZlcmluZ3MuXHJcbiAqIEEgc2VydmljZSBvZmZlcmluZyBoYXMgYSBzZXJ2aWNlIHJlcXVlc3QgKGluIHRoZSBmb3JtIG9mIGEgY2FwYWJpbGl0aWVzIHJlcXVlc3QgYW5kIGEgZGF0YSByZXF1ZXN0KVxyXG4gKiBhbmQgb3B0aW9uYWwgY29udGVudCBhbmQgc3R5bGluZyBlbGVtZW50cy5cclxuICogQSBkYXRhIG9mZmVyaW5nIGhhcyBhIGNvbnRlbnQgZWxlbWVudCBhbmQgb3B0aW9uYWwgc3R5bGluZyBlbGVtZW50cy5cclxuICpcclxuICpcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVlbXVsdGlwbGUtb2ZmZXJpbmdzLWFuZC1wcmlvcml0eVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT2ZmZXJpbmcge1xyXG4gIC8qKiBFeHRlbnNpb24gT2ZmZXJpbmdzIHdpdGggdHlwZSAtIHN0cmluZyAqL1xyXG4gIGNvZGU6IFdNU19PZmZlcmluZyB8IFdGU19PZmZlcmluZyB8IFdDU19PZmZlcmluZyB8IFdQU19PZmZlcmluZyB8IENTV19PZmZlcmluZyB8IFdNVFNfT2ZmZXJpbmcgfFxyXG4gIEdNTF9PZmZlcmluZyB8IEtNTF9PZmZlcmluZyB8IEdlb1RJRkZfT2ZmZXJpbmcgfCBHTUxKUDJfT2ZmZXJpbmcgfCBHTUxDT1ZfT2ZmZXJpbmcgfCBzdHJpbmc7XHJcbiAgLyoqIFdlYiBTZXJ2aWNlIE9mZmVyaW5ncyBwcm92aWRlIHRoZWlyIG9wZXJhdGlvbnMgKi9cclxuICBvcGVyYXRpb25zPzogSU93c09wZXJhdGlvbltdO1xyXG4gIC8qKiBDb250ZW50IE9mZmVyaW5ncyBhbGxvdyBjb250ZW50IHRvIGJlIGVtYmVkZGVkIGluIGFuIE9XUyBDb250ZXh0IGRvY3VtZW50LiAqL1xyXG4gIGNvbnRlbnRzPzogSU93c0NvbnRlbnRbXTtcclxuICBzdHlsZXM/OiBJT3dzU3R5bGVTZXRbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzQ3JlYXRvciB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0F1dGhvciB7XHJcbiAgLyoqIEVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZW1haWw/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NhdGVnb3JpZSB7XHJcbiAgc2NoZW1lPzogc3RyaW5nO1xyXG4gIC8qKiBDYXRlZ29yeSByZWxhdGVkIHRvIHRoaXMgY29udGV4dCBkb2N1bWVudC4gSXQgTUFZIGhhdmUgYSByZWxhdGVkIGNvZGUtbGlzdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgdGhlIHNjaGVtZSBhdHRyaWJ1dGUgKi9cclxuICB0ZXJtPzogc3RyaW5nO1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPd3NMaW5rcyB7XHJcbiAgcmVsOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIC8qKiBSZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBpbiBhbHRlcm5hdGl2ZSBmb3JtYXQgKi9cclxuICBhbHRlcm5hdGVzPzogc3RyaW5nO1xyXG4gIGxhbmc/OiBMYW5nU3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JBcHBsaWNhdGlvbiB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JEaXNwbGF5IHtcclxuICAvKiogV2lkdGggbWVhc3VyZWQgaW4gcGl4ZWxzIG9mIHRoZSBkaXNwbGF5IHNob3dpbmcgdGhlIEFyZWEgb2YgSW50ZXJlc3QgKi9cclxuICBwaXhlbFdpZHRoPzogbnVtYmVyO1xyXG4gIC8qKiBXaWR0aCBtZWFzdXJlZCBpbiBwaXhlbHMgb2YgdGhlIGRpc3BsYXkgc2hvd2luZyBieSB0aGUgQXJlYSBvZiBJbnRlcmVzdCAqL1xyXG4gIHBpeGVsSGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKiBUaGUgc2l6ZSBvZiBhIHBpeGVsIG9mIHRoZSBkaXNwbGF5IGluIG1pbGltZXRlcnMgXHJcbiAgICogKGNvbWJpbmVkIHdpdGggdGhlIHByZXZpb3VzIG9uZXMgYWxsb3dzIGZvciB0aGUgcmVhbCBkaXNwbGF5IHNpemUgdG8gYmUgY2FsY3VsYXRlZCkgKi9cclxuICBtbVBlclBpeGVsPzogbnVtYmVyO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb3N0IHNlcnZpY2Ugb2ZmZXJpbmdzIGhhdmUgdHdvIG9wZXJhdGlvbnMsIGEg4oCYR2V0Q2FwYWJpbGl0aWVz4oCZIG9wZXJhdGlvbiBhbmQgYSBkYXRhIG9wZXJhdGlvbiBzdWNoIGFzIOKAmEdldE1hcOKAmSBmb3IgV01TIFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT3BlcmF0aW9uIHtcclxuICAvKipcclxuICAgKiBUaGUgY29kZSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG9wZXJhdGlvbi5cclxuICAgKiBWYWxpZCB0eXBlcyBhcmUgZGVmaW5lZCB3aXRoaW4gZWFjaCBzcGVjaWZpYyBleHRlbnNpb24gd2l0aGluIHRoZSBPV1MgQ29udGV4dCBjb25jZXB0dWFsIG1vZGVsIFtPR0MgMTItMDgwXS5cclxuICAgKi9cclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgLyoqIG1ldGhvZCBkZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kLCBmb3IgZXhhbXBsZSBHRVQgb3IgUE9TVC4gKi9cclxuICBtZXRob2Q6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIC8qKiBocmVmIGlzIHRoZSBVUkkgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmVxdWVzdCAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgcmVxdWVzdD86IElPd3NDb250ZW50O1xyXG4gIHJlc3VsdD86IElPd3NDb250ZW50O1xyXG4gIC8qKiBFeHRlbnNpb24gb2YgT3BlcmF0aW9uICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRlbnQge1xyXG4gIC8qKiBNSU1FIHR5cGUgb2YgdGhlIENvbnRlbnQgKi9cclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKiogU3RyaW5nIHR5cGUsIG5vdCBlbXB0eSB0aGF0IGNhbiBjb250YWluIGFueSB0ZXh0IGVuY29kZWQgbWVkaWEgdHlwZSAqL1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzU3R5bGVTZXQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gIGxlZ2VuZFVSTD86IHN0cmluZztcclxuICBjb250ZW50PzogSU93c0NvbnRlbnQ7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcblxyXG4vKiogSVNPLTg2MDEgZm9ybWF0IGUuZy4gWVlZWS1NTS1ERFRoaDptbTpzc1ogb3IgWVlZWS1NTS1ERFRoaDptbTpzc1ovWVlZWS1NTS1ERFRoaDptbTpzc1ogKi9cclxuZXhwb3J0IHR5cGUgRGF0ZVN0cmluZyA9IHN0cmluZztcclxuXHJcblxyXG4vKiogUkZDLTMwNjYgY29kZSBlLmcuIGVuLGRlICovXHJcbmV4cG9ydCB0eXBlIExhbmdTdHJpbmcgPSBzdHJpbmc7XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgV01TX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcycgfFxyXG4gICAgJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMScgfCAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd21zLzEuMS4wJztcclxuZXhwb3J0IHR5cGUgV0ZTX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dmcyc7XHJcbmV4cG9ydCB0eXBlIFdDU19PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG5leHBvcnQgdHlwZSBXUFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd3BzJztcclxuZXhwb3J0IHR5cGUgQ1NXX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbmV4cG9ydCB0eXBlIFdNVFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd210cyc7XHJcbmV4cG9ydCB0eXBlIEdNTF9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWwnO1xyXG5leHBvcnQgdHlwZSBLTUxfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxuZXhwb3J0IHR5cGUgR2VvVElGRl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW90aWZmJztcclxuZXhwb3J0IHR5cGUgR01MSlAyX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbmV4cG9ydCB0eXBlIEdNTENPVl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWxjb3YnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/services-ogc.module.js b/@ukis/services-ogc/esm2015/lib/services-ogc.module.js deleted file mode 100644 index f55b4d618..000000000 --- a/@ukis/services-ogc/esm2015/lib/services-ogc.module.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { NgModule } from '@angular/core'; -import { OwcJsonService } from './owc/owc-json.service'; -import { WmtsClientService } from './wmts/wmtsclient.service'; -import { WpsClient } from './wps/wpsclient'; -export class ServicesOgcModule { -} -ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } -]; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMtb2djLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUTVDLE1BQU0sT0FBTyxpQkFBaUI7OztZQU43QixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFNBQVMsRUFBRSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUM7YUFDMUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPd2NKc29uU2VydmljZSB9IGZyb20gJy4vb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4vd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXcHNDbGllbnQgfSBmcm9tICcuL3dwcy93cHNjbGllbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtdLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIGV4cG9ydHM6IFtdLFxyXG4gIHByb3ZpZGVyczogW093Y0pzb25TZXJ2aWNlLCBXbXRzQ2xpZW50U2VydmljZSwgV3BzQ2xpZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VydmljZXNPZ2NNb2R1bGUgeyB9XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wmts/wmtsclient.service.js b/@ukis/services-ogc/esm2015/lib/wmts/wmtsclient.service.js deleted file mode 100644 index 45c6becf5..000000000 --- a/@ukis/services-ogc/esm2015/lib/wmts/wmtsclient.service.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map } from 'rxjs/operators'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/common/http"; -/** @type {?} */ -const XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0'; -/** @type {?} */ -const SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0; -import * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language'; -/** @type {?} */ -const SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language; -import * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1'; -/** @type {?} */ -const GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1; -import * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0'; -/** @type {?} */ -const WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0; -export class WmtsClientService { - /** - * @param {?} http - */ - constructor(http) { - this.http = http; - /** @type {?} */ - const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - getCapabilities(url, version = '1.1.0') { - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`; - /** @type {?} */ - const headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - response => { - return this.xmlunmarshaller.unmarshalString(response); - }))); - } -} -WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -WmtsClientService.ctorParameters = () => [ - { type: HttpClient } -]; -/** @nocollapse */ WmtsClientService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(i0.ɵɵinject(i1.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210c2NsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOzs7O01BQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7TUFDekQsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0MsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDBCQUEwQixDQUFDOztNQUN2RCxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUTtBQUMxQyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sbUNBQW1DLENBQUM7O01BQ3pFLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDLGlCQUFpQjtBQUNyRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O01BQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7TUFDdkQsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVE7QUFPMUMsTUFBTSxPQUFPLGlCQUFpQjs7OztJQUsxQixZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZOztjQUMxQixPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzs7Ozs7SUFFTSxlQUFlLENBQUUsR0FBVyxFQUFFLE9BQU8sR0FBRyxPQUFPOzs7Y0FFNUMsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLGlEQUFpRCxPQUFPLEVBQUU7O2NBQ3JGLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsR0FBRzs7OztRQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7O1lBMUJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7OztZQXJCUSxVQUFVOzs7Ozs7OztJQXdCZiwwQ0FBc0I7Ozs7O0lBQ3RCLDRDQUF3Qjs7Ozs7SUFFWixpQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEpzb25peCB9IGZyb20gJ0Bib3VuZGxlc3NnZW8vanNvbml4JztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgKiBhcyBYTGlua18xXzBfRmFjdG9yeSBmcm9tICd3M2Mtc2NoZW1hcy9saWIvWExpbmtfMV8wJztcclxuY29uc3QgWExpbmtfMV8wID0gWExpbmtfMV8wX0ZhY3RvcnkuWExpbmtfMV8wO1xyXG5pbXBvcnQgKiBhcyBPV1NfMV8xXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvT1dTXzFfMV8wJztcclxuY29uc3QgT1dTXzFfMV8wID0gT1dTXzFfMV8wX0ZhY3RvcnkuT1dTXzFfMV8wO1xyXG5pbXBvcnQgKiBhcyBTTUlMXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9TTUlMXzJfMCc7XHJcbmNvbnN0IFNNSUxfMl8wID0gU01JTF8yXzBfRmFjdG9yeS5TTUlMXzJfMDtcclxuaW1wb3J0ICogYXMgU01JTF8yXzBfTGFuZ3VhZ2VfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvU01JTF8yXzBfTGFuZ3VhZ2UnO1xyXG5jb25zdCBTTUlMXzJfMF9MYW5ndWFnZSA9IFNNSUxfMl8wX0xhbmd1YWdlX0ZhY3RvcnkuU01JTF8yXzBfTGFuZ3VhZ2U7XHJcbmltcG9ydCAqIGFzIEdNTF8zXzFfMV9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9HTUxfM18xXzEnO1xyXG5jb25zdCBHTUxfM18xXzEgPSBHTUxfM18xXzFfRmFjdG9yeS5HTUxfM18xXzE7XHJcbmltcG9ydCAqIGFzIFdNVFNfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dNVFNfMV8wJztcclxuY29uc3QgV01UU18xXzAgPSBXTVRTXzFfMF9GYWN0b3J5LldNVFNfMV8wO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdtdHNDbGllbnRTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHhtbG1hcnNoYWxsZXI7XHJcbiAgICBwcml2YXRlIHhtbHVubWFyc2hhbGxlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEpzb25peC5Db250ZXh0KFtTTUlMXzJfMCwgU01JTF8yXzBfTGFuZ3VhZ2UsIEdNTF8zXzFfMSwgWExpbmtfMV8wLCBPV1NfMV8xXzAsIFdNVFNfMV8wXSk7XHJcbiAgICAgICAgdGhpcy54bWx1bm1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpO1xyXG4gICAgICAgIHRoaXMueG1sbWFyc2hhbGxlciA9IGNvbnRleHQuY3JlYXRlTWFyc2hhbGxlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDYXBhYmlsaXRpZXMgKHVybDogc3RyaW5nLCB2ZXJzaW9uID0gJzEuMS4wJyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XHJcbiAgICAgICAgLy8gZXhhbXBsZTogaHR0cHM6Ly90aWxlcy5nZW9zZXJ2aWNlLmRsci5kZS9zZXJ2aWNlL3dtdHM/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0Q2FwYWJpbGl0aWVzJlZFUlNJT049MS4xLjBcclxuICAgICAgICBjb25zdCBnZXRDYXBhYmlsaXRpZXNVcmwgPSBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7dmVyc2lvbn1gO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ3RleHQveG1sJyxcclxuICAgICAgICAgICAgJ0FjY2VwdCc6ICd0ZXh0L3htbCwgYXBwbGljYXRpb24veG1sJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGdldENhcGFiaWxpdGllc1VybCwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyhyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbn0iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/cache.js b/@ukis/services-ogc/esm2015/lib/wps/cache.js deleted file mode 100644 index 3ddf364c3..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/cache.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { of } from "rxjs"; -/** - * @record - */ -export function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -export class FakeCache { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - set(input, output) { - } - /** - * @param {?} input - * @return {?} - */ - get(input) { - return of(null); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUd0QywyQkFHQzs7Ozs7OztJQUZHLG1EQUFzQzs7Ozs7SUFDdEMsMkNBQWlEOztBQUdyRCxNQUFNLE9BQU8sU0FBUzs7Ozs7O0lBQ2xCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBaUI7SUFDcEMsQ0FBQzs7Ozs7SUFFRCxHQUFHLENBQUMsS0FBYTtRQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc0RhdGEgfSBmcm9tIFwiLi93cHNfZGF0YXR5cGVzXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlIHtcclxuICAgIHNldChpbnB1dDogb2JqZWN0LCBvdXRwdXQ6IFdwc0RhdGFbXSk7XHJcbiAgICBnZXQoaW5wdXQ6IG9iamVjdCk6IE9ic2VydmFibGU8V3BzRGF0YVtdIHwgbnVsbD47XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGYWtlQ2FjaGUgaW1wbGVtZW50cyBDYWNoZSB7XHJcbiAgICBzZXQoaW5wdXQ6IG9iamVjdCwgb3V0cHV0OiBXcHNEYXRhW10pIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaW5wdXQ6IG9iamVjdCk6IE9ic2VydmFibGU8V3BzRGF0YVtdIHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/utils/polling.js b/@ukis/services-ogc/esm2015/lib/wps/utils/polling.js deleted file mode 100644 index e929eaf3a..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/utils/polling.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { timer, of, forkJoin } from 'rxjs'; -import { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators'; -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -export function pollUntil(task$, predicate, doWhile, minWaitTime = 1000) { - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - const tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - (r) => { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - const requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - r => r[0]))); - /** @type {?} */ - const polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - (response) => { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -export function delayedRetry(delayMs, maxRetries = 3) { - /** @type {?} */ - let attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - (src$) => { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - (error$) => { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - (error) => { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvdXRpbHMvcG9sbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFLdEUsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBb0IsRUFBRSxTQUFvQyxFQUFFLE9BQThCLEVBQUUsY0FBc0IsSUFBSTtJQUV0SCxJQUFJLE9BQU8sRUFBRTtRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNqQjs7VUFFSyxXQUFXLEdBQWtCLEtBQUssQ0FBQyxJQUFJLENBQ3pDLEdBQUc7Ozs7SUFBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ1gsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDZDtJQUNMLENBQUMsRUFBQyxDQUNMOztVQUVLLG9CQUFvQixHQUFrQixRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRzs7OztJQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQ2pCOztVQUVLLGNBQWMsR0FBa0Isb0JBQW9CLENBQUMsSUFBSSxDQUMzRCxRQUFROzs7O0lBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN2QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixzREFBc0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILHFFQUFxRTtZQUNyRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNMLENBQUMsRUFBQyxDQUNMO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLEVBQUUsVUFBVSxHQUFHLENBQUM7O1FBQ3BELFFBQVEsR0FBRyxDQUFDO0lBRWhCOzs7O0lBQU8sQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSTtRQUNaLHlCQUF5QjtRQUN6QixTQUFTOzs7O1FBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUU7WUFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7WUFDaEUsUUFBUTs7OztZQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtvQkFDdEMsbURBQW1EO29CQUNuRCxNQUFNLEtBQUssQ0FBQztpQkFDZjtxQkFBTSxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUU7b0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxJQUFJLENBQUMsQ0FBQztvQkFDZCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtpQkFDckU7cUJBQU07b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDO29CQUM3RSxNQUFNLEtBQUssQ0FBQyxDQUFDLDZDQUE2QztpQkFDN0Q7WUFDTCxDQUFDLEVBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxFQUFDLENBQ0wsQ0FBQztJQUNOLENBQUMsRUFBQztBQUVOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aW1lciwgb2YsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBtZXJnZU1hcCwgcmV0cnlXaGVuLCBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwb2xsVW50aWw8VD4oXHJcbiAgICB0YXNrJDogT2JzZXJ2YWJsZTxUPiwgcHJlZGljYXRlOiAocmVzdWx0czogYW55KSA9PiBib29sZWFuLCBkb1doaWxlPzogKHQ6IFQgfCBudWxsKSA9PiBhbnksIG1pbldhaXRUaW1lOiBudW1iZXIgPSAxMDAwKTogT2JzZXJ2YWJsZTxUPiB7XHJcblxyXG4gICAgaWYgKGRvV2hpbGUpIHtcclxuICAgICAgICBkb1doaWxlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcHBlZFRhc2skOiBPYnNlcnZhYmxlPFQ+ID0gdGFzayQucGlwZShcclxuICAgICAgICB0YXAoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9XaGlsZSkge1xyXG4gICAgICAgICAgICAgICAgZG9XaGlsZShyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RUYWtlc0F0TGVhc3QkOiBPYnNlcnZhYmxlPFQ+ID0gZm9ya0pvaW4odGFwcGVkVGFzayQsIHRpbWVyKG1pbldhaXRUaW1lKSkucGlwZShcclxuICAgICAgICBtYXAociA9PiByWzBdKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBwb2xsZWRSZXF1ZXN0JDogT2JzZXJ2YWJsZTxUPiA9IHJlcXVlc3RUYWtlc0F0TGVhc3QkLnBpcGUoXHJcbiAgICAgICAgbWVyZ2VNYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvYnRhaW5lZCBjb3JyZWN0IGFuc3dlciAke3Jlc3BvbnNlfWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBvYnRhaW5lZCBmYWxzZSBhbnN3ZXIgJHtyZXNwb25zZX0uIHRyeWluZyBhZ2Fpbi4uLmApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGxlZFJlcXVlc3QkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHBvbGxlZFJlcXVlc3QkO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5ZWRSZXRyeShkZWxheU1zOiBudW1iZXIsIG1heFJldHJpZXMgPSAzKSB7XHJcbiAgICBsZXQgYXR0ZW1wdHMgPSAxO1xyXG5cclxuICAgIHJldHVybiAoc3JjJDogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHNyYyQucGlwZShcclxuICAgICAgICAgICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJzIC4uLlxyXG4gICAgICAgICAgICByZXRyeVdoZW4oKGVycm9yJDogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoZGVsYXlNcyksIC8vIDwtIGluIGFueSBjYXNlLCBmaXJzdCB3YWl0IGEgbGl0dGxlIHdoaWxlIC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlTWFwKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBzZXJ2ZXIgZXJyb3IsIHJlcGVhdGluZyB3b24ndCBoZWxwLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0ZW1wdHMgPD0gbWF4UmV0cmllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2h0dHAtZXJyb3IuIFJldHJ5aW5nIC4uLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdHMgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihlcnJvcik7IC8vIDwtIGFuIG9ic2VydmFibGUgY2F1c2VzIHJlcXVlc3QgdG8gYmUgcmV0cmllZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFBlcnNpc3RlbnQgaHR0cC1lcnJvcnMgYWZ0ZXIgJHthdHRlbXB0c30gYXR0ZW1wdHMuIEdpdmluZyB1cC5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yOyAvLyBhbiBlcnJvciBjYXVzZXMgcmVxdWVzdCB0byBiZSBnaXZlbiB1cCBvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9O1xyXG5cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js b/@ukis/services-ogc/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js deleted file mode 100644 index 300be3f2a..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/wps100/wps_marshaller_1.0.0.js +++ /dev/null @@ -1,422 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export class WpsMarshaller100 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - process => { - out.push({ - id: process.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - for (const output of responseJson.value.processOutputs.output) { - /** @type {?} */ - const isReference = output.reference ? true : false; - /** @type {?} */ - let datatype; - /** @type {?} */ - let data; - /** @type {?} */ - let format; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @return {?} - */ - unmarshalOutputData(data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - cont => JSON.parse(cont))); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - const response = responseJson.value; - /** @type {?} */ - const status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - const state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - const wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - const bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - marshalResponseForm(outputs, async = false) { - /** @type {?} */ - const outputDefinitions = []; - for (const output of outputs) { - /** @type {?} */ - let defType; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `); - } - outputDefinitions.push(defType); - } - /** @type {?} */ - const responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - const form = { - responseDocument - }; - return form; - } - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - marshalInputs(inputArr) { - /** @type {?} */ - const theInputs = []; - for (const inp of inputArr) { - if (inp.value === null || inp.value === undefined) { - throw new Error(`Value for input ${inp.description.id} is not set`); - } - /** @type {?} */ - const marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - /** @type {?} */ - const inputs = { - input: theInputs - }; - return inputs; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalInput(input) { - /** @type {?} */ - const id = input.description.id; - /** @type {?} */ - const title = input.description.id; - /** @type {?} */ - const abstract = ''; - /** @type {?} */ - const inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalDataInput(input) { - /** @type {?} */ - let data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - const values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`); - } - return data; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalReferenceInput(input) { - /** @type {?} */ - const ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} processId - * @return {?} - */ - marshalDismissBody(processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMS4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sT0FBTyxnQkFBZ0I7SUFFekIsZ0JBQWdCLENBQUM7Ozs7O0lBRWpCLGtCQUFrQixDQUFDLE9BQWU7UUFDOUIsT0FBTyxHQUFHLE9BQU8sb0RBQW9ELENBQUM7SUFDMUUsQ0FBQzs7Ozs7O0lBRUQsVUFBVSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFPLEdBQUcsT0FBTyx5REFBeUQsU0FBUyxFQUFFLENBQUM7SUFDMUYsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxZQUFpQzs7Y0FDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSzthQUMvQixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7Ozs7O0lBRUQsNEJBQTRCLENBQUMsWUFBaUMsRUFBRSxHQUFXLEVBQUUsU0FBaUIsRUFDMUYsTUFBa0IsRUFBRSxrQkFBMEM7O2NBRXhELEdBQUcsR0FBZ0IsRUFBRTtRQUUzQixJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLFdBQVc7WUFDdEQsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDTCxXQUFXLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO29CQUMvQyxTQUFTLEVBQUUsSUFB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LENBQUM7Ozs7OztJQUVTLHFCQUFxQixDQUFDLEtBQWU7O2NBQ3JDLEdBQUcsR0FBdUI7WUFDNUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTTtTQUNyQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFnQjtRQUN4RSx5REFBeUQ7UUFDekQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDOzs7Ozs7O0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDckUseURBQXlEO1FBQ3pELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7OztJQUVELFVBQVUsQ0FBQyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMxRDtnR0FDd0Y7UUFDeEYsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7O0lBRUQsa0JBQWtCLENBQUMsU0FBaUI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Ozs7Ozs7SUFFRCx3QkFBd0IsQ0FBQyxZQUFpQixFQUFFLFNBQWlCLEVBQUUsU0FBaUI7UUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzUmVzdWx0LCBXcHNDYXBhYmlsaXR5LCBXcHNCYm94VmFsdWUsIFdwc0RhdGEsIFdwc0RhdGFEZXNjcmlwdGlvbiwgV3BzU3RhdGUsIFdwc0RhdGFGb3JtYXQgfSBmcm9tICcuLi93cHNfZGF0YXR5cGVzJztcclxuaW1wb3J0IHtcclxuICAgIFdQU0NhcGFiaWxpdGllc1R5cGUsIElXcHNFeGVjdXRlUHJvY2Vzc0JvZHksIEV4ZWN1dGUsIERhdGFJbnB1dHNUeXBlLFxyXG4gICAgSW5wdXRUeXBlLCBSZXNwb25zZUZvcm1UeXBlLCBEYXRhVHlwZSwgSVdwc0V4ZWN1dGVSZXNwb25zZSwgRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZSxcclxuICAgIFJlc3BvbnNlRG9jdW1lbnRUeXBlLCBJbnB1dFJlZmVyZW5jZVR5cGUsIExpdGVyYWxEYXRhVHlwZSwgRXhlY3V0ZVJlc3BvbnNlXHJcbn0gZnJvbSAnLi93cHNfMS4wLjAnO1xyXG5cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgV3BzTWFyc2hhbGxlcjEwMCBpbXBsZW1lbnRzIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzVXJsKGJhc2V1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2Jhc2V1cmx9P3NlcnZpY2U9V1BTJnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzJnZlcnNpb249MS4wLjBgO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGVVcmwoYmFzZXVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke2Jhc2V1cmx9P3NlcnZpY2U9V1BTJnJlcXVlc3Q9RXhlY3V0ZSZ2ZXJzaW9uPTEuMC4wJmlkZW50aWZpZXI9JHtwcm9jZXNzSWR9YDtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzOiBXUFNDYXBhYmlsaXRpZXNUeXBlKTogV3BzQ2FwYWJpbGl0eVtdIHtcclxuICAgICAgICBjb25zdCBvdXQ6IFdwc0NhcGFiaWxpdHlbXSA9IFtdO1xyXG4gICAgICAgIGNhcGFiaWxpdGllcy5wcm9jZXNzT2ZmZXJpbmdzLnByb2Nlc3MuZm9yRWFjaChwcm9jZXNzID0+IHtcclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHByb2Nlc3MuaWRlbnRpZmllci52YWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBJV3BzRXhlY3V0ZVJlc3BvbnNlLCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IG91dDogV3BzUmVzdWx0W10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXMucHJvY2Vzc0ZhaWxlZCkgeyAvLyBGYWlsdXJlP1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXNMb2NhdGlvblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzT3V0cHV0cykgeyAvLyBzeW5jaHJvbm91cyByZXF1ZXN0P1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzc091dHB1dHMub3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IG91dHB1dC5yZWZlcmVuY2UgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGF0eXBlOiAnbGl0ZXJhbCcgfCAnY29tcGxleCcgfCAnYmJveCcgfCAnc3RhdHVzJyB8ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQ6IFdwc0RhdGFGb3JtYXQgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0LnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2NvbXBsZXgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvdXRwdXQucmVmZXJlbmNlLmhyZWYgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQucmVmZXJlbmNlLm1pbWVUeXBlIGFzIFdwc0RhdGFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXQuZGF0YSAmJiBvdXRwdXQuZGF0YS5saXRlcmFsRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSA9ICdsaXRlcmFsJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gb3V0cHV0LmRhdGEubGl0ZXJhbERhdGEuZGF0YVR5cGUgYXMgV3BzRGF0YUZvcm1hdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dHB1dC5kYXRhICYmIG91dHB1dC5kYXRhLmNvbXBsZXhEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2NvbXBsZXgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQuZGF0YS5jb21wbGV4RGF0YS5taW1lVHlwZSBhcyBXcHNEYXRhRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2Jib3gnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy51bm1hcnNoYWxPdXRwdXREYXRhKG91dHB1dC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG91dHB1dC5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiBpc1JlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YXR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXNMb2NhdGlvbikgeyAvLyBhc3luY2hyb25vdXMgcmVxdWVzdD9cclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcmVzcG9uc2VKc29uLnZhbHVlLnByb2Nlc3MuaWRlbnRpZmllci52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0YXR1cydcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVubWFyc2hhbE91dHB1dERhdGEoZGF0YTogRGF0YVR5cGUpOiBhbnkge1xyXG4gICAgICAgIGlmIChkYXRhLmNvbXBsZXhEYXRhKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5jb21wbGV4RGF0YS5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLmdlbytqc29uJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnQubWFwKGNvbnQgPT4gSlNPTi5wYXJzZShjb250KSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi9XTVMnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZGF0YS5jb21wbGV4RGF0YS5jb250ZW50WzBdKTsgLy8gQFRPRE86IGJldHRlcjogaGFuZGxlIGFjdHVhbCB4bWwtZGF0YVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1bm1hcnNoYWwgZGF0YSBvZiBmb3JtYXQgJHtkYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmxpdGVyYWxEYXRhKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5saXRlcmFsRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEubGl0ZXJhbERhdGEudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHtkYXRhfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNEYXRhW10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBXcHNTdGF0ZSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBFeGVjdXRlUmVzcG9uc2UgPSByZXNwb25zZUpzb24udmFsdWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NTdWNjZWVkZWQgPyAnU3VjY2VlZGVkJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NBY2NlcHRlZCA/ICdBY2NlcHRlZCcgOlxyXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1cy5wcm9jZXNzU3RhcnRlZCA/ICdSdW5uaW5nJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NGYWlsZWQgPyAnRmFpbGVkJyA6XHJcbiAgICAgICAgJ0ZhaWxlZCc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgc3RhdHVzTG9jYXRpb246IHJlc3BvbnNlLnN0YXR1c0xvY2F0aW9uLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5wcm9jZXNzT3V0cHV0cyAmJiByZXNwb25zZS5wcm9jZXNzT3V0cHV0cy5vdXRwdXQpIHtcclxuICAgICAgICAgICAgc3RhdGUucmVzdWx0cyA9IHRoaXMudW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb24sIHNlcnZlclVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jOiBib29sZWFuKTogSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHdwczFJbnB1dHMgPSB0aGlzLm1hcnNoYWxJbnB1dHMoaW5wdXRzKTtcclxuICAgICAgICBjb25zdCB3cHMxUmVzcG9uc2VGb3JtID0gdGhpcy5tYXJzaGFsUmVzcG9uc2VGb3JtKG91dHB1dHMsIGFzeW5jKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keVZhbHVlOiBFeGVjdXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhSW5wdXRzOiB3cHMxSW5wdXRzLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBwcm9jZXNzSWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlRm9ybTogd3BzMVJlc3BvbnNlRm9ybSxcclxuICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBib2R5OiBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjB9RXhlY3V0ZScsXHJcbiAgICAgICAgICAgICAgICBsb2NhbFBhcnQ6ICdFeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzEuMC4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjB9d3BzOkV4ZWN1dGUnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBib2R5VmFsdWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gYm9keTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByb3RlY3RlZCBtYXJzaGFsUmVzcG9uc2VGb3JtKG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jID0gZmFsc2UpOiBSZXNwb25zZUZvcm1UeXBlIHtcclxuXHJcbiAgICAgICAgY29uc3Qgb3V0cHV0RGVmaW5pdGlvbnM6IERvY3VtZW50T3V0cHV0RGVmaW5pdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcclxuICAgICAgICAgICAgbGV0IGRlZlR5cGU6IERvY3VtZW50T3V0cHV0RGVmaW5pdGlvblR5cGU7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3V0cHV0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpdGVyYWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIGRlZlR5cGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IG91dHB1dC5pZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1JlZmVyZW5jZTogb3V0cHV0LnJlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IG91dHB1dC5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxleCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogb3V0cHV0LmlkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUmVmZXJlbmNlOiBvdXRwdXQucmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogb3V0cHV0LmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBXcHMtb3V0cHV0dHlwZSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0ISAke291dHB1dH0gYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3V0cHV0RGVmaW5pdGlvbnMucHVzaChkZWZUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRG9jdW1lbnQ6IFJlc3BvbnNlRG9jdW1lbnRUeXBlID0ge1xyXG4gICAgICAgICAgICBvdXRwdXQ6IG91dHB1dERlZmluaXRpb25zLFxyXG4gICAgICAgICAgICBzdGF0dXM6IGFzeW5jID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBzdG9yZUV4ZWN1dGVSZXNwb25zZTogYXN5bmMgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtOiBSZXNwb25zZUZvcm1UeXBlID0ge1xyXG4gICAgICAgICAgICByZXNwb25zZURvY3VtZW50XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxJbnB1dHMoaW5wdXRBcnI6IFdwc0lucHV0W10pOiBEYXRhSW5wdXRzVHlwZSB7XHJcbiAgICAgICAgY29uc3QgdGhlSW5wdXRzOiBJbnB1dFR5cGVbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5wIG9mIGlucHV0QXJyKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnAudmFsdWUgPT09IG51bGwgfHwgaW5wLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgZm9yIGlucHV0ICR7aW5wLmRlc2NyaXB0aW9uLmlkfSBpcyBub3Qgc2V0YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbWFyc2hhbGxlZElucHV0ID0gdGhpcy5tYXJzaGFsSW5wdXQoaW5wKTtcclxuICAgICAgICAgICAgdGhlSW5wdXRzLnB1c2gobWFyc2hhbGxlZElucHV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRzOiBEYXRhSW5wdXRzVHlwZSA9IHtcclxuICAgICAgICAgICAgaW5wdXQ6IHRoZUlucHV0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGlucHV0cztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbElucHV0KGlucHV0OiBXcHNJbnB1dCk6IElucHV0VHlwZSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBpbnB1dC5kZXNjcmlwdGlvbi5pZDtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IGlucHV0LmRlc2NyaXB0aW9uLmlkO1xyXG4gICAgICAgIGNvbnN0IGFic3RyYWN0ID0gJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGlucHV0VHlwZTogSW5wdXRUeXBlID0ge1xyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiB7IHZhbHVlOiBpZCB9LFxyXG4gICAgICAgICAgICB0aXRsZTogeyB2YWx1ZTogdGl0bGUgfSxcclxuICAgICAgICAgICAgX2Fic3RyYWN0OiB7IHZhbHVlOiBhYnN0cmFjdCB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uLnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICBpbnB1dFR5cGUucmVmZXJlbmNlID0gdGhpcy5tYXJzaGFsUmVmZXJlbmNlSW5wdXQoaW5wdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlucHV0VHlwZS5kYXRhID0gdGhpcy5tYXJzaGFsRGF0YUlucHV0KGlucHV0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbnB1dFR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxEYXRhSW5wdXQoaW5wdXQ6IFdwc0lucHV0KTogRGF0YVR5cGUge1xyXG4gICAgICAgIGxldCBkYXRhOiBEYXRhVHlwZTtcclxuICAgICAgICBzd2l0Y2ggKGlucHV0LmRlc2NyaXB0aW9uLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpdGVyYWxEYXRhOiB7IHZhbHVlOiBTdHJpbmcoaW5wdXQudmFsdWUpIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnYmJveCc6XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXM6IFdwc0Jib3hWYWx1ZSA9IGlucHV0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBib3VuZGluZ0JveERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJDb3JuZXI6IFt2YWx1ZXMubGxsYXQsIHZhbHVlcy5sbGxvbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyQ29ybmVyOiBbdmFsdWVzLnVybGF0LCB2YWx1ZXMudXJsb25dXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdjb21wbGV4JzpcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGV4dC94bWwnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbaW5wdXQudmFsdWVdLCAgLy8gQFRPRE86IHdlIGFzc3VtZSBoZXJlIHRoYXQgdGV4dC94bWwtZGF0YSBpcyBhbHJlYWR5IHN0cmluZ2lmaWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGlucHV0LmRlc2NyaXB0aW9uLmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxleERhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbSlNPTi5zdHJpbmdpZnkoaW5wdXQudmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBUaGlzIGlucHV0IGlzIG9mIHR5cGUgJHtpbnB1dC5kZXNjcmlwdGlvbi50eXBlfS4gV2UgY2FuIG9ubHkgbWFyc2hhbCBpbnB1dCBvZiB0eXBlIGxpdGVyYWwsIGJib3ggb3IgY29tcGxleC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxSZWZlcmVuY2VJbnB1dChpbnB1dDogV3BzSW5wdXQpOiBJbnB1dFJlZmVyZW5jZVR5cGUge1xyXG4gICAgICAgIGNvbnN0IHJlZjogSW5wdXRSZWZlcmVuY2VUeXBlID0ge1xyXG4gICAgICAgICAgICBocmVmOiBpbnB1dC52YWx1ZSxcclxuICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgbWltZVR5cGU6IGlucHV0LmRlc2NyaXB0aW9uLmZvcm1hdFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHJlZjtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gV1BTLTEuMCBkb2VzIG5vdCBzZW5kIGEgYm9keSB3aXRoIGEgR2V0U3RhdHVzIHJlcXVlc3QuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklEOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBXUFMtMS4wIGRvZXMgbm90IHNlbmQgYSBib2R5IHdpdGggYSBHZXRTdGF0dXMgcmVxdWVzdC5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzc1VybChzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIC8qKiB0aGlzIGRvZXMgb25seSB3b3JrIGluIGdlb3NlcnZlcjpcclxuICAgICAgICByZXR1cm4gYCR7c2VydmVyVXJsfT9zZXJ2aWNlPVdQUyZ2ZXJzaW9uPTEuMC4wJnJlcXVlc3Q9RGlzbWlzcyZleGVjdXRpb25JZD0ke2pvYklkfWA7ICovXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcHMgMS4wIGRvZXMgbm90IHN1cHBvcnQgRGlzbWlzcy1vcGVyYXRpb25zLicpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShwcm9jZXNzSWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV3BzIDEuMCBkb2VzIG5vdCBzdXBwb3J0IERpc21pc3Mtb3BlcmF0aW9ucy4nKTtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxEaXNtaXNzUmVzcG9uc2UoanNvblJlc3BvbnNlOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dwcyAxLjAgZG9lcyBub3Qgc3VwcG9ydCBEaXNtaXNzLW9wZXJhdGlvbnMuJyk7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/wps200/helpers.js b/@ukis/services-ogc/esm2015/lib/wps/wps200/helpers.js deleted file mode 100644 index 938cfe509..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/wps200/helpers.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -export const isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -export const isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -export const isResult = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzMjAwL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsTUFBTSxPQUFPLFlBQVk7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBcUIsRUFBRTtJQUMzRCxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1dBQzVCLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFBOztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBeUIsRUFBRTtJQUNuRSxPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUE7O0FBRUQsTUFBTSxPQUFPLFFBQVE7Ozs7QUFBRyxDQUFDLEdBQVcsRUFBaUIsRUFBRTtJQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNJbmZvLCBEYXRhT3V0cHV0VHlwZSwgUmVzdWx0IH0gZnJvbSAnLi93cHNfMi4wJztcclxuXHJcblxyXG5leHBvcnQgY29uc3QgaXNTdGF0dXNJbmZvID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFN0YXR1c0luZm8gPT4ge1xyXG4gICAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKVxyXG4gICAgICAgJiYgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXMnKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0RhdGFPdXRwdXRUeXBlID0gKG9iajogb2JqZWN0KTogb2JqIGlzIERhdGFPdXRwdXRUeXBlID0+IHtcclxuICAgIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2lkJykgJiZcclxuICAgICAgICAob2JqLmhhc093blByb3BlcnR5KCdkYXRhJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdyZWZlcmVuY2UnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3VsdCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBSZXN1bHQgPT4ge1xyXG4gICAgcmV0dXJuIChvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpICYmIHR5cGVvZiBvYmpbJ291dHB1dCddID09PSAnb2JqZWN0Jyk7XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js b/@ukis/services-ogc/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js deleted file mode 100644 index 782d57ac8..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/wps200/wps_marshaller_2.0.0.js +++ /dev/null @@ -1,351 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { isStatusInfo, isResult } from './helpers'; -export class WpsMarshaller200 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - summary => { - out.push({ - id: summary.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (isResult(responseJson.value)) { - for (const output of responseJson.value.output) { - /** @type {?} */ - const outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - od => od.id === output.id)); - if (!outputDescription) { - throw new Error(`Could not find an output-description for the parameter ${output.id}.`); - } - /** @type {?} */ - const isReference = outputDescription.reference; - /** @type {?} */ - const datatype = outputDescription.type; - /** @type {?} */ - const format = outputDescription.format; - /** @type {?} */ - let data; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error(`Output has neither reference nor data field.`); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - unmarshalOutputData(data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - (cont) => JSON.parse(cont))); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error(`Not a status-info: ${responseJson}`); - } - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - const outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - const bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @private - * @param {?} inputs - * @return {?} - */ - marshalInputs(inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - i => { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - } - /** - * @private - * @param {?} outputs - * @return {?} - */ - marshalOutputs(outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - o => { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - return serverUrl; - } - /** - * @param {?} jobId - * @return {?} - */ - marshalDismissBody(jobId) { - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - /** @type {?} */ - const state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMi4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBb0IsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUdyRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLGdCQUFlLENBQUM7Ozs7O0lBRWhCLGtCQUFrQixDQUFDLE9BQWU7UUFDOUIsT0FBTyxHQUFHLE9BQU8sb0RBQW9ELENBQUM7SUFDMUUsQ0FBQzs7Ozs7O0lBRUQsVUFBVSxDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFPLEdBQUcsT0FBTyx5REFBeUQsU0FBUyxFQUFFLENBQUM7SUFDMUYsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxZQUFpQzs7Y0FDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU87Ozs7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNuRCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUs7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7Ozs7OztJQUVELDRCQUE0QixDQUFDLFlBQWlDLEVBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQzFGLE1BQWtCLEVBQUUsa0JBQTBDOztjQUN4RCxHQUFHLEdBQWdCLEVBQUU7UUFFM0IsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzlCLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7O3NCQUN0QyxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyxJ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QUN0QixJQUFJLEdBQW9CO1lBQzFCLElBQUksRUFBRTtnQkFDRixHQUFHLEVBQUUseUNBQXlDO2dCQUM5QyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLGdDQUFnQztnQkFDOUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLDZDQUE2QzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDSCxLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsT0FBTzthQUNuQjtTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELHdCQUF3QixDQUFDLFlBQThCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjs7Y0FDbkYsS0FBSyxHQUFhO1lBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzUmVzdWx0LCBXcHNDYXBhYmlsaXR5LCBXcHNEYXRhRGVzY3JpcHRpb24sIFdwc0RhdGEsIFdwc1N0YXRlIH0gZnJvbSAnLi4vd3BzX2RhdGF0eXBlcyc7XHJcbmltcG9ydCB7IFdQU0NhcGFiaWxpdGllc1R5cGUsIEV4ZWN1dGVSZXF1ZXN0VHlwZSwgRGF0YUlucHV0VHlwZSwgT3V0cHV0RGVmaW5pdGlvblR5cGUsIElXcHNFeGVjdXRlUHJvY2Vzc0JvZHksIElXcHNFeGVjdXRlUmVzcG9uc2UsIERhdGFPdXRwdXRUeXBlLCBJR2V0U3RhdHVzUmVxdWVzdCwgRGF0YSwgSUdldFJlc3VsdFJlcXVlc3QsIElEaXNtaXNzUmVxdWVzdCwgSURpc21pc3NSZXNwb25zZSB9IGZyb20gJy4vd3BzXzIuMCc7XHJcbmltcG9ydCB7IGlzRGF0YU91dHB1dFR5cGUsIGlzU3RhdHVzSW5mbywgaXNSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBXcHNNYXJzaGFsbGVyMjAwIGltcGxlbWVudHMgV3BzTWFyc2hhbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGdldENhcGFiaWxpdGllc1VybChiYXNldXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtiYXNldXJsfT9zZXJ2aWNlPVdQUyZyZXF1ZXN0PUdldENhcGFiaWxpdGllcyZ2ZXJzaW9uPTIuMC4wYDtcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRlVXJsKGJhc2V1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHtiYXNldXJsfT9zZXJ2aWNlPVdQUyZyZXF1ZXN0PUV4ZWN1dGUmdmVyc2lvbj0yLjAuMCZpZGVudGlmaWVyPSR7cHJvY2Vzc0lkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllczogV1BTQ2FwYWJpbGl0aWVzVHlwZSk6IFdwc0NhcGFiaWxpdHlbXSB7XHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNDYXBhYmlsaXR5W10gPSBbXTtcclxuICAgICAgICBjYXBhYmlsaXRpZXMuY29udGVudHMucHJvY2Vzc1N1bW1hcnkuZm9yRWFjaChzdW1tYXJ5ID0+IHtcclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHN1bW1hcnkuaWRlbnRpZmllci52YWx1ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBJV3BzRXhlY3V0ZVJlc3BvbnNlLCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsXHJcbiAgICAgICAgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXSB7XHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoaXNSZXN1bHQocmVzcG9uc2VKc29uLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiByZXNwb25zZUpzb24udmFsdWUub3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXREZXNjcmlwdGlvbiA9IG91dHB1dERlc2NyaXB0aW9ucy5maW5kKG9kID0+IG9kLmlkID09PSBvdXRwdXQuaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvdXRwdXREZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYW4gb3V0cHV0LWRlc2NyaXB0aW9uIGZvciB0aGUgcGFyYW1ldGVyICR7b3V0cHV0LmlkfS5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IG91dHB1dERlc2NyaXB0aW9uLnJlZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGF0eXBlID0gb3V0cHV0RGVzY3JpcHRpb24udHlwZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG91dHB1dERlc2NyaXB0aW9uLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dC5yZWZlcmVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3V0cHV0LnJlZmVyZW5jZS5ocmVmIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG91dHB1dC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudW5tYXJzaGFsT3V0cHV0RGF0YShvdXRwdXQuZGF0YSwgb3V0cHV0RGVzY3JpcHRpb24pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE91dHB1dCBoYXMgbmVpdGhlciByZWZlcmVuY2Ugbm9yIGRhdGEgZmllbGQuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBvdXRwdXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IGlzUmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBkYXRhdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdGF0dXNJbmZvKHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZUpzb24udmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5qb2JJRCxcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wbGV0ZWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wZXJjZW50Q29tcGxldGVkXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwcm9jZXNzSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdGF0dXMnXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHN0YXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdW5tYXJzaGFsT3V0cHV0RGF0YShkYXRhOiBEYXRhLCBkZXNjcmlwdGlvbjogV3BzT3V0cHV0RGVzY3JpcHRpb24pOiBhbnkge1xyXG4gICAgICAgIGlmIChkZXNjcmlwdGlvbi50eXBlID09PSAnY29tcGxleCcpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudC5tYXAoKGNvbnQ6IGFueSkgPT4gSlNPTi5wYXJzZShjb250KSk7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi9XTVMnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZGF0YS5jb250ZW50WzBdKTsgLy8gQFRPRE86IGJldHRlcjogaGFuZGxlIGFjdHVhbCB4bWwtZGF0YVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB1bm1hcnNoYWwgY29tcGxleCBkYXRhIG9mIGZvcm1hdCAke2RhdGEubWltZVR5cGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdsaXRlcmFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2RhdGF9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNEYXRhW10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBXcHNTdGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShyZXNwb25zZUpzb24sIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShyZXNwb25zZUpzb246IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLFxyXG4gICAgICAgIGlucHV0czogV3BzRGF0YVtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIGlmIChpc1N0YXR1c0luZm8ocmVzcG9uc2VKc29uLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlSnNvbi52YWx1ZS5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICBqb2JJRDogcmVzcG9uc2VKc29uLnZhbHVlLmpvYklELFxyXG4gICAgICAgICAgICAgICAgcGVyY2VudENvbXBsZXRlZDogcmVzcG9uc2VKc29uLnZhbHVlLnBlcmNlbnRDb21wbGV0ZWRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGEgc3RhdHVzLWluZm86ICR7cmVzcG9uc2VKc29ufWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pIHtcclxuICAgICAgICBjb25zdCBpbnB1dHNNYXJzaGFsbGVkID0gdGhpcy5tYXJzaGFsSW5wdXRzKGlucHV0cyk7XHJcbiAgICAgICAgY29uc3Qgb3V0cHV0c01hcnNoYWxsZWQgPSB0aGlzLm1hcnNoYWxPdXRwdXRzKG91dHB1dHMpO1xyXG5cclxuICAgICAgICBjb25zdCBib2R5VmFsdWU6IEV4ZWN1dGVSZXF1ZXN0VHlwZSA9IHtcclxuICAgICAgICAgICAgVFlQRV9OQU1FOiAnV1BTXzJfMC5FeGVjdXRlUmVxdWVzdFR5cGUnLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJyxcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogcHJvY2Vzc0lkIH0sXHJcbiAgICAgICAgICAgIGlucHV0OiBpbnB1dHNNYXJzaGFsbGVkLFxyXG4gICAgICAgICAgICBvdXRwdXQ6IG91dHB1dHNNYXJzaGFsbGVkLFxyXG4gICAgICAgICAgICBtb2RlOiBhc3luYyA/ICdhc3luYycgOiAnc3luYycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlOiAnZG9jdW1lbnQnXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keTogSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1FeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0V4ZWN1dGUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfXdwczpFeGVjdXRlJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWx1ZTogYm9keVZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXJzaGFsSW5wdXRzKGlucHV0czogV3BzRGF0YVtdKTogRGF0YUlucHV0VHlwZVtdIHtcclxuICAgICAgICByZXR1cm4gaW5wdXRzLm1hcChpID0+IHtcclxuICAgICAgICAgICAgaWYgKGkuZGVzY3JpcHRpb24ucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpLmRlc2NyaXB0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBpLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaS5kZXNjcmlwdGlvbi5mb3JtYXQsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGkuZGVzY3JpcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBbSlNPTi5zdHJpbmdpZnkoaS52YWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaS5kZXNjcmlwdGlvbi5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXJzaGFsT3V0cHV0cyhvdXRwdXRzOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IE91dHB1dERlZmluaXRpb25UeXBlW10ge1xyXG4gICAgICAgIHJldHVybiBvdXRwdXRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBvLmlkLFxyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IG8uZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uOiBvLnJlZmVyZW5jZSA/ICdyZWZlcmVuY2UnIDogJ3ZhbHVlJyAgLy8gQFRPRE86IG1heWJlIGp1c3QgY29tbWVudCBvdXQgdGhpcyBsaW5lP1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJR2V0U3RhdHVzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1HZXRTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnR2V0U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6R2V0U3RhdHVzJ1xyXG4gICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgam9iSUQ6IHN0YXR1c0lkLFxyXG4gICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCdcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklEOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJR2V0UmVzdWx0UmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1HZXRSZXN1bHQnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnR2V0UmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6R2V0UmVzdWx0J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMi4wLjAnLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IGpvYklEXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3NVcmwoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc2VydmVyVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShqb2JJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYm9keTogSURpc21pc3NSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB7XHJcbiAgICAgICAgICAgICAgICBrZXk6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfURpc21pc3MnLFxyXG4gICAgICAgICAgICAgICAgbG9jYWxQYXJ0OiAnRGlzbWlzcycsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkRpc21pc3MnXHJcbiAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgICBqb2JJRDogam9iSWQsXHJcbiAgICAgICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJ1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZTogSURpc21pc3NSZXNwb25zZSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogV3BzU3RhdGUge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlOiBXcHNTdGF0ZSA9IHtcclxuICAgICAgICAgICAgc3RhdHVzOiBqc29uUmVzcG9uc2UudmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICBqb2JJRDoganNvblJlc3BvbnNlLnZhbHVlLmpvYklEXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gc3RhdGU7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/wps_datatypes.js b/@ukis/services-ogc/esm2015/lib/wps/wps_datatypes.js deleted file mode 100644 index 7d6601c4f..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/wps_datatypes.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -export function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -export const isBbox = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -export function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -export function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -export function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -export function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -export function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX2RhdGF0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzX2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLHdDQU9DOzs7SUFORyxnQ0FBYzs7SUFDZCxrQ0FBMEQ7O0lBQzFELHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFNdkIsNkJBR0M7OztJQUZHLDhCQUFnQzs7SUFDaEMsd0JBQVc7Ozs7O0FBS2Ysd0NBT0M7OztJQU5HLGdDQUFjOztJQUNkLGtDQUFhOztJQUNiLHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFHdkIsa0NBTUM7OztJQUxHLDJCQUFZOztJQUNaLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOzs7QUFHbEIsTUFBTSxPQUFPLE1BQU07Ozs7QUFBRyxDQUFDLEdBQVcsRUFBdUIsRUFBRTtJQUN2RCxPQUFPLENBQ0gsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDekIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FDOUIsQ0FBQztBQUNOLENBQUMsQ0FBQTs7OztBQUdELDhCQVNDOzs7SUFSRywwQkFBc0U7O0lBQ3RFLG9DQUEwQjs7Ozs7SUFFMUIseUJBQWU7Ozs7O0lBRWYsa0NBQXdCOzs7OztJQUV4QiwyQkFBb0I7Ozs7OztBQUd4QixNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7SUFDbEMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDeEgsQ0FBQzs7OztBQUdELGlDQUdDOzs7SUFGRyxrQ0FBZ0M7O0lBQ2hDLDRCQUFvQjs7Ozs7QUFHeEIsbUNBRUM7OztJQURHLDJCQUFXOzs7OztBQUlmLG1DQWdCQzs7Ozs7OztJQWRHLG1FQUFtRDs7Ozs7OztJQUNuRCxnRkFBd0U7Ozs7O0lBQ3hFLG9FQUE0Qzs7Ozs7Ozs7SUFFNUMsMkZBQTZHOzs7Ozs7O0lBQzdHLDhGQUFtRjs7Ozs7OztJQUNuRiwyRkFBZ0Y7Ozs7O0lBQ2hGLGtFQUF1Qzs7Ozs7SUFFdkMsZ0ZBQThEOzs7Ozs7Ozs7SUFDOUQsK0hBQTZKOzs7Ozs7Ozs7SUFDN0osZ0lBQTJKOzs7Ozs7Ozs7SUFDM0osa0lBQTZKOzs7Ozs7O0lBQzdKLHFHQUE0RiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFdwc1ZlcmlvbiA9ICcxLjAuMCcgfCAnMi4wLjAnO1xyXG5leHBvcnQgdHlwZSBXcHNEYXRhRm9ybWF0ID0gJ2FwcGxpY2F0aW9uL3ZuZC5nZW8ranNvbicgfCAnYXBwbGljYXRpb24vanNvbicgfCAnYXBwbGljYXRpb24vV01TJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veG1sJyB8ICd0ZXh0L3htbCcgfCAnYXBwbGljYXRpb24vdGV4dCcgfCAnaW1hZ2UvZ2VvdGlmZicgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nO1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIFByb2Nlc3NJZCA9IHN0cmluZztcclxuZXhwb3J0IHR5cGUgUHJvZHVjdElkID0gc3RyaW5nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNEYXRhRGVzY3JpcHRpb24ge1xyXG4gICAgaWQ6IFByb2R1Y3RJZDtcclxuICAgIHR5cGU6ICdsaXRlcmFsJyB8ICdjb21wbGV4JyB8ICdiYm94JyB8ICdzdGF0dXMnIHwgJ2Vycm9yJztcclxuICAgIHJlZmVyZW5jZTogYm9vbGVhbjtcclxuICAgIGZvcm1hdD86IFdwc0RhdGFGb3JtYXQ7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IGFueTtcclxufVxyXG5leHBvcnQgdHlwZSBXcHNJbnB1dERlc2NyaXB0aW9uID0gV3BzRGF0YURlc2NyaXB0aW9uO1xyXG5leHBvcnQgdHlwZSBXcHNPdXRwdXREZXNjcmlwdGlvbiA9IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdwc0RhdGEge1xyXG4gICAgZGVzY3JpcHRpb246IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuICAgIHZhbHVlOiBhbnk7XHJcbn1cclxuZXhwb3J0IHR5cGUgV3BzSW5wdXQgPSBXcHNEYXRhO1xyXG5leHBvcnQgdHlwZSBXcHNSZXN1bHQgPSBXcHNEYXRhO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94RGVzY3JpcHRpb24ge1xyXG4gICAgaWQ6IFByb2R1Y3RJZDtcclxuICAgIHR5cGU6ICdiYm94JztcclxuICAgIHJlZmVyZW5jZTogYm9vbGVhbjtcclxuICAgIGZvcm1hdD86IFdwc0RhdGFGb3JtYXQ7XHJcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICAgIGRlZmF1bHRWYWx1ZT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94VmFsdWUge1xyXG4gICAgY3JzOiBzdHJpbmc7XHJcbiAgICBsbGxvbjogbnVtYmVyO1xyXG4gICAgbGxsYXQ6IG51bWJlcjtcclxuICAgIHVybG9uOiBudW1iZXI7XHJcbiAgICB1cmxhdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNCYm94ID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFdwc0Jib3hWYWx1ZSA9PiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIG9iai5oYXNPd25Qcm9wZXJ0eSgnY3JzJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2xsbG9uJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2xsbGF0JykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ3VybG9uJykgJiZcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ3VybGF0JylcclxuICAgICk7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNTdGF0ZSB7XHJcbiAgICBzdGF0dXM6ICdTdWNjZWVkZWQnIHwgJ0ZhaWxlZCcgfCAnQWNjZXB0ZWQnIHwgJ1J1bm5pbmcnIHwgJ0Rpc21pc3NlZCc7XHJcbiAgICBwZXJjZW50Q29tcGxldGVkPzogbnVtYmVyO1xyXG4gICAgLyoqIFdQUyAyLjAgb25seSAqL1xyXG4gICAgam9iSUQ/OiBzdHJpbmc7XHJcbiAgICAvKiogV1BTIDEuMCBvbmx5ICovXHJcbiAgICBzdGF0dXNMb2NhdGlvbj86IHN0cmluZztcclxuICAgIC8qKiBXUFMgMS4wIG9ubHk6IGEgc3VjY2Vzcy1zdGF0ZSBhbHJlYWR5IGNvbnRhaW5zIHRoZSByZXN1bHRzICovXHJcbiAgICByZXN1bHRzPzogV3BzRGF0YVtdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNTdGF0ZShvYmo6IG9iamVjdCk6IG9iaiBpcyBXcHNTdGF0ZSB7XHJcbiAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eSgnc3RhdHVzJykgJiYgKG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ3N0YXR1c0xvY2F0aW9uJykpO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNCYm94RGF0YSB7XHJcbiAgICBkZXNjcmlwdGlvbjogV3BzQmJveERlc2NyaXB0aW9uO1xyXG4gICAgdmFsdWU6IFdwc0Jib3hWYWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNDYXBhYmlsaXR5IHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGV4ZWN1dGVVcmwodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgZGlzbWlzc1VybChzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nO1xyXG5cclxuICAgIG1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXRzOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdLCBhc3luYzogYm9vbGVhbik6IGFueTtcclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpOiBhbnk7XHJcbiAgICBtYXJzaGFsbEdldFJlc3VsdEJvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJRDogc3RyaW5nKTogYW55O1xyXG4gICAgbWFyc2hhbERpc21pc3NCb2R5KGpvYklkOiBzdHJpbmcpOiBhbnk7XHJcblxyXG4gICAgdW5tYXJzaGFsQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllc0pzb246IGFueSk6IFdwc0NhcGFiaWxpdHlbXTtcclxuICAgIHVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBXcHNSZXN1bHRbXTtcclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzU3RhdGU7XHJcbiAgICB1bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKGpzb25SZXNwb25zZTogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzU3RhdGU7XHJcbiAgICB1bm1hcnNoYWxEaXNtaXNzUmVzcG9uc2UoanNvblJlc3BvbnNlOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlO1xyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/lib/wps/wpsclient.js b/@ukis/services-ogc/esm2015/lib/wps/wpsclient.js deleted file mode 100644 index 9dc2db985..000000000 --- a/@ukis/services-ogc/esm2015/lib/wps/wpsclient.js +++ /dev/null @@ -1,401 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0'; -import { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0'; -import { of } from 'rxjs'; -import { map, switchMap, tap, share, mergeMap } from 'rxjs/operators'; -import { HttpClient } from '@angular/common/http'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -/** @type {?} */ -const XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; -/** @type {?} */ -const OWS_2_0 = OWS_2_0_Factory.OWS_2_0; -import * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; -/** @type {?} */ -const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0; -import * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; -/** @type {?} */ -const WPS_2_0 = WPS_2_0_Factory.WPS_2_0; -import { pollUntil, delayedRetry } from './utils/polling'; -import { Injectable, Inject } from '@angular/core'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { FakeCache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -export class WpsClient { - /** - * @param {?=} version - * @param {?=} webclient - * @param {?=} cache - */ - constructor(version = '1.0.0', webclient, cache) { - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - let context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - getCapabilities(url) { - /** @type {?} */ - const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - (response) => { - /** @type {?} */ - const responseJson = this.xmlunmarshaller.unmarshalString(response); - return this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - } - /** - * @param {?} processId - * @return {?} - */ - describeProcess(processId) { - throw new Error('Not implemented yet'); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - executeAsync(url, processId, inputs, outputs, pollingRate = 1000, tapFunction) { - /** @type {?} */ - const executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - const query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - (currentState) => { - /** @type {?} */ - const nextState$ = this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - const poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - (response) => { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - (lastState) => { - return this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - for (const result of response) { - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - cachedQuery(url, processId, inputs, outputs, query$) { - /** @type {?} */ - const cachedResponse$ = this.cache.get({ url, processId, inputs, outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - (results) => { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - this.cache.set({ url, processId, inputs, outputs }, response); - }))); - } - }))); - } - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - getNextState(currentState, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - let request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`); - } - /** @type {?} */ - const request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - } - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - fetchResults(lastState, serverUrl, processId, inputs, outputDescriptions) { - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`); - } - /** @type {?} */ - const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - const xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - executeAsyncS(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - execute(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismiss(serverUrl, processId, jobId) { - /** @type {?} */ - const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - } - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - postRaw(url, xmlBody) { - /** @type {?} */ - const headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - } - /** - * @param {?} url - * @return {?} - */ - getRaw(url) { - /** @type {?} */ - const headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - } -} -WpsClient.decorators = [ - { type: Injectable } -]; -/** @nocollapse */ -WpsClient.ctorParameters = () => [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } -]; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzY2xpZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dwcy93cHNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7TUFBTyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUztBQUM3RyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O01BQU8sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0csT0FBTyxLQUFLLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQzs7TUFBTyxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU87QUFDbkcsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOztNQUFPLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdHLE9BQU8sS0FBSyxlQUFlLE1BQU0seUJBQXlCLENBQUM7O01BQU8sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FB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Q0FDTCxDQUFDO0lBQ04sQ0FBQzs7Ozs7O0lBRUQsT0FBTyxDQUFDLEdBQVcsRUFBRSxPQUFlOztjQUMxQixPQUFPLEdBQUc7WUFDWixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDckIsS0FBSyxFQUFFLENBQUUsbUZBQW1GO1NBQy9GLENBQUM7SUFDTixDQUFDOzs7OztJQUVELE1BQU0sQ0FBQyxHQUFXOztjQUNSLE9BQU8sR0FBRztZQUNaLFFBQVEsRUFBRSwyQkFBMkI7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2xFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ3hCLENBQUM7SUFDTixDQUFDOzs7WUE5T0osVUFBVTs7Ozs0Q0FVRixNQUFNLFNBQUMsWUFBWTtZQS9CbkIsVUFBVTs0Q0FpQ1YsTUFBTSxTQUFDLFVBQVU7Ozs7Ozs7SUFUdEIsNEJBQTJCOzs7OztJQUMzQixrQ0FBMkI7Ozs7O0lBQzNCLG9DQUE2Qjs7Ozs7SUFDN0Isa0NBQXFDOzs7OztJQUNyQywwQkFBdUM7Ozs7O0lBSW5DLDhCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdwc01hcnNoYWxsZXIsIFdwc0lucHV0LCBXcHNWZXJpb24sIFdwc1Jlc3VsdCwgV3BzT3V0cHV0RGVzY3JpcHRpb24sIFdwc0RhdGEsIFdwc1N0YXRlLCBpc1dwc1N0YXRlLCBXcHNEYXRhRGVzY3JpcHRpb24gfSBmcm9tICcuL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQgeyBXcHNNYXJzaGFsbGVyMTAwIH0gZnJvbSAnLi93cHMxMDAvd3BzX21hcnNoYWxsZXJfMS4wLjAnO1xyXG5pbXBvcnQgeyBXcHNNYXJzaGFsbGVyMjAwIH0gZnJvbSAnLi93cHMyMDAvd3BzX21hcnNoYWxsZXJfMi4wLjAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwLCBzaGFyZSwgbWVyZ2VNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCAqIGFzIFhMaW5rXzFfMF9GYWN0b3J5IGZyb20gJ3czYy1zY2hlbWFzL2xpYi9YTGlua18xXzAnOyBjb25zdCBYTGlua18xXzAgPSBYTGlua18xXzBfRmFjdG9yeS5YTGlua18xXzA7XHJcbmltcG9ydCAqIGFzIE9XU18xXzFfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9PV1NfMV8xXzAnOyBjb25zdCBPV1NfMV8xXzAgPSBPV1NfMV8xXzBfRmFjdG9yeS5PV1NfMV8xXzA7XHJcbmltcG9ydCAqIGFzIE9XU18yXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvT1dTXzJfMCc7IGNvbnN0IE9XU18yXzAgPSBPV1NfMl8wX0ZhY3RvcnkuT1dTXzJfMDtcclxuaW1wb3J0ICogYXMgV1BTXzFfMF8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dQU18xXzBfMCc7IGNvbnN0IFdQU18xXzBfMCA9IFdQU18xXzBfMF9GYWN0b3J5LldQU18xXzBfMDtcclxuaW1wb3J0ICogYXMgV1BTXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9XUFNfMl8wJzsgY29uc3QgV1BTXzJfMCA9IFdQU18yXzBfRmFjdG9yeS5XUFNfMl8wO1xyXG5pbXBvcnQgeyBwb2xsVW50aWwsIGRlbGF5ZWRSZXRyeSB9IGZyb20gJy4vdXRpbHMvcG9sbGluZyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKc29uaXggfSBmcm9tICdAYm91bmRsZXNzZ2VvL2pzb25peCc7XHJcbmltcG9ydCB7IENhY2hlLCBGYWtlQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBXcHMtY2xpZW50IGFic3RyYWN0cyBhd2F5IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFdwczEuMC4wIGFuZCBXcHMyLjAuMFxyXG4gKiBUaGVyZSBhcmUgdHdvIGxheWVycyBvZiBtYXJzaGFsbGluZzpcclxuICogIC0gdGhlIFdwcy1tYXJzaGFsbGVyIG1hcnNoYWxzIHVzZXItZmFjaW5nIGRhdGEgdG8gd3BzLXNwZWNpZmljIHR5cGVzXHJcbiAqICAtIEpzb25peCBtYXJzaGFscyB3cHMtc3BlY2lmaWMgZGF0YSB0byB4bWwuXHJcbiAqIHVzZXItZmFjaW5nIGRhdGEgLT4gd3BzbWFyc2hhbGxlciAtPiBXcHMtdHlwZS1zcGVjaWZpYyBkYXRhIC0+IEpzb25peC1tYXJoc2FsbGVyIC0+IFhNTCAtPlxyXG4gKiAtPiB3ZWJjbGllbnQgLT4gV1BTIC0+IFhNTCAtPiBKc29uaXgtdW5tYXJzaGFsbGVyIC0+IFdwcy10eXBlLXNwZWNpZmljIGRhdGEgLT4gd3BzbWFyc2hhbGxlciAtPiB1c2VyLWZhY2luZyBkYXRhXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXcHNDbGllbnQge1xyXG5cclxuICAgIHByaXZhdGUgdmVyc2lvbjogV3BzVmVyaW9uO1xyXG4gICAgcHJpdmF0ZSB4bWxtYXJzaGFsbGVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHhtbHVubWFyc2hhbGxlcjogYW55O1xyXG4gICAgcHJpdmF0ZSB3cHNtYXJzaGFsbGVyOiBXcHNNYXJzaGFsbGVyO1xyXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGUgPSBuZXcgRmFrZUNhY2hlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnV3BzVmVyc2lvbicpIHZlcnNpb246IFdwc1ZlcmlvbiA9ICcxLjAuMCcsXHJcbiAgICAgICAgcHJpdmF0ZSB3ZWJjbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgQEluamVjdCgnV3BzQ2FjaGUnKSBjYWNoZT86IENhY2hlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xyXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5jYWNoZSA9IGNhY2hlO1xyXG4gICAgICAgIGxldCBjb250ZXh0O1xyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICcxLjAuMCcpIHtcclxuICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyID0gbmV3IFdwc01hcnNoYWxsZXIxMDAoKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbWExpbmtfMV8wLCBPV1NfMV8xXzAsIFdQU18xXzBfMF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAnMi4wLjAnKSB7XHJcbiAgICAgICAgICAgIHRoaXMud3BzbWFyc2hhbGxlciA9IG5ldyBXcHNNYXJzaGFsbGVyMjAwKCk7XHJcbiAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgSnNvbml4LkNvbnRleHQoW1hMaW5rXzFfMCwgT1dTXzJfMCwgV1BTXzJfMF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGVudGVyZWQgYSBXUFMgdmVyc2lvbiBvdGhlciB0aGFuIDEuMC4wIG9yIDIuMC4wLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnhtbHVubWFyc2hhbGxlciA9IGNvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCk7XHJcbiAgICAgICAgdGhpcy54bWxtYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVNYXJzaGFsbGVyKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldENhcGFiaWxpdGllcyh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgZ2V0Q2FwYWJpbGl0aWVzVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmdldENhcGFiaWxpdGllc1VybCh1cmwpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJhdyhnZXRDYXBhYmlsaXRpZXNVcmwpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VKc29uID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsQ2FwYWJpbGl0aWVzKHJlc3BvbnNlSnNvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pIC8vIEBUT0RPOiBoYW5kbGUgY2FzZSB3aGVuIGluc3RlYWQgb2YgV3BzQ2FwYWJpbGl0ZXMgYW4gRXhjZXB0aW9uUmVwb3J0IGlzIHJldHVybmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZGVzY3JpYmVQcm9jZXNzKHByb2Nlc3NJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZXhlY3V0ZUFzeW5jKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXRzOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdLFxyXG4gICAgICAgIHBvbGxpbmdSYXRlOiBudW1iZXIgPSAxMDAwLCB0YXBGdW5jdGlvbj86IChyZXNwb25zZTogV3BzU3RhdGUgfCBudWxsKSA9PiBhbnkpOiBPYnNlcnZhYmxlPFdwc1Jlc3VsdFtdPiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVSZXF1ZXN0JDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSB0aGlzLmV4ZWN1dGVBc3luY1ModXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXJ5JCA9IGV4ZWN1dGVSZXF1ZXN0JC5waXBlKFxyXG5cclxuICAgICAgICAgICAgLy8gcG9sbCB1bnRpbCBzdWNlZWRlZFxyXG4gICAgICAgICAgICBtZXJnZU1hcCgoY3VycmVudFN0YXRlOiBXcHNTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFN0YXRlJDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSB0aGlzLmdldE5leHRTdGF0ZShjdXJyZW50U3RhdGUsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvbGwkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHBvbGxVbnRpbDxXcHNTdGF0ZT4oXHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlJCxcclxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IFdwc1N0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09ICdTdWNjZWVkZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwRnVuY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcG9sbGluZ1JhdGVcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvbGwkO1xyXG4gICAgICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgICAgIC8vIGZldGNoIHJlc3VsdHNcclxuICAgICAgICAgICAgbWVyZ2VNYXAoKGxhc3RTdGF0ZTogV3BzU3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzdWx0cyhsYXN0U3RhdGUsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHMpO1xyXG4gICAgICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXJyb3JzOlxyXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBXcHNEYXRhW10pID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kZXNjcmlwdGlvbi50eXBlID09PSAnZXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggMjAwLCBidXQgYm9keSBjb250YWluZWQgYW4gZXJyb3ItcmVzdWx0OiAnLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUXVlcnkodXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cywgcXVlcnkkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhY2hlZFF1ZXJ5KHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIHF1ZXJ5JDogT2JzZXJ2YWJsZTxXcHNEYXRhW10+KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgY2FjaGVkUmVzcG9uc2UkOiBPYnNlcnZhYmxlPFdwc1Jlc3VsdFtdIHwgbnVsbD4gPSB0aGlzLmNhY2hlLmdldCh7dXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0c30pO1xyXG4gICAgICAgIHJldHVybiBjYWNoZWRSZXNwb25zZSQucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihyZXN1bHRzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5JC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBXcHNEYXRhW10pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KHt1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzfSwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE5leHRTdGF0ZShjdXJyZW50U3RhdGU6IFdwc1N0YXRlLCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiB7XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gPT09ICcxLjAuMCcpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICghY3VycmVudFN0YXRlLnN0YXR1c0xvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gc3RhdHVzIGxvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVxdWVzdCQgPSB0aGlzLmdldFJhdyhjdXJyZW50U3RhdGUuc3RhdHVzTG9jYXRpb24pO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzIuMC4wJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuam9iSUQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBqb2ItSWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBleGVjYm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsLCBwcm9jZXNzSWQsIGN1cnJlbnRTdGF0ZS5qb2JJRCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdCQgPSB0aGlzLnBvc3RSYXcoc2VydmVyVXJsLCB4bWxFeGVjYm9keSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJ0dldFN0YXR1cycgaGFzIG5vdCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhpcyBXUFMtVmVyc2lvbiAoJHt0aGlzLnZlcnNpb259KS5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QxJDogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4gPSByZXF1ZXN0JC5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMiksXHJcbiAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHhtbFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dDogV3BzRGF0YVtdIHwgV3BzU3RhdGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxHZXRTdGF0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlcXVlc3QxJDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZldGNoUmVzdWx0cyhsYXN0U3RhdGU6IFdwc1N0YXRlLCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4ge1xyXG5cclxuICAgICAgICBpZiAobGFzdFN0YXRlLnJlc3VsdHMpIHsgLy8gV1BTIDEuMDogcmVzdWx0cyBzaG91bGQgYWxyZWFkeSBiZSBpbiBsYXN0IHN0YXRlXHJcbiAgICAgICAgICAgIHJldHVybiBvZihsYXN0U3RhdGUucmVzdWx0cyk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gV1BTIDIuMDogZ2V0IHJlc3VsdHMgd2l0aCBwb3N0IHJlcXVlc3RcclxuXHJcbiAgICAgICAgICAgIGlmICghbGFzdFN0YXRlLmpvYklEKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdSB3YW50IG1lIHRvIGdldCBhIHJlc3VsdCwgYnV0IEkgY2FuJ3QgZmluZCBhIGpvYklkLiBJIGRvbid0IGtub3cgd2hhdCB0byBkbyBub3chYCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNCb2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxsR2V0UmVzdWx0Qm9keShzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgbGFzdFN0YXRlLmpvYklEKTtcclxuICAgICAgICAgICAgY29uc3QgeG1sRXhlY0JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjQm9keSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KHNlcnZlclVybCwgeG1sRXhlY0JvZHkpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGV4ZWN1dGVBc3luY1ModXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogT2JzZXJ2YWJsZTxXcHNTdGF0ZT4ge1xyXG5cclxuICAgICAgICBjb25zdCBleGVjdXRlVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmV4ZWN1dGVVcmwodXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zLCB0cnVlKTtcclxuICAgICAgICBjb25zdCB4bWxFeGVjYm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGV4ZWNib2R5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJhdyhleGVjdXRlVXJsLCB4bWxFeGVjYm9keSkucGlwZShcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBXcHNTdGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKGpzb25SZXNwb25zZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRlKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzUmVzdWx0W10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZVVybCA9IHRoaXMud3BzbWFyc2hhbGxlci5leGVjdXRlVXJsKHVybCwgcHJvY2Vzc0lkKTtcclxuICAgICAgICBjb25zdCBleGVjYm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucywgZmFsc2UpO1xyXG4gICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGV4ZWN1dGVVcmwsIHhtbEV4ZWNib2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQ6IFdwc0RhdGFbXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3Moc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzbWlzc1VybCA9IHRoaXMud3BzbWFyc2hhbGxlci5kaXNtaXNzVXJsKHNlcnZlclVybCwgcHJvY2Vzc0lkLCBqb2JJZCk7XHJcbiAgICAgICAgY29uc3QgZGlzbWlzc0JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbERpc21pc3NCb2R5KGpvYklkKTtcclxuICAgICAgICBjb25zdCB4bWxEaXNtaXNzQm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGRpc21pc3NCb2R5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdFJhdyhkaXNtaXNzVXJsLCB4bWxEaXNtaXNzQm9keSkucGlwZShcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2UsIHNlcnZlclVybCwgcHJvY2Vzc0lkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwb3N0UmF3KHVybDogc3RyaW5nLCB4bWxCb2R5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAndGV4dC94bWwnLFxyXG4gICAgICAgICAgICAnQWNjZXB0JzogJ3RleHQveG1sLCBhcHBsaWNhdGlvbi94bWwnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJjbGllbnQucG9zdCh1cmwsIHhtbEJvZHksIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgICAgZGVsYXllZFJldHJ5KDIwMDAsIDIpLFxyXG4gICAgICAgICAgICBzaGFyZSgpICAvLyB0dXJuaW5nIGhvdDogdG8gbWFrZSBzdXJlIHRoYXQgbXVsdGlwbGUgc3Vic2NyaWJlcnMgZG9udCBjYXVzZSBtdWx0aXBsZSByZXF1ZXN0c1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmF3KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xyXG4gICAgICAgICAgICAnQWNjZXB0JzogJ3RleHQveG1sLCBhcHBsaWNhdGlvbi94bWwnXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy53ZWJjbGllbnQuZ2V0KHVybCwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/public_api.js b/@ukis/services-ogc/esm2015/public_api.js deleted file mode 100644 index a89c4d6b8..000000000 --- a/@ukis/services-ogc/esm2015/public_api.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export { ServicesOgcModule } from './lib/services-ogc.module'; -export { isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService } from './lib/owc/owc-json.service'; -export {} from './lib/owc/types/owc-json'; -export {} from './lib/owc/types/eoc-owc-json'; -export { WpsClient } from './lib/wps/wpsclient'; -export { isWpsState, isBbox } from './lib/wps/wps_datatypes'; -export { FakeCache } from './lib/wps/cache'; -export { WmtsClientService } from './lib/wmts/wmtsclient.service'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBYywyQkFBMkIsQ0FBQztBQUMxQyxnUEFBYyw0QkFBNEIsQ0FBQztBQUMzQyxlQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGVBQWMsOEJBQThCLENBQUM7QUFDN0MsMEJBQWMscUJBQXFCLENBQUM7QUFDcEMsbUNBQWMseUJBQXlCLENBQUM7QUFDeEMsMEJBQWMsaUJBQWlCLENBQUM7QUFDaEMsa0NBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvb3djLWpzb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvZW9jLW93Yy1qc29uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL3dwc2NsaWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dwcy93cHNfZGF0YXR5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL2NhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm2015/ukis-services-ogc.js b/@ukis/services-ogc/esm2015/ukis-services-ogc.js deleted file mode 100644 index c3d4da86a..000000000 --- a/@ukis/services-ogc/esm2015/ukis-services-ogc.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * Generated bundle index. Do not edit. - */ -export { ServicesOgcModule, isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService, WpsClient, isWpsState, isBbox, FakeCache, WmtsClientService } from './public_api'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWtpcy1zZXJ2aWNlcy1vZ2MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJ1a2lzLXNlcnZpY2VzLW9nYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLGdVQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/owc/owc-json.service.js b/@ukis/services-ogc/esm5/lib/owc/owc-json.service.js deleted file mode 100644 index 12df4a5ef..000000000 --- a/@ukis/services-ogc/esm5/lib/owc/owc-json.service.js +++ /dev/null @@ -1,1554 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { Injectable } from '@angular/core'; -import { VectorLayer, RasterLayer, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, WmtsLayer, WmsLayer } from '@ukis/services-layers'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { of, forkJoin } from 'rxjs'; -import { map } from 'rxjs/operators'; -import * as i0 from "@angular/core"; -import * as i1 from "../wmts/wmtsclient.service"; -/** - * @param {?} str - * @return {?} - */ -export function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -export function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -export function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -export function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -export function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -export function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = tslib_1.__values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = tslib_1.__values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new WmsLayer(options); - return of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = tslib_1.__assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = tslib_1.__read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return of(matrixSet); - } - else { - var _a = tslib_1.__read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = tslib_1.__assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = tslib_1.__assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = tslib_1.__values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(i0.ɵɵinject(i1.WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; -}()); -export { OwcJsonService }; -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9vd2Mvb3djLWpzb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUzNDLE9BQU8sRUFDbUQsV0FBVyxFQUFFLFdBQVcsRUFDN0QsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQWUsZUFBZSxFQUFFLFlBQVksRUFDeEcsaUJBQWlCLEVBQUUsaUJBQWlCLEVBR3RELFNBQVMsRUFFVCxRQUFRLEVBSVQsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsRUFBRSxFQUFjLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFLckMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxLQUFLLHFEQUFxRDtXQUMvRCxHQUFHLEtBQUssc0NBQXNDO1dBQzlDLEdBQUcsS0FBSyxzQ0FBc0MsQ0FBQztBQUN0RCxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsS0FBSyxxREFBcUQsQ0FBQztBQUN2RSxDQUFDOzs7OztBQUNELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBVztJQUN4QyxPQUFP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O1NBcnlCWSxjQUFjOzs7Ozs7SUFFYixvQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIElPd3NDb250ZXh0LCBJT3dzUmVzb3VyY2UsIElPd3NPZmZlcmluZywgSU93c09wZXJhdGlvbiwgSU93c0NvbnRlbnQsIFdNU19PZmZlcmluZywgV0ZTX09mZmVyaW5nLCBXQ1NfT2ZmZXJpbmcsXHJcbiAgQ1NXX09mZmVyaW5nLCBXTVRTX09mZmVyaW5nLCBHTUxfT2ZmZXJpbmcsIEtNTF9PZmZlcmluZywgR2VvVElGRl9PZmZlcmluZywgR01MSlAyX09mZmVyaW5nLCBHTUxDT1ZfT2ZmZXJpbmdcclxufSBmcm9tICcuL3R5cGVzL293Yy1qc29uJztcclxuaW1wb3J0IHtcclxuICBJRW9jT3dzQ29udGV4dCwgSUVvY093c1Jlc291cmNlLCBJRW9jT3dzT2ZmZXJpbmcsIEdlb0pzb25fT2ZmZXJpbmcsIFh5el9PZmZlcmluZywgSUVvY093c1dtdHNPZmZlcmluZyxcclxuICBJRW9jV21zT2ZmZXJpbmcsIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiwgSUVvY093c1dtdHNNYXRyaXhTZXRcclxufSBmcm9tICcuL3R5cGVzL2VvYy1vd2MtanNvbic7XHJcbmltcG9ydCB7XHJcbiAgSUxheWVyR3JvdXBPcHRpb25zLCBJTGF5ZXJPcHRpb25zLCBJUmFzdGVyTGF5ZXJPcHRpb25zLCBWZWN0b3JMYXllciwgUmFzdGVyTGF5ZXIsIElWZWN0b3JMYXllck9wdGlvbnMsXHJcbiAgTGF5ZXIsIFRMYXllcnR5cGUsIFdtc0xheWVydHlwZSwgV210c0xheWVydHlwZSwgV2ZzTGF5ZXJ0eXBlLCBHZW9qc29uTGF5ZXJ0eXBlLCBDdXN0b21MYXllciwgQ3VzdG9tTGF5ZXJ0eXBlLCBYeXpMYXllcnR5cGUsXHJcbiAgVFJhc3RlckxheWVydHlwZSwgaXNSYXN0ZXJMYXllcnR5cGUsIGlzVmVjdG9yTGF5ZXJ0eXBlLCBUVmVjdG9yTGF5ZXJ0eXBlLCBJTGF5ZXJEaW1lbnNpb25zLFxyXG4gIElMYXllckludGVydmFsQW5kUGVyaW9kLFxyXG4gIElXbXRzUGFyYW1zLFxyXG4gIFdtdHNMYXllcixcclxuICBJV210c09wdGlvbnMsXHJcbiAgV21zTGF5ZXIsXHJcbiAgSVdtc1BhcmFtcyxcclxuICBJV21zT3B0aW9ucyxcclxuICBJTGlzdE1hdHJpeFNldFxyXG59IGZyb20gJ0B1a2lzL3NlcnZpY2VzLWxheWVycyc7XHJcbmltcG9ydCB7IFRHZW9FeHRlbnQgfSBmcm9tICdAdWtpcy9zZXJ2aWNlcy1tYXAtc3RhdGUnO1xyXG5pbXBvcnQgeyBXbXRzQ2xpZW50U2VydmljZSB9IGZyb20gJy4uL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb2YsIE9ic2VydmFibGUsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dtc09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNU19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcydcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMSdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ZzT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgV0ZTX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd2ZzJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNXcHNPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBXQ1NfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Nzd09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIENTV19PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV210c09mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIFdNVFNfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93bXRzJ1xyXG4gICAgfHwgc3RyID09PSAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd210cy8xLjAuMCdcclxuICAgIHx8IHN0ciA9PT0gJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtdHMvMS4xLjAnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dtbE9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTF9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbCc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzS21sT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgS01MX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNHZW9USUZGT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR2VvVElGRl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dlb3RpZmYnO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dNTEpQMk9mZmVyaW5nKHN0cjogc3RyaW5nKTogc3RyIGlzIEdNTEpQMl9PZmZlcmluZyB7XHJcbiAgcmV0dXJuIHN0ciA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzR01MQ09WT2ZmZXJpbmcoc3RyOiBzdHJpbmcpOiBzdHIgaXMgR01MQ09WX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ21sY292JztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNYeXpPZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBYeXpfT2ZmZXJpbmcge1xyXG4gIHJldHVybiBzdHIgPT09ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0dlb0pzb25PZmZlcmluZyhzdHI6IHN0cmluZyk6IHN0ciBpcyBHZW9Kc29uX09mZmVyaW5nIHtcclxuICByZXR1cm4gc3RyID09PSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYXJkc0V4cGFuZCh2OiBzdHJpbmcpIHtcclxuICBpZiAoIXYpIHsgcmV0dXJuOyB9XHJcbiAgbGV0IG8gPSBbXVxyXG4gIGZvciAobGV0IGkgaW4gdi5zcGxpdCgnLCcpKSB7XHJcbiAgICB2YXIgaiA9IHYuc3BsaXQoJywnKVtpXS5zcGxpdChcIi1cIilcclxuICAgIGlmIChqLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIG8ucHVzaCh2LnNwbGl0KCcsJylbaV0pXHJcbiAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09IDIpIHtcclxuICAgICAgbGV0IHN0YXJ0ID0galswXS5jaGFyQ29kZUF0KDApXHJcbiAgICAgIGxldCBlbmQgPSBqWzFdLmNoYXJDb2RlQXQoMClcclxuICAgICAgaWYgKHN0YXJ0IDw9IGVuZCkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSBzdGFydDsgayA+PSBlbmQ7IGstLSkge1xyXG4gICAgICAgICAgby5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaykudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBvXHJcbn1cclxuLyoqXHJcbiAqIE9XUyBDb250ZXh0IFNlcnZpY2VcclxuICogT0dDIE9XUyBDb250ZXh0IEdlbyBFbmNvZGluZyBTdGFuZGFyZCBWZXJzaW9uOiAxLjBcclxuICogaHR0cDovL2RvY3Mub3Blbmdlb3NwYXRpYWwub3JnL2lzLzE0LTA1NXIyLzE0LTA1NXIyLmh0bWxcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbFxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgYWxsb3dzIHlvdSB0byByZWFkIGFuZCB3cml0ZSBPV0MtZGF0YS5cclxuICogV2UgaGF2ZSBhZGRlZCBzb21lIGN1c3RvbSBmaWVsZHMgdG8gdGhlIE9XQyBzdGFuZGFyZC5cclxuICogICAtIGFjY2VwdHMgdGhlIE9XQy1zdGFuZGFyZC1kYXRhdHlwZXMgYXMgZnVuY3Rpb24gaW5wdXRzIChzbyBhcyB0byBiZSBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlKVxyXG4gKiAgIC0gcmV0dXJucyBvdXIgZXh0ZW5kZWQgT1dDLWRhdGF0eXBlcyBhcyBmdW5jdGlvbiBvdXRwdXRzIChzbyBhcyB0byBiZSBhcyBpbmZvcm1hdGlvbi1yaWNoIGFzIHBvc3NpYmxlKVxyXG4gKlxyXG4gKi9cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE93Y0pzb25TZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB3bXRzQ2xpZW50OiBXbXRzQ2xpZW50U2VydmljZSkge1xyXG4gICAgLy9odHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVnZW9qc29uLWVuY29kaW5nLTJcclxuICB9XHJcblxyXG5cclxuICBjaGVja0NvbnRleHQoY29udGV4dDogSU93c0NvbnRleHQpIHtcclxuICAgIGxldCBpc0NvbnRleHRfMV8wO1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRleHQucHJvcGVydGllcy5saW5rcykpIHtcclxuICAgICAgaXNDb250ZXh0XzFfMCA9IGNvbnRleHQucHJvcGVydGllcy5saW5rcy5wcm9maWxlcy5maW5kKGl0ZW0gPT4gaXRlbSA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzQ29udGV4dF8xXzAgPSBjb250ZXh0LnByb3BlcnRpZXMubGlua3MuZmluZChpdGVtID0+IGl0ZW0uaHJlZiA9PT0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2NvcmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzQ29udGV4dF8xXzApIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndGhpcyBpcyBub3QgYSB2YWxpZCBPV1MgQ29udGV4dCB2MS4wIScpO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBpc0NvbnRleHRfMV8wO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFRpdGxlKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dFB1Ymxpc2hlcihjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LnByb3BlcnRpZXMucHVibGlzaGVyKSA/IGNvbnRleHQucHJvcGVydGllcy5wdWJsaXNoZXIgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dEV4dGVudChjb250ZXh0OiBJT3dzQ29udGV4dCkge1xyXG4gICAgcmV0dXJuIChjb250ZXh0LmJib3gpID8gY29udGV4dC5iYm94IDogbnVsbDsgLy8gb3IgWy0xODAsIC05MCwgMTgwLCA5MF07XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UmVzb3VyY2VzKGNvbnRleHQ6IElPd3NDb250ZXh0KSB7XHJcbiAgICByZXR1cm4gY29udGV4dC5mZWF0dXJlcztcclxuICB9XHJcblxyXG4gIC8qKiBSZXNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnRpdGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VVcGRhdGVkKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiByZXNvdXJjZS5wcm9wZXJ0aWVzLnVwZGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZURhdGUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgcmV0dXJuIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmRhdGUpID8gcmVzb3VyY2UucHJvcGVydGllcy5kYXRlIDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlT2ZmZXJpbmdzKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIHJldHVybiAocmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MpID8gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3MgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0cmlldmUgbGF5ZXIgc3RhdHVzIGFjdGl2ZSAvIGluYWN0aXZlIGJhc2VkIG9uIElPd3NSZXNvdXJjZVxyXG4gICAqIEBwYXJhbSByZXNvdXJjZTogSU93c1Jlc291cmNlXHJcbiAgICovXHJcbiAgaXNBY3RpdmUocmVzb3VyY2U6IElPd3NSZXNvdXJjZSkge1xyXG4gICAgbGV0IGFjdGl2ZSA9IHRydWU7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYWN0aXZlJykpIHtcclxuICAgICAgYWN0aXZlID0gcmVzb3VyY2UucHJvcGVydGllcy5hY3RpdmU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBudW1iZXIge1xyXG4gICAgbGV0IG9wYWNpdHkgPSAxO1xyXG4gICAgaWYgKHJlc291cmNlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ29wYWNpdHknKSkge1xyXG4gICAgICBvcGFjaXR5ID0gcmVzb3VyY2UucHJvcGVydGllcy5vcGFjaXR5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IGF0dHJpYnV0aW9uID0gJyc7XHJcbiAgICBpZiAocmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnYXR0cmlidXRpb24nKSkge1xyXG4gICAgICBhdHRyaWJ1dGlvbiA9IHJlc291cmNlLnByb3BlcnRpZXMuYXR0cmlidXRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cmlidXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJjZVNoYXJkcyhyZXNvdXJjZTogSU93c1Jlc291cmNlKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXNvdXJjZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdzaGFyZHMnKSkge1xyXG4gICAgICByZXR1cm4gcmVzb3VyY2UucHJvcGVydGllcy5zaGFyZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0T3djVGltZVRvSXNvVGltZUFuZFBlcmlvZGljaXR5KG93Y3RpbWU6IHN0cmluZyk6IElMYXllckludGVydmFsQW5kUGVyaW9kIHwgc3RyaW5nIHtcclxuICAgIC8qKlxyXG4gICAgIENvbnZlcnQgZnJvbVxyXG4gICAgKi9cclxuICAgIGxldCBhcnIgPSBvd2N0aW1lLnNwbGl0KCcvJyk7XHJcbiAgICBsZXQgdCA9IChhcnIubGVuZ3RoID09IDMpID8gYXJyWzBdICsgJy8nICsgYXJyWzFdIDogb3djdGltZTtcclxuICAgIGxldCBwID0gKGFyci5sZW5ndGggPT0gMykgPyBhcnJbMl0gOiBudWxsO1xyXG4gICAgaWYgKHApIHtcclxuICAgICAgcmV0dXJuIHsgXCJpbnRlcnZhbFwiOiB0LCBcInBlcmlvZGljaXR5XCI6IHAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3VyY2VEaW1lbnNpb25zKHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBJTGF5ZXJEaW1lbnNpb25zIHtcclxuICAgIGlmICghcmVzb3VyY2UucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnZGltZW5zaW9ucycpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBsZXQgZGltcyA9IHt9XHJcblxyXG4gICAgbGV0IGRpbWVuc2lvbnMgPSB7fVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb3VyY2UucHJvcGVydGllcy5kaW1lbnNpb25zKSkge1xyXG4gICAgICBmb3IgKGxldCBkIG9mIHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9ucykge1xyXG4gICAgICAgIGRpbWVuc2lvbnNbZC5uYW1lXSA9IGRcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGltZW5zaW9ucyA9IHJlc291cmNlLnByb3BlcnRpZXMuZGltZW5zaW9uc1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkaW1lbnNpb25zKSB7XHJcbiAgICAgIGxldCBkaW0gPSB7fVxyXG4gICAgICBjb25zb2xlLmxvZyhuYW1lKVxyXG4gICAgICBpZiAobmFtZSA9PT0gXCJ0aW1lXCIgfHwgZGltZW5zaW9uc1tuYW1lXS51bml0cyA9PSBcIklTTzg2MDFcIikge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRpbWVuc2lvbnNbbmFtZV0udmFsdWVcclxuICAgICAgICBsZXQgdmFsdWVzID0gKHZhbHVlKSA/IHZhbHVlLnNwbGl0KCcsJykubWFwKCh2OiBzdHJpbmcpID0+IHRoaXMuY29udmVydE93Y1RpbWVUb0lzb1RpbWVBbmRQZXJpb2RpY2l0eSh2KSkgOiBudWxsXHJcbiAgICAgICAgZGltID0ge1xyXG4gICAgICAgICAgXCJ2YWx1ZXNcIjogKCghdmFsdWVzKSB8fCB2YWx1ZXMubGVuZ3RoID4gMSkgPyB2YWx1ZXMgOiB2YWx1ZXNbMF0sXHJcbiAgICAgICAgICBcInVuaXRzXCI6IGRpbWVuc2lvbnNbbmFtZV0udW5pdHMsXHJcbiAgICAgICAgICBcImRpc3BsYXlcIjoge1xyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcIllZWU1NRERcIixcclxuICAgICAgICAgICAgXCJwZXJpb2RcIjogZGltZW5zaW9uc1tuYW1lXS5kaXNwbGF5LFxyXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogXCJlbmRcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChuYW1lID09PSBcImVsZXZhdGlvblwiKSB7XHJcbiAgICAgICAgZGltID0gZGltZW5zaW9uc1tuYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaW0gPSBkaW1lbnNpb25zW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGRpbXNbbmFtZV0gPSBkaW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltcztcclxuICB9XHJcblxyXG4gIC8qKiBPZmZlcmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBnZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBUTGF5ZXJ0eXBlIHtcclxuICAgIGlmIChpc1dtc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzV210c09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXbXRzTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1dmc09mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBXZnNMYXllcnR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKGlzR2VvSnNvbk9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBHZW9qc29uTGF5ZXJ0eXBlO1xyXG4gICAgfSBlbHNlIGlmIChpc1h5ek9mZmVyaW5nKG9mZmVyaW5nLmNvZGUpKSB7XHJcbiAgICAgIHJldHVybiBYeXpMYXllcnR5cGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29kZTsgLy8gYW4gb2ZmZXJpbmcgY2FuIGFsc28gYmUgYW55IG90aGVyIHN0cmluZy5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZTZXJ2aWNlT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghb2ZmZXJpbmcuY29udGVudHMgJiYgb2ZmZXJpbmcub3BlcmF0aW9ucykgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAob2ZmZXJpbmcuY29udGVudHMgJiYgIW9mZmVyaW5nLm9wZXJhdGlvbnMpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2ZmZXJpbmdDb250ZW50cyhvZmZlcmluZzogSU93c09mZmVyaW5nKTogSU93c09wZXJhdGlvbltdIHwgSU93c0NvbnRlbnRbXSB7XHJcbiAgICBpZiAodGhpcy5jaGVja0lmU2VydmljZU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcub3BlcmF0aW9ucztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja0lmRGF0YU9mZmVyaW5nKG9mZmVyaW5nKSkge1xyXG4gICAgICByZXR1cm4gb2ZmZXJpbmcuY29udGVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBsZWdlbmRVUkwgZnJvbSBwcm9qZWN0IHNwZWNpZmljIG93cyBDb250ZXh0XHJcbiAgICogQHBhcmFtIG9mZmVyaW5nIGxheWVyIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0TGVnZW5kVXJsKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcpIHtcclxuICAgIGxldCBsZWdlbmRVcmwgPSAnJztcclxuXHJcbiAgICBpZiAob2ZmZXJpbmcuaGFzT3duUHJvcGVydHkoJ3N0eWxlcycpKSB7XHJcbiAgICAgIGxldCBkZWZhdWx0U3R5bGUgPSBvZmZlcmluZy5zdHlsZXMuZmlsdGVyKHN0eWxlID0+IHN0eWxlLmRlZmF1bHQpO1xyXG4gICAgICBpZiAoZGVmYXVsdFN0eWxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFN0eWxlWzBdLmxlZ2VuZFVSTDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvZmZlcmluZy5oYXNPd25Qcm9wZXJ0eSgnbGVnZW5kVXJsJykpIHtcclxuICAgICAgbGVnZW5kVXJsID0gb2ZmZXJpbmcubGVnZW5kVXJsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlZ2VuZFVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGljb25VcmwgYmFzZWQgb24gSU93c09mZmVyaW5nXHJcbiAgICogQHBhcmFtIG9mZmVyaW5nXHJcbiAgICovXHJcbiAgZ2V0SWNvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nKSB7XHJcbiAgICBsZXQgaWNvblVybCA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCdpY29uVXJsJykpIHtcclxuICAgICAgaWNvblVybCA9IG9mZmVyaW5nLmljb25Vcmw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWNvblVybDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxheWVyIHByaW9yaXR5OiBmaXJzdCB3bXMsIHRoZW4gd210cywgdGhlbiB3ZnMsIHRoZW4gb3RoZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRMYXllcnMob3djOiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYXllcltdPiB7XHJcbiAgICBjb25zdCByZXNvdXJjZXMgPSBvd2MuZmVhdHVyZXM7XHJcbiAgICBjb25zdCBsYXllcnMkOiBPYnNlcnZhYmxlPExheWVyPltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuICAgICAgY29uc3Qgb2ZmZXJpbmdzID0gcmVzb3VyY2UucHJvcGVydGllcy5vZmZlcmluZ3M7XHJcbiAgICAgIGlmIChvZmZlcmluZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG9mZmVyaW5nID0gb2ZmZXJpbmdzLmZpbmQobyA9PiBpc1dtc09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV210c09mZmVyaW5nKG8uY29kZSkpXHJcbiAgICAgICAgICB8fCBvZmZlcmluZ3MuZmluZChvID0+IGlzV2ZzT2ZmZXJpbmcoby5jb2RlKSlcclxuICAgICAgICAgIHx8IG9mZmVyaW5nc1swXTtcclxuICAgICAgICBsYXllcnMkLnB1c2godGhpcy5jcmVhdGVMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIG93YywgdGFyZ2V0UHJvamVjdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGxheWVycyQpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8TGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcbiAgICBpZiAoaXNSYXN0ZXJMYXllcnR5cGUobGF5ZXJUeXBlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVSYXN0ZXJMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQsIHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgfSBlbHNlIGlmIChpc1ZlY3RvckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVZlY3RvckxheWVyRnJvbU9mZmVyaW5nKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGlzIHR5cGUgb2Ygc2VydmljZSAoJHtsYXllclR5cGV9KSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgeWV0LmApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlVmVjdG9yTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dD86IElPd3NDb250ZXh0KTogT2JzZXJ2YWJsZTxWZWN0b3JMYXllcj4ge1xyXG4gICAgY29uc3QgbGF5ZXJUeXBlID0gdGhpcy5nZXRMYXllcnR5cGVGcm9tT2ZmZXJpbmdDb2RlKG9mZmVyaW5nKTtcclxuXHJcbiAgICBpZiAoIWlzVmVjdG9yTGF5ZXJ0eXBlKGxheWVyVHlwZSkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIGxheWVyICcke2xheWVyVHlwZX0nIC8gb2ZmZXJpbmcgJyR7b2ZmZXJpbmcuY29kZX0nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgaW50byBhIFZlY3RvcmxheWVyYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLmdldEljb25Vcmwob2ZmZXJpbmcpO1xyXG5cclxuICAgIGxldCBsYXllclVybCwgcGFyYW1zO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIG9wZXJhdGlvbnMtb2ZmZXJpbmcgKHZzLiBhIGRhdGEtb2ZmZXJpbmcpOlxyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIGxheWVyVXJsID0gdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZik7XHJcbiAgICBpZiAob2ZmZXJpbmcub3BlcmF0aW9ucykgcGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG5cclxuICAgIGxldCBkYXRhO1xyXG4gICAgLy8gaWYgd2UgaGF2ZSBhIGRhdGEtb2ZmZXJpbmc6IFxyXG4gICAgaWYgKG9mZmVyaW5nLmNvbnRlbnRzKSB7XHJcbiAgICAgIGRhdGEgPSBvZmZlcmluZy5jb250ZW50c1swXS5jb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsZWdlbmRVcmwgPSB0aGlzLmdldExlZ2VuZFVybChvZmZlcmluZyk7XHJcblxyXG4gICAgbGV0IGxheWVyT3B0aW9uczogSVZlY3RvckxheWVyT3B0aW9ucyA9IHtcclxuICAgICAgaWQ6IHJlc291cmNlLmlkIGFzIHN0cmluZyxcclxuICAgICAgbmFtZTogdGhpcy5nZXRSZXNvdXJjZVRpdGxlKHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIHR5cGU6IGxheWVyVHlwZSxcclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlLFxyXG4gICAgICBhdHRyaWJ1dGlvbjogdGhpcy5nZXRSZXNvdXJjZUF0dHJpYnV0aW9uKHJlc291cmNlKSxcclxuICAgICAgY29udGludW91c1dvcmxkOiBmYWxzZSxcclxuICAgICAgb3BhY2l0eTogdGhpcy5nZXRSZXNvdXJjZU9wYWNpdHkocmVzb3VyY2UpLFxyXG4gICAgICB1cmw6IGxheWVyVXJsID8gbGF5ZXJVcmwgOiBudWxsLFxyXG4gICAgICBsZWdlbmRJbWc6IGxlZ2VuZFVybCA/IGxlZ2VuZFVybCA6IG51bGwsXHJcbiAgICAgIGRhdGE6IGRhdGFcclxuICAgIH07XHJcblxyXG5cclxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKGxheWVyT3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlLmJib3gpIHtcclxuICAgICAgbGF5ZXIuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyLmJib3ggPSBjb250ZXh0LmJib3g7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKGxheWVyKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJhc3RlckxheWVyRnJvbU9mZmVyaW5nKFxyXG4gICAgb2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQsIHRhcmdldFByb2plY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+IHtcclxuICAgIGNvbnN0IGxheWVyVHlwZSA9IHRoaXMuZ2V0TGF5ZXJ0eXBlRnJvbU9mZmVyaW5nQ29kZShvZmZlcmluZyk7XHJcblxyXG4gICAgaWYgKCFpc1Jhc3RlckxheWVydHlwZShsYXllclR5cGUpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBvZmZlcmluZyAnJHtvZmZlcmluZy5jb2RlfScgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIGEgcmFzdGVybGF5ZXIuYCk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByYXN0ZXJMYXllciQ6IE9ic2VydmFibGU8UmFzdGVyTGF5ZXI+O1xyXG4gICAgc3dpdGNoIChsYXllclR5cGUpIHtcclxuICAgICAgY2FzZSBXbXNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXNMYXllckZyb21PZmZlcmluZyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdtdHNMYXllcnR5cGU6XHJcbiAgICAgICAgcmFzdGVyTGF5ZXIkID0gdGhpcy5jcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgLy8gQFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDdXN0b21MYXllcnR5cGU6XHJcbiAgICAgICAgLy8gY3VzdG9tIGxheWVycyBhcmUgbWVhbnQgdG8gYmUgdXNlcmRlZmluZWQgYW5kIG5vdCBlYXNpbHkgZW5jb2RlZCBpbiBhIE9XQy5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmFzdGVyTGF5ZXIkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVXbXRzTGF5ZXJGcm9tT2ZmZXJpbmcoXHJcbiAgICBvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxXbXRzTGF5ZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFdtdHNPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCwgdGFyZ2V0UHJvamVjdGlvbikucGlwZShtYXAoKG9wdGlvbnM6IElXbXRzT3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBsYXllciA9IG5ldyBXbXRzTGF5ZXIob3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiBsYXllcjtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlV21zTGF5ZXJGcm9tT2ZmZXJpbmcob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBPYnNlcnZhYmxlPFdtc0xheWVyPiB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBJV21zT3B0aW9ucyA9IHRoaXMuZ2V0V21zT3B0aW9ucyhvZmZlcmluZywgcmVzb3VyY2UsIGNvbnRleHQpO1xyXG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgV21zTGF5ZXIob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gb2YobGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRXbXRzT3B0aW9ucyhcclxuICAgIG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UsIGNvbnRleHQ6IElPd3NDb250ZXh0LCB0YXJnZXRQcm9qZWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElXbXRzT3B0aW9ucz4ge1xyXG4gICAgY29uc3QgcmFzdGVyT3B0aW9uczogSVJhc3RlckxheWVyT3B0aW9ucyA9IHRoaXMuZ2V0UmFzdGVyTGF5ZXJPcHRpb25zKG9mZmVyaW5nLCByZXNvdXJjZSwgY29udGV4dCk7XHJcblxyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyRm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UpO1xyXG5cclxuICAgIGxldCBzdHlsZTogc3RyaW5nO1xyXG4gICAgaWYgKG9mZmVyaW5nLnN0eWxlcykge1xyXG4gICAgICBjb25zdCBzdHlsZUluZm8gPSBvZmZlcmluZy5zdHlsZXMuZmluZChzID0+IHMuZGVmYXVsdCk7XHJcbiAgICAgIGlmIChzdHlsZUluZm8pIHtcclxuICAgICAgICBzdHlsZSA9IHN0eWxlSW5mby5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TWF0cml4U2V0Rm9yV01UUyhvZmZlcmluZywgcmVzb3VyY2UsIHRhcmdldFByb2plY3Rpb24pLnBpcGUobWFwKCgobWF0cml4U2V0OiBJRW9jT3dzV210c01hdHJpeFNldCkgPT4ge1xyXG4gICAgICBjb25zdCBtYXRyaXhTZXRPcHRpb25zOiBJTGlzdE1hdHJpeFNldCA9IHtcclxuICAgICAgICBtYXRyaXhTZXQ6IG1hdHJpeFNldC5tYXRyaXhTZXQsXHJcbiAgICAgICAgbWF0cml4SWRzOiBtYXRyaXhTZXQubWF0cml4SWRzLFxyXG4gICAgICAgIHJlc29sdXRpb25zOiBtYXRyaXhTZXQucmVzb2x1dGlvbnNcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgd210c09wdGlvbnM6IElXbXRzT3B0aW9ucyA9IHtcclxuICAgICAgICAuLi5yYXN0ZXJPcHRpb25zLFxyXG4gICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGxheWVyOiBsYXllcixcclxuICAgICAgICAgIG1hdHJpeFNldE9wdGlvbnM6IG1hdHJpeFNldE9wdGlvbnMsXHJcbiAgICAgICAgICBwcm9qZWN0aW9uOiB0YXJnZXRQcm9qZWN0aW9uLFxyXG4gICAgICAgICAgc3R5bGU6IHN0eWxlLFxyXG4gICAgICAgICAgZm9ybWF0OiAnaW1hZ2UvcG5nJ1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtdHNPcHRpb25zO1xyXG4gICAgfSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGF5ZXJGb3JXTVRTKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgW3VybCwgdXJsUGFyYW1zXSA9IHRoaXMucGFyc2VPcGVyYXRpb25Vcmwob2ZmZXJpbmcsICdHZXRUaWxlJyk7XHJcbiAgICBpZiAodXJsUGFyYW1zWydMQVlFUiddKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJhbXNbJ0xBWUVSJ107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGVyZSBpcyBubyBsYXllci1wYXJhbWV0ZXIgaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0gZm9yIHJlc291cmNlICR7cmVzb3VyY2UuaWR9LlxyXG4gICAgICBDYW5ub3QgaW5mZXIgbGF5ZXIuYCwgb2ZmZXJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZU9wZXJhdGlvblVybChvZmZlcmluZzogSU93c09mZmVyaW5nLCBvcENvZGU6IHN0cmluZyk6IFtzdHJpbmcsIG9iamVjdF0ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm9wZXJhdGlvbnMpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0aW9uID0gb2ZmZXJpbmcub3BlcmF0aW9ucy5maW5kKG9wID0+IG9wLmNvZGUgPT09IG9wQ29kZSk7XHJcbiAgICAgIGlmIChvcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybEZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IHRoaXMuZ2V0SnNvbkZyb21Vcmkob3BlcmF0aW9uLmhyZWYpO1xyXG4gICAgICAgIHJldHVybiBbdXJsLCB1cmxQYXJhbXNdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoZXJlIGlzIG5vICR7b3BDb2RlfS1vcGVyYXRpb24gaW4gdGhlIG9mZmVyaW5nICR7b2ZmZXJpbmcuY29kZX0uYCwgb2ZmZXJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgb2ZmZXJpbmcgJHtvZmZlcmluZy5jb2RlfSBoYXMgbm8gb3BlcmF0aW9ucy5gLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hdHJpeFNldEZvcldNVFMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgdGFyZ2V0UHJvamVjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW9jT3dzV210c01hdHJpeFNldD4ge1xyXG4gICAgaWYgKG9mZmVyaW5nLm1hdHJpeFNldHMpIHtcclxuICAgICAgY29uc3QgbWF0cml4U2V0ID0gb2ZmZXJpbmcubWF0cml4U2V0cy5maW5kKG0gPT4gbS5zcnMgPT09IHRhcmdldFByb2plY3Rpb24pO1xyXG4gICAgICByZXR1cm4gb2YobWF0cml4U2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IFt1cmwsIHVybFBhcmFtc10gPSB0aGlzLnBhcnNlT3BlcmF0aW9uVXJsKG9mZmVyaW5nLCAnR2V0Q2FwYWJpbGl0aWVzJyk7XHJcbiAgICAgIHJldHVybiB0aGlzLndtdHNDbGllbnQuZ2V0Q2FwYWJpbGl0aWVzKHVybCkucGlwZShcclxuICAgICAgICBtYXAoKGNhcGFiaWxpdGllczogb2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXRzID0gY2FwYWJpbGl0aWVzWyd2YWx1ZSddWydjb250ZW50cyddWyd0aWxlTWF0cml4U2V0J107XHJcbiAgICAgICAgICBjb25zdCBtYXRyaXhTZXQgPSBtYXRyaXhTZXRzLmZpbmQobXMgPT4gbXNbJ2lkZW50aWZpZXInXVsndmFsdWUnXSA9PT0gdGFyZ2V0UHJvamVjdGlvbik7XHJcbiAgICAgICAgICBjb25zdCBvd3NNYXRyaXhTZXQ6IElFb2NPd3NXbXRzTWF0cml4U2V0ID0ge1xyXG4gICAgICAgICAgICBzcnM6IHRhcmdldFByb2plY3Rpb24sXHJcbiAgICAgICAgICAgIG1hdHJpeFNldDogbWF0cml4U2V0WydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10sXHJcbiAgICAgICAgICAgIG1hdHJpeElkczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydpZGVudGlmaWVyJ11bJ3ZhbHVlJ10pLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uczogbWF0cml4U2V0Wyd0aWxlTWF0cml4J10ubWFwKHRtID0+IHRtWydzY2FsZURlbm9taW5hdG9yJ10pLFxyXG4gICAgICAgICAgICBvcmlnaW46IHtcclxuICAgICAgICAgICAgICB4OiBtYXRyaXhTZXRbJ3RpbGVNYXRyaXgnXVswXVsndG9wTGVmdENvcm5lciddWzFdLFxyXG4gICAgICAgICAgICAgIHk6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0b3BMZWZ0Q29ybmVyJ11bMF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGlsZXNpemU6IG1hdHJpeFNldFsndGlsZU1hdHJpeCddWzBdWyd0aWxlSGVpZ2h0J11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gb3dzTWF0cml4U2V0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdtc09wdGlvbnMob2ZmZXJpbmc6IElPd3NPZmZlcmluZywgcmVzb3VyY2U6IElPd3NSZXNvdXJjZSwgY29udGV4dDogSU93c0NvbnRleHQpOiBJV21zT3B0aW9ucyB7XHJcbiAgICBjb25zdCByYXN0ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRSYXN0ZXJMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChyYXN0ZXJPcHRpb25zLnR5cGUgPT09IFdtc0xheWVydHlwZSkge1xyXG5cclxuICAgICAgY29uc3QgdXJsUGFyYW1zID0gdGhpcy5nZXRKc29uRnJvbVVyaShvZmZlcmluZy5vcGVyYXRpb25zWzBdLmhyZWYpO1xyXG4gICAgICBsZXQgZGVmYXVsdFN0eWxlO1xyXG4gICAgICBpZiAob2ZmZXJpbmcuc3R5bGVzKSB7XHJcbiAgICAgICAgZGVmYXVsdFN0eWxlID0gb2ZmZXJpbmcuc3R5bGVzLmZpbmQocyA9PiBzLmRlZmF1bHQpLm5hbWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcmFtczogSVdtc1BhcmFtcyA9IHtcclxuICAgICAgICBMQVlFUlM6IHVybFBhcmFtc1snTEFZRVJTJ10sXHJcbiAgICAgICAgRk9STUFUOiB1cmxQYXJhbXNbJ0ZPUk1BVCddLFxyXG4gICAgICAgIFRJTUU6IHVybFBhcmFtc1snVElNRSddLFxyXG4gICAgICAgIFZFUlNJT046IHVybFBhcmFtc1snVkVSU0lPTiddLFxyXG4gICAgICAgIFRJTEVEOiB1cmxQYXJhbXNbJ1RJTEVEJ10sXHJcbiAgICAgICAgVFJBTlNQQVJFTlQ6IHRydWUsXHJcbiAgICAgICAgU1RZTEVTOiBkZWZhdWx0U3R5bGVcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHdtc09wdGlvbnM6IElXbXNPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLnJhc3Rlck9wdGlvbnMsXHJcbiAgICAgICAgdHlwZTogJ3dtcycsXHJcbiAgICAgICAgcGFyYW1zOiBwYXJhbXNcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHdtc09wdGlvbnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGByZXNvdXJjZSAke3Jlc291cmNlLmlkfSBjYW5ub3QgYmUgY29udmVydGVkIGludG8gYSBXTVMtTGF5ZXJgLCBvZmZlcmluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJhc3RlckxheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElSYXN0ZXJMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0gdGhpcy5nZXRMYXllck9wdGlvbnMob2ZmZXJpbmcsIHJlc291cmNlLCBjb250ZXh0KTtcclxuICAgIGlmIChpc1Jhc3RlckxheWVydHlwZShsYXllck9wdGlvbnMudHlwZSkpIHtcclxuICAgICAgY29uc3QgcmFzdGVyTGF5ZXJPcHRpb25zOiBJUmFzdGVyTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICAgIC4uLmxheWVyT3B0aW9ucyxcclxuICAgICAgICB0eXBlOiBsYXllck9wdGlvbnMudHlwZSBhcyBUUmFzdGVyTGF5ZXJ0eXBlLFxyXG4gICAgICAgIHVybDogdGhpcy5nZXRVcmxGcm9tVXJpKG9mZmVyaW5nLm9wZXJhdGlvbnNbMF0uaHJlZiksXHJcbiAgICAgICAgc3ViZG9tYWluczogc2hhcmRzRXhwYW5kKHRoaXMuZ2V0UmVzb3VyY2VTaGFyZHMocmVzb3VyY2UpKVxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmFzdGVyTGF5ZXJPcHRpb25zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgVGhlIGxheWVyICR7bGF5ZXJPcHRpb25zLmlkfSBpcyBub3QgYSByYXN0ZXJsYXllcmAsIGxheWVyT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExheWVyT3B0aW9ucyhvZmZlcmluZzogSU93c09mZmVyaW5nLCByZXNvdXJjZTogSU93c1Jlc291cmNlLCBjb250ZXh0OiBJT3dzQ29udGV4dCk6IElMYXllck9wdGlvbnMge1xyXG4gICAgY29uc3QgbGF5ZXJPcHRpb25zOiBJTGF5ZXJPcHRpb25zID0ge1xyXG4gICAgICBpZDogcmVzb3VyY2UuaWQgYXMgc3RyaW5nLFxyXG4gICAgICB0eXBlOiB0aGlzLmdldExheWVydHlwZUZyb21PZmZlcmluZ0NvZGUob2ZmZXJpbmcpLFxyXG4gICAgICBuYW1lOiB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpLFxyXG4gICAgICByZW1vdmFibGU6IHRydWUsXHJcbiAgICAgIGNvbnRpbnVvdXNXb3JsZDogZmFsc2UsXHJcbiAgICAgIG9wYWNpdHk6IHRoaXMuZ2V0UmVzb3VyY2VPcGFjaXR5KHJlc291cmNlKSxcclxuICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGlzcGxheU5hbWUob2ZmZXJpbmcsIHJlc291cmNlKSxcclxuICAgICAgdmlzaWJsZTogdGhpcy5pc0FjdGl2ZShyZXNvdXJjZSksXHJcbiAgICAgIGF0dHJpYnV0aW9uOiB0aGlzLmdldFJlc291cmNlQXR0cmlidXRpb24ocmVzb3VyY2UpLFxyXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmdldFJlc291cmNlRGltZW5zaW9ucyhyZXNvdXJjZSksXHJcbiAgICAgIGxlZ2VuZEltZzogdGhpcy5nZXRMZWdlbmRVcmwob2ZmZXJpbmcpLFxyXG4gICAgICBzdHlsZXM6IG9mZmVyaW5nLnN0eWxlc1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmVzb3VyY2UuYmJveCkge1xyXG4gICAgICBsYXllck9wdGlvbnMuYmJveCA9IHJlc291cmNlLmJib3g7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgJiYgY29udGV4dC5iYm94KSB7XHJcbiAgICAgIGxheWVyT3B0aW9ucy5iYm94ID0gY29udGV4dC5iYm94O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllck9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKiogTWlzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgcHJpdmF0ZSBnZXRVcmxGcm9tVXJpKHVyaTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdXJpLnN1YnN0cmluZygwLCB1cmkuaW5kZXhPZignPycpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhlbHBlciB0byBwYWNrIHF1ZXJ5LXBhcmFtZXRlcnMgb2YgYSB1cmkgaW50byBhIEpTT05cclxuICAgKiBAcGFyYW0gdXJpIGFueSB1cmkgd2l0aCBxdWVyeS1wYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRKc29uRnJvbVVyaSh1cmk6IHN0cmluZyk6IG9iamVjdCB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHVyaS5zdWJzdHIodXJpLmxhc3RJbmRleE9mKCc/JykgKyAxKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xyXG4gICAgcXVlcnkuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBwYXJ0LnNwbGl0KCc9Jyk7XHJcbiAgICAgIHJlc3VsdFtpdGVtWzBdLnRvVXBwZXJDYXNlKCldID0gZGVjb2RlVVJJQ29tcG9uZW50KGl0ZW1bMV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHJpZXZlIGRpc3BsYXkgbmFtZSBvZiBsYXllciwgYmFzZWQgb24gSU93c1Jlc291cmNlIGFuZCBJT3dzT2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gb2ZmZXJpbmdcclxuICAgKiBAcGFyYW0gcmVzb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpc3BsYXlOYW1lKG9mZmVyaW5nOiBJT3dzT2ZmZXJpbmcsIHJlc291cmNlOiBJT3dzUmVzb3VyY2UpIHtcclxuICAgIGxldCBkaXNwbGF5TmFtZSA9ICcnO1xyXG4gICAgaWYgKG9mZmVyaW5nLmhhc093blByb3BlcnR5KCd0aXRsZScpKSB7XHJcbiAgICAgIGlmIChvZmZlcmluZy50aXRsZSkge1xyXG4gICAgICAgIGRpc3BsYXlOYW1lID0gb2ZmZXJpbmcudGl0bGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGlzcGxheU5hbWUgPSB0aGlzLmdldFJlc291cmNlVGl0bGUocmVzb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqLS0tLS0tLS0tLS0tIERBVEEgVE8gRklMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG5cclxuICAvKipcclxuICAgKiBAVE9ETzpcclxuICAgKiAgIC0gcHJvcGVydGllc1xyXG4gICAqL1xyXG4gIGdlbmVyYXRlT3dzQ29udGV4dEZyb20oaWQ6IHN0cmluZywgbGF5ZXJzOiBMYXllcltdLCBleHRlbnQ/OiBUR2VvRXh0ZW50LCBwcm9wZXJ0aWVzPyk6IElFb2NPd3NDb250ZXh0IHtcclxuXHJcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICBsYW5nOiAnJyxcclxuICAgICAgICBsaW5rczogW10sXHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZWQ6ICcnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG93YzogSUVvY093c0NvbnRleHQgPSB7XHJcbiAgICAgICdpZCc6IGlkLFxyXG4gICAgICAndHlwZSc6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgICAgICdwcm9wZXJ0aWVzJzogcHJvcGVydGllcyxcclxuICAgICAgJ2ZlYXR1cmVzJzogW11cclxuICAgIH07XHJcblxyXG4gICAgaWYgKGV4dGVudCkge1xyXG4gICAgICBvd2NbJ2Jib3gnXSA9IGV4dGVudDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgbGV0IHJlc291cmNlOiBJRW9jT3dzUmVzb3VyY2UgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAvLyBUT0RPIGNoZWNrIGZvciBsYXllciB0eXBlc1xyXG4gICAgICBvd2MuZmVhdHVyZXMucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG93YztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUmVzb3VyY2VGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogSUVvY093c1Jlc291cmNlIHtcclxuICAgIGxldCByZXNvdXJjZTogSUVvY093c1Jlc291cmNlID0ge1xyXG4gICAgICAnaWQnOiBsYXllci5pZCxcclxuICAgICAgJ3Byb3BlcnRpZXMnOiB7XHJcbiAgICAgICAgdGl0bGU6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgdXBkYXRlZDogbnVsbCxcclxuICAgICAgICBvZmZlcmluZ3M6IFt0aGlzLmdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXIpXSxcclxuICAgICAgICBvcGFjaXR5OiBsYXllci5vcGFjaXR5LFxyXG4gICAgICAgIGF0dHJpYnV0aW9uOiBsYXllci5hdHRyaWJ1dGlvbixcclxuICAgICAgfSxcclxuICAgICAgJ3R5cGUnOiAnRmVhdHVyZScsXHJcbiAgICAgICdnZW9tZXRyeSc6IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiByZXNvdXJjZTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlT2ZmZXJpbmdGcm9tTGF5ZXIobGF5ZXI6IExheWVyLCBsZWdlbmRVcmw/OiBzdHJpbmcsIGljb25Vcmw/OiBzdHJpbmcpOiBJRW9jT3dzT2ZmZXJpbmcge1xyXG4gICAgbGV0IG9mZmVyaW5nOiBJRW9jT3dzT2ZmZXJpbmcgPSB7XHJcbiAgICAgICdjb2RlJzogdGhpcy5nZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXIpLFxyXG4gICAgICAndGl0bGUnOiBsYXllci5uYW1lXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChsYXllci50eXBlID09IEdlb2pzb25MYXllcnR5cGUpIHtcclxuICAgICAgb2ZmZXJpbmcuY29udGVudHMgPSB0aGlzLmdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyIGFzIFZlY3RvckxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9mZmVyaW5nLm9wZXJhdGlvbnMgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsZWdlbmRVcmwpIG9mZmVyaW5nLmxlZ2VuZFVybCA9IGxlZ2VuZFVybDtcclxuICAgIGlmIChpY29uVXJsKSBvZmZlcmluZy5pY29uVXJsID0gaWNvblVybDtcclxuXHJcbiAgICByZXR1cm4gb2ZmZXJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXRPZmZlcmluZ0NvZGVGcm9tTGF5ZXIobGF5ZXI6IExheWVyKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcyc7XHJcbiAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICByZXR1cm4gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtdHMnO1xyXG4gICAgICBjYXNlIEdlb2pzb25MYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW9qc29uJztcclxuICAgICAgY2FzZSBYeXpMYXllcnR5cGU6XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRoaXMgdHlwZSBvZiBsYXllciAoJHtsYXllci50eXBlfSkgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIHlldC5gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRzRnJvbUxheWVyKGxheWVyOiBWZWN0b3JMYXllcik6IElPd3NDb250ZW50W10ge1xyXG4gICAgbGV0IGNvbnRlbnRzID0gW107XHJcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgY2FzZSBHZW9qc29uTGF5ZXJ0eXBlOlxyXG4gICAgICAgIGxldCBjb250ZW50ID0ge1xyXG4gICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcclxuICAgICAgICAgIGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KGxheWVyLmRhdGEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb250ZW50cy5wdXNoKGNvbnRlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBnZXQgY29udGVudHMgZm9yIHRoaXMgdHlwZSBvZiB2ZWN0b3JsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudHM7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBSYXN0ZXJMYXllcikge1xyXG4gICAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFdtc0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGNhc2UgV210c0xheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdtdHNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBjYXNlIFh5ekxheWVydHlwZTpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFh5ek9wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBDYW5ub3QgZ2V0IG9wZXJhdGlvbnMgZm9yIHRoaXMgdHlwZSBvZiBsYXllcjogKCR7bGF5ZXIudHlwZX0pYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyKSB7XHJcbiAgICAgIHN3aXRjaCAobGF5ZXIudHlwZSkge1xyXG4gICAgICAgIC8vIGNhc2UgJ3dmcyc6IDwtLS0gdGhpcyB0eXBlIG9mIGxheWVyIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQgaW4gZGF0YXR5cGVzLWxheWVycy9MYXllcnMudHMgXHJcbiAgICAgICAgLy8gICByZXR1cm4gdGhpcy5nZXRXZnNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyKTtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVGhpcyB0eXBlIG9mIHNlcnZpY2UgKCR7bGF5ZXIudHlwZX0pIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuYCk7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0WHl6T3BlcmF0aW9uc0Zyb21MYXllcihsYXllcjogUmFzdGVyTGF5ZXIpOiBJT3dzT3BlcmF0aW9uW10ge1xyXG4gICAgbGV0IHJlc3RDYWxsOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdSRVNUJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICd0ZXh0L2h0bWwnLFxyXG4gICAgICAnaHJlZic6IGAke2xheWVyLnVybH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgcmVzdENhbGxcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRUbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcbiAgICAvLyBAVE9ETzogd2hhdCBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uIFRNUz8gaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFdmc09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFZlY3RvckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IGxheWVyTmFtZSA9IGxheWVyLm5hbWU7XHJcbiAgICBsZXQgdmVyc2lvbiA9IGxheWVyLm9wdGlvbnMudmVyc2lvbiA/IGxheWVyLm9wdGlvbnMudmVyc2lvbiA6ICcxLjEuMCc7XHJcblxyXG5cclxuICAgIGxldCBHZXRGZWF0dXJlOiBJT3dzT3BlcmF0aW9uID0ge1xyXG4gICAgICAnY29kZSc6ICdHZXRGZWF0dXJlJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V0ZTJnZlcnNpb249JHt2ZXJzaW9ufSZyZXF1ZXN0PUdldEZlYXR1cmVgXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGxldCBEZXNjcmliZUZlYXR1cmVUeXBlOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBHZXRDYXBhYmlsaXRpZXM6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldFByb3BlcnR5VmFsdWU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IEdldEZlYXR1cmVXaXRoTG9jazogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgTG9ja0ZlYXR1cmU6IElPd3NPcGVyYXRpb24gPSBudWxsO1xyXG4gICAgLy8gbGV0IFRyYW5zYWN0aW9uOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBDcmVhdGVTdG9yZWRRdWVyeTogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRHJvcFN0b3JlZFF1ZXJ5OiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuICAgIC8vIGxldCBMaXN0U3RvcmVkUXVlcmllczogSU93c09wZXJhdGlvbiA9IG51bGw7XHJcbiAgICAvLyBsZXQgRGVzY3JpYmVTdG9yZWRRdWVyaWVzOiBJT3dzT3BlcmF0aW9uID0gbnVsbDtcclxuXHJcbiAgICBsZXQgb3BlcmF0aW9ucyA9IFtcclxuICAgICAgR2V0RmVhdHVyZSxcclxuICAgICAgLy8gR2V0Q2FwYWJpbGl0aWVzLFxyXG4gICAgICAvLyBEZXNjcmliZUZlYXR1cmVUeXBlLFxyXG4gICAgICAvLyBHZXRQcm9wZXJ0eVZhbHVlLFxyXG4gICAgICAvLyBHZXRGZWF0dXJlV2l0aExvY2ssXHJcbiAgICAgIC8vIExvY2tGZWF0dXJlLFxyXG4gICAgICAvLyBUcmFuc2FjdGlvbixcclxuICAgICAgLy8gQ3JlYXRlU3RvcmVkUXVlcnksXHJcbiAgICAgIC8vIERyb3BTdG9yZWRRdWVyeSxcclxuICAgICAgLy8gTGlzdFN0b3JlZFF1ZXJpZXMsXHJcbiAgICAgIC8vIERlc2NyaWJlU3RvcmVkUXVlcmllc1xyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucztcclxuICB9XHJcblxyXG5cclxuICBnZXRXbXNPcGVyYXRpb25zRnJvbUxheWVyKGxheWVyOiBSYXN0ZXJMYXllcik6IElPd3NPcGVyYXRpb25bXSB7XHJcblxyXG4gICAgbGV0IHVybCA9IGxheWVyLnVybDtcclxuICAgIGxldCB3bXNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLlZFUlNJT047XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldE1hcDogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0TWFwJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6IGZvcm1hdCxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P3NlcnZpY2U9V01TJnZlcnNpb249JHt3bXNWZXJzaW9ufSZyZXF1ZXN0PUdldE1hcCZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH0mVElMRUQ9dHJ1ZWBcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/c2VydmljZT1XTVMmdmVyc2lvbj0ke3dtc1ZlcnNpb259JnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzYFxyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZXRGZWF0dXJlSW5mbzogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0RmVhdHVyZUluZm8nLFxyXG4gICAgICAnbWV0aG9kJzogJ0dFVCcsXHJcbiAgICAgICd0eXBlJzogJ3RleHQvaHRtbCcsXHJcbiAgICAgICdocmVmJzogYCR7dXJsfT9zZXJ2aWNlPVdNUyZ2ZXJzaW9uPSR7d21zVmVyc2lvbn0mcmVxdWVzdD1HZXRGZWF0dXJlSW5mbyZUUkFOU1BBUkVOVD1UUlVFJkxBWUVSUz0ke2xheWVySWR9JkZPUk1BVD0ke2Zvcm1hdH1gXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9wZXJhdGlvbnM6IElPd3NPcGVyYXRpb25bXSA9IFtcclxuICAgICAgZ2V0TWFwLFxyXG4gICAgICBnZXRDYXBhYmlsaXRpZXMsXHJcbiAgICAgIGdldEZlYXR1cmVJbmZvXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBvcGVyYXRpb25zO1xyXG4gIH1cclxuXHJcbiAgZ2V0V210c09wZXJhdGlvbnNGcm9tTGF5ZXIobGF5ZXI6IFJhc3RlckxheWVyKTogSU93c09wZXJhdGlvbltdIHtcclxuXHJcbiAgICBsZXQgdXJsID0gbGF5ZXIudXJsO1xyXG4gICAgbGV0IHdtdHNWZXJzaW9uID0gbGF5ZXIucGFyYW1zLnZlcnNpb247XHJcbiAgICBsZXQgbGF5ZXJOYW1lID0gbGF5ZXIubmFtZTtcclxuICAgIGxldCBsYXllcklkID0gbGF5ZXIuaWQ7XHJcbiAgICBsZXQgZm9ybWF0ID0gJ2ltYWdlL3ZuZC5qcGVnLXBuZyc7XHJcbiAgICBpZiAobGF5ZXIucGFyYW1zICYmIGxheWVyLnBhcmFtcy5GT1JNQVQpIGZvcm1hdCA9IGxheWVyLnBhcmFtcy5GT1JNQVQ7XHJcblxyXG4gICAgbGV0IGdldFRpbGU6IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldFRpbGUnLFxyXG4gICAgICAnaHJlZic6IGAke3VybH0/U0VSVklDRT1XTVRTJlJFUVVFU1Q9R2V0VGlsZSZGT1JNQVQ9JHtmb3JtYXR9JkxBWUVSPSR7bGF5ZXJJZH0mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiBmb3JtYXRcclxuICAgIH07XHJcblxyXG4gICAgbGV0IGdldENhcGFiaWxpdGllczogSU93c09wZXJhdGlvbiA9IHtcclxuICAgICAgJ2NvZGUnOiAnR2V0Q2FwYWJpbGl0aWVzJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPSR7d210c1ZlcnNpb259YCxcclxuICAgICAgJ21ldGhvZCc6ICdHRVQnLFxyXG4gICAgICAndHlwZSc6ICdhcHBsaWNhdGlvbi94bWwnXHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm90ZTogd2UgZGVsaWJlcmF0ZWx5IHVzZSB0aGUgV01TIHByb3RvY29sIGhlcmUgaW5zdGVhZCBvZiBXTVRTLlxyXG4gICAgLy8gUmVhc29uOiBXTVRTIGRlbGl2ZXJzIFJHQi12YWx1ZXMsIHdoZXJhcyBXTVMgZGVsaXZlcnMgdGhlIGFjdHVhbCB2YWx1ZSB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSBhIHRpbGUuXHJcbiAgICBsZXQgZ2V0RmVhdHVyZUluZm86IElPd3NPcGVyYXRpb24gPSB7XHJcbiAgICAgICdjb2RlJzogJ0dldEZlYXR1cmVJbmZvJyxcclxuICAgICAgJ2hyZWYnOiBgJHt1cmx9P1NFUlZJQ0U9V01TJlJFUVVFU1Q9R2V0RmVhdHVyZUluZm8mVkVSU0lPTj0ke3dtdHNWZXJzaW9ufWAsXHJcbiAgICAgICdtZXRob2QnOiAnR0VUJyxcclxuICAgICAgJ3R5cGUnOiAndGV4dC9odG1sJ1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcGVyYXRpb25zOiBJT3dzT3BlcmF0aW9uW10gPSBbXHJcbiAgICAgIGdldFRpbGUsXHJcbiAgICAgIGdldENhcGFiaWxpdGllcyxcclxuICAgICAgZ2V0RmVhdHVyZUluZm9cclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnM7XHJcbiAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/owc/types/eoc-owc-json.js b/@ukis/services-ogc/esm5/lib/owc/types/eoc-owc-json.js deleted file mode 100644 index 734e24c8b..000000000 --- a/@ukis/services-ogc/esm5/lib/owc/types/eoc-owc-json.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -export function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -export function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -export function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -export function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -export function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -export function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -export function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -export function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW9jLW93Yy1qc29uLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL293Yy90eXBlcy9lb2Mtb3djLWpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFPQSxvQ0FHQzs7O0lBRkcsa0NBQTRCOztJQUM1QixxQ0FBa0M7Ozs7O0FBR3RDLHFDQUVDOzs7SUFERyxxQ0FBc0M7Ozs7O0FBRzFDLCtDQUtDOzs7SUFKRyw0Q0FBaUI7O0lBQ2pCLGdEQUFxQjs7SUFDckIsMkNBQWdCOztJQUNoQiwrQ0FBdUM7Ozs7O0FBRzNDLCtDQUlDOzs7SUFIQyx5Q0FBZ0M7O0lBQ2hDLDhDQUFxQzs7Ozs7O0FBSXZDLDhDQUtDOzs7Ozs7SUFIQywyQ0FBaUI7O0lBQ2pCLHlDQUFjOztJQUNkLHlDQUFlOzs7OztBQUdqQixxQ0FPQzs7O0lBTkcsK0JBRWdEOztJQUNoRCxvQ0FBbUI7O0lBQ25CLGtDQUFpQjs7SUFDakIsZ0NBQWU7Ozs7O0FBR25CLHFDQUVDOzs7SUFERywrQkFBbUI7Ozs7O0FBR3ZCLHlDQUdDOzs7SUFGRyxtQ0FBb0I7O0lBQ3BCLHlDQUFvQzs7Ozs7QUFHeEMsMENBY0M7Ozs7OztJQVpHLG1DQUFZOztJQUNaLHlDQUFrQjs7SUFDbEIseUNBQW9COztJQUNwQixzQ0FHRTs7SUFDRiwyQ0FBc0I7O0lBQ3RCLHdDQUdFOzs7OztBQUdOLHVDQUtDOzs7SUFKRyxpQ0FBbUI7O0lBQ25CLGlDQUFhOztJQUNiLG9DQUFrQjs7SUFDbEIsaUNBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU93c0NvbnRleHQsIElPd3NSZXNvdXJjZSwgSU93c09mZmVyaW5nLCBXTVNfT2ZmZXJpbmcsIFdGU19PZmZlcmluZywgV0NTX09mZmVyaW5nLCBXUFNfT2ZmZXJpbmcsXHJcbiAgICBDU1dfT2ZmZXJpbmcsIFdNVFNfT2ZmZXJpbmcsIEdNTF9PZmZlcmluZywgS01MX09mZmVyaW5nLCBHZW9USUZGX09mZmVyaW5nLCBHTUxKUDJfT2ZmZXJpbmcsXHJcbiAgICBHTUxDT1ZfT2ZmZXJpbmcsIElPd3NSZXNvdXJjZVByb3BlcnRpZXMgfSBmcm9tICcuL293Yy1qc29uJztcclxuXHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2VvSlNPTiBmcm9tICdnZW9qc29uJztcclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzQ29udGV4dCBleHRlbmRzIElPd3NDb250ZXh0IHtcclxuICAgIGZlYXR1cmVzOiBJRW9jT3dzUmVzb3VyY2VbXTtcclxuICAgIHByb2plY3Rpb25zPzogSUVvY093c1Byb2plY3Rpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2UgZXh0ZW5kcyBJT3dzUmVzb3VyY2Uge1xyXG4gICAgcHJvcGVydGllczogSUVvY093c1Jlc291cmNlUHJvcGVydGllcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIGV4dGVuZHMgSU93c1Jlc291cmNlUHJvcGVydGllcyB7XHJcbiAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG4gICAgYXR0cmlidXRpb24/OiBzdHJpbmc7XHJcbiAgICBzaGFyZHM/OiBzdHJpbmc7XHJcbiAgICBkaW1lbnNpb25zPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9ucztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRW9jT3dzUmVzb3VyY2VEaW1lbnNpb25zIHtcclxuICB0aW1lPzogSUVvY093c1Jlc291cmNlRGltZW5zaW9uO1xyXG4gIGVsZXZhdGlvbj86IElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbjtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NSZXNvdXJjZURpbWVuc2lvbiB7XHJcbiAgLyoqIERlZmF1bHQgc3RlcCBkaXNwbGF5IG9mIHRpbWUgc2xpZGVyICovXHJcbiAgZGlzcGxheT86IHN0cmluZztcclxuICB1bml0czogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NPZmZlcmluZyBleHRlbmRzIElPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmcgfCBXRlNfT2ZmZXJpbmcgfCBXQ1NfT2ZmZXJpbmcgfCBXUFNfT2ZmZXJpbmcgfCBDU1dfT2ZmZXJpbmcgfFxyXG4gICAgICAgIFdNVFNfT2ZmZXJpbmcgfCBHTUxfT2ZmZXJpbmcgfCBLTUxfT2ZmZXJpbmcgfCBHZW9USUZGX09mZmVyaW5nIHwgR01MSlAyX09mZmVyaW5nIHxcclxuICAgICAgICBHTUxDT1ZfT2ZmZXJpbmcgfCBHZW9Kc29uX09mZmVyaW5nIHwgc3RyaW5nO1xyXG4gICAgbGVnZW5kVXJsPzogc3RyaW5nO1xyXG4gICAgaWNvblVybD86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NXbXNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVNfT2ZmZXJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNPZmZlcmluZyBleHRlbmRzIElFb2NPd3NPZmZlcmluZyB7XHJcbiAgICBjb2RlOiBXTVRTX09mZmVyaW5nO1xyXG4gICAgbWF0cml4U2V0cz86IElFb2NPd3NXbXRzTWF0cml4U2V0W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUVvY093c1dtdHNNYXRyaXhTZXQge1xyXG4gICAgLyoqIEVQU0ctQ29kZSAqL1xyXG4gICAgc3JzOiBzdHJpbmc7XHJcbiAgICBtYXRyaXhTZXQ6IHN0cmluZztcclxuICAgIG1hdHJpeElkczogc3RyaW5nW107XHJcbiAgICBvcmlnaW46IHtcclxuICAgICAgICB4OiBudW1iZXIsXHJcbiAgICAgICAgeTogbnVtYmVyXHJcbiAgICB9O1xyXG4gICAgcmVzb2x1dGlvbnM6IG51bWJlcltdO1xyXG4gICAgdGlsZXNpemU6IHtcclxuICAgICAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgICAgICB3aWR0aDogbnVtYmVyXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFb2NPd3NQcm9qZWN0aW9uIHtcclxuICAgIGJib3g6IEdlb0pTT04uQkJveDtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gICAgdW5pdD86IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vKipcclxuKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWVleHRlbnNpb24tb2ZmZXJpbmdzXHJcbiovXHJcbmV4cG9ydCB0eXBlIEdlb0pzb25fT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvZ2VvanNvbic7XHJcbmV4cG9ydCB0eXBlIFh5el9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS94eXonO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/owc/types/owc-json.js b/@ukis/services-ogc/esm5/lib/owc/types/owc-json.js deleted file mode 100644 index c6b4a00e0..000000000 --- a/@ukis/services-ogc/esm5/lib/owc/types/owc-json.js +++ /dev/null @@ -1,344 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -export function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -export function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -export function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -export function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -export function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -export function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -export function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -export function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3djLWpzb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvb3djL3R5cGVzL293Yy1qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBZ0JBLGlDQTJDQzs7Ozs7OztJQXRDQyx5QkFBb0I7O0lBQ3BCLGlDQWdDRTs7Ozs7SUFFRiwrQkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNCLGtDQVFDOzs7Ozs7O0lBSEMsMEJBQW9COztJQUNwQixrQ0FBbUM7Ozs7OztBQUlyQyw0Q0FnQ0M7Ozs7OztJQTlCQyx1Q0FBYzs7Ozs7SUFFZCx5Q0FBb0I7Ozs7O0lBRXBCLDBDQUFrQjs7Ozs7SUFFbEIseUNBQXVCOzs7OztJQUV2QiwyQ0FBbUI7Ozs7O0lBRW5CLHdDQUFnQjs7Ozs7SUFFaEIsc0NBQWtCOzs7OztJQUVsQiwyQ0FBMkI7Ozs7O0lBRTNCLHdDQUFpQjs7Ozs7SUFFakIsNENBQTZCOzs7OztJQUU3QixxREFBNkI7Ozs7O0lBRTdCLHFEQUE2Qjs7Ozs7O0lBSTdCLHdDQUFnQjs7Ozs7SUFFaEIsdUNBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QnRCLGtDQVVDOzs7Ozs7SUFSQyw0QkFDNEY7Ozs7O0lBRTVGLGtDQUE2Qjs7Ozs7SUFFN0IsZ0NBQXlCOztJQUN6Qiw4QkFBd0I7Ozs7OztBQUsxQixpQ0FJQzs7O0lBSEMsNEJBQWU7O0lBQ2YsMEJBQWE7O0lBQ2IsOEJBQWlCOzs7OztBQUduQixnQ0FNQzs7Ozs7O0lBSkMsMEJBQWM7O0lBQ2QsMkJBQWU7O0lBQ2YseUJBQWE7Ozs7OztBQUlmLG1DQUtDOzs7SUFKQywrQkFBZ0I7Ozs7O0lBRWhCLDZCQUFjOztJQUNkLDhCQUFlOzs7OztBQUdqQiwrQkFTQzs7O0lBUkMsd0JBQVk7O0lBQ1oseUJBQWM7O0lBQ2QseUJBQWM7O0lBQ2QsMEJBQWU7Ozs7O0lBRWYsK0JBQW9COztJQUNwQix5QkFBa0I7Ozs7OztBQUlwQiw0Q0FJQzs7O0lBSEMsdUNBQWU7O0lBQ2YscUNBQWE7O0lBQ2IseUNBQWlCOzs7OztBQUduQix3Q0FTQzs7Ozs7O0lBUEMsd0NBQW9COzs7OztJQUVwQix5Q0FBcUI7Ozs7OztJQUdyQix3Q0FBb0I7Ozs7Ozs7QUFPdEIsbUNBZUM7Ozs7Ozs7SUFWQyw2QkFBYTs7Ozs7SUFFYiwrQkFBZTs7SUFDZiw2QkFBYzs7Ozs7SUFFZCw2QkFBYzs7SUFDZCxnQ0FBc0I7O0lBQ3RCLCtCQUFxQjs7Ozs7O0FBTXZCLGlDQVFDOzs7Ozs7SUFOQywyQkFBYTs7SUFDYiwyQkFBYzs7SUFDZCw0QkFBZTs7Ozs7SUFFZiw4QkFBaUI7Ozs7OztBQUluQixrQ0FRQzs7O0lBUEMsNEJBQWE7O0lBQ2IsNkJBQWM7O0lBQ2QsZ0NBQWtCOztJQUNsQiwrQkFBa0I7O0lBQ2xCLGlDQUFtQjs7SUFDbkIsK0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR5cGUgZGVmaW5pdGlvbnMgZm9yIE9HQyBPV1MgQ29udGV4dCBHZW8gRW5jb2RpbmcgU3RhbmRhcmQgVmVyc2lvbjogMS4wXHJcbiAqIGh0dHA6Ly9kb2NzLm9wZW5nZW9zcGF0aWFsLm9yZy9pcy8xNC0wNTVyMi8xNC0wNTVyMi5odG1sXHJcbiAqIERlZmluaXRpb25zIGJ5OiBNYXRoaWFzIEJvZWNrXHJcbiAqIFR5cGVTY3JpcHQgVmVyc2lvbjogMi41LjNcclxuICpcclxuICogZGVwZW5kcyBvbiBAdHlwZXMvZ2VvanNvbkBeNzk0Ni4wLjJcclxuICovXHJcbmltcG9ydCAqIGFzIEdlb0pTT04gZnJvbSAnZ2VvanNvbic7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBPV1MgQ29udGV4dCBkZXNjcmliZXMgTWV0YWRhdGEsIEFQSSwgVGltZSBSYW5nZVxyXG4gKiBodHRwOi8vd3d3Lm93c2NvbnRleHQub3JnL293Y191c2VyX2d1aWRlL0MwX3VzZXJHdWlkZS5odG1sI3RydWV0aGUtb3dzLWNvbnRleHQtZG9jdW1lbnQtc3RydWN0dXJlXHJcbiAqIElmIG5vIGJvdW5kaW5nIGJveCBpcyBzcGVjaWZpZWQsIGRvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgdmlldyB3aGVuIHRoZSBjb250ZXh0IGRvY3VtZW50IGlzIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRleHQgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmVDb2xsZWN0aW9uPEdlb0pTT04uR2VvbWV0cnlPYmplY3QgfCBudWxsLCBHZW9KU09OLkdlb0pzb25Qcm9wZXJ0aWVzPiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGlkIGVsZW1lbnQgZGVmaW5lcyBhIG1hbmRhdG9yeSByZWZlcmVuY2UgdG8gdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50LlxyXG4gICAqIFRoZSBjb250ZW50IGZvciB0aGUgaWQgZWxlbWVudCBTSEFMTCBiZSBhbiBJUkksIGFzIGRlZmluZWQgYnkgSUVURiBbUkZDMzk4N11cclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IHtcclxuICAgIGxpbmtzOiB7IHByb2ZpbGVzOiBzdHJpbmdbXSB9IHwgSU93c0xpbmtzW107XHJcbiAgICAvKiogTGFuZ3VhZ2Ugb2YgQ29udGV4dCBkb2N1bWVudCBjb250ZW50ICovXHJcbiAgICBsYW5nOiBMYW5nU3RyaW5nO1xyXG4gICAgLyoqIFRpdGxlIGZvciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIC8qKiBEYXRlIG9mIGEgY3JlYXRpb24gb3IgdXBkYXRlIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICB1cGRhdGVkOiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBDb250ZXh0IGRvY3VtZW50IHB1cnBvc2Ugb3IgY29udGVudCAqL1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XHJcbiAgICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBpbmRpY2F0ZXMgdGhlIGF1dGhvcnMgYXJyYXkgb2YgdGhlIENvbnRleHQgZG9jdW1lbnQgKi9cclxuICAgIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgICAvKiogSWRlbnRpZmllciBmb3IgdGhlIHB1Ymxpc2hlciBvZiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcHVibGlzaGVyPzogc3RyaW5nO1xyXG4gICAgLyoqIFRvb2wvYXBwbGljYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIENvbnRleHQgZG9jdW1lbnQgYW5kIGl0cyBwcm9wZXJ0aWVzICovXHJcbiAgICBjcmVhdG9yPzogSU93c0NyZWF0b3I7XHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnRpZXMgb2YgdGhlIGRpc3BsYXkgaW4gdXNlIHdoZW4gdGhlIGNvbnRleHQgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgKGZvciBkaXNwbGF5IGJhc2VkIGFwcGxpY2F0aW9ucyBvbmx5KS5cclxuICAgICAqIFRoaXMgY2xhc3MgaXMgb3B0aW9uYWwgYW5kIGludGVuZGVkIGZvciBjcmVhdG9yIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB3aXRoIGEgZ2VvZ3JhcGhpY2FsIGRpc3BsYXkgd2l0aGluIGEgZml4ZWQgcGl4ZWwgc2l6ZSBhbmQgbm90IHNjYWxhYmxlIHRvIGRpZmZlcmVudCBjb21wdXRhdGlvbmFsIGRldmljZXMgXHJcbiAgICAgKi9cclxuICAgIGRpc3BsYXk/OiBJT3dzQ3JlYXRvckRpc3BsYXlbXTtcclxuICAgIC8qKiBJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gICAgcmlnaHRzPzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIHJlc291cmNlIFxyXG4gICAgKiB0aW1lIHJhbmdlIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIG9mIGludGVyZXN0IHRvIHRoZSB1c2VyLlxyXG4gICAgKi9cclxuICAgIGRhdGU/OiBEYXRlU3RyaW5nO1xyXG4gICAgLyoqIFRoaXMgYXJyYXkgaXMgYW4gb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBjYXRlZ29yaWVzIHJlbGF0ZWQgdG8gdGhpcyBDb250ZXh0IGRvY3VtZW50ICovXHJcbiAgICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gICAgLyoqIEV4dGVuc2lvbiBBbnkgb3RoZXIgZWxlbWVudCAqL1xyXG4gICAgW2s6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIC8qKiBPcmRlcmVkIExpc3Qgb2YgUmVzb3VyY2VzIGF2YWlsYWJsZSBvbiB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIGZlYXR1cmVzOiBJT3dzUmVzb3VyY2VbXTtcclxuICAvKiogRXh0ZW5zaW9uIEFueSBvdGhlciBlbGVtZW50ICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVhY2ggbGF5ZXIgKGEuay5hLiBmZWF0dXJlKSBpbiBhIGNvbnRleHQgZG9jdW1lbnQgaXMga25vd24gYXMgYSDigJhSZXNvdXJjZeKAmVxyXG4gKiBBIFJlc291cmNlIHJlZmVyZW5jZSBhIHNldCBvZiBnZW9zcGF0aWFsIGluZm9ybWF0aW9uIHRvIGJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGVsZW1lbnQuXHJcbiAqIFRoZSByZXNvdXJjZXMgYXJlIG9yZGVyZWQgc3VjaCB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBkb2N1bWVudCBpcyB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGZyb250LlxyXG4gKiBUaGlzIGRlZmluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGxheWVycyBhcmUgZHJhd24uXHJcbiAqIEEgcmVzb3VyY2UgKHdoaWNoIGluIEdJUyB0ZXJtcyBpcyBhIGxheWVyKSBjYW4gaGF2ZSBhIG51bWJlciBvZiBvZmZlcmluZ3MsIGFuZCBlYWNoIG9mZmVyaW5nXHJcbiAqIGlzIGZvY3Vzc2VkIG9uIGEgcGFydGljdWxhciByZXByZXNlbnRhdGlvbiBvZiBpbmZvcm1hdGlvbi5cclxuICogVGhlc2UgY2FuIGJlIG9uZSBvZiBhIG51bWJlciBvZiBPR0MgV2ViIFNlcnZpY2VzLCBzcGVjaWZpY2FsbHkgV01TLCBXTVRTLCBXRlMsIFdDUywgV1BTIGFuZCBDU1csXHJcbiAqIG9yIG9uZSBvZiBhIG51bWJlciBvZiBpbmxpbmUgb3IgcmVmZXJlbmNlZCBmb3JtYXRzLCBzcGVjaWZpY2FsbHkgR01MLCBLTUwsIEdlb1RJRkYsIEdNTEpQMiwgR01MQ09WLFxyXG4gKiBvciBhIGN1c3RvbSBvZmZlcmluZyB0eXBlIGRlZmluZWQgaW4gYSBwcm9maWxlIG9yIGJ5IGFuIG9yZ2FuaXNhdGlvbi5cclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVldGhlLW93cy1jb250ZXh0LWRvY3VtZW50LXN0cnVjdHVyZVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2UgZXh0ZW5kcyBHZW9KU09OLkZlYXR1cmUge1xyXG4gIC8qKlxyXG4gICAqIFVuYW1iaWd1b3VzIHJlZmVyZW5jZSB0byB0aGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIENvbnRleHQgcmVzb3VyY2UgKElSSSlcclxuICAgKiBTdHJpbmcgdHlwZSB0aGF0IFNIQUxMIGNvbnRhaW4gYSBVUkkgdmFsdWVcclxuICAgKi9cclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHByb3BlcnRpZXM6IElPd3NSZXNvdXJjZVByb3BlcnRpZXM7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzUmVzb3VyY2VQcm9wZXJ0aWVzIHtcclxuICAvKiogVGl0bGUgZ2l2ZW4gdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBEYXRlIG9mIHRoZSBsYXN0IHVwZGF0ZSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIHVwZGF0ZWQ6IERhdGVTdHJpbmc7XHJcbiAgLyoqIFRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYSBnZW5lcmljIGRlc2NyaXB0aW9uIG9mIHRoZSBjb250ZW50IGluIGEgZm9ybWF0IHVuZGVyc3RhbmRhYmxlIGJ5IGdlbmVyaWMgcmVhZGVycyAqL1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIC8qKiBUaGlzIGVsZW1lbnQgaXMgb3B0aW9uYWwgYW5kIGluZGljYXRlcyB0aGUgYXV0aG9ycyBhcnJheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSAqL1xyXG4gIGF1dGhvcnM/OiBJT3dzQXV0aG9yW107XHJcbiAgLyoqIEVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBDb250ZXh0IHJlc291cmNlIGF2YWlsYWJsZSAqL1xyXG4gIHB1Ymxpc2hlcj86IHN0cmluZztcclxuICAvKiogSW5mb3JtYXRpb24gYWJvdXQgcmlnaHRzIGhlbGQgaW4gYW5kIG92ZXIgdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICByaWdodHM/OiBzdHJpbmc7XHJcbiAgLyoqIERhdGUgb3IgcmFuZ2Ugb2YgZGF0ZXMgcmVsZXZhbnQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBkYXRlPzogRGF0ZVN0cmluZztcclxuICAvKiogVGhpcyBlbGVtZW50IGlzIG9wdGlvbmFsIGFuZCBjYW4gY29udGFpbiBhIG51bWJlciBvZiBvZmZlcmluZ3MgZGVmaW5lZCBieSB0aGUgY2xhc3MgT1dDOk9mZmVyaW5nICovXHJcbiAgb2ZmZXJpbmdzPzogSU93c09mZmVyaW5nW107XHJcbiAgLyoqIEZsYWcgdmFsdWUgaW5kaWNhdGluZyB0byB0aGUgY2xpZW50IGlmIHRoZSBDb250ZXh0IHJlc291cmNlIHNob3VsZCBiZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdCAqL1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgLyoqIFRoaXMgYXJyYXkgaXMgb3B0aW9uYWwgYW5kIGV4cHJlc3NlcyBhIGNhdGVnb3J5IHJlbGF0ZWQgdG8gdGhlIENvbnRleHQgcmVzb3VyY2UgKi9cclxuICBjYXRlZ29yaWVzPzogSU93c0NhdGVnb3JpZVtdO1xyXG4gIC8qKiBNaW5pbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtaW5zY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBNYXhpbXVtIHNjYWxlIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBEb3VibGUgKi9cclxuICBtYXhzY2FsZWRlbm9taW5hdG9yPzogbnVtYmVyO1xyXG4gIC8qKiBEZWZpbml0aW9uIG9mIHRoZSBmb2xkZXIgaW4gd2hpY2ggdGhlIHJlc291cmNlIGlzIHBsYWNlZCBcclxuICAqIFRoZSBmb2xkZXIgYXR0cmlidXRlIGlzIGludGVuZGVkIHRvIHN1cHBvcnQgdGhlIGNvbmNlcHQgcHJlc2VudCBpbiBtYW55IGNsaWVudHMgb3Igb3JnYW5pc2luZyBsYXllcnMgaW50byBmb2xkZXJzLlxyXG4gICovXHJcbiAgZm9sZGVyPzogc3RyaW5nO1xyXG4gIC8qKiBUT0RPISEhIGxpbmtzIGlzIGRlZmluZWQgYXMgT2JqZWN0IGJ1dCBpbiB0aGUgZXhhbXBsZXMgYXMgQXJyYXkgICovXHJcbiAgbGlua3M/OiBJT3dzTGlua3NbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEluIHJlYWxpdHkgYSByZXNvdXJjZSBjYW4gYmUgcmVhbGlzZWQgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMsIGFuZCBzbyBhbiBPV0MgZG9jdW1lbnQgYWxsb3dzIHZhcmlvdXMgb3B0aW9ucyB0byBiZSBzcGVjaWZpZWQuXHJcbiAqIFRoZXNlIGFyZSBrbm93biBhcyBvZmZlcmluZ3MuXHJcbiAqIFRoZSBpbnRlbnRpb24gaXMgdGhhdCB0aGVzZSBhcmUsIGFzIGZhciBhcyBpcyBwb3NzaWJsZSBieSB0aGUgZm9ybWF0IHVzZWQsXHJcbiAqIGVxdWl2YWxlbnQgYW5kIG5vIHByaW9yaXR5IGlzIGFzc2lnbmVkIHRvIHRoZWlyIG9yZGVyIGluIHRoZSBzdGFuZGFyZC5cclxuICogVGhleSBhcmUgaW50ZW5kZWQgdG8gYmUgYWx0ZXJuYXRpdmVzIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRvIGFsbG93IGl0IHRvIHZpc3VhbGlzZSBvciB1c2UgdGhlIHJlc291cmNlLlxyXG4gKlxyXG4gKiBTbyBmb3IgZXhhbXBsZSBmb3VyIG9mZmVyaW5ncywgYSBXTVMsIGEgV0ZTIHdpdGggcG9ydHJheWFsIGFzIFNMRCwgYW5kIGFuIGlubGluZSBHTUwgT2ZmZXJpbmcgYWdhaW4gd2l0aCBwb3J0cmF5YWwgYXMgU0xELlxyXG4gKiBEaWZmZXJlbnQgY2xpZW50cyBjb3VsZCB1c2UgdGhlc2Ugb2ZmZXJpbmdzIGFzIGFwcHJvcHJpYXRlOlxyXG4gKiAtIGEgc2ltcGxlIGJyb3dzZXIgYmFzZWQgY2xpZW50IGNvdWxkIHVzZSB0aGUgV01TIG9mZmVyaW5nIHByb3ZpZGVkLCB1c2luZyB0aGUgc3RhbmRhcmQgcG9ydHJheWFsXHJcbiAqIC0gYSBtb3JlIHNvcGhpc3RpY2F0ZWQgY2xpZW50LCBjb3VsZCB1c2UgdGhlIFdGUyBvZmZlcmluZyBhbmQgdGhlIGFzc29jaWF0ZWQgU0xEIERvY3VtZW50LlxyXG4gKlxyXG4gKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9mZmVyaW5nLCBzZXJ2aWNlIG9mZmVyaW5ncyBhbmQgZGF0YSBvZmZlcmluZ3MuXHJcbiAqIEEgc2VydmljZSBvZmZlcmluZyBoYXMgYSBzZXJ2aWNlIHJlcXVlc3QgKGluIHRoZSBmb3JtIG9mIGEgY2FwYWJpbGl0aWVzIHJlcXVlc3QgYW5kIGEgZGF0YSByZXF1ZXN0KVxyXG4gKiBhbmQgb3B0aW9uYWwgY29udGVudCBhbmQgc3R5bGluZyBlbGVtZW50cy5cclxuICogQSBkYXRhIG9mZmVyaW5nIGhhcyBhIGNvbnRlbnQgZWxlbWVudCBhbmQgb3B0aW9uYWwgc3R5bGluZyBlbGVtZW50cy5cclxuICpcclxuICpcclxuICogaHR0cDovL3d3dy5vd3Njb250ZXh0Lm9yZy9vd2NfdXNlcl9ndWlkZS9DMF91c2VyR3VpZGUuaHRtbCN0cnVlbXVsdGlwbGUtb2ZmZXJpbmdzLWFuZC1wcmlvcml0eVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT2ZmZXJpbmcge1xyXG4gIC8qKiBFeHRlbnNpb24gT2ZmZXJpbmdzIHdpdGggdHlwZSAtIHN0cmluZyAqL1xyXG4gIGNvZGU6IFdNU19PZmZlcmluZyB8IFdGU19PZmZlcmluZyB8IFdDU19PZmZlcmluZyB8IFdQU19PZmZlcmluZyB8IENTV19PZmZlcmluZyB8IFdNVFNfT2ZmZXJpbmcgfFxyXG4gIEdNTF9PZmZlcmluZyB8IEtNTF9PZmZlcmluZyB8IEdlb1RJRkZfT2ZmZXJpbmcgfCBHTUxKUDJfT2ZmZXJpbmcgfCBHTUxDT1ZfT2ZmZXJpbmcgfCBzdHJpbmc7XHJcbiAgLyoqIFdlYiBTZXJ2aWNlIE9mZmVyaW5ncyBwcm92aWRlIHRoZWlyIG9wZXJhdGlvbnMgKi9cclxuICBvcGVyYXRpb25zPzogSU93c09wZXJhdGlvbltdO1xyXG4gIC8qKiBDb250ZW50IE9mZmVyaW5ncyBhbGxvdyBjb250ZW50IHRvIGJlIGVtYmVkZGVkIGluIGFuIE9XUyBDb250ZXh0IGRvY3VtZW50LiAqL1xyXG4gIGNvbnRlbnRzPzogSU93c0NvbnRlbnRbXTtcclxuICBzdHlsZXM/OiBJT3dzU3R5bGVTZXRbXTtcclxuICBbazogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzQ3JlYXRvciB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0F1dGhvciB7XHJcbiAgLyoqIEVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgQ29udGV4dCBkb2N1bWVudCAqL1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZW1haWw/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NhdGVnb3JpZSB7XHJcbiAgc2NoZW1lPzogc3RyaW5nO1xyXG4gIC8qKiBDYXRlZ29yeSByZWxhdGVkIHRvIHRoaXMgY29udGV4dCBkb2N1bWVudC4gSXQgTUFZIGhhdmUgYSByZWxhdGVkIGNvZGUtbGlzdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgdGhlIHNjaGVtZSBhdHRyaWJ1dGUgKi9cclxuICB0ZXJtPzogc3RyaW5nO1xyXG4gIGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPd3NMaW5rcyB7XHJcbiAgcmVsOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIC8qKiBSZWZlcmVuY2UgdG8gYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29udGV4dCByZXNvdXJjZSBpbiBhbHRlcm5hdGl2ZSBmb3JtYXQgKi9cclxuICBhbHRlcm5hdGVzPzogc3RyaW5nO1xyXG4gIGxhbmc/OiBMYW5nU3RyaW5nO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JBcHBsaWNhdGlvbiB7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgdXJpPzogc3RyaW5nO1xyXG4gIHZlcnNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NyZWF0b3JEaXNwbGF5IHtcclxuICAvKiogV2lkdGggbWVhc3VyZWQgaW4gcGl4ZWxzIG9mIHRoZSBkaXNwbGF5IHNob3dpbmcgdGhlIEFyZWEgb2YgSW50ZXJlc3QgKi9cclxuICBwaXhlbFdpZHRoPzogbnVtYmVyO1xyXG4gIC8qKiBXaWR0aCBtZWFzdXJlZCBpbiBwaXhlbHMgb2YgdGhlIGRpc3BsYXkgc2hvd2luZyBieSB0aGUgQXJlYSBvZiBJbnRlcmVzdCAqL1xyXG4gIHBpeGVsSGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKiBUaGUgc2l6ZSBvZiBhIHBpeGVsIG9mIHRoZSBkaXNwbGF5IGluIG1pbGltZXRlcnMgXHJcbiAgICogKGNvbWJpbmVkIHdpdGggdGhlIHByZXZpb3VzIG9uZXMgYWxsb3dzIGZvciB0aGUgcmVhbCBkaXNwbGF5IHNpemUgdG8gYmUgY2FsY3VsYXRlZCkgKi9cclxuICBtbVBlclBpeGVsPzogbnVtYmVyO1xyXG4gIFtrOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNb3N0IHNlcnZpY2Ugb2ZmZXJpbmdzIGhhdmUgdHdvIG9wZXJhdGlvbnMsIGEg4oCYR2V0Q2FwYWJpbGl0aWVz4oCZIG9wZXJhdGlvbiBhbmQgYSBkYXRhIG9wZXJhdGlvbiBzdWNoIGFzIOKAmEdldE1hcOKAmSBmb3IgV01TIFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzT3BlcmF0aW9uIHtcclxuICAvKipcclxuICAgKiBUaGUgY29kZSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIG9wZXJhdGlvbi5cclxuICAgKiBWYWxpZCB0eXBlcyBhcmUgZGVmaW5lZCB3aXRoaW4gZWFjaCBzcGVjaWZpYyBleHRlbnNpb24gd2l0aGluIHRoZSBPV1MgQ29udGV4dCBjb25jZXB0dWFsIG1vZGVsIFtPR0MgMTItMDgwXS5cclxuICAgKi9cclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgLyoqIG1ldGhvZCBkZWZpbmVzIHRoZSBhY2Nlc3MgbWV0aG9kLCBmb3IgZXhhbXBsZSBHRVQgb3IgUE9TVC4gKi9cclxuICBtZXRob2Q6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIC8qKiBocmVmIGlzIHRoZSBVUkkgY29udGFpbmluZyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcmVxdWVzdCAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgcmVxdWVzdD86IElPd3NDb250ZW50O1xyXG4gIHJlc3VsdD86IElPd3NDb250ZW50O1xyXG4gIC8qKiBFeHRlbnNpb24gb2YgT3BlcmF0aW9uICovXHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU93c0NvbnRlbnQge1xyXG4gIC8qKiBNSU1FIHR5cGUgb2YgdGhlIENvbnRlbnQgKi9cclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgaHJlZj86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKiogU3RyaW5nIHR5cGUsIG5vdCBlbXB0eSB0aGF0IGNhbiBjb250YWluIGFueSB0ZXh0IGVuY29kZWQgbWVkaWEgdHlwZSAqL1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT3dzU3R5bGVTZXQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xyXG4gIGRlZmF1bHQ/OiBib29sZWFuO1xyXG4gIGxlZ2VuZFVSTD86IHN0cmluZztcclxuICBjb250ZW50PzogSU93c0NvbnRlbnQ7XHJcbiAgW2s6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuXHJcblxyXG4vKiogSVNPLTg2MDEgZm9ybWF0IGUuZy4gWVlZWS1NTS1ERFRoaDptbTpzc1ogb3IgWVlZWS1NTS1ERFRoaDptbTpzc1ovWVlZWS1NTS1ERFRoaDptbTpzc1ogKi9cclxuZXhwb3J0IHR5cGUgRGF0ZVN0cmluZyA9IHN0cmluZztcclxuXHJcblxyXG4vKiogUkZDLTMwNjYgY29kZSBlLmcuIGVuLGRlICovXHJcbmV4cG9ydCB0eXBlIExhbmdTdHJpbmcgPSBzdHJpbmc7XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgV01TX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dtcycgfFxyXG4gICAgJ2h0dHA6Ly9zY2hlbWFzLm9wZW5naXMubmV0L3dtcy8xLjEuMScgfCAnaHR0cDovL3NjaGVtYXMub3Blbmdpcy5uZXQvd21zLzEuMS4wJztcclxuZXhwb3J0IHR5cGUgV0ZTX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL3dmcyc7XHJcbmV4cG9ydCB0eXBlIFdDU19PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS93Y3MnO1xyXG5leHBvcnQgdHlwZSBXUFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd3BzJztcclxuZXhwb3J0IHR5cGUgQ1NXX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2Nzdyc7XHJcbmV4cG9ydCB0eXBlIFdNVFNfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEvd210cyc7XHJcbmV4cG9ydCB0eXBlIEdNTF9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWwnO1xyXG5leHBvcnQgdHlwZSBLTUxfT2ZmZXJpbmcgPSAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9zcGVjL293Yy1nZW9qc29uLzEuMC9yZXEva21sJztcclxuZXhwb3J0IHR5cGUgR2VvVElGRl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nZW90aWZmJztcclxuZXhwb3J0IHR5cGUgR01MSlAyX09mZmVyaW5nID0gJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvc3BlYy9vd2MtZ2VvanNvbi8xLjAvcmVxL2dtbGpwMic7XHJcbmV4cG9ydCB0eXBlIEdNTENPVl9PZmZlcmluZyA9ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3NwZWMvb3djLWdlb2pzb24vMS4wL3JlcS9nbWxjb3YnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/services-ogc.module.js b/@ukis/services-ogc/esm5/lib/services-ogc.module.js deleted file mode 100644 index 2c156b24c..000000000 --- a/@ukis/services-ogc/esm5/lib/services-ogc.module.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { NgModule } from '@angular/core'; -import { OwcJsonService } from './owc/owc-json.service'; -import { WmtsClientService } from './wmts/wmtsclient.service'; -import { WpsClient } from './wps/wpsclient'; -var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; -}()); -export { ServicesOgcModule }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMtb2djLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDO0lBQUE7SUFNaUMsQ0FBQzs7Z0JBTmpDLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsU0FBUyxFQUFFLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztpQkFDMUQ7O0lBQ2dDLHdCQUFDO0NBQUEsQUFObEMsSUFNa0M7U0FBckIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3djSnNvblNlcnZpY2UgfSBmcm9tICcuL293Yy9vd2MtanNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV210c0NsaWVudFNlcnZpY2UgfSBmcm9tICcuL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV3BzQ2xpZW50IH0gZnJvbSAnLi93cHMvd3BzY2xpZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbXSxcclxuICBleHBvcnRzOiBbXSxcclxuICBwcm92aWRlcnM6IFtPd2NKc29uU2VydmljZSwgV210c0NsaWVudFNlcnZpY2UsIFdwc0NsaWVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VzT2djTW9kdWxlIHsgfVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wmts/wmtsclient.service.js b/@ukis/services-ogc/esm5/lib/wmts/wmtsclient.service.js deleted file mode 100644 index 22abeb9fd..000000000 --- a/@ukis/services-ogc/esm5/lib/wmts/wmtsclient.service.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { Injectable } from '@angular/core'; -import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map } from 'rxjs/operators'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/common/http"; -/** @type {?} */ -var XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0'; -/** @type {?} */ -var SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0; -import * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language'; -/** @type {?} */ -var SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language; -import * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1'; -/** @type {?} */ -var GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1; -import * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0'; -/** @type {?} */ -var WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0; -var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(i0.ɵɵinject(i1.HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; -}()); -export { WmtsClientService }; -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid210c2NsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dtdHMvd210c2NsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOzs7O0lBQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7SUFDekQsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0MsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDBCQUEwQixDQUFDOztJQUN2RCxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUTtBQUMxQyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sbUNBQW1DLENBQUM7O0lBQ3pFLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDLGlCQUFpQjtBQUNyRSxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O0lBQ3pELFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSwwQkFBMEIsQ0FBQzs7SUFDdkQsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVE7QUFJMUM7SUFRSSwyQkFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTs7WUFDMUIsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRU0sMkNBQWU7Ozs7O0lBQXRCLFVBQXdCLEdBQVcsRUFBRSxPQUFpQjtRQUF0RCxpQkFZQztRQVpvQyx3QkFBQSxFQUFBLGlCQUFpQjs7O1lBRTVDLGtCQUFrQixHQUFNLEdBQUcsc0RBQWlELE9BQVM7O1lBQ3JGLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM1QixjQUFjLEVBQUUsVUFBVTtZQUMxQixRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxTQUFBLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHOzs7O1FBQUMsVUFBQSxRQUFRO1lBQ1IsT0FBTyxLQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxRCxDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7Z0JBMUJKLFVBQVUsU0FBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7Ozs7Z0JBckJRLFVBQVU7Ozs0QkFEbkI7Q0FnREMsQUE1QkQsSUE0QkM7U0F6QlksaUJBQWlCOzs7Ozs7SUFFMUIsMENBQXNCOzs7OztJQUN0Qiw0Q0FBd0I7Ozs7O0lBRVosaUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBKc29uaXggfSBmcm9tICdAYm91bmRsZXNzZ2VvL2pzb25peCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0ICogYXMgWExpbmtfMV8wX0ZhY3RvcnkgZnJvbSAndzNjLXNjaGVtYXMvbGliL1hMaW5rXzFfMCc7XHJcbmNvbnN0IFhMaW5rXzFfMCA9IFhMaW5rXzFfMF9GYWN0b3J5LlhMaW5rXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzFfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL09XU18xXzFfMCc7XHJcbmNvbnN0IE9XU18xXzFfMCA9IE9XU18xXzFfMF9GYWN0b3J5Lk9XU18xXzFfMDtcclxuaW1wb3J0ICogYXMgU01JTF8yXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvU01JTF8yXzAnO1xyXG5jb25zdCBTTUlMXzJfMCA9IFNNSUxfMl8wX0ZhY3RvcnkuU01JTF8yXzA7XHJcbmltcG9ydCAqIGFzIFNNSUxfMl8wX0xhbmd1YWdlX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1NNSUxfMl8wX0xhbmd1YWdlJztcclxuY29uc3QgU01JTF8yXzBfTGFuZ3VhZ2UgPSBTTUlMXzJfMF9MYW5ndWFnZV9GYWN0b3J5LlNNSUxfMl8wX0xhbmd1YWdlO1xyXG5pbXBvcnQgKiBhcyBHTUxfM18xXzFfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvR01MXzNfMV8xJztcclxuY29uc3QgR01MXzNfMV8xID0gR01MXzNfMV8xX0ZhY3RvcnkuR01MXzNfMV8xO1xyXG5pbXBvcnQgKiBhcyBXTVRTXzFfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9XTVRTXzFfMCc7XHJcbmNvbnN0IFdNVFNfMV8wID0gV01UU18xXzBfRmFjdG9yeS5XTVRTXzFfMDtcclxuXHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXbXRzQ2xpZW50U2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSB4bWxtYXJzaGFsbGVyO1xyXG4gICAgcHJpdmF0ZSB4bWx1bm1hcnNoYWxsZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbU01JTF8yXzAsIFNNSUxfMl8wX0xhbmd1YWdlLCBHTUxfM18xXzEsIFhMaW5rXzFfMCwgT1dTXzFfMV8wLCBXTVRTXzFfMF0pO1xyXG4gICAgICAgIHRoaXMueG1sdW5tYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTtcclxuICAgICAgICB0aGlzLnhtbG1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZU1hcnNoYWxsZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2FwYWJpbGl0aWVzICh1cmw6IHN0cmluZywgdmVyc2lvbiA9ICcxLjEuMCcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xyXG4gICAgICAgIC8vIGV4YW1wbGU6IGh0dHBzOi8vdGlsZXMuZ2Vvc2VydmljZS5kbHIuZGUvc2VydmljZS93bXRzP1NFUlZJQ0U9V01UUyZSRVFVRVNUPUdldENhcGFiaWxpdGllcyZWRVJTSU9OPTEuMS4wXHJcbiAgICAgICAgY29uc3QgZ2V0Q2FwYWJpbGl0aWVzVXJsID0gYCR7dXJsfT9TRVJWSUNFPVdNVFMmUkVRVUVTVD1HZXRDYXBhYmlsaXRpZXMmVkVSU0lPTj0ke3ZlcnNpb259YDtcclxuICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsXHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChnZXRDYXBhYmlsaXRpZXNVcmwsIHsgaGVhZGVycywgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG59Il19 \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/cache.js b/@ukis/services-ogc/esm5/lib/wps/cache.js deleted file mode 100644 index b306d59f9..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/cache.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { of } from "rxjs"; -/** - * @record - */ -export function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return of(null); - }; - return FakeCache; -}()); -export { FakeCache }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQUd0QywyQkFHQzs7Ozs7OztJQUZHLG1EQUFzQzs7Ozs7SUFDdEMsMkNBQWlEOztBQUdyRDtJQUFBO0lBT0EsQ0FBQzs7Ozs7O0lBTkcsdUJBQUc7Ozs7O0lBQUgsVUFBSSxLQUFhLEVBQUUsTUFBaUI7SUFDcEMsQ0FBQzs7Ozs7SUFFRCx1QkFBRzs7OztJQUFILFVBQUksS0FBYTtRQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDTCxnQkFBQztBQUFELENBQUMsQUFQRCxJQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzRGF0YSB9IGZyb20gXCIuL3dwc19kYXRhdHlwZXNcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGUge1xyXG4gICAgc2V0KGlucHV0OiBvYmplY3QsIG91dHB1dDogV3BzRGF0YVtdKTtcclxuICAgIGdldChpbnB1dDogb2JqZWN0KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10gfCBudWxsPjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZha2VDYWNoZSBpbXBsZW1lbnRzIENhY2hlIHtcclxuICAgIHNldChpbnB1dDogb2JqZWN0LCBvdXRwdXQ6IFdwc0RhdGFbXSkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldChpbnB1dDogb2JqZWN0KTogT2JzZXJ2YWJsZTxXcHNEYXRhW10gfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/utils/polling.js b/@ukis/services-ogc/esm5/lib/wps/utils/polling.js deleted file mode 100644 index 1242eed45..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/utils/polling.js +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import { timer, of, forkJoin } from 'rxjs'; -import { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators'; -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -export function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -export function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9sbGluZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvdXRpbHMvcG9sbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFLdEUsTUFBTSxVQUFVLFNBQVMsQ0FDckIsS0FBb0IsRUFBRSxTQUFvQyxFQUFFLE9BQThCLEVBQUUsV0FBMEI7SUFBMUIsNEJBQUEsRUFBQSxrQkFBMEI7SUFFdEgsSUFBSSxPQUFPLEVBQUU7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakI7O1FBRUssV0FBVyxHQUFrQixLQUFLLENBQUMsSUFBSSxDQUN6QyxHQUFHOzs7O0lBQUMsVUFBQyxDQUFNO1FBQ1AsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDZDtJQUNMLENBQUMsRUFBQyxDQUNMOztRQUVLLG9CQUFvQixHQUFrQixRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRzs7OztJQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFKLENBQUksRUFBQyxDQUNqQjs7UUFFSyxjQUFjLEdBQWtCLG9CQUFvQixDQUFDLElBQUksQ0FDM0QsUUFBUTs7OztJQUFDLFVBQUMsUUFBYTtRQUNuQixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNyQixzREFBc0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILHFFQUFxRTtZQUNyRSxPQUFPLGNBQWMsQ0FBQztTQUN6QjtJQUNMLENBQUMsRUFBQyxDQUNMO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQzs7Ozs7O0FBR0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLEVBQUUsVUFBYztJQUFkLDJCQUFBLEVBQUEsY0FBYzs7UUFDcEQsUUFBUSxHQUFHLENBQUM7SUFFaEI7Ozs7SUFBTyxVQUFDLElBQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7UUFDWix5QkFBeUI7UUFDekIsU0FBUzs7OztRQUFDLFVBQUMsTUFBdUI7WUFDOUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7WUFDaEUsUUFBUTs7OztZQUFDLFVBQUMsS0FBVTtnQkFDaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO29CQUN0QyxtREFBbUQ7b0JBQ25ELE1BQU0sS0FBSyxDQUFDO2lCQUNmO3FCQUFNLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO29CQUN4QyxRQUFRLElBQUksQ0FBQyxDQUFDO29CQUNkLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0RBQWdEO2lCQUNyRTtxQkFBTTtvQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFnQyxRQUFRLDBCQUF1QixDQUFDLENBQUM7b0JBQzdFLE1BQU0sS0FBSyxDQUFDLENBQUMsNkNBQTZDO2lCQUM3RDtZQUNMLENBQUMsRUFBQyxDQUNMLENBQUM7UUFDTixDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQyxFQUFDO0FBRU4sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRpbWVyLCBvZiwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBtYXAsIG1lcmdlTWFwLCByZXRyeVdoZW4sIGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvbGxVbnRpbDxUPihcclxuICAgIHRhc2skOiBPYnNlcnZhYmxlPFQ+LCBwcmVkaWNhdGU6IChyZXN1bHRzOiBhbnkpID0+IGJvb2xlYW4sIGRvV2hpbGU/OiAodDogVCB8IG51bGwpID0+IGFueSwgbWluV2FpdFRpbWU6IG51bWJlciA9IDEwMDApOiBPYnNlcnZhYmxlPFQ+IHtcclxuXHJcbiAgICBpZiAoZG9XaGlsZSkge1xyXG4gICAgICAgIGRvV2hpbGUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFwcGVkVGFzayQ6IE9ic2VydmFibGU8VD4gPSB0YXNrJC5waXBlKFxyXG4gICAgICAgIHRhcCgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb1doaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBkb1doaWxlKHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdFRha2VzQXRMZWFzdCQ6IE9ic2VydmFibGU8VD4gPSBmb3JrSm9pbih0YXBwZWRUYXNrJCwgdGltZXIobWluV2FpdFRpbWUpKS5waXBlKFxyXG4gICAgICAgIG1hcChyID0+IHJbMF0pXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHBvbGxlZFJlcXVlc3QkOiBPYnNlcnZhYmxlPFQ+ID0gcmVxdWVzdFRha2VzQXRMZWFzdCQucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocHJlZGljYXRlKHJlc3BvbnNlKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG9idGFpbmVkIGNvcnJlY3QgYW5zd2VyICR7cmVzcG9uc2V9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG9idGFpbmVkIGZhbHNlIGFuc3dlciAke3Jlc3BvbnNlfS4gdHJ5aW5nIGFnYWluLi4uYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9sbGVkUmVxdWVzdCQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gcG9sbGVkUmVxdWVzdCQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsYXllZFJldHJ5KGRlbGF5TXM6IG51bWJlciwgbWF4UmV0cmllcyA9IDMpIHtcclxuICAgIGxldCBhdHRlbXB0cyA9IDE7XHJcblxyXG4gICAgcmV0dXJuIChzcmMkOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcclxuICAgICAgICByZXR1cm4gc3JjJC5waXBlKFxyXG4gICAgICAgICAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnMgLi4uXHJcbiAgICAgICAgICAgIHJldHJ5V2hlbigoZXJyb3IkOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciQucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBkZWxheShkZWxheU1zKSwgLy8gPC0gaW4gYW55IGNhc2UsIGZpcnN0IHdhaXQgYSBsaXR0bGUgd2hpbGUgLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAmJiBlcnJvci5zdGF0dXMgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHNlcnZlciBlcnJvciwgcmVwZWF0aW5nIHdvbid0IGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRlbXB0cyA8PSBtYXhSZXRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaHR0cC1lcnJvci4gUmV0cnlpbmcgLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRlbXB0cyArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGVycm9yKTsgLy8gPC0gYW4gb2JzZXJ2YWJsZSBjYXVzZXMgcmVxdWVzdCB0byBiZSByZXRyaWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUGVyc2lzdGVudCBodHRwLWVycm9ycyBhZnRlciAke2F0dGVtcHRzfSBhdHRlbXB0cy4gR2l2aW5nIHVwLmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7IC8vIGFuIGVycm9yIGNhdXNlcyByZXF1ZXN0IHRvIGJlIGdpdmVuIHVwIG9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH07XHJcblxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js b/@ukis/services-ogc/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js deleted file mode 100644 index ca328252d..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/wps100/wps_marshaller_1.0.0.js +++ /dev/null @@ -1,563 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = tslib_1.__values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = tslib_1.__values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = tslib_1.__values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; -}()); -export { WpsMarshaller100 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMS4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQTtJQUVJO0lBQWdCLENBQUM7Ozs7O0lBRWpCLDZDQUFrQjs7OztJQUFsQixVQUFtQixPQUFlO1FBQzlCLE9BQVUsT0FBTyx1REFBb0QsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7SUFFRCxxQ0FBVTs7Ozs7SUFBVixVQUFXLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFVLE9BQU8sOERBQXlELFNBQVcsQ0FBQztJQUMxRixDQUFDOzs7OztJQUVELGdEQUFxQjs7OztJQUFyQixVQUFzQixZQUFpQzs7WUFDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsT0FBTztZQUNqRCxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNMLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUs7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7Ozs7OztJQUVELHVEQUE0Qjs7Ozs7Ozs7SUFBNUIsVUFBNkIsWUFBaUMsRUFBRSxHQUFXLEVBQUUsU0FBaUIsRUFDMUYsTUFBa0IsRUFBRSxrQkFBMEM7OztZQUV4RCxHQUFHLEdBQWdCLEVBQUU7UUFFM0IsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxXQUFXO1lBQ3RELEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ0wsV0FBVyxFQUFFO29CQUNULEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDL0MsU0FBUyxF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QUNwRSxDQUFDOzs7Ozs7O0lBRUQsbURBQXdCOzs7Ozs7SUFBeEIsVUFBeUIsWUFBaUIsRUFBRSxTQUFpQixFQUFFLFNBQWlCO1FBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0wsdUJBQUM7QUFBRCxDQUFDLEFBMVRELElBMFRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzTWFyc2hhbGxlciwgV3BzSW5wdXQsIFdwc091dHB1dERlc2NyaXB0aW9uLCBXcHNSZXN1bHQsIFdwc0NhcGFiaWxpdHksIFdwc0Jib3hWYWx1ZSwgV3BzRGF0YSwgV3BzRGF0YURlc2NyaXB0aW9uLCBXcHNTdGF0ZSwgV3BzRGF0YUZvcm1hdCB9IGZyb20gJy4uL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgV1BTQ2FwYWJpbGl0aWVzVHlwZSwgSVdwc0V4ZWN1dGVQcm9jZXNzQm9keSwgRXhlY3V0ZSwgRGF0YUlucHV0c1R5cGUsXHJcbiAgICBJbnB1dFR5cGUsIFJlc3BvbnNlRm9ybVR5cGUsIERhdGFUeXBlLCBJV3BzRXhlY3V0ZVJlc3BvbnNlLCBEb2N1bWVudE91dHB1dERlZmluaXRpb25UeXBlLFxyXG4gICAgUmVzcG9uc2VEb2N1bWVudFR5cGUsIElucHV0UmVmZXJlbmNlVHlwZSwgTGl0ZXJhbERhdGFUeXBlLCBFeGVjdXRlUmVzcG9uc2VcclxufSBmcm9tICcuL3dwc18xLjAuMCc7XHJcblxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBXcHNNYXJzaGFsbGVyMTAwIGltcGxlbWVudHMgV3BzTWFyc2hhbGxlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1HZXRDYXBhYmlsaXRpZXMmdmVyc2lvbj0xLjAuMGA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0ZVVybChiYXNldXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1FeGVjdXRlJnZlcnNpb249MS4wLjAmaWRlbnRpZmllcj0ke3Byb2Nlc3NJZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXM6IFdQU0NhcGFiaWxpdGllc1R5cGUpOiBXcHNDYXBhYmlsaXR5W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzQ2FwYWJpbGl0eVtdID0gW107XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzLnByb2Nlc3NPZmZlcmluZ3MucHJvY2Vzcy5mb3JFYWNoKHByb2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb246IElXcHNFeGVjdXRlUmVzcG9uc2UsIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1Jlc3VsdFtdIHtcclxuXHJcbiAgICAgICAgY29uc3Qgb3V0OiBXcHNSZXN1bHRbXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1cy5wcm9jZXNzRmFpbGVkKSB7IC8vIEZhaWx1cmU/XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzLmlkZW50aWZpZXIudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcidcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1c0xvY2F0aW9uXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnByb2Nlc3NPdXRwdXRzKSB7IC8vIHN5bmNocm9ub3VzIHJlcXVlc3Q/XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHJlc3BvbnNlSnNvbi52YWx1ZS5wcm9jZXNzT3V0cHV0cy5vdXRwdXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlID0gb3V0cHV0LnJlZmVyZW5jZSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXR5cGU6ICdsaXRlcmFsJyB8ICdjb21wbGV4JyB8ICdiYm94JyB8ICdzdGF0dXMnIHwgJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZvcm1hdDogV3BzRGF0YUZvcm1hdCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXQucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnY29tcGxleCc7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG91dHB1dC5yZWZlcmVuY2UuaHJlZiB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG91dHB1dC5yZWZlcmVuY2UubWltZVR5cGUgYXMgV3BzRGF0YUZvcm1hdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dC5kYXRhICYmIG91dHB1dC5kYXRhLmxpdGVyYWxEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlID0gJ2xpdGVyYWwnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvdXRwdXQuZGF0YS5saXRlcmFsRGF0YS5kYXRhVHlwZSBhcyBXcHNEYXRhRm9ybWF0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3V0cHV0LmRhdGEgJiYgb3V0cHV0LmRhdGEuY29tcGxleERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnY29tcGxleCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IG91dHB1dC5kYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlIGFzIFdwc0RhdGFGb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgPSAnYmJveCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnVubWFyc2hhbE91dHB1dERhdGEob3V0cHV0LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogb3V0cHV0LmlkZW50aWZpZXIudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IGlzUmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBkYXRhdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1c0xvY2F0aW9uKSB7IC8vIGFzeW5jaHJvbm91cyByZXF1ZXN0P1xyXG4gICAgICAgICAgICBvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiByZXNwb25zZUpzb24udmFsdWUucHJvY2Vzcy5pZGVudGlmaWVyLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdW5tYXJzaGFsT3V0cHV0RGF0YShkYXRhOiBEYXRhVHlwZSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcGxleERhdGEpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLmNvbXBsZXhEYXRhLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxleERhdGEuY29udGVudC5tYXAoY29udCA9PiBKU09OLnBhcnNlKGNvbnQpKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL1dNUyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29tcGxleERhdGEuY29udGVudDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQveG1sJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkYXRhLmNvbXBsZXhEYXRhLmNvbnRlbnRbMF0pOyAvLyBAVE9ETzogYmV0dGVyOiBoYW5kbGUgYWN0dWFsIHhtbC1kYXRhXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHVubWFyc2hhbCBkYXRhIG9mIGZvcm1hdCAke2RhdGEuY29tcGxleERhdGEubWltZVR5cGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubGl0ZXJhbERhdGEpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChkYXRhLmxpdGVyYWxEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5saXRlcmFsRGF0YS52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke2RhdGF9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0RhdGFbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IEV4ZWN1dGVSZXNwb25zZSA9IHJlc3BvbnNlSnNvbi52YWx1ZTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXMucHJvY2Vzc1N1Y2NlZWRlZCA/ICdTdWNjZWVkZWQnIDpcclxuICAgICAgICByZXNwb25zZS5zdGF0dXMucHJvY2Vzc0FjY2VwdGVkID8gJ0FjY2VwdGVkJyA6XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLnByb2Nlc3NTdGFydGVkID8gJ1J1bm5pbmcnIDpcclxuICAgICAgICByZXNwb25zZS5zdGF0dXMucHJvY2Vzc0ZhaWxlZCA/ICdGYWlsZWQnIDpcclxuICAgICAgICAnRmFpbGVkJztcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICBzdGF0dXNMb2NhdGlvbjogcmVzcG9uc2Uuc3RhdHVzTG9jYXRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnByb2Nlc3NPdXRwdXRzICYmIHJlc3BvbnNlLnByb2Nlc3NPdXRwdXRzLm91dHB1dCkge1xyXG4gICAgICAgICAgICBzdGF0ZS5yZXN1bHRzID0gdGhpcy51bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbiwgc2VydmVyVXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pOiBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5IHtcclxuXHJcbiAgICAgICAgY29uc3Qgd3BzMUlucHV0cyA9IHRoaXMubWFyc2hhbElucHV0cyhpbnB1dHMpO1xyXG4gICAgICAgIGNvbnN0IHdwczFSZXNwb25zZUZvcm0gPSB0aGlzLm1hcnNoYWxSZXNwb25zZUZvcm0ob3V0cHV0cywgYXN5bmMpO1xyXG5cclxuICAgICAgICBjb25zdCBib2R5VmFsdWU6IEV4ZWN1dGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGFJbnB1dHM6IHdwczFJbnB1dHMsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHByb2Nlc3NJZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VGb3JtOiB3cHMxUmVzcG9uc2VGb3JtLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgdmVyc2lvbjogJzEuMC4wJ1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJvZHk6IElXcHNFeGVjdXRlUHJvY2Vzc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8xLjAuMH1FeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0V4ZWN1dGUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMS4wLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8xLjAuMH13cHM6RXhlY3V0ZSdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IGJvZHlWYWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIG1hcnNoYWxSZXNwb25zZUZvcm0ob3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmMgPSBmYWxzZSk6IFJlc3BvbnNlRm9ybVR5cGUge1xyXG5cclxuICAgICAgICBjb25zdCBvdXRwdXREZWZpbml0aW9uczogRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZVtdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2Ygb3V0cHV0cykge1xyXG4gICAgICAgICAgICBsZXQgZGVmVHlwZTogRG9jdW1lbnRPdXRwdXREZWZpbml0aW9uVHlwZTtcclxuICAgICAgICAgICAgc3dpdGNoIChvdXRwdXQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbGl0ZXJhbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmVHlwZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogeyB2YWx1ZTogb3V0cHV0LmlkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUmVmZXJlbmNlOiBvdXRwdXQucmVmZXJlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogb3V0cHV0LmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV4JzpcclxuICAgICAgICAgICAgICAgICAgICBkZWZUeXBlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiB7IHZhbHVlOiBvdXRwdXQuaWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXNSZWZlcmVuY2U6IG91dHB1dC5yZWZlcmVuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBvdXRwdXQuZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIFdwcy1vdXRwdXR0eXBlIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQhICR7b3V0cHV0fSBgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXREZWZpbml0aW9ucy5wdXNoKGRlZlR5cGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VEb2N1bWVudDogUmVzcG9uc2VEb2N1bWVudFR5cGUgPSB7XHJcbiAgICAgICAgICAgIG91dHB1dDogb3V0cHV0RGVmaW5pdGlvbnMsXHJcbiAgICAgICAgICAgIHN0YXR1czogYXN5bmMgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIHN0b3JlRXhlY3V0ZVJlc3BvbnNlOiBhc3luYyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm06IFJlc3BvbnNlRm9ybVR5cGUgPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlRG9jdW1lbnRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBmb3JtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbElucHV0cyhpbnB1dEFycjogV3BzSW5wdXRbXSk6IERhdGFJbnB1dHNUeXBlIHtcclxuICAgICAgICBjb25zdCB0aGVJbnB1dHM6IElucHV0VHlwZVtdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbnAgb2YgaW5wdXRBcnIpIHtcclxuICAgICAgICAgICAgaWYgKGlucC52YWx1ZSA9PT0gbnVsbCB8fCBpbnAudmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBmb3IgaW5wdXQgJHtpbnAuZGVzY3JpcHRpb24uaWR9IGlzIG5vdCBzZXRgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBtYXJzaGFsbGVkSW5wdXQgPSB0aGlzLm1hcnNoYWxJbnB1dChpbnApO1xyXG4gICAgICAgICAgICB0aGVJbnB1dHMucHVzaChtYXJzaGFsbGVkSW5wdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnB1dHM6IERhdGFJbnB1dHNUeXBlID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogdGhlSW5wdXRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gaW5wdXRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBtYXJzaGFsSW5wdXQoaW5wdXQ6IFdwc0lucHV0KTogSW5wdXRUeXBlIHtcclxuICAgICAgICBjb25zdCBpZCA9IGlucHV0LmRlc2NyaXB0aW9uLmlkO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gaW5wdXQuZGVzY3JpcHRpb24uaWQ7XHJcbiAgICAgICAgY29uc3QgYWJzdHJhY3QgPSAnJztcclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXRUeXBlOiBJbnB1dFR5cGUgPSB7XHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IGlkIH0sXHJcbiAgICAgICAgICAgIHRpdGxlOiB7IHZhbHVlOiB0aXRsZSB9LFxyXG4gICAgICAgICAgICBfYWJzdHJhY3Q6IHsgdmFsdWU6IGFic3RyYWN0IH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaW5wdXQuZGVzY3JpcHRpb24ucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgIGlucHV0VHlwZS5yZWZlcmVuY2UgPSB0aGlzLm1hcnNoYWxSZWZlcmVuY2VJbnB1dChpbnB1dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5wdXRUeXBlLmRhdGEgPSB0aGlzLm1hcnNoYWxEYXRhSW5wdXQoaW5wdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbERhdGFJbnB1dChpbnB1dDogV3BzSW5wdXQpOiBEYXRhVHlwZSB7XHJcbiAgICAgICAgbGV0IGRhdGE6IERhdGFUeXBlO1xyXG4gICAgICAgIHN3aXRjaCAoaW5wdXQuZGVzY3JpcHRpb24udHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdsaXRlcmFsJzpcclxuICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbERhdGE6IHsgdmFsdWU6IFN0cmluZyhpbnB1dC52YWx1ZSkgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdiYm94JzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogV3BzQmJveFZhbHVlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3dlckNvcm5lcjogW3ZhbHVlcy5sbGxhdCwgdmFsdWVzLmxsbG9uXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJDb3JuZXI6IFt2YWx1ZXMudXJsYXQsIHZhbHVlcy51cmxvbl1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXgnOlxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnB1dC5kZXNjcmlwdGlvbi5mb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3htbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtpbnB1dC52YWx1ZV0sICAvLyBAVE9ETzogd2UgYXNzdW1lIGhlcmUgdGhhdCB0ZXh0L3htbC1kYXRhIGlzIGFscmVhZHkgc3RyaW5naWZpZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFtKU09OLnN0cmluZ2lmeShpbnB1dC52YWx1ZSldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBpbnB1dC5kZXNjcmlwdGlvbi5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFRoaXMgaW5wdXQgaXMgb2YgdHlwZSAke2lucHV0LmRlc2NyaXB0aW9uLnR5cGV9LiBXZSBjYW4gb25seSBtYXJzaGFsIGlucHV0IG9mIHR5cGUgbGl0ZXJhbCwgYmJveCBvciBjb21wbGV4LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgbWFyc2hhbFJlZmVyZW5jZUlucHV0KGlucHV0OiBXcHNJbnB1dCk6IElucHV0UmVmZXJlbmNlVHlwZSB7XHJcbiAgICAgICAgY29uc3QgcmVmOiBJbnB1dFJlZmVyZW5jZVR5cGUgPSB7XHJcbiAgICAgICAgICAgIGhyZWY6IGlucHV0LnZhbHVlLFxyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICBtaW1lVHlwZTogaW5wdXQuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVmO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIHN0YXR1c0lkOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBXUFMtMS4wIGRvZXMgbm90IHNlbmQgYSBib2R5IHdpdGggYSBHZXRTdGF0dXMgcmVxdWVzdC5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSUQ6IHN0cmluZykge1xyXG4gICAgICAgIC8vIFdQUy0xLjAgZG9lcyBub3Qgc2VuZCBhIGJvZHkgd2l0aCBhIEdldFN0YXR1cyByZXF1ZXN0LlxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNtaXNzVXJsKHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgLyoqIHRoaXMgZG9lcyBvbmx5IHdvcmsgaW4gZ2Vvc2VydmVyOlxyXG4gICAgICAgIHJldHVybiBgJHtzZXJ2ZXJVcmx9P3NlcnZpY2U9V1BTJnZlcnNpb249MS4wLjAmcmVxdWVzdD1EaXNtaXNzJmV4ZWN1dGlvbklkPSR7am9iSWR9YDsgKi9cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dwcyAxLjAgZG9lcyBub3Qgc3VwcG9ydCBEaXNtaXNzLW9wZXJhdGlvbnMuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbERpc21pc3NCb2R5KHByb2Nlc3NJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcHMgMS4wIGRvZXMgbm90IHN1cHBvcnQgRGlzbWlzcy1vcGVyYXRpb25zLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2U6IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV3BzIDEuMCBkb2VzIG5vdCBzdXBwb3J0IERpc21pc3Mtb3BlcmF0aW9ucy4nKTtcclxuICAgIH1cclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/wps200/helpers.js b/@ukis/services-ogc/esm5/lib/wps/wps200/helpers.js deleted file mode 100644 index 58b090c4c..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/wps200/helpers.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -export var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -export var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -export var isResult = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzMjAwL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsTUFBTSxLQUFPLFlBQVk7Ozs7QUFBRyxVQUFDLEdBQVc7SUFDcEMsT0FBTyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztXQUM1QixHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQTs7QUFFRCxNQUFNLEtBQU8sZ0JBQWdCOzs7O0FBQUcsVUFBQyxHQUFXO0lBQ3hDLE9BQU8sR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLENBQUMsQ0FBQTs7QUFFRCxNQUFNLEtBQU8sUUFBUTs7OztBQUFHLFVBQUMsR0FBVztJQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNJbmZvLCBEYXRhT3V0cHV0VHlwZSwgUmVzdWx0IH0gZnJvbSAnLi93cHNfMi4wJztcclxuXHJcblxyXG5leHBvcnQgY29uc3QgaXNTdGF0dXNJbmZvID0gKG9iajogb2JqZWN0KTogb2JqIGlzIFN0YXR1c0luZm8gPT4ge1xyXG4gICAgcmV0dXJuIG9iai5oYXNPd25Qcm9wZXJ0eSgnam9iSUQnKVxyXG4gICAgICAgJiYgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXMnKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc0RhdGFPdXRwdXRUeXBlID0gKG9iajogb2JqZWN0KTogb2JqIGlzIERhdGFPdXRwdXRUeXBlID0+IHtcclxuICAgIHJldHVybiBvYmouaGFzT3duUHJvcGVydHkoJ2lkJykgJiZcclxuICAgICAgICAob2JqLmhhc093blByb3BlcnR5KCdkYXRhJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdyZWZlcmVuY2UnKSB8fCBvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1Jlc3VsdCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBSZXN1bHQgPT4ge1xyXG4gICAgcmV0dXJuIChvYmouaGFzT3duUHJvcGVydHkoJ291dHB1dCcpICYmIHR5cGVvZiBvYmpbJ291dHB1dCddID09PSAnb2JqZWN0Jyk7XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js b/@ukis/services-ogc/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js deleted file mode 100644 index c890f7481..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/wps200/wps_marshaller_2.0.0.js +++ /dev/null @@ -1,458 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { isStatusInfo, isResult } from './helpers'; -var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = tslib_1.__values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; -}()); -export { WpsMarshaller200 }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX21hcnNoYWxsZXJfMi4wLjAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJsaWIvd3BzL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxPQUFPLEVBQW9CLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHckU7SUFFSTtJQUFlLENBQUM7Ozs7O0lBRWhCLDZDQUFrQjs7OztJQUFsQixVQUFtQixPQUFlO1FBQzlCLE9BQVUsT0FBTyx1REFBb0QsQ0FBQztJQUMxRSxDQUFDOzs7Ozs7SUFFRCxxQ0FBVTs7Ozs7SUFBVixVQUFXLE9BQWUsRUFBRSxTQUFpQjtRQUN6QyxPQUFVLE9BQU8sOERBQXlELFNBQVcsQ0FBQztJQUMxRixDQUFDOzs7OztJQUVELGdEQUFxQjs7OztJQUFyQixVQUFzQixZQUFpQzs7WUFDN0MsR0FBRyxHQUFvQixFQUFFO1FBQy9CLFlBQVksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLE9BQU87WUFDaEQsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDTCxFQUFFLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBQyxDQUFDO1FBQ0gsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOzs7Ozs7Ozs7SUFFRCx1REFBNEI7Ozs7Ozs7O0lBQTVCLFVBQTZCLFlBQWlDLEVBQUUsR0FBVyxFQUFFLFNBQWlCLEVBQzFGLE1BQWtCLEVBQUUsa0JBQTBDOzs7WUFDeEQsR0FBRyxHQUFnQixFQUFFO1FBRTNCLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQ0FDbkIsTUFBTTs7b0JBQ1AsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLEVBQUUsSUFBSSxPQUFBLEVBQUUs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Q2hCLEtBQUssRUFBRSxLQUFLO2FBQ2Y7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Ozs7Ozs7SUFFRCxxQ0FBVTs7Ozs7O0lBQVYsVUFBVyxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUMxRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELDZDQUFrQjs7OztJQUFsQixVQUFtQixLQUFhOztZQUN0QixJQUFJLEdBQW9CO1lBQzFCLElBQUksRUFBRTtnQkFDRixHQUFHLEVBQUUseUNBQXlDO2dCQUM5QyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsWUFBWSxFQUFFLGdDQUFnQztnQkFDOUMsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLDZDQUE2QzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDSCxLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsT0FBTzthQUNuQjtTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELG1EQUF3Qjs7Ozs7O0lBQXhCLFVBQXlCLFlBQThCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQjs7WUFDbkYsS0FBSyxHQUFhO1lBQ3BCLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDTCx1QkFBQztBQUFELENBQUMsQUEvT0QsSUErT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcHNNYXJzaGFsbGVyLCBXcHNJbnB1dCwgV3BzT3V0cHV0RGVzY3JpcHRpb24sIFdwc1Jlc3VsdCwgV3BzQ2FwYWJpbGl0eSwgV3BzRGF0YURlc2NyaXB0aW9uLCBXcHNEYXRhLCBXcHNTdGF0ZSB9IGZyb20gJy4uL3dwc19kYXRhdHlwZXMnO1xyXG5pbXBvcnQgeyBXUFNDYXBhYmlsaXRpZXNUeXBlLCBFeGVjdXRlUmVxdWVzdFR5cGUsIERhdGFJbnB1dFR5cGUsIE91dHB1dERlZmluaXRpb25UeXBlLCBJV3BzRXhlY3V0ZVByb2Nlc3NCb2R5LCBJV3BzRXhlY3V0ZVJlc3BvbnNlLCBEYXRhT3V0cHV0VHlwZSwgSUdldFN0YXR1c1JlcXVlc3QsIERhdGEsIElHZXRSZXN1bHRSZXF1ZXN0LCBJRGlzbWlzc1JlcXVlc3QsIElEaXNtaXNzUmVzcG9uc2UgfSBmcm9tICcuL3dwc18yLjAnO1xyXG5pbXBvcnQgeyBpc0RhdGFPdXRwdXRUeXBlLCBpc1N0YXR1c0luZm8sIGlzUmVzdWx0IH0gZnJvbSAnLi9oZWxwZXJzJztcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgV3BzTWFyc2hhbGxlcjIwMCBpbXBsZW1lbnRzIFdwc01hcnNoYWxsZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBnZXRDYXBhYmlsaXRpZXNVcmwoYmFzZXVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1HZXRDYXBhYmlsaXRpZXMmdmVyc2lvbj0yLjAuMGA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhlY3V0ZVVybChiYXNldXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7YmFzZXVybH0/c2VydmljZT1XUFMmcmVxdWVzdD1FeGVjdXRlJnZlcnNpb249Mi4wLjAmaWRlbnRpZmllcj0ke3Byb2Nlc3NJZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXM6IFdQU0NhcGFiaWxpdGllc1R5cGUpOiBXcHNDYXBhYmlsaXR5W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzQ2FwYWJpbGl0eVtdID0gW107XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzLmNvbnRlbnRzLnByb2Nlc3NTdW1tYXJ5LmZvckVhY2goc3VtbWFyeSA9PiB7XHJcbiAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBzdW1tYXJ5LmlkZW50aWZpZXIudmFsdWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICB1bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogSVdwc0V4ZWN1dGVSZXNwb25zZSwgdXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLFxyXG4gICAgICAgIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzUmVzdWx0W10ge1xyXG4gICAgICAgIGNvbnN0IG91dDogV3BzUmVzdWx0W10gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzdWx0KHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgcmVzcG9uc2VKc29uLnZhbHVlLm91dHB1dCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0RGVzY3JpcHRpb24gPSBvdXRwdXREZXNjcmlwdGlvbnMuZmluZChvZCA9PiBvZC5pZCA9PT0gb3V0cHV0LmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghb3V0cHV0RGVzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGFuIG91dHB1dC1kZXNjcmlwdGlvbiBmb3IgdGhlIHBhcmFtZXRlciAke291dHB1dC5pZH0uYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWZlcmVuY2UgPSBvdXRwdXREZXNjcmlwdGlvbi5yZWZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhdHlwZSA9IG91dHB1dERlc2NyaXB0aW9uLnR5cGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvdXRwdXREZXNjcmlwdGlvbi5mb3JtYXQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXQucmVmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG91dHB1dC5yZWZlcmVuY2UuaHJlZiB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvdXRwdXQuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnVubWFyc2hhbE91dHB1dERhdGEob3V0cHV0LmRhdGEsIG91dHB1dERlc2NyaXB0aW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPdXRwdXQgaGFzIG5laXRoZXIgcmVmZXJlbmNlIG5vciBkYXRhIGZpZWxkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG91dC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogb3V0cHV0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOiBpc1JlZmVyZW5jZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZGF0YXR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGlzU3RhdHVzSW5mbyhyZXNwb25zZUpzb24udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBXcHNTdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2VKc29uLnZhbHVlLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgIGpvYklEOiByZXNwb25zZUpzb24udmFsdWUuam9iSUQsXHJcbiAgICAgICAgICAgICAgICBwZXJjZW50Q29tcGxldGVkOiByZXNwb25zZUpzb24udmFsdWUucGVyY2VudENvbXBsZXRlZFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcHJvY2Vzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBzdGF0ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVubWFyc2hhbE91dHB1dERhdGEoZGF0YTogRGF0YSwgZGVzY3JpcHRpb246IFdwc091dHB1dERlc2NyaXB0aW9uKTogYW55IHtcclxuICAgICAgICBpZiAoZGVzY3JpcHRpb24udHlwZSA9PT0gJ2NvbXBsZXgnKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5taW1lVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vdm5kLmdlbytqc29uJzpcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbnRlbnQubWFwKChjb250OiBhbnkpID0+IEpTT04ucGFyc2UoY29udCkpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vV01TJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndGV4dC94bWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGRhdGEuY29udGVudFswXSk7IC8vIEBUT0RPOiBiZXR0ZXI6IGhhbmRsZSBhY3R1YWwgeG1sLWRhdGFcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgdW5tYXJzaGFsIGNvbXBsZXggZGF0YSBvZiBmb3JtYXQgJHtkYXRhLm1pbWVUeXBlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvbi50eXBlID09PSAnbGl0ZXJhbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHtkYXRhfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEFzeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzRGF0YVtdLCBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc0RhdGFEZXNjcmlwdGlvbltdKTogV3BzU3RhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UocmVzcG9uc2VKc29uOiBhbnksIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyxcclxuICAgICAgICBpbnB1dHM6IFdwc0RhdGFbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNEYXRhRGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlIHtcclxuICAgICAgICBpZiAoaXNTdGF0dXNJbmZvKHJlc3BvbnNlSnNvbi52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFdwc1N0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZUpzb24udmFsdWUuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgam9iSUQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5qb2JJRCxcclxuICAgICAgICAgICAgICAgIHBlcmNlbnRDb21wbGV0ZWQ6IHJlc3BvbnNlSnNvbi52YWx1ZS5wZXJjZW50Q29tcGxldGVkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIHN0YXR1cy1pbmZvOiAke3Jlc3BvbnNlSnNvbn1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sIGFzeW5jOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXRzTWFyc2hhbGxlZCA9IHRoaXMubWFyc2hhbElucHV0cyhpbnB1dHMpO1xyXG4gICAgICAgIGNvbnN0IG91dHB1dHNNYXJzaGFsbGVkID0gdGhpcy5tYXJzaGFsT3V0cHV0cyhvdXRwdXRzKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm9keVZhbHVlOiBFeGVjdXRlUmVxdWVzdFR5cGUgPSB7XHJcbiAgICAgICAgICAgIFRZUEVfTkFNRTogJ1dQU18yXzAuRXhlY3V0ZVJlcXVlc3RUeXBlJyxcclxuICAgICAgICAgICAgc2VydmljZTogJ1dQUycsXHJcbiAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCcsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHsgdmFsdWU6IHByb2Nlc3NJZCB9LFxyXG4gICAgICAgICAgICBpbnB1dDogaW5wdXRzTWFyc2hhbGxlZCxcclxuICAgICAgICAgICAgb3V0cHV0OiBvdXRwdXRzTWFyc2hhbGxlZCxcclxuICAgICAgICAgICAgbW9kZTogYXN5bmMgPyAnYXN5bmMnIDogJ3N5bmMnLFxyXG4gICAgICAgICAgICByZXNwb25zZTogJ2RvY3VtZW50J1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGJvZHk6IElXcHNFeGVjdXRlUHJvY2Vzc0JvZHkgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9RXhlY3V0ZScsXHJcbiAgICAgICAgICAgICAgICBsb2NhbFBhcnQ6ICdFeGVjdXRlJyxcclxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZVVSSTogJ2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMCcsXHJcbiAgICAgICAgICAgICAgICBwcmVmaXg6ICd3cHMnLFxyXG4gICAgICAgICAgICAgICAgc3RyaW5nOiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH13cHM6RXhlY3V0ZSdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IGJvZHlWYWx1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFyc2hhbElucHV0cyhpbnB1dHM6IFdwc0RhdGFbXSk6IERhdGFJbnB1dFR5cGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0cy5tYXAoaSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpLmRlc2NyaXB0aW9uLnJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaS5kZXNjcmlwdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogaS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGkuZGVzY3JpcHRpb24uZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpLmRlc2NyaXB0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogW0pTT04uc3RyaW5naWZ5KGkudmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGU6IGkuZGVzY3JpcHRpb24uZm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWFyc2hhbE91dHB1dHMob3V0cHV0czogV3BzRGF0YURlc2NyaXB0aW9uW10pOiBPdXRwdXREZWZpbml0aW9uVHlwZVtdIHtcclxuICAgICAgICByZXR1cm4gb3V0cHV0cy5tYXAobyA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogby5pZCxcclxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiBvLmZvcm1hdCxcclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjogby5yZWZlcmVuY2UgPyAncmVmZXJlbmNlJyA6ICd2YWx1ZScgIC8vIEBUT0RPOiBtYXliZSBqdXN0IGNvbW1lbnQgb3V0IHRoaXMgbGluZT9cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSUdldFN0YXR1c1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9R2V0U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0dldFN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkdldFN0YXR1cydcclxuICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgIGpvYklEOiBzdGF0dXNJZCxcclxuICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnV1BTJyxcclxuICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMi4wLjAnXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsbEdldFJlc3VsdEJvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSUdldFJlc3VsdFJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHtcclxuICAgICAgICAgICAgICAgIGtleTogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9R2V0UmVzdWx0JyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0dldFJlc3VsdCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2VVUkk6ICdodHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjAnLFxyXG4gICAgICAgICAgICAgICAgcHJlZml4OiAnd3BzJyxcclxuICAgICAgICAgICAgICAgIHN0cmluZzogJ3todHRwOi8vd3d3Lm9wZW5naXMubmV0L3dwcy8yLjB9d3BzOkdldFJlc3VsdCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogJzIuMC4wJyxcclxuICAgICAgICAgICAgICAgIGpvYklEOiBqb2JJRFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNtaXNzVXJsKHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSWQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHNlcnZlclVybDtcclxuICAgIH1cclxuXHJcbiAgICBtYXJzaGFsRGlzbWlzc0JvZHkoam9iSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGJvZHk6IElEaXNtaXNzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgbmFtZToge1xyXG4gICAgICAgICAgICAgICAga2V5OiAne2h0dHA6Ly93d3cub3Blbmdpcy5uZXQvd3BzLzIuMH1EaXNtaXNzJyxcclxuICAgICAgICAgICAgICAgIGxvY2FsUGFydDogJ0Rpc21pc3MnLFxyXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJJOiAnaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wJyxcclxuICAgICAgICAgICAgICAgIHByZWZpeDogJ3dwcycsXHJcbiAgICAgICAgICAgICAgICBzdHJpbmc6ICd7aHR0cDovL3d3dy5vcGVuZ2lzLm5ldC93cHMvMi4wfXdwczpEaXNtaXNzJ1xyXG4gICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgam9iSUQ6IGpvYklkLFxyXG4gICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdXUFMnLFxyXG4gICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjAuMCdcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgfVxyXG5cclxuICAgIHVubWFyc2hhbERpc21pc3NSZXNwb25zZShqc29uUmVzcG9uc2U6IElEaXNtaXNzUmVzcG9uc2UsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IFdwc1N0YXRlIHtcclxuICAgICAgICBjb25zdCBzdGF0ZTogV3BzU3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXR1czoganNvblJlc3BvbnNlLnZhbHVlLnN0YXR1cyxcclxuICAgICAgICAgICAgam9iSUQ6IGpzb25SZXNwb25zZS52YWx1ZS5qb2JJRFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/wps_datatypes.js b/@ukis/services-ogc/esm5/lib/wps/wps_datatypes.js deleted file mode 100644 index 94b1da42e..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/wps_datatypes.js +++ /dev/null @@ -1,220 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -export function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -export function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -export function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -export var isBbox = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -export function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -export function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -export function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -export function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -export function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzX2RhdGF0eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbImxpYi93cHMvd3BzX2RhdGF0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVNBLHdDQU9DOzs7SUFORyxnQ0FBYzs7SUFDZCxrQ0FBMEQ7O0lBQzFELHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFNdkIsNkJBR0M7OztJQUZHLDhCQUFnQzs7SUFDaEMsd0JBQVc7Ozs7O0FBS2Ysd0NBT0M7OztJQU5HLGdDQUFjOztJQUNkLGtDQUFhOztJQUNiLHVDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qix5Q0FBcUI7O0lBQ3JCLDBDQUFtQjs7Ozs7QUFHdkIsa0NBTUM7OztJQUxHLDJCQUFZOztJQUNaLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOztJQUNkLDZCQUFjOzs7QUFHbEIsTUFBTSxLQUFPLE1BQU07Ozs7QUFBRyxVQUFDLEdBQVc7SUFDOUIsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQzlCLENBQUM7QUFDTixDQUFDLENBQUE7Ozs7QUFHRCw4QkFTQzs7O0lBUkcsMEJBQXNFOztJQUN0RSxvQ0FBMEI7Ozs7O0lBRTFCLHlCQUFlOzs7OztJQUVmLGtDQUF3Qjs7Ozs7SUFFeEIsMkJBQW9COzs7Ozs7QUFHeEIsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFXO0lBQ2xDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3hILENBQUM7Ozs7QUFHRCxpQ0FHQzs7O0lBRkcsa0NBQWdDOztJQUNoQyw0QkFBb0I7Ozs7O0FBR3hCLG1DQUVDOzs7SUFERywyQkFBVzs7Ozs7QUFJZixtQ0FnQkM7Ozs7Ozs7SUFkRyxtRUFBbUQ7Ozs7Ozs7SUFDbkQsZ0ZBQXdFOzs7OztJQUN4RSxvRUFBNEM7Ozs7Ozs7O0lBRTVDLDJGQUE2Rzs7Ozs7OztJQUM3Ryw4RkFBbUY7Ozs7Ozs7SUFDbkYsMkZBQWdGOzs7OztJQUNoRixrRUFBdUM7Ozs7O0lBRXZDLGdGQUE4RDs7Ozs7Ozs7O0lBQzlELCtIQUE2Sjs7Ozs7Ozs7O0lBQzdKLGdJQUEySjs7Ozs7Ozs7O0lBQzNKLGtJQUE2Sjs7Ozs7OztJQUM3SixxR0FBNEYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBXcHNWZXJpb24gPSAnMS4wLjAnIHwgJzIuMC4wJztcclxuZXhwb3J0IHR5cGUgV3BzRGF0YUZvcm1hdCA9ICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nIHwgJ2FwcGxpY2F0aW9uL2pzb24nIHwgJ2FwcGxpY2F0aW9uL1dNUycgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcgfCAndGV4dC94bWwnIHwgJ2FwcGxpY2F0aW9uL3RleHQnIHwgJ2ltYWdlL2dlb3RpZmYnIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJztcclxuXHJcblxyXG5leHBvcnQgdHlwZSBQcm9jZXNzSWQgPSBzdHJpbmc7XHJcbmV4cG9ydCB0eXBlIFByb2R1Y3RJZCA9IHN0cmluZztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzRGF0YURlc2NyaXB0aW9uIHtcclxuICAgIGlkOiBQcm9kdWN0SWQ7XHJcbiAgICB0eXBlOiAnbGl0ZXJhbCcgfCAnY29tcGxleCcgfCAnYmJveCcgfCAnc3RhdHVzJyB8ICdlcnJvcic7XHJcbiAgICByZWZlcmVuY2U6IGJvb2xlYW47XHJcbiAgICBmb3JtYXQ/OiBXcHNEYXRhRm9ybWF0O1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbn1cclxuZXhwb3J0IHR5cGUgV3BzSW5wdXREZXNjcmlwdGlvbiA9IFdwc0RhdGFEZXNjcmlwdGlvbjtcclxuZXhwb3J0IHR5cGUgV3BzT3V0cHV0RGVzY3JpcHRpb24gPSBXcHNEYXRhRGVzY3JpcHRpb247XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNEYXRhIHtcclxuICAgIGRlc2NyaXB0aW9uOiBXcHNEYXRhRGVzY3JpcHRpb247XHJcbiAgICB2YWx1ZTogYW55O1xyXG59XHJcbmV4cG9ydCB0eXBlIFdwc0lucHV0ID0gV3BzRGF0YTtcclxuZXhwb3J0IHR5cGUgV3BzUmVzdWx0ID0gV3BzRGF0YTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveERlc2NyaXB0aW9uIHtcclxuICAgIGlkOiBQcm9kdWN0SWQ7XHJcbiAgICB0eXBlOiAnYmJveCc7XHJcbiAgICByZWZlcmVuY2U6IGJvb2xlYW47XHJcbiAgICBmb3JtYXQ/OiBXcHNEYXRhRm9ybWF0O1xyXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveFZhbHVlIHtcclxuICAgIGNyczogc3RyaW5nO1xyXG4gICAgbGxsb246IG51bWJlcjtcclxuICAgIGxsbGF0OiBudW1iZXI7XHJcbiAgICB1cmxvbjogbnVtYmVyO1xyXG4gICAgdXJsYXQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQmJveCA9IChvYmo6IG9iamVjdCk6IG9iaiBpcyBXcHNCYm94VmFsdWUgPT4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoJ2NycycpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCdsbGxvbicpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCdsbGxhdCcpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCd1cmxvbicpICYmXHJcbiAgICAgICAgb2JqLmhhc093blByb3BlcnR5KCd1cmxhdCcpXHJcbiAgICApO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzU3RhdGUge1xyXG4gICAgc3RhdHVzOiAnU3VjY2VlZGVkJyB8ICdGYWlsZWQnIHwgJ0FjY2VwdGVkJyB8ICdSdW5uaW5nJyB8ICdEaXNtaXNzZWQnO1xyXG4gICAgcGVyY2VudENvbXBsZXRlZD86IG51bWJlcjtcclxuICAgIC8qKiBXUFMgMi4wIG9ubHkgKi9cclxuICAgIGpvYklEPzogc3RyaW5nO1xyXG4gICAgLyoqIFdQUyAxLjAgb25seSAqL1xyXG4gICAgc3RhdHVzTG9jYXRpb24/OiBzdHJpbmc7XHJcbiAgICAvKiogV1BTIDEuMCBvbmx5OiBhIHN1Y2Nlc3Mtc3RhdGUgYWxyZWFkeSBjb250YWlucyB0aGUgcmVzdWx0cyAqL1xyXG4gICAgcmVzdWx0cz86IFdwc0RhdGFbXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV3BzU3RhdGUob2JqOiBvYmplY3QpOiBvYmogaXMgV3BzU3RhdGUge1xyXG4gICAgcmV0dXJuIG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkoJ3N0YXR1cycpICYmIChvYmouaGFzT3duUHJvcGVydHkoJ2pvYklEJykgfHwgb2JqLmhhc093blByb3BlcnR5KCdzdGF0dXNMb2NhdGlvbicpKTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQmJveERhdGEge1xyXG4gICAgZGVzY3JpcHRpb246IFdwc0Jib3hEZXNjcmlwdGlvbjtcclxuICAgIHZhbHVlOiBXcHNCYm94VmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3BzQ2FwYWJpbGl0eSB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXcHNNYXJzaGFsbGVyIHtcclxuXHJcbiAgICBleGVjdXRlVXJsKHVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZyk6IHN0cmluZztcclxuICAgIGRpc21pc3NVcmwoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBqb2JJZDogc3RyaW5nKTogc3RyaW5nO1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzVXJsKGJhc2V1cmw6IHN0cmluZyk6IHN0cmluZztcclxuXHJcbiAgICBtYXJzaGFsRXhlY0JvZHkocHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgYXN5bmM6IGJvb2xlYW4pOiBhbnk7XHJcbiAgICBtYXJzaGFsbEdldFN0YXR1c0JvZHkoc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBzdGF0dXNJZDogc3RyaW5nKTogYW55O1xyXG4gICAgbWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgam9iSUQ6IHN0cmluZyk6IGFueTtcclxuICAgIG1hcnNoYWxEaXNtaXNzQm9keShqb2JJZDogc3RyaW5nKTogYW55O1xyXG5cclxuICAgIHVubWFyc2hhbENhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXNKc29uOiBhbnkpOiBXcHNDYXBhYmlsaXR5W107XHJcbiAgICB1bm1hcnNoYWxTeW5jRXhlY3V0ZVJlc3BvbnNlKHJlc3BvbnNlSnNvbjogYW55LCB1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSwgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogV3BzUmVzdWx0W107XHJcbiAgICB1bm1hcnNoYWxBc3luY0V4ZWN1dGVSZXNwb25zZShyZXNwb25zZUpzb246IGFueSwgdXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlO1xyXG4gICAgdW5tYXJzaGFsR2V0U3RhdGVSZXNwb25zZShqc29uUmVzcG9uc2U6IGFueSwgc2VydmVyVXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IFdwc1N0YXRlO1xyXG4gICAgdW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZTogYW55LCBzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcpOiBXcHNTdGF0ZTtcclxufVxyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/lib/wps/wpsclient.js b/@ukis/services-ogc/esm5/lib/wps/wpsclient.js deleted file mode 100644 index a6ae1975e..000000000 --- a/@ukis/services-ogc/esm5/lib/wps/wpsclient.js +++ /dev/null @@ -1,494 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -import * as tslib_1 from "tslib"; -import { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0'; -import { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0'; -import { of } from 'rxjs'; -import { map, switchMap, tap, share, mergeMap } from 'rxjs/operators'; -import { HttpClient } from '@angular/common/http'; -import * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; -/** @type {?} */ -var XLink_1_0 = XLink_1_0_Factory.XLink_1_0; -import * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0; -import * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; -/** @type {?} */ -var OWS_2_0 = OWS_2_0_Factory.OWS_2_0; -import * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; -/** @type {?} */ -var WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0; -import * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; -/** @type {?} */ -var WPS_2_0 = WPS_2_0_Factory.WPS_2_0; -import { pollUntil, delayedRetry } from './utils/polling'; -import { Injectable, Inject } from '@angular/core'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { FakeCache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = tslib_1.__values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; -}()); -export { WpsClient }; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3BzY2xpZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVraXMvc2VydmljZXMtb2djLyIsInNvdXJjZXMiOlsibGliL3dwcy93cHNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssaUJBQWlCLE1BQU0sMkJBQTJCLENBQUM7O0lBQU8sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVM7QUFDN0csT0FBTyxLQUFLLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDOztJQUFPLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTO0FBQzdHLE9BQU8sS0FBSyxlQUFlLE1BQU0seUJBQXlCLENBQUM7O0lBQU8sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPO0FBQ25HLE9BQU8sS0FBSyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQzs7SUFBTyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUztBQUM3RyxPQUFPLEtBQUssZUFBZSxNQUFNLHlCQUF5QixDQUFDOztJQUFPLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTztBQUNuRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QyxPQUFPLEVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDOzs7Ozs7Ozs7QUFZM0M7SUFTSSxtQkFDMEIsT0FBNEIsRUFDMUMsU0FBcUIsRUFDVCxLQUFhO1FBRmpDLHdCQUFBLEVBQUEsaUJBQWtEO1FBQzFDLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFKekIsVUFBSyxHQUFVLElBQUksU0FBUyxFQUFFLENBQUM7UUFPbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O1lBQzFCLE9BQU87UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztTQUMzRTtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNwRCxDQUFDOzs7OztJQUdELG1DQUFlOzs7O0lBQWYsVUFBZ0IsR0FBVztRQUEzQixpQkFRQzs7WUFQUyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLEdBQUc7Ozs7UUFBQyxVQUFDLFFBQWE7O2dCQUNSLFlBQVksR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDbkUsT0FBTyxLQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSxDQUFDLEVBQUMsQ0FBQyxtRkFBbUY7U0FDekYsQ0FBQztJQUNOLENBQUM7Ozs7O0lBR0QsbUNBQWU7Ozs7SUFBZixVQUFnQixTQUFpQjtRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDM0MsQ0FBQzs7Ozs7Ozs7OztJQUdELGdDQUFZOzs7Ozs7Ozs7SUFBWixVQUFhLEdBQVcsRUFBRSxTQUFpQixFQUFFLE1BQWtCLEVBQUUsT0FBK0IsRUFDNUYsV0FBMEIsRUFBRSxXQUFnRDtRQURoRixpQkF3Q0M7UUF2Q0csNEJBQUEsRUFBQSxrQkFBMEI7O1lBRXBCLGVBQWUsR0FBeUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7O1lBRTNGLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSTtRQUUvQixzQkFBc0I7UUFDdEIsUUFBUTs7OztRQUFDLFVBQUMsWUFBc0I7O2dCQUN0QixVQUFVLEdBQXlCLEtBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQzs7Z0JBRW5HLEtBQUssR0FBeUIsU0FBUyxDQUN6QyxVQUFVOzs7O1lBQ1YsVUFBQyxRQUFrQjtnQkFDZixPQUFPLFFBQVEsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDO1lBQzNDLENBQUMsR0FDRCxXQUFXLEVBQ1gsV0FBVyxDQUNkO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUFDO1FBRUYsZ0JBQWdCO1FBQ2hCLFFBQVE7Ozs7UUFBQyxVQUFDLFNBQW1CO1lBQ3pCLE9BQU8sS0FBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekUsQ0FBQyxFQUFDO1FBRUYscUJBQXFCO1FBQ3JCLEdBQUc7Ozs7UUFBQyxVQUFDLFFBQW1COzs7Z0JBQ3BCLEtBQXFCLElBQUEsYUFBQSxpQkFBQSxRQUFRLENBQUEsa0NBQUEsd0RBQUU7b0JBQTFCLElBQU0sTUFBTSxxQkFBQTtvQkFDYixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTt3QkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2pDO2lCQUNKOzs7Ozs7Ozs7UUFDTCxDQUFDLEVBQUMsQ0FDTDtRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7Ozs7Ozs7OztJQUVPLCtCQUFXOzs7Ozs7Ozs7SUFBbkIsVUFBb0IsR0FBVyxFQUFFLFNBQWlCLEVBQUUsTUFBa0IsRUFDbEUsT0FBK0IsRUFBRSxNQUE2QjtRQURsRSxpQkFpQkM7O1lBZFMsZUFBZSxHQUFtQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFDLEdBQUcsS0FBQSxFQUFFLFNBQVMsV0FBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLE9BQU8sU0FBQSxFQUFDLENBQUM7UUFDekcsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUN2QixTQUFTOzs7O1FBQUMsVUFBQyxPQUFPO1lBQ2QsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNkLEdBQUc7Ozs7Z0JBQUMsVUFBQyxRQUFtQjtvQkFDcEIsS0FBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQyxHQUFHLEtBQUEsRUFBRSxTQUFTLFdBQUEsRUFBRSxNQUFNLFFBQUEsRUFBRSxPQUFPLFNBQUEsRUFBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDLEVBQUMsQ0FDTCxDQUFDO2FBQ0w7UUFDTCxDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7Ozs7Ozs7OztJQUVPLGdDQUFZOzs7Ozs7Ozs7SUFBcEIsVUFBcUIsWUFBc0IsRUFBRSxTQUFpQixFQUFFLFNBQWlCLEVBQUUsTUFBa0IsRUFDakcsa0JBQTBDO1FBRDlDLGlCQW9DQzs7WUFqQ08sUUFBNEI7UUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUUxQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtnQkFDOUIsTUFBTSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUNyQztZQUNELFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUV2RDthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7WUFFakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JCLE1BQU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVCOztnQkFDSyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7O2dCQUM3RixXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBRTlELFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUVuRDthQUFNO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBa0UsSUFBSSxDQUFDLE9BQU8sT0FBSSxDQUFDLENBQUM7U0FDdkc7O1lBRUssU0FBUyxHQUF5QixRQUFRLENBQUMsSUFBSSxDQUNqRCxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUNyQixHQUFHOzs7O1FBQUMsVUFBQyxXQUFtQjs7Z0JBQ2QsWUFBWSxHQUFHLEtBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQzs7Z0JBQ2hFLE1BQU0sR0FDUixLQUFJLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQztZQUNoSCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUMsQ0FDTDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Ozs7Ozs7Ozs7SUFFTyxnQ0FBWTs7Ozs7Ozs7O0lBQXBCLFVBQXFCLFNBQW1CLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLE1BQWtCLEVBQzlGLGtCQUEwQztRQUQ5QyxpQkFzQkM7UUFuQkcsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsbURBQW1EO1lBQ3hFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoQzthQUFNLEVBQUUseUNBQXlDO1lBRTlDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHFGQUFxRixDQUFDLENBQUM7YUFDMUc7O2dCQUVLLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQzs7Z0JBQzFGLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFFOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzVDLEdBQUc7Ozs7WUFBQyxVQUFDLFdBQW1COztvQkFDZCxZQUFZLEdBQUcsS0FBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDOztvQkFDaEUsTUFBTSxHQUFHLEtBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDO2dCQUM5SCxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDLEVBQUMsQ0FDTCxDQUFDO1NBQ0w7SUFDTCxDQUFDOzs7Ozs7Ozs7SUFHTyxpQ0FBYTs7Ozs7Ozs7SUFBckIsVUFBc0IsR0FBVyxFQUFFLFNBQWlCLEVBQUUsTUFBa0IsRUFDcEUsa0JBQTBDO1FBRDlDLGlCQWVDOztZQVpTLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDOztZQUMxRCxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUM7O1lBQzFGLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFFOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzdDLEdBQUc7Ozs7UUFBQyxVQUFDLFdBQW1COztnQkFDZCxZQUFZLEdBQUcsS0FBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDOztnQkFDaEUsTUFBTSxHQUNSLEtBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDO1lBQzlHLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsRUFBQyxDQUNMLENBQUM7SUFDTixDQUFDOzs7Ozs7OztJQUVELDJCQUFPOzs7Ozs7O0lBQVAsVUFBUSxHQUFXLEVBQUUsU0FBaUIsRUFBRSxNQUFrQixFQUN0RCxrQkFBMEM7UUFEOUMsaUJBZUM7O1lBWlMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7O1lBQzFELFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQzs7WUFDM0YsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUU5RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRzs7OztRQUFDLFVBQUMsV0FBbUI7O2dCQUNkLFlBQVksR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7O2dCQUNoRSxNQUFNLEdBQ1IsS0FBSSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUM7WUFDN0csT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxFQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7Ozs7Ozs7SUFFRCwyQkFBTzs7Ozs7O0lBQVAsVUFBUSxTQUFpQixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUEzRCxpQkFhQzs7WUFYUyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7O1lBQ3ZFLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQzs7WUFDMUQsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUVwRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FDaEQsR0FBRzs7OztRQUFDLFVBQUMsV0FBbUI7O2dCQUNkLFlBQVksR0FBRyxLQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7O2dCQUNoRSxNQUFNLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztZQUM5RixPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLEVBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs7Ozs7O0lBRUQsMkJBQU87Ozs7O0lBQVAsVUFBUSxHQUFXLEVBQUUsT0FBZTs7WUFDMUIsT0FBTyxHQUFHO1lBQ1osY0FBYyxFQUFFLFVBQVU7WUFDMUIsUUFBUSxFQUFFLDJCQUEyQjtTQUN4QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sU0FBQSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDckIsS0FBSyxFQUFFLENBQUUsbUZBQW1GO1NBQy9GLENBQUM7SUFDTixDQUFDOzs7OztJQUVELDBCQUFNOzs7O0lBQU4sVUFBTyxHQUFXOztZQUNSLE9BQU8sR0FBRztZQUNaLFFBQVEsRUFBRSwyQkFBMkI7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sU0FBQSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbEUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDeEIsQ0FBQztJQUNOLENBQUM7O2dCQTlPSixVQUFVOzs7O2dEQVVGLE1BQU0sU0FBQyxZQUFZO2dCQS9CbkIsVUFBVTtnREFpQ1YsTUFBTSxTQUFDLFVBQVU7O0lBbU8xQixnQkFBQztDQUFBLEFBL09ELElBK09DO1NBOU9ZLFNBQVM7Ozs7OztJQUVsQiw0QkFBMkI7Ozs7O0lBQzNCLGtDQUEyQjs7Ozs7SUFDM0Isb0NBQTZCOzs7OztJQUM3QixrQ0FBcUM7Ozs7O0lBQ3JDLDBCQUF1Qzs7Ozs7SUFJbkMsOEJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3BzTWFyc2hhbGxlciwgV3BzSW5wdXQsIFdwc1ZlcmlvbiwgV3BzUmVzdWx0LCBXcHNPdXRwdXREZXNjcmlwdGlvbiwgV3BzRGF0YSwgV3BzU3RhdGUsIGlzV3BzU3RhdGUsIFdwc0RhdGFEZXNjcmlwdGlvbiB9IGZyb20gJy4vd3BzX2RhdGF0eXBlcyc7XHJcbmltcG9ydCB7IFdwc01hcnNoYWxsZXIxMDAgfSBmcm9tICcuL3dwczEwMC93cHNfbWFyc2hhbGxlcl8xLjAuMCc7XHJcbmltcG9ydCB7IFdwc01hcnNoYWxsZXIyMDAgfSBmcm9tICcuL3dwczIwMC93cHNfbWFyc2hhbGxlcl8yLjAuMCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwLCB0YXAsIHNoYXJlLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0ICogYXMgWExpbmtfMV8wX0ZhY3RvcnkgZnJvbSAndzNjLXNjaGVtYXMvbGliL1hMaW5rXzFfMCc7IGNvbnN0IFhMaW5rXzFfMCA9IFhMaW5rXzFfMF9GYWN0b3J5LlhMaW5rXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzFfMV8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL09XU18xXzFfMCc7IGNvbnN0IE9XU18xXzFfMCA9IE9XU18xXzFfMF9GYWN0b3J5Lk9XU18xXzFfMDtcclxuaW1wb3J0ICogYXMgT1dTXzJfMF9GYWN0b3J5IGZyb20gJ29nYy1zY2hlbWFzL2xpYi9PV1NfMl8wJzsgY29uc3QgT1dTXzJfMCA9IE9XU18yXzBfRmFjdG9yeS5PV1NfMl8wO1xyXG5pbXBvcnQgKiBhcyBXUFNfMV8wXzBfRmFjdG9yeSBmcm9tICdvZ2Mtc2NoZW1hcy9saWIvV1BTXzFfMF8wJzsgY29uc3QgV1BTXzFfMF8wID0gV1BTXzFfMF8wX0ZhY3RvcnkuV1BTXzFfMF8wO1xyXG5pbXBvcnQgKiBhcyBXUFNfMl8wX0ZhY3RvcnkgZnJvbSAnb2djLXNjaGVtYXMvbGliL1dQU18yXzAnOyBjb25zdCBXUFNfMl8wID0gV1BTXzJfMF9GYWN0b3J5LldQU18yXzA7XHJcbmltcG9ydCB7IHBvbGxVbnRpbCwgZGVsYXllZFJldHJ5IH0gZnJvbSAnLi91dGlscy9wb2xsaW5nJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpzb25peCB9IGZyb20gJ0Bib3VuZGxlc3NnZW8vanNvbml4JztcclxuaW1wb3J0IHsgQ2FjaGUsIEZha2VDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xyXG5cclxuXHJcblxyXG4vKipcclxuICogVGhlIFdwcy1jbGllbnQgYWJzdHJhY3RzIGF3YXkgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gV3BzMS4wLjAgYW5kIFdwczIuMC4wXHJcbiAqIFRoZXJlIGFyZSB0d28gbGF5ZXJzIG9mIG1hcnNoYWxsaW5nOlxyXG4gKiAgLSB0aGUgV3BzLW1hcnNoYWxsZXIgbWFyc2hhbHMgdXNlci1mYWNpbmcgZGF0YSB0byB3cHMtc3BlY2lmaWMgdHlwZXNcclxuICogIC0gSnNvbml4IG1hcnNoYWxzIHdwcy1zcGVjaWZpYyBkYXRhIHRvIHhtbC5cclxuICogdXNlci1mYWNpbmcgZGF0YSAtPiB3cHNtYXJzaGFsbGVyIC0+IFdwcy10eXBlLXNwZWNpZmljIGRhdGEgLT4gSnNvbml4LW1hcmhzYWxsZXIgLT4gWE1MIC0+XHJcbiAqIC0+IHdlYmNsaWVudCAtPiBXUFMgLT4gWE1MIC0+IEpzb25peC11bm1hcnNoYWxsZXIgLT4gV3BzLXR5cGUtc3BlY2lmaWMgZGF0YSAtPiB3cHNtYXJzaGFsbGVyIC0+IHVzZXItZmFjaW5nIGRhdGFcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdwc0NsaWVudCB7XHJcblxyXG4gICAgcHJpdmF0ZSB2ZXJzaW9uOiBXcHNWZXJpb247XHJcbiAgICBwcml2YXRlIHhtbG1hcnNoYWxsZXI6IGFueTtcclxuICAgIHByaXZhdGUgeG1sdW5tYXJzaGFsbGVyOiBhbnk7XHJcbiAgICBwcml2YXRlIHdwc21hcnNoYWxsZXI6IFdwc01hcnNoYWxsZXI7XHJcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZSA9IG5ldyBGYWtlQ2FjaGUoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdXcHNWZXJzaW9uJykgdmVyc2lvbjogV3BzVmVyaW9uID0gJzEuMC4wJyxcclxuICAgICAgICBwcml2YXRlIHdlYmNsaWVudDogSHR0cENsaWVudCxcclxuICAgICAgICBASW5qZWN0KCdXcHNDYWNoZScpIGNhY2hlPzogQ2FjaGVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHZlcnNpb247XHJcbiAgICAgICAgaWYgKGNhY2hlKSB0aGlzLmNhY2hlID0gY2FjaGU7XHJcbiAgICAgICAgbGV0IGNvbnRleHQ7XHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzEuMC4wJykge1xyXG4gICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIgPSBuZXcgV3BzTWFyc2hhbGxlcjEwMCgpO1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gbmV3IEpzb25peC5Db250ZXh0KFtYTGlua18xXzAsIE9XU18xXzFfMCwgV1BTXzFfMF8wXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT09ICcyLjAuMCcpIHtcclxuICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyID0gbmV3IFdwc01hcnNoYWxsZXIyMDAoKTtcclxuICAgICAgICAgICAgY29udGV4dCA9IG5ldyBKc29uaXguQ29udGV4dChbWExpbmtfMV8wLCBPV1NfMl8wLCBXUFNfMl8wXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgZW50ZXJlZCBhIFdQUyB2ZXJzaW9uIG90aGVyIHRoYW4gMS4wLjAgb3IgMi4wLjAuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMueG1sdW5tYXJzaGFsbGVyID0gY29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTtcclxuICAgICAgICB0aGlzLnhtbG1hcnNoYWxsZXIgPSBjb250ZXh0LmNyZWF0ZU1hcnNoYWxsZXIoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBnZXRDYXBhYmlsaXRpZXNVcmwgPSB0aGlzLndwc21hcnNoYWxsZXIuZ2V0Q2FwYWJpbGl0aWVzVXJsKHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmF3KGdldENhcGFiaWxpdGllc1VybCkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUpzb24gPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud3BzbWFyc2hhbGxlci51bm1hcnNoYWxDYXBhYmlsaXRpZXMocmVzcG9uc2VKc29uLnZhbHVlKTtcclxuICAgICAgICAgICAgfSkgLy8gQFRPRE86IGhhbmRsZSBjYXNlIHdoZW4gaW5zdGVhZCBvZiBXcHNDYXBhYmlsaXRlcyBhbiBFeGNlcHRpb25SZXBvcnQgaXMgcmV0dXJuZWRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBkZXNjcmliZVByb2Nlc3MocHJvY2Vzc0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkIHlldCcpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBleGVjdXRlQXN5bmModXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sIG91dHB1dHM6IFdwc091dHB1dERlc2NyaXB0aW9uW10sXHJcbiAgICAgICAgcG9sbGluZ1JhdGU6IG51bWJlciA9IDEwMDAsIHRhcEZ1bmN0aW9uPzogKHJlc3BvbnNlOiBXcHNTdGF0ZSB8IG51bGwpID0+IGFueSk6IE9ic2VydmFibGU8V3BzUmVzdWx0W10+IHtcclxuXHJcbiAgICAgICAgY29uc3QgZXhlY3V0ZVJlcXVlc3QkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHRoaXMuZXhlY3V0ZUFzeW5jUyh1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzKTtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlcnkkID0gZXhlY3V0ZVJlcXVlc3QkLnBpcGUoXHJcblxyXG4gICAgICAgICAgICAvLyBwb2xsIHVudGlsIHN1Y2VlZGVkXHJcbiAgICAgICAgICAgIG1lcmdlTWFwKChjdXJyZW50U3RhdGU6IFdwc1N0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHRoaXMuZ2V0TmV4dFN0YXRlKGN1cnJlbnRTdGF0ZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9sbCQ6IE9ic2VydmFibGU8V3BzU3RhdGU+ID0gcG9sbFVudGlsPFdwc1N0YXRlPihcclxuICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUkLFxyXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogV3BzU3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gJ1N1Y2NlZWRlZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0YXBGdW5jdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBwb2xsaW5nUmF0ZVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9sbCQ7XHJcbiAgICAgICAgICAgIH0pLFxyXG5cclxuICAgICAgICAgICAgLy8gZmV0Y2ggcmVzdWx0c1xyXG4gICAgICAgICAgICBtZXJnZU1hcCgobGFzdFN0YXRlOiBXcHNTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXN1bHRzKGxhc3RTdGF0ZSwgdXJsLCBwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0cyk7XHJcbiAgICAgICAgICAgIH0pLFxyXG5cclxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBlcnJvcnM6XHJcbiAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IFdwc0RhdGFbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlc2NyaXB0aW9uLnR5cGUgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3NlcnZlciByZXNwb25kZWQgd2l0aCAyMDAsIGJ1dCBib2R5IGNvbnRhaW5lZCBhbiBlcnJvci1yZXN1bHQ6ICcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRRdWVyeSh1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzLCBxdWVyeSQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FjaGVkUXVlcnkodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0czogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSwgcXVlcnkkOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4pOiBPYnNlcnZhYmxlPFdwc0RhdGFbXT4ge1xyXG5cclxuICAgICAgICBjb25zdCBjYWNoZWRSZXNwb25zZSQ6IE9ic2VydmFibGU8V3BzUmVzdWx0W10gfCBudWxsPiA9IHRoaXMuY2FjaGUuZ2V0KHt1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXRzfSk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlJC5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHJlc3VsdHMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJlc3VsdHMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgocmVzcG9uc2U6IFdwc0RhdGFbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZS5zZXQoe3VybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dHN9LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TmV4dFN0YXRlKGN1cnJlbnRTdGF0ZTogV3BzU3RhdGUsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzU3RhdGU+IHtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3QkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzEuMC4wJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RhdGUuc3RhdHVzTG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdObyBzdGF0dXMgbG9jYXRpb24nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXF1ZXN0JCA9IHRoaXMuZ2V0UmF3KGN1cnJlbnRTdGF0ZS5zdGF0dXNMb2NhdGlvbik7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52ZXJzaW9uID09PSAnMi4wLjAnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRTdGF0ZS5qb2JJRCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGpvYi1JZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxsR2V0U3RhdHVzQm9keShzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgY3VycmVudFN0YXRlLmpvYklEKTtcclxuICAgICAgICAgICAgY29uc3QgeG1sRXhlY2JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjYm9keSk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0JCA9IHRoaXMucG9zdFJhdyhzZXJ2ZXJVcmwsIHhtbEV4ZWNib2R5KTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnR2V0U3RhdHVzJyBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkIGZvciB0aGlzIFdQUy1WZXJzaW9uICgke3RoaXMudmVyc2lvbn0pLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVxdWVzdDEkOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiA9IHJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5ZWRSZXRyeSgyMDAwLCAyKSxcclxuICAgICAgICAgICAgbWFwKCh4bWxSZXNwb25zZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqc29uUmVzcG9uc2UgPSB0aGlzLnhtbHVubWFyc2hhbGxlci51bm1hcnNoYWxTdHJpbmcoeG1sUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0OiBXcHNEYXRhW10gfCBXcHNTdGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbEdldFN0YXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCBzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdDEkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hSZXN1bHRzKGxhc3RTdGF0ZTogV3BzU3RhdGUsIHNlcnZlclVybDogc3RyaW5nLCBwcm9jZXNzSWQ6IHN0cmluZywgaW5wdXRzOiBXcHNJbnB1dFtdLFxyXG4gICAgICAgIG91dHB1dERlc2NyaXB0aW9uczogV3BzT3V0cHV0RGVzY3JpcHRpb25bXSk6IE9ic2VydmFibGU8V3BzRGF0YVtdPiB7XHJcblxyXG4gICAgICAgIGlmIChsYXN0U3RhdGUucmVzdWx0cykgeyAvLyBXUFMgMS4wOiByZXN1bHRzIHNob3VsZCBhbHJlYWR5IGJlIGluIGxhc3Qgc3RhdGVcclxuICAgICAgICAgICAgcmV0dXJuIG9mKGxhc3RTdGF0ZS5yZXN1bHRzKTtcclxuICAgICAgICB9IGVsc2UgeyAvLyBXUFMgMi4wOiBnZXQgcmVzdWx0cyB3aXRoIHBvc3QgcmVxdWVzdFxyXG5cclxuICAgICAgICAgICAgaWYgKCFsYXN0U3RhdGUuam9iSUQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWW91IHdhbnQgbWUgdG8gZ2V0IGEgcmVzdWx0LCBidXQgSSBjYW4ndCBmaW5kIGEgam9iSWQuIEkgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIG5vdyFgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZXhlY0JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbGxHZXRSZXN1bHRCb2R5KHNlcnZlclVybCwgcHJvY2Vzc0lkLCBsYXN0U3RhdGUuam9iSUQpO1xyXG4gICAgICAgICAgICBjb25zdCB4bWxFeGVjQm9keSA9IHRoaXMueG1sbWFyc2hhbGxlci5tYXJzaGFsU3RyaW5nKGV4ZWNCb2R5KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RSYXcoc2VydmVyVXJsLCB4bWxFeGVjQm9keSkucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy53cHNtYXJzaGFsbGVyLnVubWFyc2hhbFN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCBzZXJ2ZXJVcmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgZXhlY3V0ZUFzeW5jUyh1cmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGlucHV0czogV3BzSW5wdXRbXSxcclxuICAgICAgICBvdXRwdXREZXNjcmlwdGlvbnM6IFdwc091dHB1dERlc2NyaXB0aW9uW10pOiBPYnNlcnZhYmxlPFdwc1N0YXRlPiB7XHJcblxyXG4gICAgICAgIGNvbnN0IGV4ZWN1dGVVcmwgPSB0aGlzLndwc21hcnNoYWxsZXIuZXhlY3V0ZVVybCh1cmwsIHByb2Nlc3NJZCk7XHJcbiAgICAgICAgY29uc3QgZXhlY2JvZHkgPSB0aGlzLndwc21hcnNoYWxsZXIubWFyc2hhbEV4ZWNCb2R5KHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMsIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHhtbEV4ZWNib2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZXhlY2JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGV4ZWN1dGVVcmwsIHhtbEV4ZWNib2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQ6IFdwc1N0YXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsQXN5bmNFeGVjdXRlUmVzcG9uc2UoanNvblJlc3BvbnNlLCB1cmwsIHByb2Nlc3NJZCwgaW5wdXRzLCBvdXRwdXREZXNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGUodXJsOiBzdHJpbmcsIHByb2Nlc3NJZDogc3RyaW5nLCBpbnB1dHM6IFdwc0lucHV0W10sXHJcbiAgICAgICAgb3V0cHV0RGVzY3JpcHRpb25zOiBXcHNPdXRwdXREZXNjcmlwdGlvbltdKTogT2JzZXJ2YWJsZTxXcHNSZXN1bHRbXT4ge1xyXG5cclxuICAgICAgICBjb25zdCBleGVjdXRlVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmV4ZWN1dGVVcmwodXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgIGNvbnN0IGV4ZWNib2R5ID0gdGhpcy53cHNtYXJzaGFsbGVyLm1hcnNoYWxFeGVjQm9keShwcm9jZXNzSWQsIGlucHV0cywgb3V0cHV0RGVzY3JpcHRpb25zLCBmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgeG1sRXhlY2JvZHkgPSB0aGlzLnhtbG1hcnNoYWxsZXIubWFyc2hhbFN0cmluZyhleGVjYm9keSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RSYXcoZXhlY3V0ZVVybCwgeG1sRXhlY2JvZHkpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoeG1sUmVzcG9uc2U6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvblJlc3BvbnNlID0gdGhpcy54bWx1bm1hcnNoYWxsZXIudW5tYXJzaGFsU3RyaW5nKHhtbFJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dDogV3BzRGF0YVtdID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsU3luY0V4ZWN1dGVSZXNwb25zZShqc29uUmVzcG9uc2UsIHVybCwgcHJvY2Vzc0lkLCBpbnB1dHMsIG91dHB1dERlc2NyaXB0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzcyhzZXJ2ZXJVcmw6IHN0cmluZywgcHJvY2Vzc0lkOiBzdHJpbmcsIGpvYklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgICAgICBjb25zdCBkaXNtaXNzVXJsID0gdGhpcy53cHNtYXJzaGFsbGVyLmRpc21pc3NVcmwoc2VydmVyVXJsLCBwcm9jZXNzSWQsIGpvYklkKTtcclxuICAgICAgICBjb25zdCBkaXNtaXNzQm9keSA9IHRoaXMud3BzbWFyc2hhbGxlci5tYXJzaGFsRGlzbWlzc0JvZHkoam9iSWQpO1xyXG4gICAgICAgIGNvbnN0IHhtbERpc21pc3NCb2R5ID0gdGhpcy54bWxtYXJzaGFsbGVyLm1hcnNoYWxTdHJpbmcoZGlzbWlzc0JvZHkpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0UmF3KGRpc21pc3NVcmwsIHhtbERpc21pc3NCb2R5KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHhtbFJlc3BvbnNlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IHRoaXMueG1sdW5tYXJzaGFsbGVyLnVubWFyc2hhbFN0cmluZyh4bWxSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLndwc21hcnNoYWxsZXIudW5tYXJzaGFsRGlzbWlzc1Jlc3BvbnNlKGpzb25SZXNwb25zZSwgc2VydmVyVXJsLCBwcm9jZXNzSWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RSYXcodXJsOiBzdHJpbmcsIHhtbEJvZHk6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3htbCcsXHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYmNsaWVudC5wb3N0KHVybCwgeG1sQm9keSwgeyBoZWFkZXJzLCByZXNwb25zZVR5cGU6ICd0ZXh0JyB9KS5waXBlKFxyXG4gICAgICAgICAgICBkZWxheWVkUmV0cnkoMjAwMCwgMiksXHJcbiAgICAgICAgICAgIHNoYXJlKCkgIC8vIHR1cm5pbmcgaG90OiB0byBtYWtlIHN1cmUgdGhhdCBtdWx0aXBsZSBzdWJzY3JpYmVycyBkb250IGNhdXNlIG11bHRpcGxlIHJlcXVlc3RzXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSYXcodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XHJcbiAgICAgICAgICAgICdBY2NlcHQnOiAndGV4dC94bWwsIGFwcGxpY2F0aW9uL3htbCdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYmNsaWVudC5nZXQodXJsLCB7IGhlYWRlcnMsIHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5ZWRSZXRyeSgyMDAwLCAyKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19 \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/public_api.js b/@ukis/services-ogc/esm5/public_api.js deleted file mode 100644 index a89c4d6b8..000000000 --- a/@ukis/services-ogc/esm5/public_api.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -export { ServicesOgcModule } from './lib/services-ogc.module'; -export { isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService } from './lib/owc/owc-json.service'; -export {} from './lib/owc/types/owc-json'; -export {} from './lib/owc/types/eoc-owc-json'; -export { WpsClient } from './lib/wps/wpsclient'; -export { isWpsState, isBbox } from './lib/wps/wps_datatypes'; -export { FakeCache } from './lib/wps/cache'; -export { WmtsClientService } from './lib/wmts/wmtsclient.service'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1a2lzL3NlcnZpY2VzLW9nYy8iLCJzb3VyY2VzIjpbInB1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBYywyQkFBMkIsQ0FBQztBQUMxQyxnUEFBYyw0QkFBNEIsQ0FBQztBQUMzQyxlQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGVBQWMsOEJBQThCLENBQUM7QUFDN0MsMEJBQWMscUJBQXFCLENBQUM7QUFDcEMsbUNBQWMseUJBQXlCLENBQUM7QUFDeEMsMEJBQWMsaUJBQWlCLENBQUM7QUFDaEMsa0NBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy1vZ2MubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvb3djL293Yy1qc29uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvb3djLWpzb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9vd2MvdHlwZXMvZW9jLW93Yy1qc29uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL3dwc2NsaWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dwcy93cHNfZGF0YXR5cGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd3BzL2NhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd210cy93bXRzY2xpZW50LnNlcnZpY2UnO1xyXG4iXX0= \ No newline at end of file diff --git a/@ukis/services-ogc/esm5/ukis-services-ogc.js b/@ukis/services-ogc/esm5/ukis-services-ogc.js deleted file mode 100644 index c3d4da86a..000000000 --- a/@ukis/services-ogc/esm5/ukis-services-ogc.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * Generated bundle index. Do not edit. - */ -export { ServicesOgcModule, isWmsOffering, isWfsOffering, isWpsOffering, isCswOffering, isWmtsOffering, isGmlOffering, isKmlOffering, isGeoTIFFOffering, isGMLJP2Offering, isGMLCOVOffering, isXyzOffering, isGeoJsonOffering, shardsExpand, OwcJsonService, WpsClient, isWpsState, isBbox, FakeCache, WmtsClientService } from './public_api'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWtpcy1zZXJ2aWNlcy1vZ2MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWtpcy9zZXJ2aWNlcy1vZ2MvIiwic291cmNlcyI6WyJ1a2lzLXNlcnZpY2VzLW9nYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUlBLGdVQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ== \ No newline at end of file diff --git a/@ukis/services-ogc/fesm2015/ukis-services-ogc.js b/@ukis/services-ogc/fesm2015/ukis-services-ogc.js deleted file mode 100644 index 37cdc1dcc..000000000 --- a/@ukis/services-ogc/fesm2015/ukis-services-ogc.js +++ /dev/null @@ -1,3377 +0,0 @@ -import { Injectable, ɵɵdefineInjectable, ɵɵinject, Inject, NgModule } from '@angular/core'; -import { WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, VectorLayer, CustomLayertype, WmtsLayer, WmsLayer, RasterLayer } from '@ukis/services-layers'; -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map, tap, mergeMap, retryWhen, delay, switchMap, share } from 'rxjs/operators'; -import { XLink_1_0 as XLink_1_0$2 } from 'w3c-schemas/lib/XLink_1_0'; -import { OWS_1_1_0 as OWS_1_1_0$2 } from 'ogc-schemas/lib/OWS_1_1_0'; -import { SMIL_2_0 as SMIL_2_0$1 } from 'ogc-schemas/lib/SMIL_2_0'; -import { SMIL_2_0_Language as SMIL_2_0_Language$1 } from 'ogc-schemas/lib/SMIL_2_0_Language'; -import { GML_3_1_1 as GML_3_1_1$1 } from 'ogc-schemas/lib/GML_3_1_1'; -import { WMTS_1_0 as WMTS_1_0$1 } from 'ogc-schemas/lib/WMTS_1_0'; -import { forkJoin, of, timer } from 'rxjs'; -import { OWS_2_0 as OWS_2_0$1 } from 'ogc-schemas/lib/OWS_2_0'; -import { WPS_1_0_0 as WPS_1_0_0$1 } from 'ogc-schemas/lib/WPS_1_0_0'; -import { WPS_2_0 as WPS_2_0$1 } from 'ogc-schemas/lib/WPS_2_0'; - -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const XLink_1_0 = XLink_1_0$2; -/** @type {?} */ -const OWS_1_1_0 = OWS_1_1_0$2; -/** @type {?} */ -const SMIL_2_0 = SMIL_2_0$1; -/** @type {?} */ -const SMIL_2_0_Language = SMIL_2_0_Language$1; -/** @type {?} */ -const GML_3_1_1 = GML_3_1_1$1; -/** @type {?} */ -const WMTS_1_0 = WMTS_1_0$1; -class WmtsClientService { - /** - * @param {?} http - */ - constructor(http) { - this.http = http; - /** @type {?} */ - const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - getCapabilities(url, version = '1.1.0') { - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`; - /** @type {?} */ - const headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - response => { - return this.xmlunmarshaller.unmarshalString(response); - }))); - } -} -WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -WmtsClientService.ctorParameters = () => [ - { type: HttpClient } -]; -/** @nocollapse */ WmtsClientService.ngInjectableDef = ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(ɵɵinject(HttpClient)); }, token: WmtsClientService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @param {?} str - * @return {?} - */ -function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - let o = []; - for (let i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - let start = j[0].charCodeAt(0); - /** @type {?} */ - let end = j[1].charCodeAt(0); - if (start <= end) { - for (let k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (let k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -class OwcJsonService { - /** - * @param {?} wmtsClient - */ - constructor(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - checkContext(context) { - /** @type {?} */ - let isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core')); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - } - /** - * @param {?} context - * @return {?} - */ - getContextTitle(context) { - return context.properties.title; - } - /** - * @param {?} context - * @return {?} - */ - getContextPublisher(context) { - return (context.properties.publisher) ? context.properties.publisher : null; - } - /** - * @param {?} context - * @return {?} - */ - getContextExtent(context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - } - /** - * @param {?} context - * @return {?} - */ - getResources(context) { - return context.features; - } - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - getResourceTitle(resource) { - return resource.properties.title; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceUpdated(resource) { - return resource.properties.updated; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDate(resource) { - return (resource.properties.date) ? resource.properties.date : null; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOfferings(resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - } - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - isActive(resource) { - /** @type {?} */ - let active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceOpacity(resource) { - /** @type {?} */ - let opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceAttribution(resource) { - /** @type {?} */ - let attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - } - /** - * @param {?} resource - * @return {?} - */ - getResourceShards(resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - } - /** - * @param {?} owctime - * @return {?} - */ - convertOwcTimeToIsoTimeAndPeriodicity(owctime) { - /** - * Convert from - * @type {?} - */ - let arr = owctime.split('/'); - /** @type {?} */ - let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - let p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - } - /** - * @param {?} resource - * @return {?} - */ - getResourceDimensions(resource) { - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - let dims = {}; - /** @type {?} */ - let dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - for (let d of resource.properties.dimensions) { - dimensions[d.name] = d; - } - } - else { - dimensions = resource.properties.dimensions; - } - for (let name in dimensions) { - /** @type {?} */ - let dim = {}; - console.log(name); - if (name === "time" || dimensions[name].units == "ISO8601") { - /** @type {?} */ - let value = dimensions[name].value; - /** @type {?} */ - let values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - (v) => this.convertOwcTimeToIsoTimeAndPeriodicity(v))) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name].display, - "default": "end" - } - }; - } - else if (name === "elevation") { - dim = dimensions[name]; - } - else { - dim = dimensions[name]; - } - dims[name] = dim; - } - return dims; - } - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - getLayertypeFromOfferingCode(offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - } - /** - * @param {?} offering - * @return {?} - */ - checkIfServiceOffering(offering) { - return (!offering.contents && offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - checkIfDataOffering(offering) { - return (offering.contents && !offering.operations) ? true : false; - } - /** - * @param {?} offering - * @return {?} - */ - getOfferingContents(offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - } - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - getLegendUrl(offering) { - /** @type {?} */ - let legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - let defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - style => style.default)); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - } - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - getIconUrl(offering) { - /** @type {?} */ - let iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - } - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - getLayers(owc, targetProjection) { - /** @type {?} */ - const resources = owc.features; - /** @type {?} */ - const layers$ = []; - for (const resource of resources) { - /** @type {?} */ - const offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - const offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWmtsOffering(o.code))) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - o => isWfsOffering(o.code))) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - return forkJoin(layers$); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error(`This type of service (${layerType}) has not been implemented yet.`); - } - } - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - createVectorLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`); - return null; - } - /** @type {?} */ - const iconUrl = this.getIconUrl(offering); - /** @type {?} */ - let layerUrl; - /** @type {?} */ - let params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - let legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - let layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - const layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - } - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createRasterLayerFromOffering(offering, resource, context, targetProjection) { - /** @type {?} */ - const layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`); - return null; - } - /** @type {?} */ - let rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - createWmtsLayerFromOffering(offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - (options) => { - /** @type {?} */ - const layer = new WmtsLayer(options); - return layer; - }))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - createWmsLayerFromOffering(offering, resource, context) { - /** @type {?} */ - const options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - const layer = new WmsLayer(options); - return of(layer); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - getWmtsOptions(offering, resource, context, targetProjection) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - const layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - let style; - if (offering.styles) { - /** @type {?} */ - const styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - (matrixSet) => { - /** @type {?} */ - const matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - const wmtsOptions = Object.assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getLayerForWMTS(offering, resource) { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile'); - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}. - Cannot infer layer.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - parseOperationUrl(offering, opCode) { - if (offering.operations) { - /** @type {?} */ - const operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - op => op.code === opCode)); - if (operation) { - /** @type {?} */ - const url = this.getUrlFromUri(operation.href); - /** @type {?} */ - const urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering); - } - } - else { - console.error(`The offering ${offering.code} has no operations.`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - getMatrixSetForWMTS(offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - const matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - m => m.srs === targetProjection)); - return of(matrixSet); - } - else { - const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities'); - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - (capabilities) => { - /** @type {?} */ - const matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - const matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - ms => ms['identifier']['value'] === targetProjection)); - /** @type {?} */ - const owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['identifier']['value'])), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - tm => tm['scaleDenominator'])), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getWmsOptions(offering, resource, context) { - /** @type {?} */ - const rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - const urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - let defaultStyle; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - s => s.default)).name; - } - /** @type {?} */ - const params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - const wmsOptions = Object.assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getRasterLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - const rasterLayerOptions = Object.assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions); - } - } - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - getLayerOptions(offering, resource, context) { - /** @type {?} */ - const layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - } - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - getUrlFromUri(uri) { - return uri.substring(0, uri.indexOf('?')); - } - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - getJsonFromUri(uri) { - /** @type {?} */ - const query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - const result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - const item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - } - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - getDisplayName(offering, resource) { - /** @type {?} */ - let displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - } - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - generateOwsContextFrom(id, layers, extent, properties) { - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - let owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - for (let layer of layers) { - /** @type {?} */ - let resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - return owc; - } - /** - * @param {?} layer - * @return {?} - */ - generateResourceFromLayer(layer) { - /** @type {?} */ - let resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - } - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - generateOfferingFromLayer(layer, legendUrl, iconUrl) { - /** @type {?} */ - let offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - } - /** - * @param {?} layer - * @return {?} - */ - getOfferingCodeFromLayer(layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error(`This type of layer (${layer.type}) has not been implemented yet.`); - return null; - } - } - /** - * @param {?} layer - * @return {?} - */ - getContentsFromLayer(layer) { - /** @type {?} */ - let contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - let content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`); - } - return contents; - } - /** - * @param {?} layer - * @return {?} - */ - getOperationsFromLayer(layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error(`Cannot get operations for this type of layer: (${layer.type})`); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error(`This type of service (${layer.type}) has not been implemented yet.`); - return []; - } - } - } - /** - * @param {?} layer - * @return {?} - */ - getXyzOperationsFromLayer(layer) { - /** @type {?} */ - let restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': `${layer.url}` - }; - /** @type {?} */ - let operations = [ - restCall - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getTmsOperationsFromLayer(layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - } - /** - * @param {?} layer - * @return {?} - */ - getWfsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - let GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': `${url}?service=WFS&version=${version}&request=GetFeature` - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - let operations = [ - GetFeature, - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmsVersion = layer.params.VERSION; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true` - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities` - }; - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}` - }; - /** @type {?} */ - let operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - } - /** - * @param {?} layer - * @return {?} - */ - getWmtsOperationsFromLayer(layer) { - /** @type {?} */ - let url = layer.url; - /** @type {?} */ - let wmtsVersion = layer.params.version; - /** @type {?} */ - let layerName = layer.name; - /** @type {?} */ - let layerId = layer.id; - /** @type {?} */ - let format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - let getTile = { - 'code': 'GetTile', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - let getCapabilities = { - 'code': 'GetCapabilities', - 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - let getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - let operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - } -} -OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } -]; -/** @nocollapse */ -OwcJsonService.ctorParameters = () => [ - { type: WmtsClientService } -]; -/** @nocollapse */ OwcJsonService.ngInjectableDef = ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class WpsMarshaller100 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - process => { - out.push({ - id: process.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - for (const output of responseJson.value.processOutputs.output) { - /** @type {?} */ - const isReference = output.reference ? true : false; - /** @type {?} */ - let datatype; - /** @type {?} */ - let data; - /** @type {?} */ - let format; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @return {?} - */ - unmarshalOutputData(data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - cont => JSON.parse(cont))); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - const response = responseJson.value; - /** @type {?} */ - const status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - const state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - const wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - const bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - marshalResponseForm(outputs, async = false) { - /** @type {?} */ - const outputDefinitions = []; - for (const output of outputs) { - /** @type {?} */ - let defType; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `); - } - outputDefinitions.push(defType); - } - /** @type {?} */ - const responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - const form = { - responseDocument - }; - return form; - } - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - marshalInputs(inputArr) { - /** @type {?} */ - const theInputs = []; - for (const inp of inputArr) { - if (inp.value === null || inp.value === undefined) { - throw new Error(`Value for input ${inp.description.id} is not set`); - } - /** @type {?} */ - const marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - /** @type {?} */ - const inputs = { - input: theInputs - }; - return inputs; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalInput(input) { - /** @type {?} */ - const id = input.description.id; - /** @type {?} */ - const title = input.description.id; - /** @type {?} */ - const abstract = ''; - /** @type {?} */ - const inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalDataInput(input) { - /** @type {?} */ - let data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - const values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`); - } - return data; - } - /** - * @protected - * @param {?} input - * @return {?} - */ - marshalReferenceInput(input) { - /** @type {?} */ - const ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} processId - * @return {?} - */ - marshalDismissBody(processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -const isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -const isResult = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class WpsMarshaller200 { - constructor() { } - /** - * @param {?} baseurl - * @return {?} - */ - getCapabilitiesUrl(baseurl) { - return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`; - } - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - executeUrl(baseurl, processId) { - return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`; - } - /** - * @param {?} capabilities - * @return {?} - */ - unmarshalCapabilities(capabilities) { - /** @type {?} */ - const out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - summary => { - out.push({ - id: summary.identifier.value - }); - })); - return out; - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalSyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const out = []; - if (isResult(responseJson.value)) { - for (const output of responseJson.value.output) { - /** @type {?} */ - const outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - od => od.id === output.id)); - if (!outputDescription) { - throw new Error(`Could not find an output-description for the parameter ${output.id}.`); - } - /** @type {?} */ - const isReference = outputDescription.reference; - /** @type {?} */ - const datatype = outputDescription.type; - /** @type {?} */ - const format = outputDescription.format; - /** @type {?} */ - let data; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error(`Output has neither reference nor data field.`); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - } - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - unmarshalOutputData(data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - (cont) => JSON.parse(cont))); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error(`Not yet implemented: ${data}`); - } - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalAsyncExecuteResponse(responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - } - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - unmarshalGetStateResponse(responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - const state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error(`Not a status-info: ${responseJson}`); - } - } - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - marshalExecBody(processId, inputs, outputs, async) { - /** @type {?} */ - const inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - const outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - const bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - } - /** - * @private - * @param {?} inputs - * @return {?} - */ - marshalInputs(inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - i => { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - } - /** - * @private - * @param {?} outputs - * @return {?} - */ - marshalOutputs(outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - o => { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - marshallGetStatusBody(serverUrl, processId, statusId) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - marshallGetResultBody(serverUrl, processId, jobID) { - /** @type {?} */ - const request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismissUrl(serverUrl, processId, jobId) { - return serverUrl; - } - /** - * @param {?} jobId - * @return {?} - */ - marshalDismissBody(jobId) { - /** @type {?} */ - const body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - } - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - unmarshalDismissResponse(jsonResponse, serverUrl, processId) { - /** @type {?} */ - const state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -function pollUntil(task$, predicate, doWhile, minWaitTime = 1000) { - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - const tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - (r) => { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - const requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - r => r[0]))); - /** @type {?} */ - const polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - (response) => { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -function delayedRetry(delayMs, maxRetries = 3) { - /** @type {?} */ - let attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - (src$) => { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - (error$) => { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - (error) => { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -class FakeCache { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - set(input, output) { - } - /** - * @param {?} input - * @return {?} - */ - get(input) { - return of(null); - } -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -const XLink_1_0$1 = XLink_1_0$2; -/** @type {?} */ -const OWS_1_1_0$1 = OWS_1_1_0$2; -/** @type {?} */ -const OWS_2_0 = OWS_2_0$1; -/** @type {?} */ -const WPS_1_0_0 = WPS_1_0_0$1; -/** @type {?} */ -const WPS_2_0 = WPS_2_0$1; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -class WpsClient { - /** - * @param {?=} version - * @param {?=} webclient - * @param {?=} cache - */ - constructor(version = '1.0.0', webclient, cache) { - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - let context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - getCapabilities(url) { - /** @type {?} */ - const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - (response) => { - /** @type {?} */ - const responseJson = this.xmlunmarshaller.unmarshalString(response); - return this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - } - /** - * @param {?} processId - * @return {?} - */ - describeProcess(processId) { - throw new Error('Not implemented yet'); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - executeAsync(url, processId, inputs, outputs, pollingRate = 1000, tapFunction) { - /** @type {?} */ - const executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - const query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - (currentState) => { - /** @type {?} */ - const nextState$ = this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - const poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - (response) => { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - (lastState) => { - return this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - for (const result of response) { - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - cachedQuery(url, processId, inputs, outputs, query$) { - /** @type {?} */ - const cachedResponse$ = this.cache.get({ url, processId, inputs, outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - (results) => { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - (response) => { - this.cache.set({ url, processId, inputs, outputs }, response); - }))); - } - }))); - } - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - getNextState(currentState, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - let request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`); - } - /** @type {?} */ - const request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - } - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - fetchResults(lastState, serverUrl, processId, inputs, outputDescriptions) { - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`); - } - /** @type {?} */ - const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - const xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - } - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - executeAsyncS(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - execute(url, processId, inputs, outputDescriptions) { - /** @type {?} */ - const executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - const xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - } - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - dismiss(serverUrl, processId, jobId) { - /** @type {?} */ - const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - (xmlResponse) => { - /** @type {?} */ - const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - } - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - postRaw(url, xmlBody) { - /** @type {?} */ - const headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - } - /** - * @param {?} url - * @return {?} - */ - getRaw(url) { - /** @type {?} */ - const headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - } -} -WpsClient.decorators = [ - { type: Injectable } -]; -/** @nocollapse */ -WpsClient.ctorParameters = () => [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } -]; -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -class ServicesOgcModule { -} -ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } -]; - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -const isBbox = (/** - * @param {?} obj - * @return {?} - */ -(obj) => { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} - -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -export { FakeCache, OwcJsonService, ServicesOgcModule, WmtsClientService, WpsClient, isBbox, isCswOffering, isGMLCOVOffering, isGMLJP2Offering, isGeoJsonOffering, isGeoTIFFOffering, isGmlOffering, isKmlOffering, isWfsOffering, isWmsOffering, isWmtsOffering, isWpsOffering, isWpsState, isXyzOffering, shardsExpand }; -//# sourceMappingURL=ukis-services-ogc.js.map diff --git a/@ukis/services-ogc/fesm2015/ukis-services-ogc.js.map b/@ukis/services-ogc/fesm2015/ukis-services-ogc.js.map deleted file mode 100644 index e6788a9d5..000000000 --- a/@ukis/services-ogc/fesm2015/ukis-services-ogc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.js","sources":["ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/services-ogc/fesm5/ukis-services-ogc.js b/@ukis/services-ogc/fesm5/ukis-services-ogc.js deleted file mode 100644 index 41485271b..000000000 --- a/@ukis/services-ogc/fesm5/ukis-services-ogc.js +++ /dev/null @@ -1,4047 +0,0 @@ -import { Injectable, ɵɵdefineInjectable, ɵɵinject, Inject, NgModule } from '@angular/core'; -import { __values, __assign, __read } from 'tslib'; -import { WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, XyzLayertype, isRasterLayertype, isVectorLayertype, VectorLayer, CustomLayertype, WmtsLayer, WmsLayer, RasterLayer } from '@ukis/services-layers'; -import { HttpHeaders, HttpClient } from '@angular/common/http'; -import { Jsonix } from '@boundlessgeo/jsonix'; -import { map, tap, mergeMap, retryWhen, delay, switchMap, share } from 'rxjs/operators'; -import { XLink_1_0 as XLink_1_0$2 } from 'w3c-schemas/lib/XLink_1_0'; -import { OWS_1_1_0 as OWS_1_1_0$2 } from 'ogc-schemas/lib/OWS_1_1_0'; -import { SMIL_2_0 as SMIL_2_0$1 } from 'ogc-schemas/lib/SMIL_2_0'; -import { SMIL_2_0_Language as SMIL_2_0_Language$1 } from 'ogc-schemas/lib/SMIL_2_0_Language'; -import { GML_3_1_1 as GML_3_1_1$1 } from 'ogc-schemas/lib/GML_3_1_1'; -import { WMTS_1_0 as WMTS_1_0$1 } from 'ogc-schemas/lib/WMTS_1_0'; -import { forkJoin, of, timer } from 'rxjs'; -import { OWS_2_0 as OWS_2_0$1 } from 'ogc-schemas/lib/OWS_2_0'; -import { WPS_1_0_0 as WPS_1_0_0$1 } from 'ogc-schemas/lib/WPS_1_0_0'; -import { WPS_2_0 as WPS_2_0$1 } from 'ogc-schemas/lib/WPS_2_0'; - -/** - * @fileoverview added by tsickle - * Generated from: lib/wmts/wmtsclient.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var XLink_1_0 = XLink_1_0$2; -/** @type {?} */ -var OWS_1_1_0 = OWS_1_1_0$2; -/** @type {?} */ -var SMIL_2_0 = SMIL_2_0$1; -/** @type {?} */ -var SMIL_2_0_Language = SMIL_2_0_Language$1; -/** @type {?} */ -var GML_3_1_1 = GML_3_1_1$1; -/** @type {?} */ -var WMTS_1_0 = WMTS_1_0$1; -var WmtsClientService = /** @class */ (function () { - function WmtsClientService(http) { - this.http = http; - /** @type {?} */ - var context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]); - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - WmtsClientService.prototype.getCapabilities = /** - * @param {?} url - * @param {?=} version - * @return {?} - */ - function (url, version) { - var _this = this; - if (version === void 0) { version = '1.1.0'; } - // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0 - /** @type {?} */ - var getCapabilitiesUrl = url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + version; - /** @type {?} */ - var headers = new HttpHeaders({ - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }); - return this.http.get(getCapabilitiesUrl, { headers: headers, responseType: 'text' }).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - return _this.xmlunmarshaller.unmarshalString(response); - }))); - }; - WmtsClientService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - WmtsClientService.ctorParameters = function () { return [ - { type: HttpClient } - ]; }; - /** @nocollapse */ WmtsClientService.ngInjectableDef = ɵɵdefineInjectable({ factory: function WmtsClientService_Factory() { return new WmtsClientService(ɵɵinject(HttpClient)); }, token: WmtsClientService, providedIn: "root" }); - return WmtsClientService; -}()); -if (false) { - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WmtsClientService.prototype.http; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/owc-json.service.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @param {?} str - * @return {?} - */ -function isWmsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' - || str === 'http://schemas.opengis.net/wms/1.1.1' - || str === 'http://schemas.opengis.net/wms/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isWfsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -} -/** - * @param {?} str - * @return {?} - */ -function isWpsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -} -/** - * @param {?} str - * @return {?} - */ -function isCswOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -} -/** - * @param {?} str - * @return {?} - */ -function isWmtsOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts' - || str === 'http://schemas.opengis.net/wmts/1.0.0' - || str === 'http://schemas.opengis.net/wmts/1.1.0'; -} -/** - * @param {?} str - * @return {?} - */ -function isGmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -} -/** - * @param {?} str - * @return {?} - */ -function isKmlOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoTIFFOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLJP2Offering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -} -/** - * @param {?} str - * @return {?} - */ -function isGMLCOVOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; -} -/** - * @param {?} str - * @return {?} - */ -function isXyzOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; -} -/** - * @param {?} str - * @return {?} - */ -function isGeoJsonOffering(str) { - return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -} -/** - * @param {?} v - * @return {?} - */ -function shardsExpand(v) { - if (!v) { - return; - } - /** @type {?} */ - var o = []; - for (var i in v.split(',')) { - /** @type {?} */ - var j = v.split(',')[i].split("-"); - if (j.length == 1) { - o.push(v.split(',')[i]); - } - else if (j.length == 2) { - /** @type {?} */ - var start = j[0].charCodeAt(0); - /** @type {?} */ - var end = j[1].charCodeAt(0); - if (start <= end) { - for (var k = start; k <= end; k++) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - else { - for (var k = start; k >= end; k--) { - o.push(String.fromCharCode(k).toLowerCase()); - } - } - } - } - return o; -} -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -var OwcJsonService = /** @class */ (function () { - function OwcJsonService(wmtsClient) { - this.wmtsClient = wmtsClient; - //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2 - } - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.checkContext = /** - * @param {?} context - * @return {?} - */ - function (context) { - /** @type {?} */ - var isContext_1_0; - if (!Array.isArray(context.properties.links)) { - isContext_1_0 = context.properties.links.profiles.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - else { - isContext_1_0 = context.properties.links.find((/** - * @param {?} item - * @return {?} - */ - function (item) { return item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core'; })); - } - if (!isContext_1_0) { - console.error('this is not a valid OWS Context v1.0!'); - } - return isContext_1_0; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextTitle = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.properties.title; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextPublisher = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.properties.publisher) ? context.properties.publisher : null; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getContextExtent = /** - * @param {?} context - * @return {?} - */ - function (context) { - return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90]; - }; - /** - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getResources = /** - * @param {?} context - * @return {?} - */ - function (context) { - return context.features; - }; - /** Resource --------------------------------------------------- */ - /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceTitle = /** - * Resource --------------------------------------------------- - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.title; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceUpdated = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return resource.properties.updated; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDate = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.date) ? resource.properties.date : null; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOfferings = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - return (resource.properties.offerings) ? resource.properties.offerings : null; - }; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.isActive = /** - * retrieve layer status active / inactive based on IOwsResource - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var active = true; - if (resource.properties.hasOwnProperty('active')) { - active = resource.properties.active; - } - return active; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceOpacity = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var opacity = 1; - if (resource.properties.hasOwnProperty('opacity')) { - opacity = resource.properties.opacity; - } - return opacity; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceAttribution = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - /** @type {?} */ - var attribution = ''; - if (resource.properties.hasOwnProperty('attribution')) { - attribution = resource.properties.attribution; - } - return attribution; - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceShards = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - if (resource.properties.hasOwnProperty('shards')) { - return resource.properties.shards; - } - }; - /** - * @param {?} owctime - * @return {?} - */ - OwcJsonService.prototype.convertOwcTimeToIsoTimeAndPeriodicity = /** - * @param {?} owctime - * @return {?} - */ - function (owctime) { - /** - * Convert from - * @type {?} - */ - var arr = owctime.split('/'); - /** @type {?} */ - var t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime; - /** @type {?} */ - var p = (arr.length == 3) ? arr[2] : null; - if (p) { - return { "interval": t, "periodicity": p }; - } - else { - return t; - } - }; - /** - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getResourceDimensions = /** - * @param {?} resource - * @return {?} - */ - function (resource) { - var e_1, _a; - var _this = this; - if (!resource.properties.hasOwnProperty('dimensions')) { - return undefined; - } - /** @type {?} */ - var dims = {}; - /** @type {?} */ - var dimensions = {}; - if (Array.isArray(resource.properties.dimensions)) { - try { - for (var _b = __values(resource.properties.dimensions), _c = _b.next(); !_c.done; _c = _b.next()) { - var d = _c.value; - dimensions[d.name] = d; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else { - dimensions = resource.properties.dimensions; - } - for (var name_1 in dimensions) { - /** @type {?} */ - var dim = {}; - console.log(name_1); - if (name_1 === "time" || dimensions[name_1].units == "ISO8601") { - /** @type {?} */ - var value = dimensions[name_1].value; - /** @type {?} */ - var values = (value) ? value.split(',').map((/** - * @param {?} v - * @return {?} - */ - function (v) { return _this.convertOwcTimeToIsoTimeAndPeriodicity(v); })) : null; - dim = { - "values": ((!values) || values.length > 1) ? values : values[0], - "units": dimensions[name_1].units, - "display": { - "format": "YYYMMDD", - "period": dimensions[name_1].display, - "default": "end" - } - }; - } - else if (name_1 === "elevation") { - dim = dimensions[name_1]; - } - else { - dim = dimensions[name_1]; - } - dims[name_1] = dim; - } - return dims; - }; - /** Offering --------------------------------------------------- */ - /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getLayertypeFromOfferingCode = /** - * Offering --------------------------------------------------- - * @param {?} offering - * @return {?} - */ - function (offering) { - if (isWmsOffering(offering.code)) { - return WmsLayertype; - } - else if (isWmtsOffering(offering.code)) { - return WmtsLayertype; - } - else if (isWfsOffering(offering.code)) { - return WfsLayertype; - } - else if (isGeoJsonOffering(offering.code)) { - return GeojsonLayertype; - } - else if (isXyzOffering(offering.code)) { - return XyzLayertype; - } - else { - return offering.code; // an offering can also be any other string. - } - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfServiceOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (!offering.contents && offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.checkIfDataOffering = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - return (offering.contents && !offering.operations) ? true : false; - }; - /** - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getOfferingContents = /** - * @param {?} offering - * @return {?} - */ - function (offering) { - if (this.checkIfServiceOffering(offering)) { - return offering.operations; - } - else if (this.checkIfDataOffering(offering)) { - return offering.contents; - } - }; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - OwcJsonService.prototype.getLegendUrl = /** - * Helper function to extract legendURL from project specific ows Context - * @param {?} offering layer offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var legendUrl = ''; - if (offering.hasOwnProperty('styles')) { - /** @type {?} */ - var defaultStyle = offering.styles.filter((/** - * @param {?} style - * @return {?} - */ - function (style) { return style.default; })); - if (defaultStyle.length > 0) { - return defaultStyle[0].legendURL; - } - } - else if (offering.hasOwnProperty('legendUrl')) { - legendUrl = offering.legendUrl; - } - return legendUrl; - }; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - OwcJsonService.prototype.getIconUrl = /** - * retrieve iconUrl based on IOwsOffering - * @param {?} offering - * @return {?} - */ - function (offering) { - /** @type {?} */ - var iconUrl = ''; - if (offering.hasOwnProperty('iconUrl')) { - iconUrl = offering.iconUrl; - } - return iconUrl; - }; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getLayers = /** - * layer priority: first wms, then wmts, then wfs, then others. - * @param {?} owc - * @param {?} targetProjection - * @return {?} - */ - function (owc, targetProjection) { - var e_2, _a; - /** @type {?} */ - var resources = owc.features; - /** @type {?} */ - var layers$ = []; - try { - for (var resources_1 = __values(resources), resources_1_1 = resources_1.next(); !resources_1_1.done; resources_1_1 = resources_1.next()) { - var resource = resources_1_1.value; - /** @type {?} */ - var offerings = resource.properties.offerings; - if (offerings.length > 0) { - /** @type {?} */ - var offering = offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWmtsOffering(o.code); })) - || offerings.find((/** - * @param {?} o - * @return {?} - */ - function (o) { return isWfsOffering(o.code); })) - || offerings[0]; - layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection)); - } - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (resources_1_1 && !resources_1_1.done && (_a = resources_1.return)) _a.call(resources_1); - } - finally { if (e_2) throw e_2.error; } - } - return forkJoin(layers$); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (isRasterLayertype(layerType)) { - return this.createRasterLayerFromOffering(offering, resource, context, targetProjection); - } - else if (isVectorLayertype(layerType)) { - return this.createVectorLayerFromOffering(offering, resource, context); - } - else { - console.error("This type of service (" + layerType + ") has not been implemented yet."); - } - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - OwcJsonService.prototype.createVectorLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?=} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isVectorLayertype(layerType)) { - console.error("This type of layer '" + layerType + "' / offering '" + offering.code + "' cannot be converted into a Vectorlayer"); - return null; - } - /** @type {?} */ - var iconUrl = this.getIconUrl(offering); - /** @type {?} */ - var layerUrl; - /** @type {?} */ - var params; - // if we have a operations-offering (vs. a data-offering): - if (offering.operations) - layerUrl = this.getUrlFromUri(offering.operations[0].href); - if (offering.operations) - params = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var data; - // if we have a data-offering: - if (offering.contents) { - data = offering.contents[0].content; - } - /** @type {?} */ - var legendUrl = this.getLegendUrl(offering); - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - name: this.getResourceTitle(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - type: layerType, - removable: true, - attribution: this.getResourceAttribution(resource), - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - url: layerUrl ? layerUrl : null, - legendImg: legendUrl ? legendUrl : null, - data: data - }; - /** @type {?} */ - var layer = new VectorLayer(layerOptions); - if (resource.bbox) { - layer.bbox = resource.bbox; - } - else if (context && context.bbox) { - layer.bbox = context.bbox; - } - return of(layer); - }; - /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createRasterLayerFromOffering = /** - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var layerType = this.getLayertypeFromOfferingCode(offering); - if (!isRasterLayertype(layerType)) { - console.error("This type of offering '" + offering.code + "' cannot be converted into a rasterlayer."); - return null; - } - /** @type {?} */ - var rasterLayer$; - switch (layerType) { - case WmsLayertype: - rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context); - break; - case WmtsLayertype: - rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection); - break; - case XyzLayertype: - // @TODO - break; - case CustomLayertype: - // custom layers are meant to be userdefined and not easily encoded in a OWC. - break; - } - return rasterLayer$; - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.createWmtsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((/** - * @param {?} options - * @return {?} - */ - function (options) { - /** @type {?} */ - var layer = new WmtsLayer(options); - return layer; - }))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.createWmsLayerFromOffering = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var options = this.getWmsOptions(offering, resource, context); - /** @type {?} */ - var layer = new WmsLayer(options); - return of(layer); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getWmtsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, context, targetProjection) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - /** @type {?} */ - var layer = this.getLayerForWMTS(offering, resource); - /** @type {?} */ - var style; - if (offering.styles) { - /** @type {?} */ - var styleInfo = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })); - if (styleInfo) { - style = styleInfo.name; - } - } - return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((/** - * @param {?} matrixSet - * @return {?} - */ - function (matrixSet) { - /** @type {?} */ - var matrixSetOptions = { - matrixSet: matrixSet.matrixSet, - matrixIds: matrixSet.matrixIds, - resolutions: matrixSet.resolutions - }; - /** @type {?} */ - var wmtsOptions = __assign({}, rasterOptions, { type: 'wmts', params: { - layer: layer, - matrixSetOptions: matrixSetOptions, - projection: targetProjection, - style: style, - format: 'image/png' - } }); - return wmtsOptions; - })))); - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getLayerForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - var _a = __read(this.parseOperationUrl(offering, 'GetTile'), 2), url = _a[0], urlParams = _a[1]; - if (urlParams['LAYER']) { - return urlParams['LAYER']; - } - else { - console.error("There is no layer-parameter in the offering " + offering.code + " for resource " + resource.id + ".\n Cannot infer layer.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - OwcJsonService.prototype.parseOperationUrl = /** - * @private - * @param {?} offering - * @param {?} opCode - * @return {?} - */ - function (offering, opCode) { - if (offering.operations) { - /** @type {?} */ - var operation = offering.operations.find((/** - * @param {?} op - * @return {?} - */ - function (op) { return op.code === opCode; })); - if (operation) { - /** @type {?} */ - var url = this.getUrlFromUri(operation.href); - /** @type {?} */ - var urlParams = this.getJsonFromUri(operation.href); - return [url, urlParams]; - } - else { - console.error("There is no " + opCode + "-operation in the offering " + offering.code + ".", offering); - } - } - else { - console.error("The offering " + offering.code + " has no operations.", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - OwcJsonService.prototype.getMatrixSetForWMTS = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} targetProjection - * @return {?} - */ - function (offering, resource, targetProjection) { - if (offering.matrixSets) { - /** @type {?} */ - var matrixSet = offering.matrixSets.find((/** - * @param {?} m - * @return {?} - */ - function (m) { return m.srs === targetProjection; })); - return of(matrixSet); - } - else { - var _a = __read(this.parseOperationUrl(offering, 'GetCapabilities'), 2), url = _a[0], urlParams = _a[1]; - return this.wmtsClient.getCapabilities(url).pipe(map((/** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var matrixSets = capabilities['value']['contents']['tileMatrixSet']; - /** @type {?} */ - var matrixSet = matrixSets.find((/** - * @param {?} ms - * @return {?} - */ - function (ms) { return ms['identifier']['value'] === targetProjection; })); - /** @type {?} */ - var owsMatrixSet = { - srs: targetProjection, - matrixSet: matrixSet['identifier']['value'], - matrixIds: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['identifier']['value']; })), - resolutions: matrixSet['tileMatrix'].map((/** - * @param {?} tm - * @return {?} - */ - function (tm) { return tm['scaleDenominator']; })), - origin: { - x: matrixSet['tileMatrix'][0]['topLeftCorner'][1], - y: matrixSet['tileMatrix'][0]['topLeftCorner'][0] - }, - tilesize: matrixSet['tileMatrix'][0]['tileHeight'] - }; - return owsMatrixSet; - }))); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getWmsOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var rasterOptions = this.getRasterLayerOptions(offering, resource, context); - if (rasterOptions.type === WmsLayertype) { - /** @type {?} */ - var urlParams = this.getJsonFromUri(offering.operations[0].href); - /** @type {?} */ - var defaultStyle = void 0; - if (offering.styles) { - defaultStyle = offering.styles.find((/** - * @param {?} s - * @return {?} - */ - function (s) { return s.default; })).name; - } - /** @type {?} */ - var params = { - LAYERS: urlParams['LAYERS'], - FORMAT: urlParams['FORMAT'], - TIME: urlParams['TIME'], - VERSION: urlParams['VERSION'], - TILED: urlParams['TILED'], - TRANSPARENT: true, - STYLES: defaultStyle - }; - /** @type {?} */ - var wmsOptions = __assign({}, rasterOptions, { type: 'wms', params: params }); - return wmsOptions; - } - else { - console.error("resource " + resource.id + " cannot be converted into a WMS-Layer", offering); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getRasterLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = this.getLayerOptions(offering, resource, context); - if (isRasterLayertype(layerOptions.type)) { - /** @type {?} */ - var rasterLayerOptions = __assign({}, layerOptions, { type: (/** @type {?} */ (layerOptions.type)), url: this.getUrlFromUri(offering.operations[0].href), subdomains: shardsExpand(this.getResourceShards(resource)) }); - return rasterLayerOptions; - } - else { - console.error("The layer " + layerOptions.id + " is not a rasterlayer", layerOptions); - } - }; - /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - OwcJsonService.prototype.getLayerOptions = /** - * @private - * @param {?} offering - * @param {?} resource - * @param {?} context - * @return {?} - */ - function (offering, resource, context) { - /** @type {?} */ - var layerOptions = { - id: (/** @type {?} */ (resource.id)), - type: this.getLayertypeFromOfferingCode(offering), - name: this.getResourceTitle(resource), - removable: true, - continuousWorld: false, - opacity: this.getResourceOpacity(resource), - displayName: this.getDisplayName(offering, resource), - visible: this.isActive(resource), - attribution: this.getResourceAttribution(resource), - dimensions: this.getResourceDimensions(resource), - legendImg: this.getLegendUrl(offering), - styles: offering.styles - }; - if (resource.bbox) { - layerOptions.bbox = resource.bbox; - } - else if (context && context.bbox) { - layerOptions.bbox = context.bbox; - } - return layerOptions; - }; - /** Misc --------------------------------------------------- */ - /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - OwcJsonService.prototype.getUrlFromUri = /** - * Misc --------------------------------------------------- - * @private - * @param {?} uri - * @return {?} - */ - function (uri) { - return uri.substring(0, uri.indexOf('?')); - }; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - OwcJsonService.prototype.getJsonFromUri = /** - * helper to pack query-parameters of a uri into a JSON - * @private - * @param {?} uri any uri with query-parameters - * @return {?} - */ - function (uri) { - /** @type {?} */ - var query = uri.substr(uri.lastIndexOf('?') + 1); - /** @type {?} */ - var result = {}; - query.split('&').forEach((/** - * @param {?} part - * @return {?} - */ - function (part) { - /** @type {?} */ - var item = part.split('='); - result[item[0].toUpperCase()] = decodeURIComponent(item[1]); - })); - return result; - }; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - OwcJsonService.prototype.getDisplayName = /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @private - * @param {?} offering - * @param {?} resource - * @return {?} - */ - function (offering, resource) { - /** @type {?} */ - var displayName = ''; - if (offering.hasOwnProperty('title')) { - if (offering.title) { - displayName = offering.title; - } - else { - displayName = this.getResourceTitle(resource); - } - } - return displayName; - }; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - OwcJsonService.prototype.generateOwsContextFrom = /**------------ DATA TO FILE -----------------------------------------*/ - /** - * \@TODO: - * - properties - * @param {?} id - * @param {?} layers - * @param {?=} extent - * @param {?=} properties - * @return {?} - */ - function (id, layers, extent, properties) { - var e_3, _a; - if (!properties) { - properties = { - lang: '', - links: [], - title: '', - updated: '' - }; - } - /** @type {?} */ - var owc = { - 'id': id, - 'type': 'FeatureCollection', - 'properties': properties, - 'features': [] - }; - if (extent) { - owc['bbox'] = extent; - } - try { - for (var layers_1 = __values(layers), layers_1_1 = layers_1.next(); !layers_1_1.done; layers_1_1 = layers_1.next()) { - var layer = layers_1_1.value; - /** @type {?} */ - var resource = this.generateResourceFromLayer(layer); - // TODO check for layer types - owc.features.push(resource); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (layers_1_1 && !layers_1_1.done && (_a = layers_1.return)) _a.call(layers_1); - } - finally { if (e_3) throw e_3.error; } - } - return owc; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.generateResourceFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var resource = { - 'id': layer.id, - 'properties': { - title: layer.name, - updated: null, - offerings: [this.generateOfferingFromLayer(layer)], - opacity: layer.opacity, - attribution: layer.attribution, - }, - 'type': 'Feature', - 'geometry': null - }; - return resource; - }; - /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - OwcJsonService.prototype.generateOfferingFromLayer = /** - * @param {?} layer - * @param {?=} legendUrl - * @param {?=} iconUrl - * @return {?} - */ - function (layer, legendUrl, iconUrl) { - /** @type {?} */ - var offering = { - 'code': this.getOfferingCodeFromLayer(layer), - 'title': layer.name - }; - if (layer.type == GeojsonLayertype) { - offering.contents = this.getContentsFromLayer((/** @type {?} */ (layer))); - } - else { - offering.operations = this.getOperationsFromLayer(layer); - } - if (legendUrl) - offering.legendUrl = legendUrl; - if (iconUrl) - offering.iconUrl = iconUrl; - return offering; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOfferingCodeFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - switch (layer.type) { - case WmsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'; - case WmtsLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; - case GeojsonLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; - case XyzLayertype: - return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; - default: - console.error("This type of layer (" + layer.type + ") has not been implemented yet."); - return null; - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getContentsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var contents = []; - switch (layer.type) { - case GeojsonLayertype: - /** @type {?} */ - var content = { - type: 'FeatureCollection', - content: JSON.stringify(layer.data) - }; - contents.push(content); - break; - default: - console.error("Cannot get contents for this type of vectorlayer: (" + layer.type + ")"); - } - return contents; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - if (layer instanceof RasterLayer) { - switch (layer.type) { - case WmsLayertype: - return this.getWmsOperationsFromLayer(layer); - case WmtsLayertype: - return this.getWmtsOperationsFromLayer(layer); - case XyzLayertype: - return this.getXyzOperationsFromLayer(layer); - default: - console.error("Cannot get operations for this type of layer: (" + layer.type + ")"); - return []; - } - } - else if (layer instanceof VectorLayer) { - switch (layer.type) { - // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts - // return this.getWfsOperationsFromLayer(layer); - default: - console.error("This type of service (" + layer.type + ") has not been implemented yet."); - return []; - } - } - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getXyzOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var restCall = { - 'code': 'REST', - 'method': 'GET', - 'type': 'text/html', - 'href': "" + layer.url - }; - /** @type {?} */ - var operations = [ - restCall - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getTmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification - return []; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWfsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var version = layer.options.version ? layer.options.version : '1.1.0'; - /** @type {?} */ - var GetFeature = { - 'code': 'GetFeature', - 'method': 'GET', - 'type': 'application/json', - 'href': url + "?service=WFS&version=" + version + "&request=GetFeature" - }; - // let DescribeFeatureType: IOwsOperation = null; - // let GetCapabilities: IOwsOperation = null; - // let GetPropertyValue: IOwsOperation = null; - // let GetFeatureWithLock: IOwsOperation = null; - // let LockFeature: IOwsOperation = null; - // let Transaction: IOwsOperation = null; - // let CreateStoredQuery: IOwsOperation = null; - // let DropStoredQuery: IOwsOperation = null; - // let ListStoredQueries: IOwsOperation = null; - // let DescribeStoredQueries: IOwsOperation = null; - /** @type {?} */ - var operations = [ - GetFeature, - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmsVersion = layer.params.VERSION; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getMap = { - 'code': 'GetMap', - 'method': 'GET', - 'type': format, - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetMap&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format + "&TILED=true" - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'method': 'GET', - 'type': 'application/xml', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetCapabilities" - }; - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'method': 'GET', - 'type': 'text/html', - 'href': url + "?service=WMS&version=" + wmsVersion + "&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=" + layerId + "&FORMAT=" + format - }; - /** @type {?} */ - var operations = [ - getMap, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - /** - * @param {?} layer - * @return {?} - */ - OwcJsonService.prototype.getWmtsOperationsFromLayer = /** - * @param {?} layer - * @return {?} - */ - function (layer) { - /** @type {?} */ - var url = layer.url; - /** @type {?} */ - var wmtsVersion = layer.params.version; - /** @type {?} */ - var layerName = layer.name; - /** @type {?} */ - var layerId = layer.id; - /** @type {?} */ - var format = 'image/vnd.jpeg-png'; - if (layer.params && layer.params.FORMAT) - format = layer.params.FORMAT; - /** @type {?} */ - var getTile = { - 'code': 'GetTile', - 'href': url + "?SERVICE=WMTS&REQUEST=GetTile&FORMAT=" + format + "&LAYER=" + layerId + "&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': format - }; - /** @type {?} */ - var getCapabilities = { - 'code': 'GetCapabilities', - 'href': url + "?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'application/xml' - } - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - ; - // Note: we deliberately use the WMS protocol here instead of WMTS. - // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile. - /** @type {?} */ - var getFeatureInfo = { - 'code': 'GetFeatureInfo', - 'href': url + "?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=" + wmtsVersion, - 'method': 'GET', - 'type': 'text/html' - }; - /** @type {?} */ - var operations = [ - getTile, - getCapabilities, - getFeatureInfo - ]; - return operations; - }; - OwcJsonService.decorators = [ - { type: Injectable, args: [{ - providedIn: 'root' - },] } - ]; - /** @nocollapse */ - OwcJsonService.ctorParameters = function () { return [ - { type: WmtsClientService } - ]; }; - /** @nocollapse */ OwcJsonService.ngInjectableDef = ɵɵdefineInjectable({ factory: function OwcJsonService_Factory() { return new OwcJsonService(ɵɵinject(WmtsClientService)); }, token: OwcJsonService, providedIn: "root" }); - return OwcJsonService; -}()); -if (false) { - /** - * @type {?} - * @private - */ - OwcJsonService.prototype.wmtsClient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps100/wps_marshaller_1.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var WpsMarshaller100 = /** @class */ (function () { - function WpsMarshaller100() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller100.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=1.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=1.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.processOfferings.process.forEach((/** - * @param {?} process - * @return {?} - */ - function (process) { - out.push({ - id: process.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (responseJson.value.status.processFailed) { // Failure? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'error' - }, - value: responseJson.value.statusLocation - }); - } - else if (responseJson.value.processOutputs) { // synchronous request? - try { - for (var _b = __values(responseJson.value.processOutputs.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - /** @type {?} */ - var isReference = output.reference ? true : false; - /** @type {?} */ - var datatype = void 0; - /** @type {?} */ - var data = void 0; - /** @type {?} */ - var format = void 0; - if (output.reference) { - datatype = 'complex'; - data = output.reference.href || null; - format = (/** @type {?} */ (output.reference.mimeType)); - } - else { - if (output.data && output.data.literalData) { - datatype = 'literal'; - format = (/** @type {?} */ (output.data.literalData.dataType)); - } - else if (output.data && output.data.complexData) { - datatype = 'complex'; - format = (/** @type {?} */ (output.data.complexData.mimeType)); - } - else { - datatype = 'bbox'; - format = undefined; - } - // @ts-ignore - data = this.unmarshalOutputData(output.data); - } - out.push({ - description: { - id: output.identifier.value, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (responseJson.value.statusLocation) { // asynchronous request? - out.push({ - description: { - id: responseJson.value.process.identifier.value, - reference: true, - type: 'status' - }, - value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions) - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @return {?} - */ - function (data) { - if (data.complexData) { - switch (data.complexData.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.complexData.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.complexData.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal data of format " + data.complexData.mimeType); - } - } - else if (data.literalData) { - switch (data.literalData.dataType) { - case 'string': - default: - return data.literalData.value; - } - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - /** @type {?} */ - var response = responseJson.value; - /** @type {?} */ - var status = response.status.processSucceeded ? 'Succeeded' : - response.status.processAccepted ? 'Accepted' : - response.status.processStarted ? 'Running' : - response.status.processFailed ? 'Failed' : - 'Failed'; - /** @type {?} */ - var state = { - status: status, - statusLocation: response.statusLocation, - }; - if (response.processOutputs && response.processOutputs.output) { - state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions); - } - return state; - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var wps1Inputs = this.marshalInputs(inputs); - /** @type {?} */ - var wps1ResponseForm = this.marshalResponseForm(outputs, async); - /** @type {?} */ - var bodyValue = { - dataInputs: wps1Inputs, - identifier: processId, - responseForm: wps1ResponseForm, - service: 'WPS', - version: '1.0.0' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/1.0.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/1.0.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - WpsMarshaller100.prototype.marshalResponseForm = /** - * @protected - * @param {?} outputs - * @param {?=} async - * @return {?} - */ - function (outputs, async) { - var e_2, _a; - if (async === void 0) { async = false; } - /** @type {?} */ - var outputDefinitions = []; - try { - for (var outputs_1 = __values(outputs), outputs_1_1 = outputs_1.next(); !outputs_1_1.done; outputs_1_1 = outputs_1.next()) { - var output = outputs_1_1.value; - /** @type {?} */ - var defType = void 0; - switch (output.type) { - case 'literal': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - case 'complex': - defType = { - identifier: { value: output.id }, - asReference: output.reference, - mimeType: output.format - }; - break; - default: - throw new Error("This Wps-outputtype has not been implemented yet! " + output + " "); - } - outputDefinitions.push(defType); - } - } - catch (e_2_1) { e_2 = { error: e_2_1 }; } - finally { - try { - if (outputs_1_1 && !outputs_1_1.done && (_a = outputs_1.return)) _a.call(outputs_1); - } - finally { if (e_2) throw e_2.error; } - } - /** @type {?} */ - var responseDocument = { - output: outputDefinitions, - status: async ? true : false, - storeExecuteResponse: async ? true : false - }; - /** @type {?} */ - var form = { - responseDocument: responseDocument - }; - return form; - }; - /** - * @protected - * @param {?} inputArr - * @return {?} - */ - WpsMarshaller100.prototype.marshalInputs = /** - * @protected - * @param {?} inputArr - * @return {?} - */ - function (inputArr) { - var e_3, _a; - /** @type {?} */ - var theInputs = []; - try { - for (var inputArr_1 = __values(inputArr), inputArr_1_1 = inputArr_1.next(); !inputArr_1_1.done; inputArr_1_1 = inputArr_1.next()) { - var inp = inputArr_1_1.value; - if (inp.value === null || inp.value === undefined) { - throw new Error("Value for input " + inp.description.id + " is not set"); - } - /** @type {?} */ - var marshalledInput = this.marshalInput(inp); - theInputs.push(marshalledInput); - } - } - catch (e_3_1) { e_3 = { error: e_3_1 }; } - finally { - try { - if (inputArr_1_1 && !inputArr_1_1.done && (_a = inputArr_1.return)) _a.call(inputArr_1); - } - finally { if (e_3) throw e_3.error; } - } - /** @type {?} */ - var inputs = { - input: theInputs - }; - return inputs; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var id = input.description.id; - /** @type {?} */ - var title = input.description.id; - /** @type {?} */ - var abstract = ''; - /** @type {?} */ - var inputType = { - identifier: { value: id }, - title: { value: title }, - _abstract: { value: abstract } - }; - if (input.description.reference) { - inputType.reference = this.marshalReferenceInput(input); - } - else { - inputType.data = this.marshalDataInput(input); - } - return inputType; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalDataInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var data; - switch (input.description.type) { - case 'literal': - data = { - literalData: { value: String(input.value) } - }; - break; - case 'bbox': - /** @type {?} */ - var values = input.value; - data = { - boundingBoxData: { - lowerCorner: [values.lllat, values.lllon], - upperCorner: [values.urlat, values.urlon] - } - }; - break; - case 'complex': - switch (input.description.format) { - case 'text/xml': - data = { - complexData: { - content: [input.value], - // @TODO: we assume here that text/xml-data is already stringified - mimeType: input.description.format - } - }; - break; - default: - data = { - complexData: { - content: [JSON.stringify(input.value)], - mimeType: input.description.format - } - }; - } - break; - default: - throw Error("This input is of type " + input.description.type + ". We can only marshal input of type literal, bbox or complex."); - } - return data; - }; - /** - * @protected - * @param {?} input - * @return {?} - */ - WpsMarshaller100.prototype.marshalReferenceInput = /** - * @protected - * @param {?} input - * @return {?} - */ - function (input) { - /** @type {?} */ - var ref = { - href: input.value, - method: 'GET', - mimeType: input.description.format - }; - return ref; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller100.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - // WPS-1.0 does not send a body with a GetStatus request. - return {}; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller100.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - /** this does only work in geoserver: - return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */ - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.marshalDismissBody = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller100.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - throw new Error('Wps 1.0 does not support Dismiss-operations.'); - }; - return WpsMarshaller100; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/helpers.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var isStatusInfo = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('jobID') - && obj.hasOwnProperty('status'); -}); -/** @type {?} */ -var isDataOutputType = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return obj.hasOwnProperty('id') && - (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output')); -}); -/** @type {?} */ -var isResult = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object'); -}); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps200/wps_marshaller_2.0.0.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var WpsMarshaller200 = /** @class */ (function () { - function WpsMarshaller200() { - } - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller200.prototype.getCapabilitiesUrl = /** - * @param {?} baseurl - * @return {?} - */ - function (baseurl) { - return baseurl + "?service=WPS&request=GetCapabilities&version=2.0.0"; - }; - /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.executeUrl = /** - * @param {?} baseurl - * @param {?} processId - * @return {?} - */ - function (baseurl, processId) { - return baseurl + "?service=WPS&request=Execute&version=2.0.0&identifier=" + processId; - }; - /** - * @param {?} capabilities - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalCapabilities = /** - * @param {?} capabilities - * @return {?} - */ - function (capabilities) { - /** @type {?} */ - var out = []; - capabilities.contents.processSummary.forEach((/** - * @param {?} summary - * @return {?} - */ - function (summary) { - out.push({ - id: summary.identifier.value - }); - })); - return out; - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalSyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - var e_1, _a; - /** @type {?} */ - var out = []; - if (isResult(responseJson.value)) { - var _loop_1 = function (output) { - /** @type {?} */ - var outputDescription = outputDescriptions.find((/** - * @param {?} od - * @return {?} - */ - function (od) { return od.id === output.id; })); - if (!outputDescription) { - throw new Error("Could not find an output-description for the parameter " + output.id + "."); - } - /** @type {?} */ - var isReference = outputDescription.reference; - /** @type {?} */ - var datatype = outputDescription.type; - /** @type {?} */ - var format = outputDescription.format; - /** @type {?} */ - var data = void 0; - if (output.reference) { - data = output.reference.href || null; - } - else if (output.data) { - data = this_1.unmarshalOutputData(output.data, outputDescription); - } - else { - throw new Error("Output has neither reference nor data field."); - } - out.push({ - description: { - id: output.id, - format: format, - reference: isReference, - type: datatype - }, - value: data, - }); - }; - var this_1 = this; - try { - for (var _b = __values(responseJson.value.output), _c = _b.next(); !_c.done; _c = _b.next()) { - var output = _c.value; - _loop_1(output); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b.return)) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - } - else if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - out.push({ - description: { - id: processId, - reference: true, - type: 'status' - }, - value: state - }); - } - return out; - }; - /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalOutputData = /** - * @protected - * @param {?} data - * @param {?} description - * @return {?} - */ - function (data, description) { - if (description.type === 'complex') { - switch (data.mimeType) { - case 'application/vnd.geo+json': - case 'application/json': - return data.content.map((/** - * @param {?} cont - * @return {?} - */ - function (cont) { return JSON.parse(cont); })); - case 'application/WMS': - return data.content; - case 'text/xml': - return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data - default: - throw new Error("Cannot unmarshal complex data of format " + data.mimeType); - } - } - else if (description.type === 'literal') { - return data.content; - } - throw new Error("Not yet implemented: " + data); - }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalAsyncExecuteResponse = /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, url, processId, inputs, outputDescriptions) { - return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions); - }; - /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalGetStateResponse = /** - * @param {?} responseJson - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (responseJson, serverUrl, processId, inputs, outputDescriptions) { - if (isStatusInfo(responseJson.value)) { - /** @type {?} */ - var state = { - status: responseJson.value.status, - jobID: responseJson.value.jobID, - percentCompleted: responseJson.value.percentCompleted - }; - return state; - } - else { - throw new Error("Not a status-info: " + responseJson); - } - }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller200.prototype.marshalExecBody = /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - function (processId, inputs, outputs, async) { - /** @type {?} */ - var inputsMarshalled = this.marshalInputs(inputs); - /** @type {?} */ - var outputsMarshalled = this.marshalOutputs(outputs); - /** @type {?} */ - var bodyValue = { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - service: 'WPS', - version: '2.0.0', - identifier: { value: processId }, - input: inputsMarshalled, - output: outputsMarshalled, - mode: async ? 'async' : 'sync', - response: 'document' - }; - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }, - value: bodyValue - }; - return body; - }; - /** - * @private - * @param {?} inputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalInputs = /** - * @private - * @param {?} inputs - * @return {?} - */ - function (inputs) { - return inputs.map((/** - * @param {?} i - * @return {?} - */ - function (i) { - if (i.description.reference) { - return { - id: i.description.id, - reference: { - href: i.value, - mimeType: i.description.format, - } - }; - } - else { - return { - id: i.description.id, - data: { - content: [JSON.stringify(i.value)], - mimeType: i.description.format - } - }; - } - })); - }; - /** - * @private - * @param {?} outputs - * @return {?} - */ - WpsMarshaller200.prototype.marshalOutputs = /** - * @private - * @param {?} outputs - * @return {?} - */ - function (outputs) { - return outputs.map((/** - * @param {?} o - * @return {?} - */ - function (o) { - return { - id: o.id, - mimeType: o.format, - transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line? - }; - })); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetStatusBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - function (serverUrl, processId, statusId) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: { - jobID: statusId, - service: 'WPS', - version: '2.0.0' - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller200.prototype.marshallGetResultBody = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - function (serverUrl, processId, jobID) { - /** @type {?} */ - var request = { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: { - service: 'WPS', - version: '2.0.0', - jobID: jobID - } - }; - return request; - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.dismissUrl = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - return serverUrl; - }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller200.prototype.marshalDismissBody = /** - * @param {?} jobId - * @return {?} - */ - function (jobId) { - /** @type {?} */ - var body = { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: { - jobID: jobId, - service: 'WPS', - version: '2.0.0' - } - }; - return body; - }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller200.prototype.unmarshalDismissResponse = /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - function (jsonResponse, serverUrl, processId) { - /** @type {?} */ - var state = { - status: jsonResponse.value.status, - jobID: jsonResponse.value.jobID - }; - return state; - }; - return WpsMarshaller200; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/utils/polling.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @template T - * @param {?} task$ - * @param {?} predicate - * @param {?=} doWhile - * @param {?=} minWaitTime - * @return {?} - */ -function pollUntil(task$, predicate, doWhile, minWaitTime) { - if (minWaitTime === void 0) { minWaitTime = 1000; } - if (doWhile) { - doWhile(null); - } - /** @type {?} */ - var tappedTask$ = task$.pipe(tap((/** - * @param {?} r - * @return {?} - */ - function (r) { - if (doWhile) { - doWhile(r); - } - }))); - /** @type {?} */ - var requestTakesAtLeast$ = forkJoin(tappedTask$, timer(minWaitTime)).pipe(map((/** - * @param {?} r - * @return {?} - */ - function (r) { return r[0]; }))); - /** @type {?} */ - var polledRequest$ = requestTakesAtLeast$.pipe(mergeMap((/** - * @param {?} response - * @return {?} - */ - function (response) { - if (predicate(response)) { - // console.log(`obtained correct answer ${response}`); - return of(response); - } - else { - // console.log(`obtained false answer ${response}. trying again...`); - return polledRequest$; - } - }))); - return polledRequest$; -} -/** - * @param {?} delayMs - * @param {?=} maxRetries - * @return {?} - */ -function delayedRetry(delayMs, maxRetries) { - if (maxRetries === void 0) { maxRetries = 3; } - /** @type {?} */ - var attempts = 1; - return (/** - * @param {?} src$ - * @return {?} - */ - function (src$) { - return src$.pipe( - // If an error occurs ... - retryWhen((/** - * @param {?} error$ - * @return {?} - */ - function (error$) { - return error$.pipe(delay(delayMs), // <- in any case, first wait a little while ... - mergeMap((/** - * @param {?} error - * @return {?} - */ - function (error) { - if (error.status && error.status === 400) { - // In case of a server error, repeating won't help. - throw error; - } - else if (attempts <= maxRetries) { - console.log('http-error. Retrying ...'); - attempts += 1; - return of(error); // <- an observable causes request to be retried - } - else { - console.log("Persistent http-errors after " + attempts + " attempts. Giving up."); - throw error; // an error causes request to be given up on. - } - }))); - }))); - }); -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/cache.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function Cache() { } -if (false) { - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - Cache.prototype.set = function (input, output) { }; - /** - * @param {?} input - * @return {?} - */ - Cache.prototype.get = function (input) { }; -} -var FakeCache = /** @class */ (function () { - function FakeCache() { - } - /** - * @param {?} input - * @param {?} output - * @return {?} - */ - FakeCache.prototype.set = /** - * @param {?} input - * @param {?} output - * @return {?} - */ - function (input, output) { - }; - /** - * @param {?} input - * @return {?} - */ - FakeCache.prototype.get = /** - * @param {?} input - * @return {?} - */ - function (input) { - return of(null); - }; - return FakeCache; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wpsclient.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** @type {?} */ -var XLink_1_0$1 = XLink_1_0$2; -/** @type {?} */ -var OWS_1_1_0$1 = OWS_1_1_0$2; -/** @type {?} */ -var OWS_2_0 = OWS_2_0$1; -/** @type {?} */ -var WPS_1_0_0 = WPS_1_0_0$1; -/** @type {?} */ -var WPS_2_0 = WPS_2_0$1; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -var WpsClient = /** @class */ (function () { - function WpsClient(version, webclient, cache) { - if (version === void 0) { version = '1.0.0'; } - this.webclient = webclient; - this.cache = new FakeCache(); - this.version = version; - if (cache) - this.cache = cache; - /** @type {?} */ - var context; - if (this.version === '1.0.0') { - this.wpsmarshaller = new WpsMarshaller100(); - context = new Jsonix.Context([XLink_1_0$1, OWS_1_1_0$1, WPS_1_0_0]); - } - else if (this.version === '2.0.0') { - this.wpsmarshaller = new WpsMarshaller200(); - context = new Jsonix.Context([XLink_1_0$1, OWS_2_0, WPS_2_0]); - } - else { - throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.'); - } - this.xmlunmarshaller = context.createUnmarshaller(); - this.xmlmarshaller = context.createMarshaller(); - } - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getCapabilities = /** - * @param {?} url - * @return {?} - */ - function (url) { - var _this = this; - /** @type {?} */ - var getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url); - return this.getRaw(getCapabilitiesUrl).pipe(map((/** - * @param {?} response - * @return {?} - */ - function (response) { - /** @type {?} */ - var responseJson = _this.xmlunmarshaller.unmarshalString(response); - return _this.wpsmarshaller.unmarshalCapabilities(responseJson.value); - })) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned - ); - }; - /** - * @param {?} processId - * @return {?} - */ - WpsClient.prototype.describeProcess = /** - * @param {?} processId - * @return {?} - */ - function (processId) { - throw new Error('Not implemented yet'); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - WpsClient.prototype.executeAsync = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?=} pollingRate - * @param {?=} tapFunction - * @return {?} - */ - function (url, processId, inputs, outputs, pollingRate, tapFunction) { - var _this = this; - if (pollingRate === void 0) { pollingRate = 1000; } - /** @type {?} */ - var executeRequest$ = this.executeAsyncS(url, processId, inputs, outputs); - /** @type {?} */ - var query$ = executeRequest$.pipe( - // poll until suceeded - mergeMap((/** - * @param {?} currentState - * @return {?} - */ - function (currentState) { - /** @type {?} */ - var nextState$ = _this.getNextState(currentState, url, processId, inputs, outputs); - /** @type {?} */ - var poll$ = pollUntil(nextState$, (/** - * @param {?} response - * @return {?} - */ - function (response) { - return response.status === 'Succeeded'; - }), tapFunction, pollingRate); - return poll$; - })), - // fetch results - mergeMap((/** - * @param {?} lastState - * @return {?} - */ - function (lastState) { - return _this.fetchResults(lastState, url, processId, inputs, outputs); - })), - // In case of errors: - tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - var e_1, _a; - try { - for (var response_1 = __values(response), response_1_1 = response_1.next(); !response_1_1.done; response_1_1 = response_1.next()) { - var result = response_1_1.value; - if (result.description.type === 'error') { - console.log('server responded with 200, but body contained an error-result: ', result); - throw new Error(result.value); - } - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (response_1_1 && !response_1_1.done && (_a = response_1.return)) _a.call(response_1); - } - finally { if (e_1) throw e_1.error; } - } - }))); - return this.cachedQuery(url, processId, inputs, outputs, query$); - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - WpsClient.prototype.cachedQuery = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} query$ - * @return {?} - */ - function (url, processId, inputs, outputs, query$) { - var _this = this; - /** @type {?} */ - var cachedResponse$ = this.cache.get({ url: url, processId: processId, inputs: inputs, outputs: outputs }); - return cachedResponse$.pipe(switchMap((/** - * @param {?} results - * @return {?} - */ - function (results) { - if (results) { - return of(results); - } - else { - return query$.pipe(tap((/** - * @param {?} response - * @return {?} - */ - function (response) { - _this.cache.set({ url: url, processId: processId, inputs: inputs, outputs: outputs }, response); - }))); - } - }))); - }; - /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.getNextState = /** - * @private - * @param {?} currentState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (currentState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var request$; - if (this.version === '1.0.0') { - if (!currentState.statusLocation) { - throw Error('No status location'); - } - request$ = this.getRaw(currentState.statusLocation); - } - else if (this.version === '2.0.0') { - if (!currentState.jobID) { - throw Error('No job-Id'); - } - /** @type {?} */ - var execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - request$ = this.postRaw(serverUrl, xmlExecbody); - } - else { - throw new Error("'GetStatus' has not yet been implemented for this WPS-Version (" + this.version + ")."); - } - /** @type {?} */ - var request1$ = request$.pipe(delayedRetry(2000, 2), map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - return request1$; - }; - /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.fetchResults = /** - * @private - * @param {?} lastState - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (lastState, serverUrl, processId, inputs, outputDescriptions) { - var _this = this; - if (lastState.results) { // WPS 1.0: results should already be in last state - return of(lastState.results); - } - else { // WPS 2.0: get results with post request - if (!lastState.jobID) { - throw new Error("You want me to get a result, but I can't find a jobId. I don't know what to do now!"); - } - /** @type {?} */ - var execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID); - /** @type {?} */ - var xmlExecBody = this.xmlmarshaller.marshalString(execBody); - return this.postRaw(serverUrl, xmlExecBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions); - return output; - }))); - } - }; - /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.executeAsyncS = /** - * @private - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsClient.prototype.execute = /** - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - function (url, processId, inputs, outputDescriptions) { - var _this = this; - /** @type {?} */ - var executeUrl = this.wpsmarshaller.executeUrl(url, processId); - /** @type {?} */ - var execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false); - /** @type {?} */ - var xmlExecbody = this.xmlmarshaller.marshalString(execbody); - return this.postRaw(executeUrl, xmlExecbody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions); - return output; - }))); - }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsClient.prototype.dismiss = /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - function (serverUrl, processId, jobId) { - var _this = this; - /** @type {?} */ - var dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId); - /** @type {?} */ - var dismissBody = this.wpsmarshaller.marshalDismissBody(jobId); - /** @type {?} */ - var xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody); - return this.postRaw(dismissUrl, xmlDismissBody).pipe(map((/** - * @param {?} xmlResponse - * @return {?} - */ - function (xmlResponse) { - /** @type {?} */ - var jsonResponse = _this.xmlunmarshaller.unmarshalString(xmlResponse); - /** @type {?} */ - var output = _this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId); - return output; - }))); - }; - /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - WpsClient.prototype.postRaw = /** - * @param {?} url - * @param {?} xmlBody - * @return {?} - */ - function (url, xmlBody) { - /** @type {?} */ - var headers = { - 'Content-Type': 'text/xml', - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.post(url, xmlBody, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2), share() // turning hot: to make sure that multiple subscribers dont cause multiple requests - ); - }; - /** - * @param {?} url - * @return {?} - */ - WpsClient.prototype.getRaw = /** - * @param {?} url - * @return {?} - */ - function (url) { - /** @type {?} */ - var headers = { - 'Accept': 'text/xml, application/xml' - }; - return this.webclient.get(url, { headers: headers, responseType: 'text' }).pipe(delayedRetry(2000, 2)); - }; - WpsClient.decorators = [ - { type: Injectable } - ]; - /** @nocollapse */ - WpsClient.ctorParameters = function () { return [ - { type: undefined, decorators: [{ type: Inject, args: ['WpsVersion',] }] }, - { type: HttpClient }, - { type: undefined, decorators: [{ type: Inject, args: ['WpsCache',] }] } - ]; }; - return WpsClient; -}()); -if (false) { - /** - * @type {?} - * @private - */ - WpsClient.prototype.version; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.xmlunmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.wpsmarshaller; - /** - * @type {?} - * @private - */ - WpsClient.prototype.cache; - /** - * @type {?} - * @private - */ - WpsClient.prototype.webclient; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/services-ogc.module.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -var ServicesOgcModule = /** @class */ (function () { - function ServicesOgcModule() { - } - ServicesOgcModule.decorators = [ - { type: NgModule, args: [{ - declarations: [], - imports: [], - exports: [], - providers: [OwcJsonService, WmtsClientService, WpsClient] - },] } - ]; - return ServicesOgcModule; -}()); - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - * @record - */ -function IOwsContext() { } -if (false) { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - * @type {?} - */ - IOwsContext.prototype.id; - /** @type {?} */ - IOwsContext.prototype.properties; - /** - * Ordered List of Resources available on the Context document - * @type {?} - */ - IOwsContext.prototype.features; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * @record - */ -function IOwsResource() { } -if (false) { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - * @type {?} - */ - IOwsResource.prototype.id; - /** @type {?} */ - IOwsResource.prototype.properties; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsResourceProperties() { } -if (false) { - /** - * Title given to the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.title; - /** - * Date of the last update of the Context resource - * @type {?} - */ - IOwsResourceProperties.prototype.updated; - /** - * The purpose is to provide a generic description of the content in a format understandable by generic readers - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.abstract; - /** - * This element is optional and indicates the authors array of the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.authors; - /** - * Entity responsible for making the Context resource available - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.publisher; - /** - * Information about rights held in and over the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.rights; - /** - * Date or range of dates relevant to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.date; - /** - * This element is optional and can contain a number of offerings defined by the class OWC:Offering - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.offerings; - /** - * Flag value indicating to the client if the Context resource should be displayed by default - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.active; - /** - * This array is optional and expresses a category related to the Context resource - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.categories; - /** - * Minimum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.minscaledenominator; - /** - * Maximum scale for the display of the Context resource Double - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.maxscaledenominator; - /** - * Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.folder; - /** - * TODO!!! links is defined as Object but in the examples as Array - * @type {?|undefined} - */ - IOwsResourceProperties.prototype.links; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - * @record - */ -function IOwsOffering() { } -if (false) { - /** - * Extension Offerings with type - string - * @type {?} - */ - IOwsOffering.prototype.code; - /** - * Web Service Offerings provide their operations - * @type {?|undefined} - */ - IOwsOffering.prototype.operations; - /** - * Content Offerings allow content to be embedded in an OWS Context document. - * @type {?|undefined} - */ - IOwsOffering.prototype.contents; - /** @type {?|undefined} */ - IOwsOffering.prototype.styles; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreator() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreator.prototype.title; - /** @type {?|undefined} */ - IOwsCreator.prototype.uri; - /** @type {?|undefined} */ - IOwsCreator.prototype.version; -} -/** - * @record - */ -function IOwsAuthor() { } -if (false) { - /** - * Entity primarily responsible for making the Context document - * @type {?|undefined} - */ - IOwsAuthor.prototype.name; - /** @type {?|undefined} */ - IOwsAuthor.prototype.email; - /** @type {?|undefined} */ - IOwsAuthor.prototype.uri; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCategorie() { } -if (false) { - /** @type {?|undefined} */ - IOwsCategorie.prototype.scheme; - /** - * Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute - * @type {?|undefined} - */ - IOwsCategorie.prototype.term; - /** @type {?|undefined} */ - IOwsCategorie.prototype.label; -} -/** - * @record - */ -function IOwsLinks() { } -if (false) { - /** @type {?} */ - IOwsLinks.prototype.rel; - /** @type {?|undefined} */ - IOwsLinks.prototype.href; - /** @type {?|undefined} */ - IOwsLinks.prototype.type; - /** @type {?|undefined} */ - IOwsLinks.prototype.title; - /** - * Reference to a description of the Context resource in alternative format - * @type {?|undefined} - */ - IOwsLinks.prototype.alternates; - /** @type {?|undefined} */ - IOwsLinks.prototype.lang; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsCreatorApplication() { } -if (false) { - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.title; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.uri; - /** @type {?|undefined} */ - IOwsCreatorApplication.prototype.version; -} -/** - * @record - */ -function IOwsCreatorDisplay() { } -if (false) { - /** - * Width measured in pixels of the display showing the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelWidth; - /** - * Width measured in pixels of the display showing by the Area of Interest - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.pixelHeight; - /** - * The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) - * @type {?|undefined} - */ - IOwsCreatorDisplay.prototype.mmPerPixel; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - * @record - */ -function IOwsOperation() { } -if (false) { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - * @type {?} - */ - IOwsOperation.prototype.code; - /** - * method defines the access method, for example GET or POST. - * @type {?} - */ - IOwsOperation.prototype.method; - /** @type {?|undefined} */ - IOwsOperation.prototype.type; - /** - * href is the URI containing the definition of the request - * @type {?|undefined} - */ - IOwsOperation.prototype.href; - /** @type {?|undefined} */ - IOwsOperation.prototype.request; - /** @type {?|undefined} */ - IOwsOperation.prototype.result; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsContent() { } -if (false) { - /** - * MIME type of the Content - * @type {?} - */ - IOwsContent.prototype.type; - /** @type {?|undefined} */ - IOwsContent.prototype.href; - /** @type {?|undefined} */ - IOwsContent.prototype.title; - /** - * String type, not empty that can contain any text encoded media type - * @type {?|undefined} - */ - IOwsContent.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IOwsStyleSet() { } -if (false) { - /** @type {?} */ - IOwsStyleSet.prototype.name; - /** @type {?} */ - IOwsStyleSet.prototype.title; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.abstract; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.default; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.legendURL; - /** @type {?|undefined} */ - IOwsStyleSet.prototype.content; - /* Skipping unhandled member: [k: string]: any;*/ -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/owc/types/eoc-owc-json.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function IEocOwsContext() { } -if (false) { - /** @type {?} */ - IEocOwsContext.prototype.features; - /** @type {?|undefined} */ - IEocOwsContext.prototype.projections; -} -/** - * @record - */ -function IEocOwsResource() { } -if (false) { - /** @type {?} */ - IEocOwsResource.prototype.properties; -} -/** - * @record - */ -function IEocOwsResourceProperties() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.opacity; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.attribution; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.shards; - /** @type {?|undefined} */ - IEocOwsResourceProperties.prototype.dimensions; -} -/** - * @record - */ -function IEocOwsResourceDimensions() { } -if (false) { - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.time; - /** @type {?|undefined} */ - IEocOwsResourceDimensions.prototype.elevation; - /* Skipping unhandled member: [k: string]: any;*/ -} -/** - * @record - */ -function IEocOwsResourceDimension() { } -if (false) { - /** - * Default step display of time slider - * @type {?|undefined} - */ - IEocOwsResourceDimension.prototype.display; - /** @type {?} */ - IEocOwsResourceDimension.prototype.units; - /** @type {?|undefined} */ - IEocOwsResourceDimension.prototype.value; -} -/** - * @record - */ -function IEocOwsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.legendUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.iconUrl; - /** @type {?|undefined} */ - IEocOwsOffering.prototype.title; -} -/** - * @record - */ -function IEocWmsOffering() { } -if (false) { - /** @type {?} */ - IEocWmsOffering.prototype.code; -} -/** - * @record - */ -function IEocOwsWmtsOffering() { } -if (false) { - /** @type {?} */ - IEocOwsWmtsOffering.prototype.code; - /** @type {?|undefined} */ - IEocOwsWmtsOffering.prototype.matrixSets; -} -/** - * @record - */ -function IEocOwsWmtsMatrixSet() { } -if (false) { - /** - * EPSG-Code - * @type {?} - */ - IEocOwsWmtsMatrixSet.prototype.srs; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixSet; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.matrixIds; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.origin; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.resolutions; - /** @type {?} */ - IEocOwsWmtsMatrixSet.prototype.tilesize; -} -/** - * @record - */ -function IEocOwsProjection() { } -if (false) { - /** @type {?} */ - IEocOwsProjection.prototype.bbox; - /** @type {?} */ - IEocOwsProjection.prototype.code; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.default; - /** @type {?|undefined} */ - IEocOwsProjection.prototype.unit; -} - -/** - * @fileoverview added by tsickle - * Generated from: lib/wps/wps_datatypes.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ -/** - * @record - */ -function WpsDataDescription() { } -if (false) { - /** @type {?} */ - WpsDataDescription.prototype.id; - /** @type {?} */ - WpsDataDescription.prototype.type; - /** @type {?} */ - WpsDataDescription.prototype.reference; - /** @type {?|undefined} */ - WpsDataDescription.prototype.format; - /** @type {?|undefined} */ - WpsDataDescription.prototype.description; - /** @type {?|undefined} */ - WpsDataDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsData() { } -if (false) { - /** @type {?} */ - WpsData.prototype.description; - /** @type {?} */ - WpsData.prototype.value; -} -/** - * @record - */ -function WpsBboxDescription() { } -if (false) { - /** @type {?} */ - WpsBboxDescription.prototype.id; - /** @type {?} */ - WpsBboxDescription.prototype.type; - /** @type {?} */ - WpsBboxDescription.prototype.reference; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.format; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.description; - /** @type {?|undefined} */ - WpsBboxDescription.prototype.defaultValue; -} -/** - * @record - */ -function WpsBboxValue() { } -if (false) { - /** @type {?} */ - WpsBboxValue.prototype.crs; - /** @type {?} */ - WpsBboxValue.prototype.lllon; - /** @type {?} */ - WpsBboxValue.prototype.lllat; - /** @type {?} */ - WpsBboxValue.prototype.urlon; - /** @type {?} */ - WpsBboxValue.prototype.urlat; -} -/** @type {?} */ -var isBbox = (/** - * @param {?} obj - * @return {?} - */ -function (obj) { - return (obj.hasOwnProperty('crs') && - obj.hasOwnProperty('lllon') && - obj.hasOwnProperty('lllat') && - obj.hasOwnProperty('urlon') && - obj.hasOwnProperty('urlat')); -}); -/** - * @record - */ -function WpsState() { } -if (false) { - /** @type {?} */ - WpsState.prototype.status; - /** @type {?|undefined} */ - WpsState.prototype.percentCompleted; - /** - * WPS 2.0 only - * @type {?|undefined} - */ - WpsState.prototype.jobID; - /** - * WPS 1.0 only - * @type {?|undefined} - */ - WpsState.prototype.statusLocation; - /** - * WPS 1.0 only: a success-state already contains the results - * @type {?|undefined} - */ - WpsState.prototype.results; -} -/** - * @param {?} obj - * @return {?} - */ -function isWpsState(obj) { - return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation')); -} -/** - * @record - */ -function WpsBboxData() { } -if (false) { - /** @type {?} */ - WpsBboxData.prototype.description; - /** @type {?} */ - WpsBboxData.prototype.value; -} -/** - * @record - */ -function WpsCapability() { } -if (false) { - /** @type {?} */ - WpsCapability.prototype.id; -} -/** - * @record - */ -function WpsMarshaller() { } -if (false) { - /** - * @param {?} url - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.executeUrl = function (url, processId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.dismissUrl = function (serverUrl, processId, jobId) { }; - /** - * @param {?} baseurl - * @return {?} - */ - WpsMarshaller.prototype.getCapabilitiesUrl = function (baseurl) { }; - /** - * @param {?} processId - * @param {?} inputs - * @param {?} outputs - * @param {?} async - * @return {?} - */ - WpsMarshaller.prototype.marshalExecBody = function (processId, inputs, outputs, async) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} statusId - * @return {?} - */ - WpsMarshaller.prototype.marshallGetStatusBody = function (serverUrl, processId, statusId) { }; - /** - * @param {?} serverUrl - * @param {?} processId - * @param {?} jobID - * @return {?} - */ - WpsMarshaller.prototype.marshallGetResultBody = function (serverUrl, processId, jobID) { }; - /** - * @param {?} jobId - * @return {?} - */ - WpsMarshaller.prototype.marshalDismissBody = function (jobId) { }; - /** - * @param {?} capabilitiesJson - * @return {?} - */ - WpsMarshaller.prototype.unmarshalCapabilities = function (capabilitiesJson) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalSyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} responseJson - * @param {?} url - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalAsyncExecuteResponse = function (responseJson, url, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @param {?} inputs - * @param {?} outputDescriptions - * @return {?} - */ - WpsMarshaller.prototype.unmarshalGetStateResponse = function (jsonResponse, serverUrl, processId, inputs, outputDescriptions) { }; - /** - * @param {?} jsonResponse - * @param {?} serverUrl - * @param {?} processId - * @return {?} - */ - WpsMarshaller.prototype.unmarshalDismissResponse = function (jsonResponse, serverUrl, processId) { }; -} - -/** - * @fileoverview added by tsickle - * Generated from: public_api.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -/** - * @fileoverview added by tsickle - * Generated from: ukis-services-ogc.ts - * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc - */ - -export { FakeCache, OwcJsonService, ServicesOgcModule, WmtsClientService, WpsClient, isBbox, isCswOffering, isGMLCOVOffering, isGMLJP2Offering, isGeoJsonOffering, isGeoTIFFOffering, isGmlOffering, isKmlOffering, isWfsOffering, isWmsOffering, isWmtsOffering, isWpsOffering, isWpsState, isXyzOffering, shardsExpand }; -//# sourceMappingURL=ukis-services-ogc.js.map diff --git a/@ukis/services-ogc/fesm5/ukis-services-ogc.js.map b/@ukis/services-ogc/fesm5/ukis-services-ogc.js.map deleted file mode 100644 index 763be983d..000000000 --- a/@ukis/services-ogc/fesm5/ukis-services-ogc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ukis-services-ogc.js","sources":["ng://@ukis/services-ogc/lib/wmts/wmtsclient.service.ts","ng://@ukis/services-ogc/lib/owc/owc-json.service.ts","ng://@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.ts","ng://@ukis/services-ogc/lib/wps/wps200/helpers.ts","ng://@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.ts","ng://@ukis/services-ogc/lib/wps/utils/polling.ts","ng://@ukis/services-ogc/lib/wps/cache.ts","ng://@ukis/services-ogc/lib/wps/wpsclient.ts","ng://@ukis/services-ogc/lib/services-ogc.module.ts","ng://@ukis/services-ogc/lib/owc/types/owc-json.ts","ng://@ukis/services-ogc/lib/owc/types/eoc-owc-json.ts","ng://@ukis/services-ogc/lib/wps/wps_datatypes.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { map } from 'rxjs/operators';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0';\r\nconst XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0';\r\nconst OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as SMIL_2_0_Factory from 'ogc-schemas/lib/SMIL_2_0';\r\nconst SMIL_2_0 = SMIL_2_0_Factory.SMIL_2_0;\r\nimport * as SMIL_2_0_Language_Factory from 'ogc-schemas/lib/SMIL_2_0_Language';\r\nconst SMIL_2_0_Language = SMIL_2_0_Language_Factory.SMIL_2_0_Language;\r\nimport * as GML_3_1_1_Factory from 'ogc-schemas/lib/GML_3_1_1';\r\nconst GML_3_1_1 = GML_3_1_1_Factory.GML_3_1_1;\r\nimport * as WMTS_1_0_Factory from 'ogc-schemas/lib/WMTS_1_0';\r\nconst WMTS_1_0 = WMTS_1_0_Factory.WMTS_1_0;\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class WmtsClientService {\r\n\r\n private xmlmarshaller;\r\n private xmlunmarshaller;\r\n\r\n constructor(private http: HttpClient) {\r\n const context = new Jsonix.Context([SMIL_2_0, SMIL_2_0_Language, GML_3_1_1, XLink_1_0, OWS_1_1_0, WMTS_1_0]);\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n public getCapabilities (url: string, version = '1.1.0'): Observable {\r\n // example: https://tiles.geoservice.dlr.de/service/wmts?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=1.1.0\r\n const getCapabilitiesUrl = `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${version}`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n });\r\n return this.http.get(getCapabilitiesUrl, { headers, responseType: 'text' }).pipe(\r\n map(response => {\r\n return this.xmlunmarshaller.unmarshalString(response);\r\n })\r\n );\r\n }\r\n\r\n}","\r\nimport { Injectable } from '@angular/core';\r\nimport {\r\n IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering\r\n} from './types/owc-json';\r\nimport {\r\n IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering, IEocOwsWmtsOffering,\r\n IEocWmsOffering, IEocOwsResourceDimension, IEocOwsWmtsMatrixSet\r\n} from './types/eoc-owc-json';\r\nimport {\r\n ILayerGroupOptions, ILayerOptions, IRasterLayerOptions, VectorLayer, RasterLayer, IVectorLayerOptions,\r\n Layer, TLayertype, WmsLayertype, WmtsLayertype, WfsLayertype, GeojsonLayertype, CustomLayer, CustomLayertype, XyzLayertype,\r\n TRasterLayertype, isRasterLayertype, isVectorLayertype, TVectorLayertype, ILayerDimensions,\r\n ILayerIntervalAndPeriod,\r\n IWmtsParams,\r\n WmtsLayer,\r\n IWmtsOptions,\r\n WmsLayer,\r\n IWmsParams,\r\n IWmsOptions,\r\n IListMatrixSet\r\n} from '@ukis/services-layers';\r\nimport { TGeoExtent } from '@ukis/services-map-state';\r\nimport { WmtsClientService } from '../wmts/wmtsclient.service';\r\nimport { of, Observable, forkJoin } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function isWmsOffering(str: string): str is WMS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms'\r\n || str === 'http://schemas.opengis.net/wms/1.1.1'\r\n || str === 'http://schemas.opengis.net/wms/1.1.0';\r\n}\r\nexport function isWfsOffering(str: string): str is WFS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\n}\r\nexport function isWpsOffering(str: string): str is WCS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\n}\r\nexport function isCswOffering(str: string): str is CSW_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\n}\r\nexport function isWmtsOffering(str: string): str is WMTS_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'\r\n || str === 'http://schemas.opengis.net/wmts/1.0.0'\r\n || str === 'http://schemas.opengis.net/wmts/1.1.0';\r\n}\r\nexport function isGmlOffering(str: string): str is GML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\n}\r\nexport function isKmlOffering(str: string): str is KML_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\n}\r\nexport function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\n}\r\nexport function isGMLJP2Offering(str: string): str is GMLJP2_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\n}\r\nexport function isGMLCOVOffering(str: string): str is GMLCOV_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n}\r\nexport function isXyzOffering(str: string): str is Xyz_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n}\r\nexport function isGeoJsonOffering(str: string): str is GeoJson_Offering {\r\n return str === 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n}\r\nexport function shardsExpand(v: string) {\r\n if (!v) { return; }\r\n let o = []\r\n for (let i in v.split(',')) {\r\n var j = v.split(',')[i].split(\"-\")\r\n if (j.length == 1) {\r\n o.push(v.split(',')[i])\r\n } else if (j.length == 2) {\r\n let start = j[0].charCodeAt(0)\r\n let end = j[1].charCodeAt(0)\r\n if (start <= end) {\r\n for (let k = start; k <= end; k++) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n } else {\r\n for (let k = start; k >= end; k--) {\r\n o.push(String.fromCharCode(k).toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n return o\r\n}\r\n/**\r\n * OWS Context Service\r\n * OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html\r\n *\r\n * This service allows you to read and write OWC-data.\r\n * We have added some custom fields to the OWC standard.\r\n * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible)\r\n * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible)\r\n *\r\n */\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OwcJsonService {\r\n\r\n constructor(private wmtsClient: WmtsClientService) {\r\n //http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truegeojson-encoding-2\r\n }\r\n\r\n\r\n checkContext(context: IOwsContext) {\r\n let isContext_1_0;\r\n if (!Array.isArray(context.properties.links)) {\r\n isContext_1_0 = context.properties.links.profiles.find(item => item === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n } else {\r\n isContext_1_0 = context.properties.links.find(item => item.href === 'http://www.opengis.net/spec/owc-geojson/1.0/req/core');\r\n }\r\n\r\n if (!isContext_1_0) {\r\n console.error('this is not a valid OWS Context v1.0!');\r\n\r\n }\r\n return isContext_1_0;\r\n }\r\n\r\n getContextTitle(context: IOwsContext) {\r\n return context.properties.title;\r\n }\r\n\r\n getContextPublisher(context: IOwsContext) {\r\n return (context.properties.publisher) ? context.properties.publisher : null;\r\n }\r\n\r\n getContextExtent(context: IOwsContext) {\r\n return (context.bbox) ? context.bbox : null; // or [-180, -90, 180, 90];\r\n }\r\n\r\n\r\n getResources(context: IOwsContext) {\r\n return context.features;\r\n }\r\n\r\n /** Resource --------------------------------------------------- */\r\n getResourceTitle(resource: IOwsResource) {\r\n return resource.properties.title;\r\n }\r\n\r\n getResourceUpdated(resource: IOwsResource) {\r\n return resource.properties.updated;\r\n }\r\n\r\n getResourceDate(resource: IOwsResource) {\r\n return (resource.properties.date) ? resource.properties.date : null;\r\n }\r\n\r\n getResourceOfferings(resource: IOwsResource) {\r\n return (resource.properties.offerings) ? resource.properties.offerings : null;\r\n }\r\n\r\n /**\r\n * retrieve layer status active / inactive based on IOwsResource\r\n * @param resource: IOwsResource\r\n */\r\n isActive(resource: IOwsResource) {\r\n let active = true;\r\n if (resource.properties.hasOwnProperty('active')) {\r\n active = resource.properties.active;\r\n }\r\n return active;\r\n }\r\n\r\n getResourceOpacity(resource: IOwsResource): number {\r\n let opacity = 1;\r\n if (resource.properties.hasOwnProperty('opacity')) {\r\n opacity = resource.properties.opacity;\r\n }\r\n return opacity;\r\n }\r\n\r\n getResourceAttribution(resource: IOwsResource): string {\r\n let attribution = '';\r\n if (resource.properties.hasOwnProperty('attribution')) {\r\n attribution = resource.properties.attribution;\r\n }\r\n return attribution;\r\n }\r\n\r\n getResourceShards(resource: IOwsResource): string {\r\n if (resource.properties.hasOwnProperty('shards')) {\r\n return resource.properties.shards;\r\n }\r\n }\r\n\r\n convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string {\r\n /**\r\n Convert from\r\n */\r\n let arr = owctime.split('/');\r\n let t = (arr.length == 3) ? arr[0] + '/' + arr[1] : owctime;\r\n let p = (arr.length == 3) ? arr[2] : null;\r\n if (p) {\r\n return { \"interval\": t, \"periodicity\": p };\r\n }\r\n else {\r\n return t\r\n }\r\n }\r\n\r\n getResourceDimensions(resource: IOwsResource): ILayerDimensions {\r\n if (!resource.properties.hasOwnProperty('dimensions')) {\r\n return undefined;\r\n }\r\n let dims = {}\r\n\r\n let dimensions = {}\r\n if (Array.isArray(resource.properties.dimensions)) {\r\n for (let d of resource.properties.dimensions) {\r\n dimensions[d.name] = d\r\n }\r\n } else {\r\n dimensions = resource.properties.dimensions\r\n }\r\n for (let name in dimensions) {\r\n let dim = {}\r\n console.log(name)\r\n if (name === \"time\" || dimensions[name].units == \"ISO8601\") {\r\n let value = dimensions[name].value\r\n let values = (value) ? value.split(',').map((v: string) => this.convertOwcTimeToIsoTimeAndPeriodicity(v)) : null\r\n dim = {\r\n \"values\": ((!values) || values.length > 1) ? values : values[0],\r\n \"units\": dimensions[name].units,\r\n \"display\": {\r\n \"format\": \"YYYMMDD\",\r\n \"period\": dimensions[name].display,\r\n \"default\": \"end\"\r\n }\r\n }\r\n }\r\n else if (name === \"elevation\") {\r\n dim = dimensions[name];\r\n }\r\n else {\r\n dim = dimensions[name];\r\n }\r\n dims[name] = dim;\r\n }\r\n return dims;\r\n }\r\n\r\n /** Offering --------------------------------------------------- */\r\n getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype {\r\n if (isWmsOffering(offering.code)) {\r\n return WmsLayertype;\r\n } else if (isWmtsOffering(offering.code)) {\r\n return WmtsLayertype;\r\n } else if (isWfsOffering(offering.code)) {\r\n return WfsLayertype;\r\n } else if (isGeoJsonOffering(offering.code)) {\r\n return GeojsonLayertype;\r\n } else if (isXyzOffering(offering.code)) {\r\n return XyzLayertype;\r\n } else {\r\n return offering.code; // an offering can also be any other string.\r\n }\r\n }\r\n\r\n checkIfServiceOffering(offering: IOwsOffering): boolean {\r\n return (!offering.contents && offering.operations) ? true : false;\r\n }\r\n\r\n checkIfDataOffering(offering: IOwsOffering): boolean {\r\n return (offering.contents && !offering.operations) ? true : false;\r\n }\r\n\r\n getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[] {\r\n if (this.checkIfServiceOffering(offering)) {\r\n return offering.operations;\r\n } else if (this.checkIfDataOffering(offering)) {\r\n return offering.contents;\r\n }\r\n }\r\n\r\n /**\r\n * Helper function to extract legendURL from project specific ows Context\r\n * @param offering layer offering\r\n */\r\n getLegendUrl(offering: IOwsOffering) {\r\n let legendUrl = '';\r\n\r\n if (offering.hasOwnProperty('styles')) {\r\n let defaultStyle = offering.styles.filter(style => style.default);\r\n if (defaultStyle.length > 0) {\r\n return defaultStyle[0].legendURL;\r\n }\r\n } else if (offering.hasOwnProperty('legendUrl')) {\r\n legendUrl = offering.legendUrl;\r\n }\r\n return legendUrl;\r\n }\r\n\r\n /**\r\n * retrieve iconUrl based on IOwsOffering\r\n * @param offering\r\n */\r\n getIconUrl(offering: IOwsOffering) {\r\n let iconUrl = '';\r\n if (offering.hasOwnProperty('iconUrl')) {\r\n iconUrl = offering.iconUrl;\r\n }\r\n return iconUrl;\r\n }\r\n\r\n /**\r\n * layer priority: first wms, then wmts, then wfs, then others.\r\n */\r\n public getLayers(owc: IOwsContext, targetProjection: string): Observable {\r\n const resources = owc.features;\r\n const layers$: Observable[] = [];\r\n\r\n for (const resource of resources) {\r\n const offerings = resource.properties.offerings;\r\n if (offerings.length > 0) {\r\n const offering = offerings.find(o => isWmsOffering(o.code))\r\n || offerings.find(o => isWmtsOffering(o.code))\r\n || offerings.find(o => isWfsOffering(o.code))\r\n || offerings[0];\r\n layers$.push(this.createLayerFromOffering(offering, resource, owc, targetProjection));\r\n }\r\n }\r\n\r\n return forkJoin(layers$);\r\n }\r\n\r\n createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n if (isRasterLayertype(layerType)) {\r\n return this.createRasterLayerFromOffering(offering, resource, context, targetProjection);\r\n } else if (isVectorLayertype(layerType)) {\r\n return this.createVectorLayerFromOffering(offering, resource, context);\r\n } else {\r\n console.error(`This type of service (${layerType}) has not been implemented yet.`);\r\n }\r\n }\r\n\r\n createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isVectorLayertype(layerType)) {\r\n console.error(`This type of layer '${layerType}' / offering '${offering.code}' cannot be converted into a Vectorlayer`);\r\n return null;\r\n }\r\n\r\n const iconUrl = this.getIconUrl(offering);\r\n\r\n let layerUrl, params;\r\n // if we have a operations-offering (vs. a data-offering):\r\n if (offering.operations) layerUrl = this.getUrlFromUri(offering.operations[0].href);\r\n if (offering.operations) params = this.getJsonFromUri(offering.operations[0].href);\r\n\r\n let data;\r\n // if we have a data-offering: \r\n if (offering.contents) {\r\n data = offering.contents[0].content;\r\n }\r\n\r\n let legendUrl = this.getLegendUrl(offering);\r\n\r\n let layerOptions: IVectorLayerOptions = {\r\n id: resource.id as string,\r\n name: this.getResourceTitle(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n type: layerType,\r\n removable: true,\r\n attribution: this.getResourceAttribution(resource),\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n url: layerUrl ? layerUrl : null,\r\n legendImg: legendUrl ? legendUrl : null,\r\n data: data\r\n };\r\n\r\n\r\n const layer = new VectorLayer(layerOptions);\r\n\r\n if (resource.bbox) {\r\n layer.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layer.bbox = context.bbox;\r\n }\r\n\r\n return of(layer);\r\n }\r\n\r\n createRasterLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const layerType = this.getLayertypeFromOfferingCode(offering);\r\n\r\n if (!isRasterLayertype(layerType)) {\r\n console.error(`This type of offering '${offering.code}' cannot be converted into a rasterlayer.`);\r\n return null;\r\n }\r\n\r\n let rasterLayer$: Observable;\r\n switch (layerType) {\r\n case WmsLayertype:\r\n rasterLayer$ = this.createWmsLayerFromOffering(offering, resource, context);\r\n break;\r\n case WmtsLayertype:\r\n rasterLayer$ = this.createWmtsLayerFromOffering(offering, resource, context, targetProjection);\r\n break;\r\n case XyzLayertype:\r\n // @TODO\r\n break;\r\n case CustomLayertype:\r\n // custom layers are meant to be userdefined and not easily encoded in a OWC.\r\n break;\r\n }\r\n\r\n return rasterLayer$;\r\n }\r\n\r\n private createWmtsLayerFromOffering(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n return this.getWmtsOptions(offering, resource, context, targetProjection).pipe(map((options: IWmtsOptions) => {\r\n const layer = new WmtsLayer(options);\r\n return layer;\r\n }));\r\n }\r\n\r\n private createWmsLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): Observable {\r\n const options: IWmsOptions = this.getWmsOptions(offering, resource, context);\r\n const layer = new WmsLayer(options);\r\n return of(layer);\r\n }\r\n\r\n private getWmtsOptions(\r\n offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n\r\n const layer = this.getLayerForWMTS(offering, resource);\r\n\r\n let style: string;\r\n if (offering.styles) {\r\n const styleInfo = offering.styles.find(s => s.default);\r\n if (styleInfo) {\r\n style = styleInfo.name;\r\n }\r\n }\r\n\r\n return this.getMatrixSetForWMTS(offering, resource, targetProjection).pipe(map(((matrixSet: IEocOwsWmtsMatrixSet) => {\r\n const matrixSetOptions: IListMatrixSet = {\r\n matrixSet: matrixSet.matrixSet,\r\n matrixIds: matrixSet.matrixIds,\r\n resolutions: matrixSet.resolutions\r\n };\r\n const wmtsOptions: IWmtsOptions = {\r\n ...rasterOptions,\r\n type: 'wmts',\r\n params: {\r\n layer: layer,\r\n matrixSetOptions: matrixSetOptions,\r\n projection: targetProjection,\r\n style: style,\r\n format: 'image/png'\r\n }\r\n };\r\n return wmtsOptions;\r\n })));\r\n }\r\n\r\n private getLayerForWMTS(offering: IOwsOffering, resource: IOwsResource): string {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetTile');\r\n if (urlParams['LAYER']) {\r\n return urlParams['LAYER'];\r\n } else {\r\n console.error(`There is no layer-parameter in the offering ${offering.code} for resource ${resource.id}.\r\n Cannot infer layer.`, offering);\r\n }\r\n }\r\n\r\n private parseOperationUrl(offering: IOwsOffering, opCode: string): [string, object] {\r\n if (offering.operations) {\r\n const operation = offering.operations.find(op => op.code === opCode);\r\n if (operation) {\r\n const url = this.getUrlFromUri(operation.href);\r\n const urlParams = this.getJsonFromUri(operation.href);\r\n return [url, urlParams];\r\n } else {\r\n console.error(`There is no ${opCode}-operation in the offering ${offering.code}.`, offering);\r\n }\r\n } else {\r\n console.error(`The offering ${offering.code} has no operations.`, offering);\r\n }\r\n }\r\n\r\n private getMatrixSetForWMTS(offering: IOwsOffering, resource: IOwsResource, targetProjection: string): Observable {\r\n if (offering.matrixSets) {\r\n const matrixSet = offering.matrixSets.find(m => m.srs === targetProjection);\r\n return of(matrixSet);\r\n } else {\r\n const [url, urlParams] = this.parseOperationUrl(offering, 'GetCapabilities');\r\n return this.wmtsClient.getCapabilities(url).pipe(\r\n map((capabilities: object) => {\r\n const matrixSets = capabilities['value']['contents']['tileMatrixSet'];\r\n const matrixSet = matrixSets.find(ms => ms['identifier']['value'] === targetProjection);\r\n const owsMatrixSet: IEocOwsWmtsMatrixSet = {\r\n srs: targetProjection,\r\n matrixSet: matrixSet['identifier']['value'],\r\n matrixIds: matrixSet['tileMatrix'].map(tm => tm['identifier']['value']),\r\n resolutions: matrixSet['tileMatrix'].map(tm => tm['scaleDenominator']),\r\n origin: {\r\n x: matrixSet['tileMatrix'][0]['topLeftCorner'][1],\r\n y: matrixSet['tileMatrix'][0]['topLeftCorner'][0]\r\n },\r\n tilesize: matrixSet['tileMatrix'][0]['tileHeight']\r\n };\r\n return owsMatrixSet;\r\n })\r\n );\r\n }\r\n }\r\n\r\n private getWmsOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IWmsOptions {\r\n const rasterOptions: IRasterLayerOptions = this.getRasterLayerOptions(offering, resource, context);\r\n if (rasterOptions.type === WmsLayertype) {\r\n\r\n const urlParams = this.getJsonFromUri(offering.operations[0].href);\r\n let defaultStyle;\r\n if (offering.styles) {\r\n defaultStyle = offering.styles.find(s => s.default).name;\r\n }\r\n\r\n const params: IWmsParams = {\r\n LAYERS: urlParams['LAYERS'],\r\n FORMAT: urlParams['FORMAT'],\r\n TIME: urlParams['TIME'],\r\n VERSION: urlParams['VERSION'],\r\n TILED: urlParams['TILED'],\r\n TRANSPARENT: true,\r\n STYLES: defaultStyle\r\n };\r\n\r\n const wmsOptions: IWmsOptions = {\r\n ...rasterOptions,\r\n type: 'wms',\r\n params: params\r\n };\r\n return wmsOptions;\r\n } else {\r\n console.error(`resource ${resource.id} cannot be converted into a WMS-Layer`, offering);\r\n }\r\n }\r\n\r\n private getRasterLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): IRasterLayerOptions {\r\n const layerOptions: ILayerOptions = this.getLayerOptions(offering, resource, context);\r\n if (isRasterLayertype(layerOptions.type)) {\r\n const rasterLayerOptions: IRasterLayerOptions = {\r\n ...layerOptions,\r\n type: layerOptions.type as TRasterLayertype,\r\n url: this.getUrlFromUri(offering.operations[0].href),\r\n subdomains: shardsExpand(this.getResourceShards(resource))\r\n };\r\n return rasterLayerOptions;\r\n } else {\r\n console.error(`The layer ${layerOptions.id} is not a rasterlayer`, layerOptions);\r\n }\r\n }\r\n\r\n private getLayerOptions(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext): ILayerOptions {\r\n const layerOptions: ILayerOptions = {\r\n id: resource.id as string,\r\n type: this.getLayertypeFromOfferingCode(offering),\r\n name: this.getResourceTitle(resource),\r\n removable: true,\r\n continuousWorld: false,\r\n opacity: this.getResourceOpacity(resource),\r\n displayName: this.getDisplayName(offering, resource),\r\n visible: this.isActive(resource),\r\n attribution: this.getResourceAttribution(resource),\r\n dimensions: this.getResourceDimensions(resource),\r\n legendImg: this.getLegendUrl(offering),\r\n styles: offering.styles\r\n };\r\n\r\n if (resource.bbox) {\r\n layerOptions.bbox = resource.bbox;\r\n } else if (context && context.bbox) {\r\n layerOptions.bbox = context.bbox;\r\n }\r\n\r\n return layerOptions;\r\n }\r\n\r\n /** Misc --------------------------------------------------- */\r\n\r\n private getUrlFromUri(uri: string) {\r\n return uri.substring(0, uri.indexOf('?'));\r\n }\r\n\r\n /**\r\n * helper to pack query-parameters of a uri into a JSON\r\n * @param uri any uri with query-parameters\r\n */\r\n private getJsonFromUri(uri: string): object {\r\n const query = uri.substr(uri.lastIndexOf('?') + 1);\r\n const result = {};\r\n query.split('&').forEach(function (part) {\r\n const item = part.split('=');\r\n result[item[0].toUpperCase()] = decodeURIComponent(item[1]);\r\n });\r\n return result;\r\n }\r\n\r\n\r\n /**\r\n * retrieve display name of layer, based on IOwsResource and IOwsOffering\r\n * @param offering\r\n * @param resource\r\n */\r\n private getDisplayName(offering: IOwsOffering, resource: IOwsResource) {\r\n let displayName = '';\r\n if (offering.hasOwnProperty('title')) {\r\n if (offering.title) {\r\n displayName = offering.title;\r\n } else {\r\n displayName = this.getResourceTitle(resource);\r\n }\r\n }\r\n return displayName;\r\n }\r\n\r\n\r\n /**------------ DATA TO FILE -----------------------------------------*/\r\n\r\n\r\n /**\r\n * @TODO:\r\n * - properties\r\n */\r\n generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?): IEocOwsContext {\r\n\r\n if (!properties) {\r\n properties = {\r\n lang: '',\r\n links: [],\r\n title: '',\r\n updated: ''\r\n };\r\n }\r\n\r\n let owc: IEocOwsContext = {\r\n 'id': id,\r\n 'type': 'FeatureCollection',\r\n 'properties': properties,\r\n 'features': []\r\n };\r\n\r\n if (extent) {\r\n owc['bbox'] = extent;\r\n }\r\n\r\n for (let layer of layers) {\r\n let resource: IEocOwsResource = this.generateResourceFromLayer(layer);\r\n // TODO check for layer types\r\n owc.features.push(resource);\r\n }\r\n\r\n return owc;\r\n }\r\n\r\n generateResourceFromLayer(layer: Layer): IEocOwsResource {\r\n let resource: IEocOwsResource = {\r\n 'id': layer.id,\r\n 'properties': {\r\n title: layer.name,\r\n updated: null,\r\n offerings: [this.generateOfferingFromLayer(layer)],\r\n opacity: layer.opacity,\r\n attribution: layer.attribution,\r\n },\r\n 'type': 'Feature',\r\n 'geometry': null\r\n }\r\n return resource;\r\n }\r\n\r\n generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering {\r\n let offering: IEocOwsOffering = {\r\n 'code': this.getOfferingCodeFromLayer(layer),\r\n 'title': layer.name\r\n };\r\n\r\n if (layer.type == GeojsonLayertype) {\r\n offering.contents = this.getContentsFromLayer(layer as VectorLayer);\r\n } else {\r\n offering.operations = this.getOperationsFromLayer(layer);\r\n }\r\n\r\n if (legendUrl) offering.legendUrl = legendUrl;\r\n if (iconUrl) offering.iconUrl = iconUrl;\r\n\r\n return offering;\r\n }\r\n\r\n getOfferingCodeFromLayer(layer: Layer): string {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms';\r\n case WmtsLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\n case GeojsonLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\n case XyzLayertype:\r\n return 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n default:\r\n console.error(`This type of layer (${layer.type}) has not been implemented yet.`);\r\n return null;\r\n }\r\n }\r\n\r\n getContentsFromLayer(layer: VectorLayer): IOwsContent[] {\r\n let contents = [];\r\n switch (layer.type) {\r\n case GeojsonLayertype:\r\n let content = {\r\n type: 'FeatureCollection',\r\n content: JSON.stringify(layer.data)\r\n };\r\n contents.push(content);\r\n break;\r\n default:\r\n console.error(`Cannot get contents for this type of vectorlayer: (${layer.type})`);\r\n }\r\n return contents;\r\n }\r\n\r\n getOperationsFromLayer(layer: Layer): IOwsOperation[] {\r\n if (layer instanceof RasterLayer) {\r\n switch (layer.type) {\r\n case WmsLayertype:\r\n return this.getWmsOperationsFromLayer(layer);\r\n case WmtsLayertype:\r\n return this.getWmtsOperationsFromLayer(layer);\r\n case XyzLayertype:\r\n return this.getXyzOperationsFromLayer(layer);\r\n default:\r\n console.error(`Cannot get operations for this type of layer: (${layer.type})`);\r\n return [];\r\n }\r\n }\r\n\r\n else if (layer instanceof VectorLayer) {\r\n switch (layer.type) {\r\n // case 'wfs': <--- this type of layer has not been implemented yet in datatypes-layers/Layers.ts \r\n // return this.getWfsOperationsFromLayer(layer);\r\n default:\r\n console.error(`This type of service (${layer.type}) has not been implemented yet.`);\r\n return [];\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n let restCall: IOwsOperation = {\r\n 'code': 'REST',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${layer.url}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n restCall\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n // @TODO: what operations are defined on TMS? https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification\r\n return [];\r\n }\r\n\r\n\r\n getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let layerName = layer.name;\r\n let version = layer.options.version ? layer.options.version : '1.1.0';\r\n\r\n\r\n let GetFeature: IOwsOperation = {\r\n 'code': 'GetFeature',\r\n 'method': 'GET',\r\n 'type': 'application/json',\r\n 'href': `${url}?service=WFS&version=${version}&request=GetFeature`\r\n };\r\n\r\n // let DescribeFeatureType: IOwsOperation = null;\r\n // let GetCapabilities: IOwsOperation = null;\r\n // let GetPropertyValue: IOwsOperation = null;\r\n // let GetFeatureWithLock: IOwsOperation = null;\r\n // let LockFeature: IOwsOperation = null;\r\n // let Transaction: IOwsOperation = null;\r\n // let CreateStoredQuery: IOwsOperation = null;\r\n // let DropStoredQuery: IOwsOperation = null;\r\n // let ListStoredQueries: IOwsOperation = null;\r\n // let DescribeStoredQueries: IOwsOperation = null;\r\n\r\n let operations = [\r\n GetFeature,\r\n // GetCapabilities,\r\n // DescribeFeatureType,\r\n // GetPropertyValue,\r\n // GetFeatureWithLock,\r\n // LockFeature,\r\n // Transaction,\r\n // CreateStoredQuery,\r\n // DropStoredQuery,\r\n // ListStoredQueries,\r\n // DescribeStoredQueries\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n\r\n getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmsVersion = layer.params.VERSION;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getMap: IOwsOperation = {\r\n 'code': 'GetMap',\r\n 'method': 'GET',\r\n 'type': format,\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetMap&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}&TILED=true`\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'method': 'GET',\r\n 'type': 'application/xml',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetCapabilities`\r\n }\r\n\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'method': 'GET',\r\n 'type': 'text/html',\r\n 'href': `${url}?service=WMS&version=${wmsVersion}&request=GetFeatureInfo&TRANSPARENT=TRUE&LAYERS=${layerId}&FORMAT=${format}`\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getMap,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n\r\n getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[] {\r\n\r\n let url = layer.url;\r\n let wmtsVersion = layer.params.version;\r\n let layerName = layer.name;\r\n let layerId = layer.id;\r\n let format = 'image/vnd.jpeg-png';\r\n if (layer.params && layer.params.FORMAT) format = layer.params.FORMAT;\r\n\r\n let getTile: IOwsOperation = {\r\n 'code': 'GetTile',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetTile&FORMAT=${format}&LAYER=${layerId}&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': format\r\n };\r\n\r\n let getCapabilities: IOwsOperation = {\r\n 'code': 'GetCapabilities',\r\n 'href': `${url}?SERVICE=WMTS&REQUEST=GetCapabilities&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'application/xml'\r\n }\r\n\r\n // Note: we deliberately use the WMS protocol here instead of WMTS.\r\n // Reason: WMTS delivers RGB-values, wheras WMS delivers the actual value that was used to create a tile.\r\n let getFeatureInfo: IOwsOperation = {\r\n 'code': 'GetFeatureInfo',\r\n 'href': `${url}?SERVICE=WMS&REQUEST=GetFeatureInfo&VERSION=${wmtsVersion}`,\r\n 'method': 'GET',\r\n 'type': 'text/html'\r\n }\r\n\r\n let operations: IOwsOperation[] = [\r\n getTile,\r\n getCapabilities,\r\n getFeatureInfo\r\n ];\r\n\r\n return operations;\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsBboxValue, WpsData, WpsDataDescription, WpsState, WpsDataFormat } from '../wps_datatypes';\r\nimport {\r\n WPSCapabilitiesType, IWpsExecuteProcessBody, Execute, DataInputsType,\r\n InputType, ResponseFormType, DataType, IWpsExecuteResponse, DocumentOutputDefinitionType,\r\n ResponseDocumentType, InputReferenceType, LiteralDataType, ExecuteResponse\r\n} from './wps_1.0.0';\r\n\r\n\r\n\r\nexport class WpsMarshaller100 implements WpsMarshaller {\r\n\r\n constructor() { }\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=1.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=1.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.processOfferings.process.forEach(process => {\r\n out.push({\r\n id: process.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n\r\n const out: WpsResult[] = [];\r\n\r\n if (responseJson.value.status.processFailed) { // Failure?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'error'\r\n },\r\n value: responseJson.value.statusLocation\r\n });\r\n } else if (responseJson.value.processOutputs) { // synchronous request?\r\n for (const output of responseJson.value.processOutputs.output) {\r\n const isReference = output.reference ? true : false;\r\n\r\n let datatype: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n let data;\r\n let format: WpsDataFormat | undefined;\r\n if (output.reference) {\r\n datatype = 'complex';\r\n data = output.reference.href || null;\r\n format = output.reference.mimeType as WpsDataFormat;\r\n } else {\r\n if (output.data && output.data.literalData) {\r\n datatype = 'literal';\r\n format = output.data.literalData.dataType as WpsDataFormat;\r\n } else if (output.data && output.data.complexData) {\r\n datatype = 'complex';\r\n format = output.data.complexData.mimeType as WpsDataFormat;\r\n } else {\r\n datatype = 'bbox';\r\n format = undefined;\r\n }\r\n // @ts-ignore\r\n data = this.unmarshalOutputData(output.data);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.identifier.value,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (responseJson.value.statusLocation) { // asynchronous request?\r\n out.push({\r\n description: {\r\n id: responseJson.value.process.identifier.value,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions)\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: DataType): any {\r\n if (data.complexData) {\r\n switch (data.complexData.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.complexData.content.map(cont => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.complexData.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.complexData.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal data of format ${data.complexData.mimeType}`);\r\n }\r\n } else if (data.literalData) {\r\n switch (data.literalData.dataType) {\r\n case 'string':\r\n default:\r\n return data.literalData.value;\r\n }\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n\r\n const response: ExecuteResponse = responseJson.value;\r\n \r\n const status = response.status.processSucceeded ? 'Succeeded' :\r\n response.status.processAccepted ? 'Accepted' :\r\n response.status.processStarted ? 'Running' :\r\n response.status.processFailed ? 'Failed' :\r\n 'Failed';\r\n \r\n const state: WpsState = {\r\n status: status,\r\n statusLocation: response.statusLocation,\r\n };\r\n\r\n if (response.processOutputs && response.processOutputs.output) {\r\n state.results = this.unmarshalSyncExecuteResponse(responseJson, serverUrl, processId, inputs, outputDescriptions);\r\n }\r\n\r\n return state;\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody {\r\n\r\n const wps1Inputs = this.marshalInputs(inputs);\r\n const wps1ResponseForm = this.marshalResponseForm(outputs, async);\r\n\r\n const bodyValue: Execute = {\r\n dataInputs: wps1Inputs,\r\n identifier: processId,\r\n responseForm: wps1ResponseForm,\r\n service: 'WPS',\r\n version: '1.0.0'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/1.0.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/1.0.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/1.0.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n\r\n }\r\n\r\n\r\n protected marshalResponseForm(outputs: WpsOutputDescription[], async = false): ResponseFormType {\r\n\r\n const outputDefinitions: DocumentOutputDefinitionType[] = [];\r\n for (const output of outputs) {\r\n let defType: DocumentOutputDefinitionType;\r\n switch (output.type) {\r\n case 'literal':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n case 'complex':\r\n defType = {\r\n identifier: { value: output.id },\r\n asReference: output.reference,\r\n mimeType: output.format\r\n };\r\n break;\r\n default:\r\n throw new Error(`This Wps-outputtype has not been implemented yet! ${output} `);\r\n }\r\n outputDefinitions.push(defType);\r\n }\r\n\r\n const responseDocument: ResponseDocumentType = {\r\n output: outputDefinitions,\r\n status: async ? true : false,\r\n storeExecuteResponse: async ? true : false\r\n };\r\n\r\n const form: ResponseFormType = {\r\n responseDocument\r\n };\r\n return form;\r\n }\r\n\r\n\r\n protected marshalInputs(inputArr: WpsInput[]): DataInputsType {\r\n const theInputs: InputType[] = [];\r\n for (const inp of inputArr) {\r\n if (inp.value === null || inp.value === undefined) {\r\n throw new Error(`Value for input ${inp.description.id} is not set`);\r\n }\r\n const marshalledInput = this.marshalInput(inp);\r\n theInputs.push(marshalledInput);\r\n }\r\n const inputs: DataInputsType = {\r\n input: theInputs\r\n };\r\n return inputs;\r\n }\r\n\r\n protected marshalInput(input: WpsInput): InputType {\r\n const id = input.description.id;\r\n const title = input.description.id;\r\n const abstract = '';\r\n\r\n const inputType: InputType = {\r\n identifier: { value: id },\r\n title: { value: title },\r\n _abstract: { value: abstract }\r\n };\r\n\r\n if (input.description.reference) {\r\n inputType.reference = this.marshalReferenceInput(input);\r\n } else {\r\n inputType.data = this.marshalDataInput(input);\r\n }\r\n\r\n return inputType;\r\n }\r\n\r\n protected marshalDataInput(input: WpsInput): DataType {\r\n let data: DataType;\r\n switch (input.description.type) {\r\n case 'literal':\r\n data = {\r\n literalData: { value: String(input.value) }\r\n };\r\n break;\r\n case 'bbox':\r\n const values: WpsBboxValue = input.value;\r\n data = {\r\n boundingBoxData: {\r\n lowerCorner: [values.lllat, values.lllon],\r\n upperCorner: [values.urlat, values.urlon]\r\n }\r\n };\r\n break;\r\n case 'complex':\r\n switch (input.description.format) {\r\n case 'text/xml':\r\n data = {\r\n complexData: {\r\n content: [input.value], // @TODO: we assume here that text/xml-data is already stringified\r\n mimeType: input.description.format\r\n }\r\n };\r\n break;\r\n default:\r\n data = {\r\n complexData: {\r\n content: [JSON.stringify(input.value)],\r\n mimeType: input.description.format\r\n }\r\n };\r\n }\r\n break;\r\n default:\r\n throw Error(`This input is of type ${input.description.type}. We can only marshal input of type literal, bbox or complex.`);\r\n }\r\n return data;\r\n }\r\n\r\n protected marshalReferenceInput(input: WpsInput): InputReferenceType {\r\n const ref: InputReferenceType = {\r\n href: input.value,\r\n method: 'GET',\r\n mimeType: input.description.format\r\n };\r\n return ref;\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n // WPS-1.0 does not send a body with a GetStatus request.\r\n return {};\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n /** this does only work in geoserver:\r\n return `${serverUrl}?service=WPS&version=1.0.0&request=Dismiss&executionId=${jobId}`; */\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n marshalDismissBody(processId: string) {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState {\r\n throw new Error('Wps 1.0 does not support Dismiss-operations.');\r\n }\r\n}\r\n","import { StatusInfo, DataOutputType, Result } from './wps_2.0';\r\n\r\n\r\nexport const isStatusInfo = (obj: object): obj is StatusInfo => {\r\n return obj.hasOwnProperty('jobID')\r\n && obj.hasOwnProperty('status');\r\n};\r\n\r\nexport const isDataOutputType = (obj: object): obj is DataOutputType => {\r\n return obj.hasOwnProperty('id') &&\r\n (obj.hasOwnProperty('data') || obj.hasOwnProperty('reference') || obj.hasOwnProperty('output'));\r\n};\r\n\r\nexport const isResult = (obj: object): obj is Result => {\r\n return (obj.hasOwnProperty('output') && typeof obj['output'] === 'object');\r\n};\r\n","import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes';\r\nimport { WPSCapabilitiesType, ExecuteRequestType, DataInputType, OutputDefinitionType, IWpsExecuteProcessBody, IWpsExecuteResponse, DataOutputType, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0';\r\nimport { isDataOutputType, isStatusInfo, isResult } from './helpers';\r\n\r\n\r\nexport class WpsMarshaller200 implements WpsMarshaller {\r\n\r\n constructor() {}\r\n\r\n getCapabilitiesUrl(baseurl: string): string {\r\n return `${baseurl}?service=WPS&request=GetCapabilities&version=2.0.0`;\r\n }\r\n\r\n executeUrl(baseurl: string, processId: string): string {\r\n return `${baseurl}?service=WPS&request=Execute&version=2.0.0&identifier=${processId}`;\r\n }\r\n\r\n unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[] {\r\n const out: WpsCapability[] = [];\r\n capabilities.contents.processSummary.forEach(summary => {\r\n out.push({\r\n id: summary.identifier.value\r\n });\r\n });\r\n return out;\r\n }\r\n\r\n unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string,\r\n inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[] {\r\n const out: WpsResult[] = [];\r\n\r\n if (isResult(responseJson.value)) {\r\n for (const output of responseJson.value.output) {\r\n const outputDescription = outputDescriptions.find(od => od.id === output.id);\r\n if (!outputDescription) {\r\n throw new Error(`Could not find an output-description for the parameter ${output.id}.`);\r\n }\r\n\r\n const isReference = outputDescription.reference;\r\n const datatype = outputDescription.type;\r\n const format = outputDescription.format;\r\n let data;\r\n if (output.reference) {\r\n data = output.reference.href || null;\r\n } else if (output.data) {\r\n data = this.unmarshalOutputData(output.data, outputDescription);\r\n } else {\r\n throw new Error(`Output has neither reference nor data field.`);\r\n }\r\n\r\n out.push({\r\n description: {\r\n id: output.id,\r\n format: format,\r\n reference: isReference,\r\n type: datatype\r\n },\r\n value: data,\r\n });\r\n }\r\n } else if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n\r\n out.push({\r\n description: {\r\n id: processId,\r\n reference: true,\r\n type: 'status'\r\n },\r\n value: state\r\n });\r\n }\r\n\r\n return out;\r\n }\r\n\r\n protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any {\r\n if (description.type === 'complex') {\r\n switch (data.mimeType) {\r\n case 'application/vnd.geo+json':\r\n case 'application/json':\r\n return data.content.map((cont: any) => JSON.parse(cont));\r\n case 'application/WMS':\r\n return data.content;\r\n case 'text/xml':\r\n return new XMLSerializer().serializeToString(data.content[0]); // @TODO: better: handle actual xml-data\r\n default:\r\n throw new Error(`Cannot unmarshal complex data of format ${data.mimeType}`);\r\n }\r\n } else if (description.type === 'literal') {\r\n return data.content;\r\n }\r\n\r\n throw new Error(`Not yet implemented: ${data}`);\r\n }\r\n\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n return this.unmarshalGetStateResponse(responseJson, url, processId, inputs, outputDescriptions);\r\n }\r\n\r\n unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string,\r\n inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState {\r\n if (isStatusInfo(responseJson.value)) {\r\n const state: WpsState = {\r\n status: responseJson.value.status,\r\n jobID: responseJson.value.jobID,\r\n percentCompleted: responseJson.value.percentCompleted\r\n };\r\n return state;\r\n } else {\r\n throw new Error(`Not a status-info: ${responseJson}`);\r\n }\r\n }\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean) {\r\n const inputsMarshalled = this.marshalInputs(inputs);\r\n const outputsMarshalled = this.marshalOutputs(outputs);\r\n\r\n const bodyValue: ExecuteRequestType = {\r\n TYPE_NAME: 'WPS_2_0.ExecuteRequestType',\r\n service: 'WPS',\r\n version: '2.0.0',\r\n identifier: { value: processId },\r\n input: inputsMarshalled,\r\n output: outputsMarshalled,\r\n mode: async ? 'async' : 'sync',\r\n response: 'document'\r\n };\r\n\r\n const body: IWpsExecuteProcessBody = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Execute',\r\n localPart: 'Execute',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Execute'\r\n },\r\n value: bodyValue\r\n };\r\n\r\n return body;\r\n }\r\n\r\n private marshalInputs(inputs: WpsData[]): DataInputType[] {\r\n return inputs.map(i => {\r\n if (i.description.reference) {\r\n return {\r\n id: i.description.id,\r\n reference: {\r\n href: i.value,\r\n mimeType: i.description.format,\r\n }\r\n };\r\n } else {\r\n return {\r\n id: i.description.id,\r\n data: {\r\n content: [JSON.stringify(i.value)],\r\n mimeType: i.description.format\r\n }\r\n };\r\n }\r\n });\r\n }\r\n\r\n private marshalOutputs(outputs: WpsDataDescription[]): OutputDefinitionType[] {\r\n return outputs.map(o => {\r\n return {\r\n id: o.id,\r\n mimeType: o.format,\r\n transmission: o.reference ? 'reference' : 'value' // @TODO: maybe just comment out this line?\r\n };\r\n });\r\n }\r\n\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string) {\r\n const request: IGetStatusRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetStatus',\r\n localPart: 'GetStatus',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetStatus'\r\n },\r\n value: {\r\n jobID: statusId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string) {\r\n const request: IGetResultRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}GetResult',\r\n localPart: 'GetResult',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:GetResult'\r\n },\r\n value: {\r\n service: 'WPS',\r\n version: '2.0.0',\r\n jobID: jobID\r\n }\r\n };\r\n return request;\r\n }\r\n\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string {\r\n return serverUrl;\r\n }\r\n\r\n marshalDismissBody(jobId: string) {\r\n const body: IDismissRequest = {\r\n name: {\r\n key: '{http://www.opengis.net/wps/2.0}Dismiss',\r\n localPart: 'Dismiss',\r\n namespaceURI: 'http://www.opengis.net/wps/2.0',\r\n prefix: 'wps',\r\n string: '{http://www.opengis.net/wps/2.0}wps:Dismiss'\r\n },\r\n value: {\r\n jobID: jobId,\r\n service: 'WPS',\r\n version: '2.0.0'\r\n }\r\n };\r\n return body;\r\n }\r\n\r\n unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState {\r\n const state: WpsState = {\r\n status: jsonResponse.value.status,\r\n jobID: jsonResponse.value.jobID\r\n };\r\n return state;\r\n }\r\n}\r\n","import { Observable, timer, of, forkJoin } from 'rxjs';\r\nimport { tap, map, mergeMap, retryWhen, delay } from 'rxjs/operators';\r\n\r\n\r\n\r\n\r\nexport function pollUntil(\r\n task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime: number = 1000): Observable {\r\n\r\n if (doWhile) {\r\n doWhile(null);\r\n }\r\n\r\n const tappedTask$: Observable = task$.pipe(\r\n tap((r: any) => {\r\n if (doWhile) {\r\n doWhile(r);\r\n }\r\n })\r\n );\r\n\r\n const requestTakesAtLeast$: Observable = forkJoin(tappedTask$, timer(minWaitTime)).pipe(\r\n map(r => r[0])\r\n );\r\n\r\n const polledRequest$: Observable = requestTakesAtLeast$.pipe(\r\n mergeMap((response: any) => {\r\n if (predicate(response)) {\r\n // console.log(`obtained correct answer ${response}`);\r\n return of(response);\r\n } else {\r\n // console.log(`obtained false answer ${response}. trying again...`);\r\n return polledRequest$;\r\n }\r\n })\r\n );\r\n\r\n return polledRequest$;\r\n}\r\n\r\n\r\nexport function delayedRetry(delayMs: number, maxRetries = 3) {\r\n let attempts = 1;\r\n\r\n return (src$: Observable) => {\r\n return src$.pipe(\r\n // If an error occurs ...\r\n retryWhen((error$: Observable) => {\r\n return error$.pipe(\r\n delay(delayMs), // <- in any case, first wait a little while ...\r\n mergeMap((error: any) => {\r\n if (error.status && error.status === 400) {\r\n // In case of a server error, repeating won't help.\r\n throw error;\r\n } else if (attempts <= maxRetries) {\r\n console.log('http-error. Retrying ...');\r\n attempts += 1;\r\n return of(error); // <- an observable causes request to be retried\r\n } else {\r\n console.log(`Persistent http-errors after ${attempts} attempts. Giving up.`);\r\n throw error; // an error causes request to be given up on.\r\n }\r\n })\r\n );\r\n })\r\n );\r\n };\r\n\r\n}\r\n","import { WpsData } from \"./wps_datatypes\";\r\nimport { Observable, of } from \"rxjs\";\r\n\r\n\r\nexport interface Cache {\r\n set(input: object, output: WpsData[]);\r\n get(input: object): Observable;\r\n}\r\n\r\nexport class FakeCache implements Cache {\r\n set(input: object, output: WpsData[]) {\r\n }\r\n\r\n get(input: object): Observable {\r\n return of(null);\r\n }\r\n}\r\n","import { WpsMarshaller, WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsData, WpsState, isWpsState, WpsDataDescription } from './wps_datatypes';\r\nimport { WpsMarshaller100 } from './wps100/wps_marshaller_1.0.0';\r\nimport { WpsMarshaller200 } from './wps200/wps_marshaller_2.0.0';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, switchMap, tap, share, mergeMap } from 'rxjs/operators';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport * as XLink_1_0_Factory from 'w3c-schemas/lib/XLink_1_0'; const XLink_1_0 = XLink_1_0_Factory.XLink_1_0;\r\nimport * as OWS_1_1_0_Factory from 'ogc-schemas/lib/OWS_1_1_0'; const OWS_1_1_0 = OWS_1_1_0_Factory.OWS_1_1_0;\r\nimport * as OWS_2_0_Factory from 'ogc-schemas/lib/OWS_2_0'; const OWS_2_0 = OWS_2_0_Factory.OWS_2_0;\r\nimport * as WPS_1_0_0_Factory from 'ogc-schemas/lib/WPS_1_0_0'; const WPS_1_0_0 = WPS_1_0_0_Factory.WPS_1_0_0;\r\nimport * as WPS_2_0_Factory from 'ogc-schemas/lib/WPS_2_0'; const WPS_2_0 = WPS_2_0_Factory.WPS_2_0;\r\nimport { pollUntil, delayedRetry } from './utils/polling';\r\nimport { Injectable, Inject } from '@angular/core';\r\nimport { Jsonix } from '@boundlessgeo/jsonix';\r\nimport { Cache, FakeCache } from './cache';\r\n\r\n\r\n\r\n/**\r\n * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0\r\n * There are two layers of marshalling:\r\n * - the Wps-marshaller marshals user-facing data to wps-specific types\r\n * - Jsonix marshals wps-specific data to xml.\r\n * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML ->\r\n * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data\r\n */\r\n@Injectable()\r\nexport class WpsClient {\r\n\r\n private version: WpsVerion;\r\n private xmlmarshaller: any;\r\n private xmlunmarshaller: any;\r\n private wpsmarshaller: WpsMarshaller;\r\n private cache: Cache = new FakeCache();\r\n\r\n constructor(\r\n @Inject('WpsVersion') version: WpsVerion = '1.0.0',\r\n private webclient: HttpClient,\r\n @Inject('WpsCache') cache?: Cache\r\n ) {\r\n this.version = version;\r\n if (cache) this.cache = cache;\r\n let context;\r\n if (this.version === '1.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller100();\r\n context = new Jsonix.Context([XLink_1_0, OWS_1_1_0, WPS_1_0_0]);\r\n } else if (this.version === '2.0.0') {\r\n this.wpsmarshaller = new WpsMarshaller200();\r\n context = new Jsonix.Context([XLink_1_0, OWS_2_0, WPS_2_0]);\r\n } else {\r\n throw new Error('You entered a WPS version other than 1.0.0 or 2.0.0.');\r\n }\r\n this.xmlunmarshaller = context.createUnmarshaller();\r\n this.xmlmarshaller = context.createMarshaller();\r\n }\r\n\r\n\r\n getCapabilities(url: string): Observable {\r\n const getCapabilitiesUrl = this.wpsmarshaller.getCapabilitiesUrl(url);\r\n return this.getRaw(getCapabilitiesUrl).pipe(\r\n map((response: any) => {\r\n const responseJson = this.xmlunmarshaller.unmarshalString(response);\r\n return this.wpsmarshaller.unmarshalCapabilities(responseJson.value);\r\n }) // @TODO: handle case when instead of WpsCapabilites an ExceptionReport is returned\r\n );\r\n }\r\n\r\n\r\n describeProcess(processId: string): Observable {\r\n throw new Error('Not implemented yet');\r\n }\r\n\r\n\r\n executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[],\r\n pollingRate: number = 1000, tapFunction?: (response: WpsState | null) => any): Observable {\r\n\r\n const executeRequest$: Observable = this.executeAsyncS(url, processId, inputs, outputs);\r\n\r\n const query$ = executeRequest$.pipe(\r\n\r\n // poll until suceeded\r\n mergeMap((currentState: WpsState) => {\r\n const nextState$: Observable = this.getNextState(currentState, url, processId, inputs, outputs);\r\n\r\n const poll$: Observable = pollUntil(\r\n nextState$,\r\n (response: WpsState) => {\r\n return response.status === 'Succeeded';\r\n },\r\n tapFunction,\r\n pollingRate\r\n );\r\n\r\n return poll$;\r\n }),\r\n\r\n // fetch results\r\n mergeMap((lastState: WpsState) => {\r\n return this.fetchResults(lastState, url, processId, inputs, outputs);\r\n }),\r\n\r\n // In case of errors:\r\n tap((response: WpsData[]) => {\r\n for (const result of response) {\r\n if (result.description.type === 'error') {\r\n console.log('server responded with 200, but body contained an error-result: ', result);\r\n throw new Error(result.value);\r\n }\r\n }\r\n })\r\n );\r\n\r\n return this.cachedQuery(url, processId, inputs, outputs, query$);\r\n }\r\n\r\n private cachedQuery(url: string, processId: string, inputs: WpsInput[],\r\n outputs: WpsOutputDescription[], query$: Observable): Observable {\r\n\r\n const cachedResponse$: Observable = this.cache.get({url, processId, inputs, outputs});\r\n return cachedResponse$.pipe(\r\n switchMap((results) => {\r\n if (results) {\r\n return of(results);\r\n } else {\r\n return query$.pipe(\r\n tap((response: WpsData[]) => {\r\n this.cache.set({url, processId, inputs, outputs}, response);\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n private getNextState(currentState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n let request$: Observable;\r\n if (this.version === '1.0.0') {\r\n\r\n if (!currentState.statusLocation) {\r\n throw Error('No status location');\r\n }\r\n request$ = this.getRaw(currentState.statusLocation);\r\n\r\n } else if (this.version === '2.0.0') {\r\n\r\n if (!currentState.jobID) {\r\n throw Error('No job-Id');\r\n }\r\n const execbody = this.wpsmarshaller.marshallGetStatusBody(serverUrl, processId, currentState.jobID);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n request$ = this.postRaw(serverUrl, xmlExecbody);\r\n\r\n } else {\r\n throw new Error(`'GetStatus' has not yet been implemented for this WPS-Version (${this.version}).`);\r\n }\r\n\r\n const request1$: Observable = request$.pipe(\r\n delayedRetry(2000, 2),\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] | WpsState =\r\n this.wpsmarshaller.unmarshalGetStateResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n\r\n return request1$;\r\n }\r\n\r\n private fetchResults(lastState: WpsState, serverUrl: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n if (lastState.results) { // WPS 1.0: results should already be in last state\r\n return of(lastState.results);\r\n } else { // WPS 2.0: get results with post request\r\n\r\n if (!lastState.jobID) {\r\n throw new Error(`You want me to get a result, but I can't find a jobId. I don't know what to do now!`);\r\n }\r\n\r\n const execBody = this.wpsmarshaller.marshallGetResultBody(serverUrl, processId, lastState.jobID);\r\n const xmlExecBody = this.xmlmarshaller.marshalString(execBody);\r\n\r\n return this.postRaw(serverUrl, xmlExecBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, serverUrl, processId, inputs, outputDescriptions);\r\n return output;\r\n }),\r\n );\r\n }\r\n }\r\n\r\n\r\n private executeAsyncS(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, true);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsState =\r\n this.wpsmarshaller.unmarshalAsyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n execute(url: string, processId: string, inputs: WpsInput[],\r\n outputDescriptions: WpsOutputDescription[]): Observable {\r\n\r\n const executeUrl = this.wpsmarshaller.executeUrl(url, processId);\r\n const execbody = this.wpsmarshaller.marshalExecBody(processId, inputs, outputDescriptions, false);\r\n const xmlExecbody = this.xmlmarshaller.marshalString(execbody);\r\n\r\n return this.postRaw(executeUrl, xmlExecbody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output: WpsData[] =\r\n this.wpsmarshaller.unmarshalSyncExecuteResponse(jsonResponse, url, processId, inputs, outputDescriptions);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n dismiss(serverUrl: string, processId: string, jobId: string): Observable {\r\n\r\n const dismissUrl = this.wpsmarshaller.dismissUrl(serverUrl, processId, jobId);\r\n const dismissBody = this.wpsmarshaller.marshalDismissBody(jobId);\r\n const xmlDismissBody = this.xmlmarshaller.marshalString(dismissBody);\r\n\r\n return this.postRaw(dismissUrl, xmlDismissBody).pipe(\r\n map((xmlResponse: string) => {\r\n const jsonResponse = this.xmlunmarshaller.unmarshalString(xmlResponse);\r\n const output = this.wpsmarshaller.unmarshalDismissResponse(jsonResponse, serverUrl, processId);\r\n return output;\r\n })\r\n );\r\n }\r\n\r\n postRaw(url: string, xmlBody: string): Observable {\r\n const headers = {\r\n 'Content-Type': 'text/xml',\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.post(url, xmlBody, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2),\r\n share() // turning hot: to make sure that multiple subscribers dont cause multiple requests\r\n );\r\n }\r\n\r\n getRaw(url: string): Observable {\r\n const headers = {\r\n 'Accept': 'text/xml, application/xml'\r\n };\r\n return this.webclient.get(url, { headers, responseType: 'text' }).pipe(\r\n delayedRetry(2000, 2)\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { OwcJsonService } from './owc/owc-json.service';\r\nimport { WmtsClientService } from './wmts/wmtsclient.service';\r\nimport { WpsClient } from './wps/wpsclient';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n providers: [OwcJsonService, WmtsClientService, WpsClient]\r\n})\r\nexport class ServicesOgcModule { }\r\n","/**\r\n * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0\r\n * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html\r\n * Definitions by: Mathias Boeck\r\n * TypeScript Version: 2.5.3\r\n *\r\n * depends on @types/geojson@^7946.0.2\r\n */\r\nimport * as GeoJSON from 'geojson';\r\n\r\n\r\n/**\r\n * The OWS Context describes Metadata, API, Time Range\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n * If no bounding box is specified, do not change the current view when the context document is loaded.\r\n */\r\nexport interface IOwsContext extends GeoJSON.FeatureCollection {\r\n /**\r\n * The id element defines a mandatory reference to the identification of the Context document.\r\n * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987]\r\n */\r\n id: string | number;\r\n properties: {\r\n links: { profiles: string[] } | IOwsLinks[];\r\n /** Language of Context document content */\r\n lang: LangString;\r\n /** Title for the Context document */\r\n title: string;\r\n /** Date of a creation or update of the Context document */\r\n updated: DateString;\r\n /** Description of the Context document purpose or content */\r\n subtitle?: string;\r\n /** This element is optional and indicates the authors array of the Context document */\r\n authors?: IOwsAuthor[];\r\n /** Identifier for the publisher of the Context document */\r\n publisher?: string;\r\n /** Tool/application used to create the Context document and its properties */\r\n creator?: IOwsCreator;\r\n /**\r\n * Properties of the display in use when the context document was created (for display based applications only).\r\n * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices \r\n */\r\n display?: IOwsCreatorDisplay[];\r\n /** Information about rights held in and over the Context document */\r\n rights?: string;\r\n /**\r\n * Date or range of dates relevant to the resource \r\n * time range which is expected to be of interest to the user.\r\n */\r\n date?: DateString;\r\n /** This array is an optional and expresses categories related to this Context document */\r\n categories?: IOwsCategorie[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n };\r\n /** Ordered List of Resources available on the Context document */\r\n features: IOwsResource[];\r\n /** Extension Any other element */\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’\r\n * A Resource reference a set of geospatial information to be treated as a logical element.\r\n * The resources are ordered such that the first item in the document is to be displayed at the front.\r\n * This defines the order in which layers are drawn.\r\n * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering\r\n * is focussed on a particular representation of information.\r\n * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW,\r\n * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV,\r\n * or a custom offering type defined in a profile or by an organisation.\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure\r\n */\r\nexport interface IOwsResource extends GeoJSON.Feature {\r\n /**\r\n * Unambiguous reference to the identification of the Context resource (IRI)\r\n * String type that SHALL contain a URI value\r\n */\r\n id: string | number;\r\n properties: IOwsResourceProperties;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsResourceProperties {\r\n /** Title given to the Context resource */\r\n title: string;\r\n /** Date of the last update of the Context resource */\r\n updated: DateString;\r\n /** The purpose is to provide a generic description of the content in a format understandable by generic readers */\r\n abstract?: string;\r\n /** This element is optional and indicates the authors array of the Context resource */\r\n authors?: IOwsAuthor[];\r\n /** Entity responsible for making the Context resource available */\r\n publisher?: string;\r\n /** Information about rights held in and over the Context resource */\r\n rights?: string;\r\n /** Date or range of dates relevant to the Context resource */\r\n date?: DateString;\r\n /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */\r\n offerings?: IOwsOffering[];\r\n /** Flag value indicating to the client if the Context resource should be displayed by default */\r\n active?: boolean;\r\n /** This array is optional and expresses a category related to the Context resource */\r\n categories?: IOwsCategorie[];\r\n /** Minimum scale for the display of the Context resource Double */\r\n minscaledenominator?: number;\r\n /** Maximum scale for the display of the Context resource Double */\r\n maxscaledenominator?: number;\r\n /** Definition of the folder in which the resource is placed \r\n * The folder attribute is intended to support the concept present in many clients or organising layers into folders.\r\n */\r\n folder?: string;\r\n /** TODO!!! links is defined as Object but in the examples as Array */\r\n links?: IOwsLinks[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified.\r\n * These are known as offerings.\r\n * The intention is that these are, as far as is possible by the format used,\r\n * equivalent and no priority is assigned to their order in the standard.\r\n * They are intended to be alternatives that the client can use to allow it to visualise or use the resource.\r\n *\r\n * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD.\r\n * Different clients could use these offerings as appropriate:\r\n * - a simple browser based client could use the WMS offering provided, using the standard portrayal\r\n * - a more sophisticated client, could use the WFS offering and the associated SLD Document.\r\n *\r\n * There are two types of offering, service offerings and data offerings.\r\n * A service offering has a service request (in the form of a capabilities request and a data request)\r\n * and optional content and styling elements.\r\n * A data offering has a content element and optional styling elements.\r\n *\r\n *\r\n * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority\r\n */\r\nexport interface IOwsOffering {\r\n /** Extension Offerings with type - string */\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering |\r\n GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string;\r\n /** Web Service Offerings provide their operations */\r\n operations?: IOwsOperation[];\r\n /** Content Offerings allow content to be embedded in an OWS Context document. */\r\n contents?: IOwsContent[];\r\n styles?: IOwsStyleSet[];\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsCreator {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsAuthor {\r\n /** Entity primarily responsible for making the Context document */\r\n name?: string;\r\n email?: string;\r\n uri?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCategorie {\r\n scheme?: string;\r\n /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */\r\n term?: string;\r\n label?: string;\r\n}\r\n\r\nexport interface IOwsLinks {\r\n rel: string;\r\n href?: string;\r\n type?: string;\r\n title?: string;\r\n /** Reference to a description of the Context resource in alternative format */\r\n alternates?: string;\r\n lang?: LangString;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsCreatorApplication {\r\n title?: string;\r\n uri?: string;\r\n version?: string;\r\n}\r\n\r\nexport interface IOwsCreatorDisplay {\r\n /** Width measured in pixels of the display showing the Area of Interest */\r\n pixelWidth?: number;\r\n /** Width measured in pixels of the display showing by the Area of Interest */\r\n pixelHeight?: number;\r\n /** The size of a pixel of the display in milimeters \r\n * (combined with the previous ones allows for the real display size to be calculated) */\r\n mmPerPixel?: number;\r\n [k: string]: any;\r\n}\r\n\r\n/**\r\n * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS \r\n */\r\nexport interface IOwsOperation {\r\n /**\r\n * The code identifies the type of operation.\r\n * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080].\r\n */\r\n code: string;\r\n /** method defines the access method, for example GET or POST. */\r\n method: string;\r\n type?: string;\r\n /** href is the URI containing the definition of the request */\r\n href?: string;\r\n request?: IOwsContent;\r\n result?: IOwsContent;\r\n /** Extension of Operation */\r\n [k: string]: any;\r\n}\r\n\r\n\r\nexport interface IOwsContent {\r\n /** MIME type of the Content */\r\n type: string;\r\n href?: string;\r\n title?: string;\r\n /** String type, not empty that can contain any text encoded media type */\r\n content?: string;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IOwsStyleSet {\r\n name: string;\r\n title: string;\r\n abstract?: string;\r\n default?: boolean;\r\n legendURL?: string;\r\n content?: IOwsContent;\r\n [k: string]: any;\r\n}\r\n\r\n\r\n\r\n/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */\r\nexport type DateString = string;\r\n\r\n\r\n/** RFC-3066 code e.g. en,de */\r\nexport type LangString = string;\r\n\r\n\r\nexport type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' |\r\n 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0';\r\nexport type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs';\r\nexport type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs';\r\nexport type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps';\r\nexport type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw';\r\nexport type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts';\r\nexport type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml';\r\nexport type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml';\r\nexport type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff';\r\nexport type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2';\r\nexport type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov';\r\n","import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering,\r\n CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering,\r\n GMLCOV_Offering, IOwsResourceProperties } from './owc-json';\r\n\r\n\r\n\r\nimport * as GeoJSON from 'geojson';\r\nexport interface IEocOwsContext extends IOwsContext {\r\n features: IEocOwsResource[];\r\n projections?: IEocOwsProjection[];\r\n}\r\n\r\nexport interface IEocOwsResource extends IOwsResource {\r\n properties: IEocOwsResourceProperties;\r\n}\r\n\r\nexport interface IEocOwsResourceProperties extends IOwsResourceProperties {\r\n opacity?: number;\r\n attribution?: string;\r\n shards?: string;\r\n dimensions?: IEocOwsResourceDimensions;\r\n}\r\n\r\nexport interface IEocOwsResourceDimensions {\r\n time?: IEocOwsResourceDimension;\r\n elevation?: IEocOwsResourceDimension;\r\n [k: string]: any;\r\n}\r\n\r\nexport interface IEocOwsResourceDimension {\r\n /** Default step display of time slider */\r\n display?: string;\r\n units: string;\r\n value?: string;\r\n}\r\n\r\nexport interface IEocOwsOffering extends IOwsOffering {\r\n code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering |\r\n WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering |\r\n GMLCOV_Offering | GeoJson_Offering | string;\r\n legendUrl?: string;\r\n iconUrl?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface IEocWmsOffering extends IEocOwsOffering {\r\n code: WMS_Offering;\r\n}\r\n\r\nexport interface IEocOwsWmtsOffering extends IEocOwsOffering {\r\n code: WMTS_Offering;\r\n matrixSets?: IEocOwsWmtsMatrixSet[];\r\n}\r\n\r\nexport interface IEocOwsWmtsMatrixSet {\r\n /** EPSG-Code */\r\n srs: string;\r\n matrixSet: string;\r\n matrixIds: string[];\r\n origin: {\r\n x: number,\r\n y: number\r\n };\r\n resolutions: number[];\r\n tilesize: {\r\n height: number,\r\n width: number\r\n };\r\n}\r\n\r\nexport interface IEocOwsProjection {\r\n bbox: GeoJSON.BBox;\r\n code: string;\r\n default?: boolean;\r\n unit?: string | number;\r\n}\r\n/**\r\n* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings\r\n*/\r\nexport type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson';\r\nexport type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz';\r\n","export type WpsVerion = '1.0.0' | '2.0.0';\r\nexport type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' |\r\n 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' |\r\n 'text/plain';\r\n\r\n\r\nexport type ProcessId = string;\r\nexport type ProductId = string;\r\n\r\nexport interface WpsDataDescription {\r\n id: ProductId;\r\n type: 'literal' | 'complex' | 'bbox' | 'status' | 'error';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\nexport type WpsInputDescription = WpsDataDescription;\r\nexport type WpsOutputDescription = WpsDataDescription;\r\n\r\n\r\nexport interface WpsData {\r\n description: WpsDataDescription;\r\n value: any;\r\n}\r\nexport type WpsInput = WpsData;\r\nexport type WpsResult = WpsData;\r\n\r\nexport interface WpsBboxDescription {\r\n id: ProductId;\r\n type: 'bbox';\r\n reference: boolean;\r\n format?: WpsDataFormat;\r\n description?: string;\r\n defaultValue?: any;\r\n}\r\n\r\nexport interface WpsBboxValue {\r\n crs: string;\r\n lllon: number;\r\n lllat: number;\r\n urlon: number;\r\n urlat: number;\r\n}\r\n\r\nexport const isBbox = (obj: object): obj is WpsBboxValue => {\r\n return (\r\n obj.hasOwnProperty('crs') &&\r\n obj.hasOwnProperty('lllon') &&\r\n obj.hasOwnProperty('lllat') &&\r\n obj.hasOwnProperty('urlon') &&\r\n obj.hasOwnProperty('urlat')\r\n );\r\n};\r\n\r\n\r\nexport interface WpsState {\r\n status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed';\r\n percentCompleted?: number;\r\n /** WPS 2.0 only */\r\n jobID?: string;\r\n /** WPS 1.0 only */\r\n statusLocation?: string;\r\n /** WPS 1.0 only: a success-state already contains the results */\r\n results?: WpsData[];\r\n}\r\n\r\nexport function isWpsState(obj: object): obj is WpsState {\r\n return obj && obj.hasOwnProperty('status') && (obj.hasOwnProperty('jobID') || obj.hasOwnProperty('statusLocation'));\r\n}\r\n\r\n\r\nexport interface WpsBboxData {\r\n description: WpsBboxDescription;\r\n value: WpsBboxValue;\r\n}\r\n\r\nexport interface WpsCapability {\r\n id: string;\r\n}\r\n\r\n\r\nexport interface WpsMarshaller {\r\n\r\n executeUrl(url: string, processId: string): string;\r\n dismissUrl(serverUrl: string, processId: string, jobId: string): string;\r\n getCapabilitiesUrl(baseurl: string): string;\r\n\r\n marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any;\r\n marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any;\r\n marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any;\r\n marshalDismissBody(jobId: string): any;\r\n\r\n unmarshalCapabilities(capabilitiesJson: any): WpsCapability[];\r\n unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[];\r\n unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState;\r\n unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState;\r\n}\r\n"],"names":["XLink_1_0_Factory.XLink_1_0","OWS_1_1_0_Factory.OWS_1_1_0","SMIL_2_0_Factory.SMIL_2_0","SMIL_2_0_Language_Factory.SMIL_2_0_Language","GML_3_1_1_Factory.GML_3_1_1","WMTS_1_0_Factory.WMTS_1_0","tslib_1.__values","XLink_1_0","OWS_1_1_0","OWS_2_0_Factory.OWS_2_0","WPS_1_0_0_Factory.WPS_1_0_0","WPS_2_0_Factory.WPS_2_0"],"mappings":"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"} \ No newline at end of file diff --git a/@ukis/services-ogc/lib/owc/owc-json.service.d.ts b/@ukis/services-ogc/lib/owc/owc-json.service.d.ts deleted file mode 100644 index 7b2e2b12b..000000000 --- a/@ukis/services-ogc/lib/owc/owc-json.service.d.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { IOwsContext, IOwsResource, IOwsOffering, IOwsOperation, IOwsContent, WMS_Offering, WFS_Offering, WCS_Offering, CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering } from './types/owc-json'; -import { IEocOwsContext, IEocOwsResource, IEocOwsOffering, GeoJson_Offering, Xyz_Offering } from './types/eoc-owc-json'; -import { VectorLayer, RasterLayer, Layer, TLayertype, ILayerDimensions, ILayerIntervalAndPeriod } from '@ukis/services-layers'; -import { TGeoExtent } from '@ukis/services-map-state'; -import { WmtsClientService } from '../wmts/wmtsclient.service'; -import { Observable } from 'rxjs'; -export declare function isWmsOffering(str: string): str is WMS_Offering; -export declare function isWfsOffering(str: string): str is WFS_Offering; -export declare function isWpsOffering(str: string): str is WCS_Offering; -export declare function isCswOffering(str: string): str is CSW_Offering; -export declare function isWmtsOffering(str: string): str is WMTS_Offering; -export declare function isGmlOffering(str: string): str is GML_Offering; -export declare function isKmlOffering(str: string): str is KML_Offering; -export declare function isGeoTIFFOffering(str: string): str is GeoTIFF_Offering; -export declare function isGMLJP2Offering(str: string): str is GMLJP2_Offering; -export declare function isGMLCOVOffering(str: string): str is GMLCOV_Offering; -export declare function isXyzOffering(str: string): str is Xyz_Offering; -export declare function isGeoJsonOffering(str: string): str is GeoJson_Offering; -export declare function shardsExpand(v: string): any[]; -/** - * OWS Context Service - * OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html - * - * This service allows you to read and write OWC-data. - * We have added some custom fields to the OWC standard. - * - accepts the OWC-standard-datatypes as function inputs (so as to be as general as possible) - * - returns our extended OWC-datatypes as function outputs (so as to be as information-rich as possible) - * - */ -export declare class OwcJsonService { - private wmtsClient; - constructor(wmtsClient: WmtsClientService); - checkContext(context: IOwsContext): any; - getContextTitle(context: IOwsContext): string; - getContextPublisher(context: IOwsContext): string; - getContextExtent(context: IOwsContext): import("geojson").BBox; - getResources(context: IOwsContext): IOwsResource[]; - /** Resource --------------------------------------------------- */ - getResourceTitle(resource: IOwsResource): string; - getResourceUpdated(resource: IOwsResource): string; - getResourceDate(resource: IOwsResource): string; - getResourceOfferings(resource: IOwsResource): IOwsOffering[]; - /** - * retrieve layer status active / inactive based on IOwsResource - * @param resource: IOwsResource - */ - isActive(resource: IOwsResource): boolean; - getResourceOpacity(resource: IOwsResource): number; - getResourceAttribution(resource: IOwsResource): string; - getResourceShards(resource: IOwsResource): string; - convertOwcTimeToIsoTimeAndPeriodicity(owctime: string): ILayerIntervalAndPeriod | string; - getResourceDimensions(resource: IOwsResource): ILayerDimensions; - /** Offering --------------------------------------------------- */ - getLayertypeFromOfferingCode(offering: IOwsOffering): TLayertype; - checkIfServiceOffering(offering: IOwsOffering): boolean; - checkIfDataOffering(offering: IOwsOffering): boolean; - getOfferingContents(offering: IOwsOffering): IOwsOperation[] | IOwsContent[]; - /** - * Helper function to extract legendURL from project specific ows Context - * @param offering layer offering - */ - getLegendUrl(offering: IOwsOffering): string; - /** - * retrieve iconUrl based on IOwsOffering - * @param offering - */ - getIconUrl(offering: IOwsOffering): string; - /** - * layer priority: first wms, then wmts, then wfs, then others. - */ - getLayers(owc: IOwsContext, targetProjection: string): Observable; - createLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable; - createVectorLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context?: IOwsContext): Observable; - createRasterLayerFromOffering(offering: IOwsOffering, resource: IOwsResource, context: IOwsContext, targetProjection: string): Observable; - private createWmtsLayerFromOffering; - private createWmsLayerFromOffering; - private getWmtsOptions; - private getLayerForWMTS; - private parseOperationUrl; - private getMatrixSetForWMTS; - private getWmsOptions; - private getRasterLayerOptions; - private getLayerOptions; - /** Misc --------------------------------------------------- */ - private getUrlFromUri; - /** - * helper to pack query-parameters of a uri into a JSON - * @param uri any uri with query-parameters - */ - private getJsonFromUri; - /** - * retrieve display name of layer, based on IOwsResource and IOwsOffering - * @param offering - * @param resource - */ - private getDisplayName; - /**------------ DATA TO FILE -----------------------------------------*/ - /** - * @TODO: - * - properties - */ - generateOwsContextFrom(id: string, layers: Layer[], extent?: TGeoExtent, properties?: any): IEocOwsContext; - generateResourceFromLayer(layer: Layer): IEocOwsResource; - generateOfferingFromLayer(layer: Layer, legendUrl?: string, iconUrl?: string): IEocOwsOffering; - getOfferingCodeFromLayer(layer: Layer): string; - getContentsFromLayer(layer: VectorLayer): IOwsContent[]; - getOperationsFromLayer(layer: Layer): IOwsOperation[]; - getXyzOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getTmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getWfsOperationsFromLayer(layer: VectorLayer): IOwsOperation[]; - getWmsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; - getWmtsOperationsFromLayer(layer: RasterLayer): IOwsOperation[]; -} diff --git a/@ukis/services-ogc/lib/owc/types/eoc-owc-json.d.ts b/@ukis/services-ogc/lib/owc/types/eoc-owc-json.d.ts deleted file mode 100644 index 7993d836a..000000000 --- a/@ukis/services-ogc/lib/owc/types/eoc-owc-json.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { IOwsContext, IOwsResource, IOwsOffering, WMS_Offering, WFS_Offering, WCS_Offering, WPS_Offering, CSW_Offering, WMTS_Offering, GML_Offering, KML_Offering, GeoTIFF_Offering, GMLJP2_Offering, GMLCOV_Offering, IOwsResourceProperties } from './owc-json'; -import * as GeoJSON from 'geojson'; -export interface IEocOwsContext extends IOwsContext { - features: IEocOwsResource[]; - projections?: IEocOwsProjection[]; -} -export interface IEocOwsResource extends IOwsResource { - properties: IEocOwsResourceProperties; -} -export interface IEocOwsResourceProperties extends IOwsResourceProperties { - opacity?: number; - attribution?: string; - shards?: string; - dimensions?: IEocOwsResourceDimensions; -} -export interface IEocOwsResourceDimensions { - time?: IEocOwsResourceDimension; - elevation?: IEocOwsResourceDimension; - [k: string]: any; -} -export interface IEocOwsResourceDimension { - /** Default step display of time slider */ - display?: string; - units: string; - value?: string; -} -export interface IEocOwsOffering extends IOwsOffering { - code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | GeoJson_Offering | string; - legendUrl?: string; - iconUrl?: string; - title?: string; -} -export interface IEocWmsOffering extends IEocOwsOffering { - code: WMS_Offering; -} -export interface IEocOwsWmtsOffering extends IEocOwsOffering { - code: WMTS_Offering; - matrixSets?: IEocOwsWmtsMatrixSet[]; -} -export interface IEocOwsWmtsMatrixSet { - /** EPSG-Code */ - srs: string; - matrixSet: string; - matrixIds: string[]; - origin: { - x: number; - y: number; - }; - resolutions: number[]; - tilesize: { - height: number; - width: number; - }; -} -export interface IEocOwsProjection { - bbox: GeoJSON.BBox; - code: string; - default?: boolean; - unit?: string | number; -} -/** -* http://www.owscontext.org/owc_user_guide/C0_userGuide.html#trueextension-offerings -*/ -export declare type GeoJson_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geojson'; -export declare type Xyz_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/xyz'; diff --git a/@ukis/services-ogc/lib/owc/types/owc-json.d.ts b/@ukis/services-ogc/lib/owc/types/owc-json.d.ts deleted file mode 100644 index 1f293189c..000000000 --- a/@ukis/services-ogc/lib/owc/types/owc-json.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Type definitions for OGC OWS Context Geo Encoding Standard Version: 1.0 - * http://docs.opengeospatial.org/is/14-055r2/14-055r2.html - * Definitions by: Mathias Boeck - * TypeScript Version: 2.5.3 - * - * depends on @types/geojson@^7946.0.2 - */ -import * as GeoJSON from 'geojson'; -/** - * The OWS Context describes Metadata, API, Time Range - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - * If no bounding box is specified, do not change the current view when the context document is loaded. - */ -export interface IOwsContext extends GeoJSON.FeatureCollection { - /** - * The id element defines a mandatory reference to the identification of the Context document. - * The content for the id element SHALL be an IRI, as defined by IETF [RFC3987] - */ - id: string | number; - properties: { - links: { - profiles: string[]; - } | IOwsLinks[]; - /** Language of Context document content */ - lang: LangString; - /** Title for the Context document */ - title: string; - /** Date of a creation or update of the Context document */ - updated: DateString; - /** Description of the Context document purpose or content */ - subtitle?: string; - /** This element is optional and indicates the authors array of the Context document */ - authors?: IOwsAuthor[]; - /** Identifier for the publisher of the Context document */ - publisher?: string; - /** Tool/application used to create the Context document and its properties */ - creator?: IOwsCreator; - /** - * Properties of the display in use when the context document was created (for display based applications only). - * This class is optional and intended for creator applications that use a graphical user interface with a geographical display within a fixed pixel size and not scalable to different computational devices - */ - display?: IOwsCreatorDisplay[]; - /** Information about rights held in and over the Context document */ - rights?: string; - /** - * Date or range of dates relevant to the resource - * time range which is expected to be of interest to the user. - */ - date?: DateString; - /** This array is an optional and expresses categories related to this Context document */ - categories?: IOwsCategorie[]; - /** Extension Any other element */ - [k: string]: any; - }; - /** Ordered List of Resources available on the Context document */ - features: IOwsResource[]; - /** Extension Any other element */ - [k: string]: any; -} -/** - * Each layer (a.k.a. feature) in a context document is known as a ‘Resource’ - * A Resource reference a set of geospatial information to be treated as a logical element. - * The resources are ordered such that the first item in the document is to be displayed at the front. - * This defines the order in which layers are drawn. - * A resource (which in GIS terms is a layer) can have a number of offerings, and each offering - * is focussed on a particular representation of information. - * These can be one of a number of OGC Web Services, specifically WMS, WMTS, WFS, WCS, WPS and CSW, - * or one of a number of inline or referenced formats, specifically GML, KML, GeoTIFF, GMLJP2, GMLCOV, - * or a custom offering type defined in a profile or by an organisation. - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truethe-ows-context-document-structure - */ -export interface IOwsResource extends GeoJSON.Feature { - /** - * Unambiguous reference to the identification of the Context resource (IRI) - * String type that SHALL contain a URI value - */ - id: string | number; - properties: IOwsResourceProperties; - [k: string]: any; -} -export interface IOwsResourceProperties { - /** Title given to the Context resource */ - title: string; - /** Date of the last update of the Context resource */ - updated: DateString; - /** The purpose is to provide a generic description of the content in a format understandable by generic readers */ - abstract?: string; - /** This element is optional and indicates the authors array of the Context resource */ - authors?: IOwsAuthor[]; - /** Entity responsible for making the Context resource available */ - publisher?: string; - /** Information about rights held in and over the Context resource */ - rights?: string; - /** Date or range of dates relevant to the Context resource */ - date?: DateString; - /** This element is optional and can contain a number of offerings defined by the class OWC:Offering */ - offerings?: IOwsOffering[]; - /** Flag value indicating to the client if the Context resource should be displayed by default */ - active?: boolean; - /** This array is optional and expresses a category related to the Context resource */ - categories?: IOwsCategorie[]; - /** Minimum scale for the display of the Context resource Double */ - minscaledenominator?: number; - /** Maximum scale for the display of the Context resource Double */ - maxscaledenominator?: number; - /** Definition of the folder in which the resource is placed - * The folder attribute is intended to support the concept present in many clients or organising layers into folders. - */ - folder?: string; - /** TODO!!! links is defined as Object but in the examples as Array */ - links?: IOwsLinks[]; - [k: string]: any; -} -/** - * In reality a resource can be realised in a number of different ways, and so an OWC document allows various options to be specified. - * These are known as offerings. - * The intention is that these are, as far as is possible by the format used, - * equivalent and no priority is assigned to their order in the standard. - * They are intended to be alternatives that the client can use to allow it to visualise or use the resource. - * - * So for example four offerings, a WMS, a WFS with portrayal as SLD, and an inline GML Offering again with portrayal as SLD. - * Different clients could use these offerings as appropriate: - * - a simple browser based client could use the WMS offering provided, using the standard portrayal - * - a more sophisticated client, could use the WFS offering and the associated SLD Document. - * - * There are two types of offering, service offerings and data offerings. - * A service offering has a service request (in the form of a capabilities request and a data request) - * and optional content and styling elements. - * A data offering has a content element and optional styling elements. - * - * - * http://www.owscontext.org/owc_user_guide/C0_userGuide.html#truemultiple-offerings-and-priority - */ -export interface IOwsOffering { - /** Extension Offerings with type - string */ - code: WMS_Offering | WFS_Offering | WCS_Offering | WPS_Offering | CSW_Offering | WMTS_Offering | GML_Offering | KML_Offering | GeoTIFF_Offering | GMLJP2_Offering | GMLCOV_Offering | string; - /** Web Service Offerings provide their operations */ - operations?: IOwsOperation[]; - /** Content Offerings allow content to be embedded in an OWS Context document. */ - contents?: IOwsContent[]; - styles?: IOwsStyleSet[]; - [k: string]: any; -} -export interface IOwsCreator { - title?: string; - uri?: string; - version?: string; -} -export interface IOwsAuthor { - /** Entity primarily responsible for making the Context document */ - name?: string; - email?: string; - uri?: string; - [k: string]: any; -} -export interface IOwsCategorie { - scheme?: string; - /** Category related to this context document. It MAY have a related code-list that is identified by the scheme attribute */ - term?: string; - label?: string; -} -export interface IOwsLinks { - rel: string; - href?: string; - type?: string; - title?: string; - /** Reference to a description of the Context resource in alternative format */ - alternates?: string; - lang?: LangString; - [k: string]: any; -} -export interface IOwsCreatorApplication { - title?: string; - uri?: string; - version?: string; -} -export interface IOwsCreatorDisplay { - /** Width measured in pixels of the display showing the Area of Interest */ - pixelWidth?: number; - /** Width measured in pixels of the display showing by the Area of Interest */ - pixelHeight?: number; - /** The size of a pixel of the display in milimeters - * (combined with the previous ones allows for the real display size to be calculated) */ - mmPerPixel?: number; - [k: string]: any; -} -/** - * Most service offerings have two operations, a ‘GetCapabilities’ operation and a data operation such as ‘GetMap’ for WMS - */ -export interface IOwsOperation { - /** - * The code identifies the type of operation. - * Valid types are defined within each specific extension within the OWS Context conceptual model [OGC 12-080]. - */ - code: string; - /** method defines the access method, for example GET or POST. */ - method: string; - type?: string; - /** href is the URI containing the definition of the request */ - href?: string; - request?: IOwsContent; - result?: IOwsContent; - /** Extension of Operation */ - [k: string]: any; -} -export interface IOwsContent { - /** MIME type of the Content */ - type: string; - href?: string; - title?: string; - /** String type, not empty that can contain any text encoded media type */ - content?: string; - [k: string]: any; -} -export interface IOwsStyleSet { - name: string; - title: string; - abstract?: string; - default?: boolean; - legendURL?: string; - content?: IOwsContent; - [k: string]: any; -} -/** ISO-8601 format e.g. YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ssZ/YYYY-MM-DDThh:mm:ssZ */ -export declare type DateString = string; -/** RFC-3066 code e.g. en,de */ -export declare type LangString = string; -export declare type WMS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wms' | 'http://schemas.opengis.net/wms/1.1.1' | 'http://schemas.opengis.net/wms/1.1.0'; -export declare type WFS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wfs'; -export declare type WCS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wcs'; -export declare type WPS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wps'; -export declare type CSW_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/csw'; -export declare type WMTS_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/wmts'; -export declare type GML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gml'; -export declare type KML_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/kml'; -export declare type GeoTIFF_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff'; -export declare type GMLJP2_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2'; -export declare type GMLCOV_Offering = 'http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov'; diff --git a/@ukis/services-ogc/lib/services-ogc.module.d.ts b/@ukis/services-ogc/lib/services-ogc.module.d.ts deleted file mode 100644 index 440443540..000000000 --- a/@ukis/services-ogc/lib/services-ogc.module.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare class ServicesOgcModule { -} diff --git a/@ukis/services-ogc/lib/wmts/wmtsclient.service.d.ts b/@ukis/services-ogc/lib/wmts/wmtsclient.service.d.ts deleted file mode 100644 index f80b06895..000000000 --- a/@ukis/services-ogc/lib/wmts/wmtsclient.service.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; -export declare class WmtsClientService { - private http; - private xmlmarshaller; - private xmlunmarshaller; - constructor(http: HttpClient); - getCapabilities(url: string, version?: string): Observable; -} diff --git a/@ukis/services-ogc/lib/wps/cache.d.ts b/@ukis/services-ogc/lib/wps/cache.d.ts deleted file mode 100644 index 015be15ad..000000000 --- a/@ukis/services-ogc/lib/wps/cache.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { WpsData } from "./wps_datatypes"; -import { Observable } from "rxjs"; -export interface Cache { - set(input: object, output: WpsData[]): any; - get(input: object): Observable; -} -export declare class FakeCache implements Cache { - set(input: object, output: WpsData[]): void; - get(input: object): Observable; -} diff --git a/@ukis/services-ogc/lib/wps/utils/polling.d.ts b/@ukis/services-ogc/lib/wps/utils/polling.d.ts deleted file mode 100644 index c58cf2c4c..000000000 --- a/@ukis/services-ogc/lib/wps/utils/polling.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Observable } from 'rxjs'; -export declare function pollUntil(task$: Observable, predicate: (results: any) => boolean, doWhile?: (t: T | null) => any, minWaitTime?: number): Observable; -export declare function delayedRetry(delayMs: number, maxRetries?: number): (src$: Observable) => Observable; diff --git a/@ukis/services-ogc/lib/wps/wps100/wps_1.0.0.d.ts b/@ukis/services-ogc/lib/wps/wps100/wps_1.0.0.d.ts deleted file mode 100644 index d0f0d2dc6..000000000 --- a/@ukis/services-ogc/lib/wps/wps100/wps_1.0.0.d.ts +++ /dev/null @@ -1,373 +0,0 @@ -export type ExceptionReport = any; - - -export interface BoundingBoxType { - lowerCorner: number[], - upperCorner: number[], - crs?: string, - dimensions?: number, -} - -export interface CodeType { - value: string -} - -export interface LanguageStringType { - value: string -} - -export interface AllowedValuesType { - valueOrRange: ValueType[] -} - -export interface ValueType { - value: string -} - -export interface DomainMetadataType { - reference?: string, - value: LiteralInputType -} - -export interface LiteralInputType { - allowedValues: any; - anyValue: any; - valuesReference: any; - defaultValue?: any; -} - -export interface OutputReferenceType { - href: string; - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface ResponseFormType { - responseDocument?: ResponseDocumentType; - rawDataOutput?: OutputDefinitionType; -} - -export interface DataType { - complexData?: ComplexDataType; - literalData?: LiteralDataType; - boundingBoxData?: BoundingBoxType; -} - -export interface ComplexDataCombinationsType { - format: any; -} - -export interface ResponseDocumentType { - output: DocumentOutputDefinitionType[]; - storeExecuteResponse?: boolean; - lineage?: boolean; - status?: boolean; -} - -export interface ProcessDescriptionType_ProcessOutputs { - output: any; -} - -export interface InputReferenceType_Header { - key: string; - value: string; -} - -export interface ProcessOfferings { - process: any; -} - -export interface SupportedComplexDataInputType { - maximumMegabytes?: any; -} - -export interface SupportedComplexDataType { - _default: ComplexDataCombinationType; - supported: ComplexDataCombinationsType; -} - -export interface ValuesReferenceType { - reference?: string; - valuesForm?: string; -} - -export interface ComplexDataType { - otherAttributes?: any; - content: any[]; // string[]; // <-- should actually be any, but jsonix disagrees... - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface ProcessBriefType { - identifier: CodeType; - processVersion: any; - profile?: any; - wsdl?: any; -} - -export interface Languages { - _default: Languages_Default; - supported: LanguagesType; -} - -export interface ExecuteResponse_ProcessOutputs { - output: OutputDataType[]; -} - -export interface DescriptionType { - identifier: CodeType; - title: LanguageStringType; - _abstract?: LanguageStringType; - metadata?: any; -} - -export interface WpsProcessBriefType { - title: LanguageStringType[], - identifier: CodeType, - processVersion?: string, - metadata?: Object, - abstract?: Object, - profile?: Object, - WSDL?: Object -} - -export interface ProcesOfferings { - process: WpsProcessBriefType[] -} - -export interface WPSCapabilitiesType { - processOfferings: ProcesOfferings; - languages: any; - service: any; - lang: any; - wsdl?: any; -} - -export interface ProcessStartedType { - value?: string; - percentCompleted?: number; -} - -export interface DescribeProcess { - identifier: any; -} - -export interface OutputDescriptionType { - complexOutput: any; - literalOutput: any; - boundingBoxOutput: any; -} - -export interface ProcessDescriptions { - processDescription: any; -} - -export interface InputDescriptionType { - complexData: any; - literalData: any; - boundingBoxData: any; - minOccurs: any; - maxOccurs: any; -} - -export interface RequestBaseType { - service: string; - version: string; - language?: string; -} - -export interface InputReferenceType { - href: string; - mimeType?: string; - encoding?: string; - schema?: string; - body?: any; - bodyReference?: InputReferenceType_BodyReference; - header?: any; - method?: 'GET' | 'POST' | 'PUT' | 'HEAD' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'PATCH'; -} - -export interface LiteralOutputType { - dataType?: DomainMetadataType; - uoMs?: SupportedUOMsType; -} - -export interface ProcessDescriptionType { - processOutputs: any; - dataInputs?: any; - storeSupported?: any; - statusSupported?: any; -} - -export interface StatusType { - processAccepted: string; - processStarted: ProcessStartedType; - processPaused: ProcessStartedType; - processSucceeded: string; - processFailed: ProcessFailedType; - creationTime: string; -} - -export interface UOMsType { - uom: any; -} - -export interface ComplexDataCombinationType { - format: ComplexDataDescriptionType; -} - -export interface CRSsType { - crs: any; -} - -export interface LiteralDataType { - value?: string; - dataType?: string; - uom?: string; -} - -export interface Execute { - identifier: any; - dataInputs?: DataInputsType; - responseForm?: any; - service: "WPS"; - version: "1.0.0"; -} - -export interface ComplexDataDescriptionType { - mimeType: string; - encoding?: string; - schema?: string; -} - -export interface SupportedCRSsType_Default { - crs: string; -} - -export interface ExecuteResponse { - process: ProcessBriefType; - status: StatusType; - serviceInstance: any; - dataInputs?: any; - outputDefinitions?: any; - processOutputs?: ExecuteResponse_ProcessOutputs; - statusLocation?: any; -} - -export interface SupportedUOMsType_Default { - uom: DomainMetadataType; -} - -export interface ProcessFailedType { - exceptionReport: ExceptionReport; -} - -export interface LanguagesType { - language: any; -} - -export interface OutputDefinitionsType { - output: any; -} - -export interface WSDL { - href: string; -} - -export interface SupportedUOMsType { - _default: SupportedUOMsType_Default; - supported: UOMsType; -} - -export interface InputReferenceType_BodyReference { - href: string; -} - -export interface DataInputsType { - input: InputType[]; -} - -export interface SupportedCRSsType { - _default: SupportedCRSsType_Default; - supported: CRSsType; -} - -export interface Languages_Default { - language: any; -} - -export interface DocumentOutputDefinitionType { - title?: any; - _abstract?: any; - asReference?: boolean; - identifier: CodeType, - mimeType?: string, - encoding?: string, - schema?: string, - uom?: string -} - -export interface ProcessDescriptionType_DataInputs { - input: any; -} - -export interface OutputDefinitionType { - identifier: CodeType; - uom?: string; - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface OutputDataType { - identifier: CodeType; - reference?: OutputReferenceType; - data?: DataType; -} - -export interface InputType { - identifier: CodeType; - reference?: InputReferenceType; - data?: DataType; - title?: LanguageStringType; - _abstract?: LanguageStringType; -} - -export interface ResponseBaseType { - service: string; - version: string; - lang: string; -} - -export interface GetCapabilities { - service: string; - acceptVersions?: any; - language?: string; -} - - -export interface IWpsExecuteProcessBody { - name: { - key: "{http://www.opengis.net/wps/1.0.0}Execute", - localPart: "Execute", - namespaceURI: "http://www.opengis.net/wps/1.0.0", - prefix: "wps", - string: "{http://www.opengis.net/wps/1.0.0}wps:Execute" - }; - value: Execute -} - -export interface IWpsExecuteResponse { - name: { - namespaceURI: 'http://www.opengis.net/wps/1.0.0', - localPart: 'ExecuteResponse', - prefix: 'wps', - key: '{http://www.opengis.net/wps/1.0.0}ExecuteResponse', - string: '{http://www.opengis.net/wps/1.0.0}wps:ExecuteResponse' - }, - value: ExecuteResponse -} - - diff --git a/@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.d.ts b/@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.d.ts deleted file mode 100644 index beb1c9bd1..000000000 --- a/@ukis/services-ogc/lib/wps/wps100/wps_marshaller_1.0.0.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsData, WpsDataDescription, WpsState } from '../wps_datatypes'; -import { WPSCapabilitiesType, IWpsExecuteProcessBody, DataInputsType, InputType, ResponseFormType, DataType, IWpsExecuteResponse, InputReferenceType } from './wps_1.0.0'; -export declare class WpsMarshaller100 implements WpsMarshaller { - constructor(); - getCapabilitiesUrl(baseurl: string): string; - executeUrl(baseurl: string, processId: string): string; - unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - protected unmarshalOutputData(data: DataType): any; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsDataDescription[]): WpsState; - unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody; - protected marshalResponseForm(outputs: WpsOutputDescription[], async?: boolean): ResponseFormType; - protected marshalInputs(inputArr: WpsInput[]): DataInputsType; - protected marshalInput(input: WpsInput): InputType; - protected marshalDataInput(input: WpsInput): DataType; - protected marshalReferenceInput(input: WpsInput): InputReferenceType; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): {}; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): {}; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - marshalDismissBody(processId: string): void; - unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/services-ogc/lib/wps/wps200/helpers.d.ts b/@ukis/services-ogc/lib/wps/wps200/helpers.d.ts deleted file mode 100644 index 88f8f2e3a..000000000 --- a/@ukis/services-ogc/lib/wps/wps200/helpers.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { StatusInfo, DataOutputType, Result } from './wps_2.0'; -export declare const isStatusInfo: (obj: object) => obj is StatusInfo; -export declare const isDataOutputType: (obj: object) => obj is DataOutputType; -export declare const isResult: (obj: object) => obj is Result; diff --git a/@ukis/services-ogc/lib/wps/wps200/wps_2.0.d.ts b/@ukis/services-ogc/lib/wps/wps200/wps_2.0.d.ts deleted file mode 100644 index 137fd6167..000000000 --- a/@ukis/services-ogc/lib/wps/wps200/wps_2.0.d.ts +++ /dev/null @@ -1,312 +0,0 @@ -export type BoundingBoxType = any; -export type ExceptionReport = any; - - -export interface CodeType { - value: string -} - -export interface LanguageStringType { - value: string -} - -export interface AllowedValuesType { - valueOrRange: ValueType[] -} - -export interface ValueType { - value: string -} - - -export interface OutputDescriptionType { - dataDescription: any; - output: any; -} - -export interface DataOutputType { - id: string; - data?: Data; - reference?: ReferenceType; - output?: DataOutputType; -} - -export interface WPSCapabilitiesType_Extension { - any?: any; -} - -export interface Dismiss extends RequestBaseType { - jobID: any; - service: 'WPS', - version: '2.0.0' -} - -export interface LiteralDataType { - literalDataDomain: any; -} - -export interface GetCapabilitiesType { - service: any; -} - -export interface Contents { - processSummary: ProcessSummaryType[]; -} - -export interface DataInputType { - id: string; - /** Raw data. Only use one of the following: data, reference, input. */ - data?: Data; - /** Data per reference. Only use one of the following: data, reference, input. */ - reference?: ReferenceType; - /** Nested data. Only use one of the following: data, reference, input. */ - input?: DataInputType; -} - -export interface GetResult extends RequestBaseType { - jobID: any; - service: 'WPS'; - version: '2.0.0'; -} - -export interface SupportedCRS { - value?: string; - _default?: boolean; -} - -export interface LiteralDataDomainType { - allowedValues: AllowedValuesType; - anyValue: any; - valuesReference: any; - dataType?: any; - uom?: any; - defaultValue?: ValueType; -} - -export interface DataDescriptionType { - format: any; -} - -export interface StatusInfo { - jobID: string; - status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed'; - expirationDate?: string; - estimatedCompletion?: string; - nextPoll?: string; - percentCompleted?: number; -} - -export interface DataEncodingAttributes { - mimeType?: string; - encoding?: string; - schema?: string; -} - -export interface OutputDefinitionType extends DataEncodingAttributes { - transmission?: string; - id: string; - /** Include only for nested outputs. */ - output?: OutputDefinitionType; -} - -export interface LiteralValue { - dataType?: any; - uom?: any; -} - -export interface RequestBaseType { - service: string; - version: string; - Extension?: any; -} - -export interface LiteralDataType_LiteralDataDomain { - _default?: any; -} - -export interface DescribeProcess { - identifier: any; - lang?: any; -} - -export interface Result { - output: DataOutputType[]; - jobID?: string; - expirationDate?: string; -} - -export interface GenericInputType { - input?: any; - minOccurs?: any; - maxOccurs?: any; -} - -export interface Data extends DataEncodingAttributes { - otherAttributes?: any; - content?: any; -} - -export interface Format extends DataEncodingAttributes { - maximumMegabytes?: number; - _default?: boolean; -} - -export interface BoundingBoxData { - supportedCRS: any; -} - -export interface ProcessDescriptionType { - output: any; - input?: any; - lang?: any; -} - -export interface InputDescriptionType { - dataDescription: any; - input: any; - minOccurs?: any; - maxOccurs?: any; -} - -export type OutputTransmissionType = 'value' | 'reference'; - -export interface ProcessSummaryType { - processVersion?: string; - jobControlOptions: any[]; - outputTransmission?: OutputTransmissionType[]; - title: LanguageStringType[]; - identifier: CodeType; - processModel?: any; -} - -export interface BodyReferenceType { - href: string; -} - -export interface ProcessOfferings { - processOffering: any; -} - -export interface GenericOutputType { - output?: any; -} - -export interface ComplexDataType { - any?: any; -} - -export interface GenericProcessType { - output: any; - input?: any; -} - -export interface RequestBodyType { - body?: any; - bodyReference?: BodyReferenceType; -} - -export interface ReferenceType extends DataEncodingAttributes { - requestBody?: RequestBodyType; - href: string; -} - -export interface GetStatus extends RequestBaseType { - jobID: any; - service: 'WPS', - version: '2.0.0', -} - - -export interface ProcessOffering { - process: ProcessDescriptionType; - any: any; - jobControlOptions: any; - outputTransmission?: any; - processVersion?: string; - processModel?: string; -} - -export interface DescriptionType { -} - -export interface ExecuteRequestType extends RequestBaseType { - TYPE_NAME: 'WPS_2_0.ExecuteRequestType', - identifier: CodeType; - mode: 'sync' | 'async' | 'auto'; - response: 'raw' | 'document'; - input?: DataInputType[]; - output?: OutputDefinitionType[]; -} - -export interface WPSCapabilitiesType extends RequestBaseType { - contents: Contents; - service: 'WPS', - version: '2.0.0', - extension?: any; -} - -export interface IWpsExecuteProcessBody { - name: { - key: '{http://www.opengis.net/wps/2.0}Execute', - localPart: 'Execute', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Execute' - }; - value: ExecuteRequestType -} - -export interface IWpsExecuteResponse { - name: { - key: '{http://www.opengis.net/wps/2.0}Result', - localPart: 'Result', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Result' - }, - value: Result | StatusInfo -} - -export interface IGetStatusRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}GetStatus', - localPart: 'GetStatus', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetStatus' - }, - value: GetStatus -} - -export interface IGetResultRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}GetResult', - localPart: 'GetResult', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:GetResult' - }, - value: GetResult -} - -export interface IDismissRequest { - name: { - key: '{http://www.opengis.net/wps/2.0}Dismiss', - localPart: 'Dismiss', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:Dismiss' - }, - value: Dismiss -} - -export interface IDismissResponse { - name: { - key: '{http://www.opengis.net/wps/2.0}StatusInfo', - localPart: 'StatusInfo', - namespaceURI: 'http://www.opengis.net/wps/2.0', - prefix: 'wps', - string: '{http://www.opengis.net/wps/2.0}wps:StatusInfo' - }, - value: StatusInfo -} \ No newline at end of file diff --git a/@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.d.ts b/@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.d.ts deleted file mode 100644 index 96f3a3a44..000000000 --- a/@ukis/services-ogc/lib/wps/wps200/wps_marshaller_2.0.0.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { WpsMarshaller, WpsInput, WpsOutputDescription, WpsResult, WpsCapability, WpsDataDescription, WpsData, WpsState } from '../wps_datatypes'; -import { WPSCapabilitiesType, IWpsExecuteProcessBody, IWpsExecuteResponse, IGetStatusRequest, Data, IGetResultRequest, IDismissRequest, IDismissResponse } from './wps_2.0'; -export declare class WpsMarshaller200 implements WpsMarshaller { - constructor(); - getCapabilitiesUrl(baseurl: string): string; - executeUrl(baseurl: string, processId: string): string; - unmarshalCapabilities(capabilities: WPSCapabilitiesType): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: IWpsExecuteResponse, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - protected unmarshalOutputData(data: Data, description: WpsOutputDescription): any; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - unmarshalGetStateResponse(responseJson: any, serverUrl: string, processId: string, inputs: WpsData[], outputDescriptions: WpsDataDescription[]): WpsState; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): IWpsExecuteProcessBody; - private marshalInputs; - private marshalOutputs; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): IGetStatusRequest; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): IGetResultRequest; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - marshalDismissBody(jobId: string): IDismissRequest; - unmarshalDismissResponse(jsonResponse: IDismissResponse, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/services-ogc/lib/wps/wps_datatypes.d.ts b/@ukis/services-ogc/lib/wps/wps_datatypes.d.ts deleted file mode 100644 index c794aa613..000000000 --- a/@ukis/services-ogc/lib/wps/wps_datatypes.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -export declare type WpsVerion = '1.0.0' | '2.0.0'; -export declare type WpsDataFormat = 'application/vnd.geo+json' | 'application/json' | 'application/WMS' | 'application/xml' | 'text/xml' | 'application/text' | 'image/geotiff' | 'text/plain'; -export declare type ProcessId = string; -export declare type ProductId = string; -export interface WpsDataDescription { - id: ProductId; - type: 'literal' | 'complex' | 'bbox' | 'status' | 'error'; - reference: boolean; - format?: WpsDataFormat; - description?: string; - defaultValue?: any; -} -export declare type WpsInputDescription = WpsDataDescription; -export declare type WpsOutputDescription = WpsDataDescription; -export interface WpsData { - description: WpsDataDescription; - value: any; -} -export declare type WpsInput = WpsData; -export declare type WpsResult = WpsData; -export interface WpsBboxDescription { - id: ProductId; - type: 'bbox'; - reference: boolean; - format?: WpsDataFormat; - description?: string; - defaultValue?: any; -} -export interface WpsBboxValue { - crs: string; - lllon: number; - lllat: number; - urlon: number; - urlat: number; -} -export declare const isBbox: (obj: object) => obj is WpsBboxValue; -export interface WpsState { - status: 'Succeeded' | 'Failed' | 'Accepted' | 'Running' | 'Dismissed'; - percentCompleted?: number; - /** WPS 2.0 only */ - jobID?: string; - /** WPS 1.0 only */ - statusLocation?: string; - /** WPS 1.0 only: a success-state already contains the results */ - results?: WpsData[]; -} -export declare function isWpsState(obj: object): obj is WpsState; -export interface WpsBboxData { - description: WpsBboxDescription; - value: WpsBboxValue; -} -export interface WpsCapability { - id: string; -} -export interface WpsMarshaller { - executeUrl(url: string, processId: string): string; - dismissUrl(serverUrl: string, processId: string, jobId: string): string; - getCapabilitiesUrl(baseurl: string): string; - marshalExecBody(processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], async: boolean): any; - marshallGetStatusBody(serverUrl: string, processId: string, statusId: string): any; - marshallGetResultBody(serverUrl: string, processId: string, jobID: string): any; - marshalDismissBody(jobId: string): any; - unmarshalCapabilities(capabilitiesJson: any): WpsCapability[]; - unmarshalSyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsResult[]; - unmarshalAsyncExecuteResponse(responseJson: any, url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState; - unmarshalGetStateResponse(jsonResponse: any, serverUrl: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): WpsState; - unmarshalDismissResponse(jsonResponse: any, serverUrl: string, processId: string): WpsState; -} diff --git a/@ukis/services-ogc/lib/wps/wpsclient.d.ts b/@ukis/services-ogc/lib/wps/wpsclient.d.ts deleted file mode 100644 index a6c253342..000000000 --- a/@ukis/services-ogc/lib/wps/wpsclient.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { WpsInput, WpsVerion, WpsResult, WpsOutputDescription, WpsState } from './wps_datatypes'; -import { Observable } from 'rxjs'; -import { HttpClient } from '@angular/common/http'; -import { Cache } from './cache'; -/** - * The Wps-client abstracts away the differences between Wps1.0.0 and Wps2.0.0 - * There are two layers of marshalling: - * - the Wps-marshaller marshals user-facing data to wps-specific types - * - Jsonix marshals wps-specific data to xml. - * user-facing data -> wpsmarshaller -> Wps-type-specific data -> Jsonix-marhsaller -> XML -> - * -> webclient -> WPS -> XML -> Jsonix-unmarshaller -> Wps-type-specific data -> wpsmarshaller -> user-facing data - */ -export declare class WpsClient { - private webclient; - private version; - private xmlmarshaller; - private xmlunmarshaller; - private wpsmarshaller; - private cache; - constructor(version: WpsVerion, webclient: HttpClient, cache?: Cache); - getCapabilities(url: string): Observable; - describeProcess(processId: string): Observable; - executeAsync(url: string, processId: string, inputs: WpsInput[], outputs: WpsOutputDescription[], pollingRate?: number, tapFunction?: (response: WpsState | null) => any): Observable; - private cachedQuery; - private getNextState; - private fetchResults; - private executeAsyncS; - execute(url: string, processId: string, inputs: WpsInput[], outputDescriptions: WpsOutputDescription[]): Observable; - dismiss(serverUrl: string, processId: string, jobId: string): Observable; - postRaw(url: string, xmlBody: string): Observable; - getRaw(url: string): Observable; -} diff --git a/@ukis/services-ogc/package.json b/@ukis/services-ogc/package.json deleted file mode 100644 index e1ab6caf6..000000000 --- a/@ukis/services-ogc/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "@ukis/services-ogc", - "main": "bundles/ukis-services-ogc.umd.js", - "version": "0.0.0-PLACEHOLDER", - "peerDependencies": { - "@angular/common": "0.0.0-NG-PLACEHOLDER", - "@angular/core": "0.0.0-NG-PLACEHOLDER", - "rxjs": "0.0.0-rxjs-PLACEHOLDER" - }, - "dependencies": { - "@ukis/services-layers": "0.0.0-PLACEHOLDER", - "@ukis/services-util-store": "0.0.0-PLACEHOLDER", - "@ukis/base-layers-raster": "0.0.0-PLACEHOLDER", - "@ukis/services-map-state": "0.0.0-PLACEHOLDER", - "md5": "0.0.0-md5-PLACEHOLDER", - "w3c-schemas": "^1.4.0", - "ogc-schemas": "^2.6.1", - "ol": "^6.1.1", - "@boundlessgeo/jsonix": "^2.4.3", - "tslib": "^1.9.0" - }, - "devDependencies": { - "core-js": "0.0.0-corejs-PLACEHOLDER", - "zone.js": "0.0.0-zonejs-PLACEHOLDER", - "@angular/platform-browser-dynamic": "0.0.0-NG-PLACEHOLDER" - }, - "module": "fesm5/ukis-services-ogc.js", - "es2015": "fesm2015/ukis-services-ogc.js", - "esm5": "esm5/ukis-services-ogc.js", - "esm2015": "esm2015/ukis-services-ogc.js", - "fesm5": "fesm5/ukis-services-ogc.js", - "fesm2015": "fesm2015/ukis-services-ogc.js", - "typings": "ukis-services-ogc.d.ts", - "metadata": "ukis-services-ogc.metadata.json", - "sideEffects": false -} diff --git a/@ukis/services-ogc/public_api.d.ts b/@ukis/services-ogc/public_api.d.ts deleted file mode 100644 index 21e1937d7..000000000 --- a/@ukis/services-ogc/public_api.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './lib/services-ogc.module'; -export * from './lib/owc/owc-json.service'; -export * from './lib/owc/types/owc-json'; -export * from './lib/owc/types/eoc-owc-json'; -export * from './lib/wps/wpsclient'; -export * from './lib/wps/wps_datatypes'; -export * from './lib/wps/cache'; -export * from './lib/wmts/wmtsclient.service'; diff --git a/@ukis/services-ogc/ukis-services-ogc.d.ts b/@ukis/services-ogc/ukis-services-ogc.d.ts deleted file mode 100644 index 7417cc87f..000000000 --- a/@ukis/services-ogc/ukis-services-ogc.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -export * from './public_api'; diff --git a/@ukis/services-ogc/ukis-services-ogc.metadata.json b/@ukis/services-ogc/ukis-services-ogc.metadata.json deleted file mode 100644 index 36bc48c09..000000000 --- a/@ukis/services-ogc/ukis-services-ogc.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"__symbolic":"module","version":4,"metadata":{"ServicesOgcModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[],"imports":[],"exports":[],"providers":[{"__symbolic":"reference","name":"OwcJsonService"},{"__symbolic":"reference","name":"WmtsClientService"},{"__symbolic":"reference","name":"WpsClient"}]}]}],"members":{}},"isWmsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wms"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wms/1.1.1"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wms/1.1.0"}}},"isWfsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wfs"}},"isWpsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wcs"}},"isCswOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/csw"}},"isWmtsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wmts/1.0.0"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wmts/1.1.0"}}},"isGmlOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gml"}},"isKmlOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/kml"}},"isGeoTIFFOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff"}},"isGMLJP2Offering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2"}},"isGMLCOVOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov"}},"isXyzOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz"}},"isGeoJsonOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson"}},"shardsExpand":{"__symbolic":"function"},"OwcJsonService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":107,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"WmtsClientService"}]}],"checkContext":[{"__symbolic":"method"}],"getContextTitle":[{"__symbolic":"method"}],"getContextPublisher":[{"__symbolic":"method"}],"getContextExtent":[{"__symbolic":"method"}],"getResources":[{"__symbolic":"method"}],"getResourceTitle":[{"__symbolic":"method"}],"getResourceUpdated":[{"__symbolic":"method"}],"getResourceDate":[{"__symbolic":"method"}],"getResourceOfferings":[{"__symbolic":"method"}],"isActive":[{"__symbolic":"method"}],"getResourceOpacity":[{"__symbolic":"method"}],"getResourceAttribution":[{"__symbolic":"method"}],"getResourceShards":[{"__symbolic":"method"}],"convertOwcTimeToIsoTimeAndPeriodicity":[{"__symbolic":"method"}],"getResourceDimensions":[{"__symbolic":"method"}],"getLayertypeFromOfferingCode":[{"__symbolic":"method"}],"checkIfServiceOffering":[{"__symbolic":"method"}],"checkIfDataOffering":[{"__symbolic":"method"}],"getOfferingContents":[{"__symbolic":"method"}],"getLegendUrl":[{"__symbolic":"method"}],"getIconUrl":[{"__symbolic":"method"}],"getLayers":[{"__symbolic":"method"}],"createLayerFromOffering":[{"__symbolic":"method"}],"createVectorLayerFromOffering":[{"__symbolic":"method"}],"createRasterLayerFromOffering":[{"__symbolic":"method"}],"createWmtsLayerFromOffering":[{"__symbolic":"method"}],"createWmsLayerFromOffering":[{"__symbolic":"method"}],"getWmtsOptions":[{"__symbolic":"method"}],"getLayerForWMTS":[{"__symbolic":"method"}],"parseOperationUrl":[{"__symbolic":"method"}],"getMatrixSetForWMTS":[{"__symbolic":"method"}],"getWmsOptions":[{"__symbolic":"method"}],"getRasterLayerOptions":[{"__symbolic":"method"}],"getLayerOptions":[{"__symbolic":"method"}],"getUrlFromUri":[{"__symbolic":"method"}],"getJsonFromUri":[{"__symbolic":"method"}],"getDisplayName":[{"__symbolic":"method"}],"generateOwsContextFrom":[{"__symbolic":"method"}],"generateResourceFromLayer":[{"__symbolic":"method"}],"generateOfferingFromLayer":[{"__symbolic":"method"}],"getOfferingCodeFromLayer":[{"__symbolic":"method"}],"getContentsFromLayer":[{"__symbolic":"method"}],"getOperationsFromLayer":[{"__symbolic":"method"}],"getXyzOperationsFromLayer":[{"__symbolic":"method"}],"getTmsOperationsFromLayer":[{"__symbolic":"method"}],"getWfsOperationsFromLayer":[{"__symbolic":"method"}],"getWmsOperationsFromLayer":[{"__symbolic":"method"}],"getWmtsOperationsFromLayer":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"IOwsContext":{"__symbolic":"interface"},"IOwsResource":{"__symbolic":"interface"},"IOwsResourceProperties":{"__symbolic":"interface"},"IOwsOffering":{"__symbolic":"interface"},"IOwsCreator":{"__symbolic":"interface"},"IOwsAuthor":{"__symbolic":"interface"},"IOwsCategorie":{"__symbolic":"interface"},"IOwsLinks":{"__symbolic":"interface"},"IOwsCreatorApplication":{"__symbolic":"interface"},"IOwsCreatorDisplay":{"__symbolic":"interface"},"IOwsOperation":{"__symbolic":"interface"},"IOwsContent":{"__symbolic":"interface"},"IOwsStyleSet":{"__symbolic":"interface"},"DateString":{"__symbolic":"interface"},"LangString":{"__symbolic":"interface"},"WMS_Offering":{"__symbolic":"interface"},"WFS_Offering":{"__symbolic":"interface"},"WCS_Offering":{"__symbolic":"interface"},"WPS_Offering":{"__symbolic":"interface"},"CSW_Offering":{"__symbolic":"interface"},"WMTS_Offering":{"__symbolic":"interface"},"GML_Offering":{"__symbolic":"interface"},"KML_Offering":{"__symbolic":"interface"},"GeoTIFF_Offering":{"__symbolic":"interface"},"GMLJP2_Offering":{"__symbolic":"interface"},"GMLCOV_Offering":{"__symbolic":"interface"},"IEocOwsContext":{"__symbolic":"interface"},"IEocOwsResource":{"__symbolic":"interface"},"IEocOwsResourceProperties":{"__symbolic":"interface"},"IEocOwsResourceDimensions":{"__symbolic":"interface"},"IEocOwsResourceDimension":{"__symbolic":"interface"},"IEocOwsOffering":{"__symbolic":"interface"},"IEocWmsOffering":{"__symbolic":"interface"},"IEocOwsWmtsOffering":{"__symbolic":"interface"},"IEocOwsWmtsMatrixSet":{"__symbolic":"interface"},"IEocOwsProjection":{"__symbolic":"interface"},"GeoJson_Offering":{"__symbolic":"interface"},"Xyz_Offering":{"__symbolic":"interface"},"WpsClient":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":26,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":36,"character":9},"arguments":["WpsVersion"]}],null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":9},"arguments":["WpsCache"]}]],"parameters":[{"__symbolic":"reference","name":"WpsVerion"},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":37,"character":27},{"__symbolic":"reference","name":"Cache"}]}],"getCapabilities":[{"__symbolic":"method"}],"describeProcess":[{"__symbolic":"method"}],"executeAsync":[{"__symbolic":"method"}],"cachedQuery":[{"__symbolic":"method"}],"getNextState":[{"__symbolic":"method"}],"fetchResults":[{"__symbolic":"method"}],"executeAsyncS":[{"__symbolic":"method"}],"execute":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"postRaw":[{"__symbolic":"method"}],"getRaw":[{"__symbolic":"method"}]}},"WpsVerion":{"__symbolic":"interface"},"WpsDataFormat":{"__symbolic":"interface"},"ProcessId":{"__symbolic":"interface"},"ProductId":{"__symbolic":"interface"},"WpsDataDescription":{"__symbolic":"interface"},"WpsInputDescription":{"__symbolic":"interface"},"WpsOutputDescription":{"__symbolic":"interface"},"WpsData":{"__symbolic":"interface"},"WpsInput":{"__symbolic":"interface"},"WpsResult":{"__symbolic":"interface"},"WpsBboxDescription":{"__symbolic":"interface"},"WpsBboxValue":{"__symbolic":"interface"},"isBbox":{"__symbolic":"error","message":"Lambda not supported","line":45,"character":22,"module":"./lib/wps/wps_datatypes"},"WpsState":{"__symbolic":"interface"},"isWpsState":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["status"]}},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["jobID"]},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["statusLocation"]}}}},"WpsBboxData":{"__symbolic":"interface"},"WpsCapability":{"__symbolic":"interface"},"WpsMarshaller":{"__symbolic":"interface"},"Cache":{"__symbolic":"interface"},"FakeCache":{"__symbolic":"class","members":{"set":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}]}},"WmtsClientService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":28,"character":30}]}],"getCapabilities":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}}},"origins":{"ServicesOgcModule":"./lib/services-ogc.module","isWmsOffering":"./lib/owc/owc-json.service","isWfsOffering":"./lib/owc/owc-json.service","isWpsOffering":"./lib/owc/owc-json.service","isCswOffering":"./lib/owc/owc-json.service","isWmtsOffering":"./lib/owc/owc-json.service","isGmlOffering":"./lib/owc/owc-json.service","isKmlOffering":"./lib/owc/owc-json.service","isGeoTIFFOffering":"./lib/owc/owc-json.service","isGMLJP2Offering":"./lib/owc/owc-json.service","isGMLCOVOffering":"./lib/owc/owc-json.service","isXyzOffering":"./lib/owc/owc-json.service","isGeoJsonOffering":"./lib/owc/owc-json.service","shardsExpand":"./lib/owc/owc-json.service","OwcJsonService":"./lib/owc/owc-json.service","IOwsContext":"./lib/owc/types/owc-json","IOwsResource":"./lib/owc/types/owc-json","IOwsResourceProperties":"./lib/owc/types/owc-json","IOwsOffering":"./lib/owc/types/owc-json","IOwsCreator":"./lib/owc/types/owc-json","IOwsAuthor":"./lib/owc/types/owc-json","IOwsCategorie":"./lib/owc/types/owc-json","IOwsLinks":"./lib/owc/types/owc-json","IOwsCreatorApplication":"./lib/owc/types/owc-json","IOwsCreatorDisplay":"./lib/owc/types/owc-json","IOwsOperation":"./lib/owc/types/owc-json","IOwsContent":"./lib/owc/types/owc-json","IOwsStyleSet":"./lib/owc/types/owc-json","DateString":"./lib/owc/types/owc-json","LangString":"./lib/owc/types/owc-json","WMS_Offering":"./lib/owc/types/owc-json","WFS_Offering":"./lib/owc/types/owc-json","WCS_Offering":"./lib/owc/types/owc-json","WPS_Offering":"./lib/owc/types/owc-json","CSW_Offering":"./lib/owc/types/owc-json","WMTS_Offering":"./lib/owc/types/owc-json","GML_Offering":"./lib/owc/types/owc-json","KML_Offering":"./lib/owc/types/owc-json","GeoTIFF_Offering":"./lib/owc/types/owc-json","GMLJP2_Offering":"./lib/owc/types/owc-json","GMLCOV_Offering":"./lib/owc/types/owc-json","IEocOwsContext":"./lib/owc/types/eoc-owc-json","IEocOwsResource":"./lib/owc/types/eoc-owc-json","IEocOwsResourceProperties":"./lib/owc/types/eoc-owc-json","IEocOwsResourceDimensions":"./lib/owc/types/eoc-owc-json","IEocOwsResourceDimension":"./lib/owc/types/eoc-owc-json","IEocOwsOffering":"./lib/owc/types/eoc-owc-json","IEocWmsOffering":"./lib/owc/types/eoc-owc-json","IEocOwsWmtsOffering":"./lib/owc/types/eoc-owc-json","IEocOwsWmtsMatrixSet":"./lib/owc/types/eoc-owc-json","IEocOwsProjection":"./lib/owc/types/eoc-owc-json","GeoJson_Offering":"./lib/owc/types/eoc-owc-json","Xyz_Offering":"./lib/owc/types/eoc-owc-json","WpsClient":"./lib/wps/wpsclient","WpsVerion":"./lib/wps/wps_datatypes","WpsDataFormat":"./lib/wps/wps_datatypes","ProcessId":"./lib/wps/wps_datatypes","ProductId":"./lib/wps/wps_datatypes","WpsDataDescription":"./lib/wps/wps_datatypes","WpsInputDescription":"./lib/wps/wps_datatypes","WpsOutputDescription":"./lib/wps/wps_datatypes","WpsData":"./lib/wps/wps_datatypes","WpsInput":"./lib/wps/wps_datatypes","WpsResult":"./lib/wps/wps_datatypes","WpsBboxDescription":"./lib/wps/wps_datatypes","WpsBboxValue":"./lib/wps/wps_datatypes","isBbox":"./lib/wps/wps_datatypes","WpsState":"./lib/wps/wps_datatypes","isWpsState":"./lib/wps/wps_datatypes","WpsBboxData":"./lib/wps/wps_datatypes","WpsCapability":"./lib/wps/wps_datatypes","WpsMarshaller":"./lib/wps/wps_datatypes","Cache":"./lib/wps/cache","FakeCache":"./lib/wps/cache","WmtsClientService":"./lib/wmts/wmtsclient.service"},"importAs":"@ukis/services-ogc"} \ No newline at end of file diff --git a/@ukis/ukis-services-ogc.d.ts b/@ukis/ukis-services-ogc.d.ts deleted file mode 100644 index 7417cc87f..000000000 --- a/@ukis/ukis-services-ogc.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -export * from './public_api'; diff --git a/@ukis/ukis-services-ogc.metadata.json b/@ukis/ukis-services-ogc.metadata.json deleted file mode 100644 index 36bc48c09..000000000 --- a/@ukis/ukis-services-ogc.metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"__symbolic":"module","version":4,"metadata":{"ServicesOgcModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[],"imports":[],"exports":[],"providers":[{"__symbolic":"reference","name":"OwcJsonService"},{"__symbolic":"reference","name":"WmtsClientService"},{"__symbolic":"reference","name":"WpsClient"}]}]}],"members":{}},"isWmsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wms"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wms/1.1.1"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wms/1.1.0"}}},"isWfsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wfs"}},"isWpsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wcs"}},"isCswOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/csw"}},"isWmtsOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/wmts"},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wmts/1.0.0"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://schemas.opengis.net/wmts/1.1.0"}}},"isGmlOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gml"}},"isKmlOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/kml"}},"isGeoTIFFOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/geotiff"}},"isGMLJP2Offering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gmljp2"}},"isGMLCOVOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/gmlcov"}},"isXyzOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/xyz"}},"isGeoJsonOffering":{"__symbolic":"function","parameters":["str"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"reference","name":"str"},"right":"http://www.opengis.net/spec/owc-geojson/1.0/req/geojson"}},"shardsExpand":{"__symbolic":"function"},"OwcJsonService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":107,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"WmtsClientService"}]}],"checkContext":[{"__symbolic":"method"}],"getContextTitle":[{"__symbolic":"method"}],"getContextPublisher":[{"__symbolic":"method"}],"getContextExtent":[{"__symbolic":"method"}],"getResources":[{"__symbolic":"method"}],"getResourceTitle":[{"__symbolic":"method"}],"getResourceUpdated":[{"__symbolic":"method"}],"getResourceDate":[{"__symbolic":"method"}],"getResourceOfferings":[{"__symbolic":"method"}],"isActive":[{"__symbolic":"method"}],"getResourceOpacity":[{"__symbolic":"method"}],"getResourceAttribution":[{"__symbolic":"method"}],"getResourceShards":[{"__symbolic":"method"}],"convertOwcTimeToIsoTimeAndPeriodicity":[{"__symbolic":"method"}],"getResourceDimensions":[{"__symbolic":"method"}],"getLayertypeFromOfferingCode":[{"__symbolic":"method"}],"checkIfServiceOffering":[{"__symbolic":"method"}],"checkIfDataOffering":[{"__symbolic":"method"}],"getOfferingContents":[{"__symbolic":"method"}],"getLegendUrl":[{"__symbolic":"method"}],"getIconUrl":[{"__symbolic":"method"}],"getLayers":[{"__symbolic":"method"}],"createLayerFromOffering":[{"__symbolic":"method"}],"createVectorLayerFromOffering":[{"__symbolic":"method"}],"createRasterLayerFromOffering":[{"__symbolic":"method"}],"createWmtsLayerFromOffering":[{"__symbolic":"method"}],"createWmsLayerFromOffering":[{"__symbolic":"method"}],"getWmtsOptions":[{"__symbolic":"method"}],"getLayerForWMTS":[{"__symbolic":"method"}],"parseOperationUrl":[{"__symbolic":"method"}],"getMatrixSetForWMTS":[{"__symbolic":"method"}],"getWmsOptions":[{"__symbolic":"method"}],"getRasterLayerOptions":[{"__symbolic":"method"}],"getLayerOptions":[{"__symbolic":"method"}],"getUrlFromUri":[{"__symbolic":"method"}],"getJsonFromUri":[{"__symbolic":"method"}],"getDisplayName":[{"__symbolic":"method"}],"generateOwsContextFrom":[{"__symbolic":"method"}],"generateResourceFromLayer":[{"__symbolic":"method"}],"generateOfferingFromLayer":[{"__symbolic":"method"}],"getOfferingCodeFromLayer":[{"__symbolic":"method"}],"getContentsFromLayer":[{"__symbolic":"method"}],"getOperationsFromLayer":[{"__symbolic":"method"}],"getXyzOperationsFromLayer":[{"__symbolic":"method"}],"getTmsOperationsFromLayer":[{"__symbolic":"method"}],"getWfsOperationsFromLayer":[{"__symbolic":"method"}],"getWmsOperationsFromLayer":[{"__symbolic":"method"}],"getWmtsOperationsFromLayer":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}},"IOwsContext":{"__symbolic":"interface"},"IOwsResource":{"__symbolic":"interface"},"IOwsResourceProperties":{"__symbolic":"interface"},"IOwsOffering":{"__symbolic":"interface"},"IOwsCreator":{"__symbolic":"interface"},"IOwsAuthor":{"__symbolic":"interface"},"IOwsCategorie":{"__symbolic":"interface"},"IOwsLinks":{"__symbolic":"interface"},"IOwsCreatorApplication":{"__symbolic":"interface"},"IOwsCreatorDisplay":{"__symbolic":"interface"},"IOwsOperation":{"__symbolic":"interface"},"IOwsContent":{"__symbolic":"interface"},"IOwsStyleSet":{"__symbolic":"interface"},"DateString":{"__symbolic":"interface"},"LangString":{"__symbolic":"interface"},"WMS_Offering":{"__symbolic":"interface"},"WFS_Offering":{"__symbolic":"interface"},"WCS_Offering":{"__symbolic":"interface"},"WPS_Offering":{"__symbolic":"interface"},"CSW_Offering":{"__symbolic":"interface"},"WMTS_Offering":{"__symbolic":"interface"},"GML_Offering":{"__symbolic":"interface"},"KML_Offering":{"__symbolic":"interface"},"GeoTIFF_Offering":{"__symbolic":"interface"},"GMLJP2_Offering":{"__symbolic":"interface"},"GMLCOV_Offering":{"__symbolic":"interface"},"IEocOwsContext":{"__symbolic":"interface"},"IEocOwsResource":{"__symbolic":"interface"},"IEocOwsResourceProperties":{"__symbolic":"interface"},"IEocOwsResourceDimensions":{"__symbolic":"interface"},"IEocOwsResourceDimension":{"__symbolic":"interface"},"IEocOwsOffering":{"__symbolic":"interface"},"IEocWmsOffering":{"__symbolic":"interface"},"IEocOwsWmtsOffering":{"__symbolic":"interface"},"IEocOwsWmtsMatrixSet":{"__symbolic":"interface"},"IEocOwsProjection":{"__symbolic":"interface"},"GeoJson_Offering":{"__symbolic":"interface"},"Xyz_Offering":{"__symbolic":"interface"},"WpsClient":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":26,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":36,"character":9},"arguments":["WpsVersion"]}],null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":9},"arguments":["WpsCache"]}]],"parameters":[{"__symbolic":"reference","name":"WpsVerion"},{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":37,"character":27},{"__symbolic":"reference","name":"Cache"}]}],"getCapabilities":[{"__symbolic":"method"}],"describeProcess":[{"__symbolic":"method"}],"executeAsync":[{"__symbolic":"method"}],"cachedQuery":[{"__symbolic":"method"}],"getNextState":[{"__symbolic":"method"}],"fetchResults":[{"__symbolic":"method"}],"executeAsyncS":[{"__symbolic":"method"}],"execute":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"postRaw":[{"__symbolic":"method"}],"getRaw":[{"__symbolic":"method"}]}},"WpsVerion":{"__symbolic":"interface"},"WpsDataFormat":{"__symbolic":"interface"},"ProcessId":{"__symbolic":"interface"},"ProductId":{"__symbolic":"interface"},"WpsDataDescription":{"__symbolic":"interface"},"WpsInputDescription":{"__symbolic":"interface"},"WpsOutputDescription":{"__symbolic":"interface"},"WpsData":{"__symbolic":"interface"},"WpsInput":{"__symbolic":"interface"},"WpsResult":{"__symbolic":"interface"},"WpsBboxDescription":{"__symbolic":"interface"},"WpsBboxValue":{"__symbolic":"interface"},"isBbox":{"__symbolic":"error","message":"Lambda not supported","line":45,"character":22,"module":"./lib/wps/wps_datatypes"},"WpsState":{"__symbolic":"interface"},"isWpsState":{"__symbolic":"function","parameters":["obj"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"obj"},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["status"]}},"right":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["jobID"]},"right":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"obj"},"member":"hasOwnProperty"},"arguments":["statusLocation"]}}}},"WpsBboxData":{"__symbolic":"interface"},"WpsCapability":{"__symbolic":"interface"},"WpsMarshaller":{"__symbolic":"interface"},"Cache":{"__symbolic":"interface"},"FakeCache":{"__symbolic":"class","members":{"set":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}]}},"WmtsClientService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/common/http","name":"HttpClient","line":28,"character":30}]}],"getCapabilities":[{"__symbolic":"method"}]},"statics":{"ngInjectableDef":{}}}},"origins":{"ServicesOgcModule":"./lib/services-ogc.module","isWmsOffering":"./lib/owc/owc-json.service","isWfsOffering":"./lib/owc/owc-json.service","isWpsOffering":"./lib/owc/owc-json.service","isCswOffering":"./lib/owc/owc-json.service","isWmtsOffering":"./lib/owc/owc-json.service","isGmlOffering":"./lib/owc/owc-json.service","isKmlOffering":"./lib/owc/owc-json.service","isGeoTIFFOffering":"./lib/owc/owc-json.service","isGMLJP2Offering":"./lib/owc/owc-json.service","isGMLCOVOffering":"./lib/owc/owc-json.service","isXyzOffering":"./lib/owc/owc-json.service","isGeoJsonOffering":"./lib/owc/owc-json.service","shardsExpand":"./lib/owc/owc-json.service","OwcJsonService":"./lib/owc/owc-json.service","IOwsContext":"./lib/owc/types/owc-json","IOwsResource":"./lib/owc/types/owc-json","IOwsResourceProperties":"./lib/owc/types/owc-json","IOwsOffering":"./lib/owc/types/owc-json","IOwsCreator":"./lib/owc/types/owc-json","IOwsAuthor":"./lib/owc/types/owc-json","IOwsCategorie":"./lib/owc/types/owc-json","IOwsLinks":"./lib/owc/types/owc-json","IOwsCreatorApplication":"./lib/owc/types/owc-json","IOwsCreatorDisplay":"./lib/owc/types/owc-json","IOwsOperation":"./lib/owc/types/owc-json","IOwsContent":"./lib/owc/types/owc-json","IOwsStyleSet":"./lib/owc/types/owc-json","DateString":"./lib/owc/types/owc-json","LangString":"./lib/owc/types/owc-json","WMS_Offering":"./lib/owc/types/owc-json","WFS_Offering":"./lib/owc/types/owc-json","WCS_Offering":"./lib/owc/types/owc-json","WPS_Offering":"./lib/owc/types/owc-json","CSW_Offering":"./lib/owc/types/owc-json","WMTS_Offering":"./lib/owc/types/owc-json","GML_Offering":"./lib/owc/types/owc-json","KML_Offering":"./lib/owc/types/owc-json","GeoTIFF_Offering":"./lib/owc/types/owc-json","GMLJP2_Offering":"./lib/owc/types/owc-json","GMLCOV_Offering":"./lib/owc/types/owc-json","IEocOwsContext":"./lib/owc/types/eoc-owc-json","IEocOwsResource":"./lib/owc/types/eoc-owc-json","IEocOwsResourceProperties":"./lib/owc/types/eoc-owc-json","IEocOwsResourceDimensions":"./lib/owc/types/eoc-owc-json","IEocOwsResourceDimension":"./lib/owc/types/eoc-owc-json","IEocOwsOffering":"./lib/owc/types/eoc-owc-json","IEocWmsOffering":"./lib/owc/types/eoc-owc-json","IEocOwsWmtsOffering":"./lib/owc/types/eoc-owc-json","IEocOwsWmtsMatrixSet":"./lib/owc/types/eoc-owc-json","IEocOwsProjection":"./lib/owc/types/eoc-owc-json","GeoJson_Offering":"./lib/owc/types/eoc-owc-json","Xyz_Offering":"./lib/owc/types/eoc-owc-json","WpsClient":"./lib/wps/wpsclient","WpsVerion":"./lib/wps/wps_datatypes","WpsDataFormat":"./lib/wps/wps_datatypes","ProcessId":"./lib/wps/wps_datatypes","ProductId":"./lib/wps/wps_datatypes","WpsDataDescription":"./lib/wps/wps_datatypes","WpsInputDescription":"./lib/wps/wps_datatypes","WpsOutputDescription":"./lib/wps/wps_datatypes","WpsData":"./lib/wps/wps_datatypes","WpsInput":"./lib/wps/wps_datatypes","WpsResult":"./lib/wps/wps_datatypes","WpsBboxDescription":"./lib/wps/wps_datatypes","WpsBboxValue":"./lib/wps/wps_datatypes","isBbox":"./lib/wps/wps_datatypes","WpsState":"./lib/wps/wps_datatypes","isWpsState":"./lib/wps/wps_datatypes","WpsBboxData":"./lib/wps/wps_datatypes","WpsCapability":"./lib/wps/wps_datatypes","WpsMarshaller":"./lib/wps/wps_datatypes","Cache":"./lib/wps/cache","FakeCache":"./lib/wps/cache","WmtsClientService":"./lib/wmts/wmtsclient.service"},"importAs":"@ukis/services-ogc"} \ No newline at end of file diff --git a/projects/base-layers-raster/karma.conf.js b/projects/base-layers-raster/karma.conf.js deleted file mode 100644 index a4d8620e9..000000000 --- a/projects/base-layers-raster/karma.conf.js +++ /dev/null @@ -1,42 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-junit-reporter'), - require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - coverageIstanbulReporter: { - dir: require('path').join(__dirname, '../../coverage'), - reports: ['html', 'lcovonly'], - fixWebpackSourcePaths: true - }, - reporters: ['progress', 'kjhtml', 'junit'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - // the default configuration - junitReporter: { - outputDir: '../test-junit/', // results will be saved as $outputDir/$browserName.xml - outputFile: 'base-layers-raster.xml', // if included, results will be saved as $outputDir/$browserName/$outputFile - suite: 'base-layers-raster', // suite will become the package name attribute in xml testsuite element - useBrowserName: true, // add browser name to report and classes names - nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element - classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element - properties: {} // key value pair of properties to add to the section of the report - } - }); -}; diff --git a/projects/base-layers-raster/ng-package.json b/projects/base-layers-raster/ng-package.json deleted file mode 100644 index a3b93c7a4..000000000 --- a/projects/base-layers-raster/ng-package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/base-layers-raster", - "lib": { - "entryFile": "src/public_api.ts" - }, - "whitelistedNonPeerDependencies": [ - "tslib", - "@ukis/services-layers" - ] -} \ No newline at end of file diff --git a/projects/base-layers-raster/package.json b/projects/base-layers-raster/package.json deleted file mode 100644 index b5c163b29..000000000 --- a/projects/base-layers-raster/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "@ukis/base-layers-raster", - "version": "0.0.0-PLACEHOLDER", - "main": "src/public_api", - "peerDependencies": {}, - "dependencies": { - "@ukis/services-layers": "0.0.0-PLACEHOLDER" - } -} \ No newline at end of file diff --git a/projects/base-layers-raster/src/lib/raster-layers.spec.ts b/projects/base-layers-raster/src/lib/raster-layers.spec.ts deleted file mode 100644 index 958c150da..000000000 --- a/projects/base-layers-raster/src/lib/raster-layers.spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { RasterLayer } from '@ukis/services-layers'; - -import { osm } from './raster-layers'; - -describe('Base Layers', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('osm should be instanceof of a UKIS RasterLayer', () => { - const testLayer: osm = new osm(); - expect(testLayer instanceof RasterLayer).toBeTruthy(); - }); - -}); diff --git a/projects/base-layers-raster/src/lib/raster-layers.ts b/projects/base-layers-raster/src/lib/raster-layers.ts deleted file mode 100644 index b905c7cca..000000000 --- a/projects/base-layers-raster/src/lib/raster-layers.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { RasterLayer, IRasterLayerOptions } from '@ukis/services-layers'; - -export class google_earth extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'Google Satellite', - displayName: 'Google Satellite', - id: 'google_satellite', - visible: false, - type: 'xyz', - url: 'https://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', - attribution: '©, Google contributors', - subdomains: ['mt0', 'mt1', 'mt2', 'mt3'], - continuousWorld: false, - legendImg: 'google-sat.png', - description: '© google.com/vt/lyrs - satellite only', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - -export class google_maps extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'Google Maps', - displayName: 'Google Maps', - id: 'google_maps', - visible: false, - type: 'xyz', - url: 'https://{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}', - attribution: '©, Google contributors', - subdomains: ['mt0', 'mt1', 'mt2', 'mt3'], - continuousWorld: true, - legendImg: 'google-maps.png', - description: '© google.com/vt/lyrs - terrain', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - -export class google_hybrid extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'Google Hybrid', - displayName: 'Google Hybrid', - id: 'google_maps', - visible: false, - type: 'xyz', - url: 'https://{s}.google.com/vt/lyrs=y&x={x}&y={y}&z={z}', - attribution: '©, Google contributors', - subdomains: ['mt0', 'mt1', 'mt2', 'mt3'], - continuousWorld: false, - legendImg: 'google-hybrid.png', - description: '© google.com/vt/lyrs - hybrid', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - -export class esri_grey_canvas extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'ESRI Neutral Map', - displayName: 'ESRI Neutral Map', - id: 'esri_grey_canvas', - visible: false, - type: 'xyz', - url: 'https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/tile/{z}/{y}/{x}.png', - attribution: '© ESRI', - continuousWorld: false, - legendImg: 'esri_grey_canvas.png', - description: '© arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - -export class esri_world_imagery extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'ESRI Imagery', - displayName: 'ESRI Imagery', - id: 'esri_imagery', - visible: false, - type: 'xyz', - url: 'https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png', - attribution: '© ESRI', - continuousWorld: false, - legendImg: 'esri_imagery.png', - description: '© arcgisonline.com/arcgis/rest/services/World_Imagery', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - -export class esri_ocean_imagery extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'ESRI Ocean', - displayName: 'ESRI Ocean', - id: 'esri_ocean', - visible: false, - type: 'xyz', - url: 'https://server.arcgisonline.com/arcgis/rest/services/Ocean_Basemap/MapServer/tile/{z}/{y}/{x}.png', - attribution: '© ESRI', - continuousWorld: false, - legendImg: 'esri-ocean.png', - description: '© arcgisonline.com/arcgis/rest/services/Ocean_Basemap', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - -export class esri_nav_charts extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'ESRI Charts', - displayName: 'ESRI Charts', - id: 'esri_charts', - visible: false, - type: 'xyz', - url: 'https://server.arcgisonline.com/arcgis/rest/services/Specialty/World_Navigation_Charts/MapServer/tile/{z}/{y}/{x}.png', - attribution: '© ESRI', - continuousWorld: false, - legendImg: 'esri_charts.png', - description: '© arcgisonline.com/arcgis/rest/services/Specialty/World_Navigation_Charts', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - -export class osm extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'OpenStreetMap', - displayName: 'OpenStreetMap', - id: 'osm', - visible: false, - type: 'xyz', - url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', - subdomains: ['a', 'b', 'c'], - attribution: '©, OpenStreetMap contributors', - continuousWorld: false, - legendImg: 'osm.png', - description: '© OpenStreetMap and contributors', - opacity: 1, - zIndex: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - -export class eoc_litemap extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'EOC Litemap', - displayName: 'EOC Litemap', - id: 'eoc_litemap', - visible: false, - type: 'wms', - removable: false, - params: { - layers: 'litemap', - format: 'image/png', - transparent: true, - attribution: "", - }, - url: 'https://geoservice.dlr.de/eoc/basemap/wms', - attribution: '©, DLR', - continuousWorld: false, - legendImg: 'eoc_litemap.png', - description: 'http://www.naturalearthdata.com/about/', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} - - - -export class open_sea_map extends RasterLayer { - constructor(options?: IRasterLayerOptions) { - let _options: IRasterLayerOptions = { - name: 'OpenSeaMap', - displayName: 'OpenSeaMap', - id: 'OpenSeaMap', - visible: false, - type: 'xyz', - removable: false, - url: 'https://{s}.openseamap.org/seamark/{z}/{x}/{y}.png', - subdomains: ['t1'], - attribution: '', - continuousWorld: false, - zIndex: 99999, - legendImg: '', - description: 'http://map.openseamap.org/', - opacity: 1 - } - if (options) { Object.assign(_options, options); } - super(_options) - } -} diff --git a/projects/base-layers-raster/src/public_api.ts b/projects/base-layers-raster/src/public_api.ts deleted file mode 100644 index 1f364514f..000000000 --- a/projects/base-layers-raster/src/public_api.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* - * Public API Surface of raster - */ - -export * from './lib/raster-layers'; diff --git a/projects/base-layers-raster/src/test.ts b/projects/base-layers-raster/src/test.ts deleted file mode 100644 index e11ff1c97..000000000 --- a/projects/base-layers-raster/src/test.ts +++ /dev/null @@ -1,22 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'core-js/es7/reflect'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: any; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/projects/base-layers-raster/tsconfig.lib.json b/projects/base-layers-raster/tsconfig.lib.json deleted file mode 100644 index 20cea00e0..000000000 --- a/projects/base-layers-raster/tsconfig.lib.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/lib", - "target": "es2015", - "module": "es2015", - "moduleResolution": "node", - "declaration": true, - "sourceMap": true, - "inlineSources": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "importHelpers": true, - "types": [], - "lib": [ - "dom", - "es2018" - ] - }, - "angularCompilerOptions": { - "annotateForClosureCompiler": true, - "skipTemplateCodegen": true, - "strictMetadataEmit": true, - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true, - "enableResourceInlining": true - }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] -} \ No newline at end of file diff --git a/projects/base-layers-raster/tsconfig.spec.json b/projects/base-layers-raster/tsconfig.spec.json deleted file mode 100644 index 387699954..000000000 --- a/projects/base-layers-raster/tsconfig.spec.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] - }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts", - "../../node_modules/@ukis/datatypes/projects/layers/src/lib/Layers.ts" - ] -} \ No newline at end of file diff --git a/projects/base-layers-raster/tslint.json b/projects/base-layers-raster/tslint.json deleted file mode 100644 index bdd3d3033..000000000 --- a/projects/base-layers-raster/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "ukis", - "camelCase" - ], - "component-selector": [ - true, - "element", - "ukis", - "kebab-case" - ] - } -} diff --git a/src/app/route-components/licenses/licenses.component.html b/src/app/route-components/licenses/licenses.component.html index ac58afaf8..c43e29475 100644 --- a/src/app/route-components/licenses/licenses.component.html +++ b/src/app/route-components/licenses/licenses.component.html @@ -14,5 +14,5 @@ {{l.repository}} - {{(licenses | async).length}} third party dependencies + {{(licenses | async).length}} {{ 'third party dependencies' | translate }} \ No newline at end of file