UNPKG

angular-cesium

Version:
256 lines 29.7 kB
import { __decorate, __metadata, __param } from "tslib"; import { DOCUMENT } from '@angular/common'; import { AfterViewInit, Component, ElementRef, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; import { CesiumService } from '../../services/cesium/cesium.service'; import { ConfigurationService } from '../../cesium-enhancements/ConfigurationService'; import { SceneMode } from '../../models/scene-mode.enum'; import { CameraService } from '../../services/camera/camera.service'; import { ContextMenuService } from '../../services/context-menu/context-menu.service'; import { CoordinateConverter } from '../../services/coordinate-converter/coordinate-converter.service'; import { ArcDrawerService } from '../../services/drawers/arc-drawer/arc-drawer.service'; import { BillboardDrawerService } from '../../services/drawers/billboard-drawer/billboard-drawer.service'; import { CzmlDrawerService } from '../../services/drawers/czml-drawer/czml-drawer.service'; import { EllipseDrawerService } from '../../services/drawers/ellipse-drawer/ellipse-drawer.service'; import { LabelDrawerService } from '../../services/drawers/label-drawer/label-drawer.service'; import { PointDrawerService } from '../../services/drawers/point-drawer/point-drawer.service'; import { PolygonDrawerService } from '../../services/drawers/polygon-drawer/polygon-drawer.service'; import { PolylineDrawerService } from '../../services/drawers/polyline-drawer/polyline-drawer.service'; import { PolylinePrimitiveDrawerService } from '../../services/drawers/polyline-primitive-drawer/polyline-primitive-drawer.service'; import { KeyboardControlService } from '../../services/keyboard-control/keyboard-control.service'; import { CesiumEventBuilder } from '../../services/map-events-mananger/cesium-event-builder'; import { MapEventsManagerService } from '../../services/map-events-mananger/map-events-manager'; import { MapLayersService } from '../../services/map-layers/map-layers.service'; import { MapsManagerService } from '../../services/maps-manager/maps-manager.service'; import { PlonterService } from '../../services/plonter/plonter.service'; import { ScreenshotService } from '../../services/screenshot/screenshot.service'; /** * This is a map implementation, creates the cesium map. * Every layer should be tag inside ac-map tag * * Accessing cesium viewer: * 1. acMapComponent.getCesiumViewer() * 2. Use MapManagerService.getMap().getCesiumViewer() or if more then one map: MapManagerService.getMap(mapId).getCesiumViewer() * * * @example * <ac-map> * <ac-map-layer-provider></ac-map-layer-provider> * <dynamic-ellipse-layer #layer></dynamic-ellipse-layer> * </ac-map> */ let AcMapComponent = class AcMapComponent { constructor(_cesiumService, _cameraService, _elemRef, document, mapsManagerService, billboardDrawerService, labelDrawerService, ellipseDrawerService, polylineDrawerService, polygonDrawerService, arcDrawerService, pointDrawerService, czmlDrawerService, mapEventsManager, keyboardControlService, mapLayersService, configurationService, screenshotService, contextMenuService, coordinateConverter) { this._cesiumService = _cesiumService; this._cameraService = _cameraService; this._elemRef = _elemRef; this.document = document; this.mapsManagerService = mapsManagerService; this.billboardDrawerService = billboardDrawerService; this.labelDrawerService = labelDrawerService; this.ellipseDrawerService = ellipseDrawerService; this.polylineDrawerService = polylineDrawerService; this.polygonDrawerService = polygonDrawerService; this.arcDrawerService = arcDrawerService; this.pointDrawerService = pointDrawerService; this.czmlDrawerService = czmlDrawerService; this.mapEventsManager = mapEventsManager; this.keyboardControlService = keyboardControlService; this.mapLayersService = mapLayersService; this.configurationService = configurationService; this.screenshotService = screenshotService; this.contextMenuService = contextMenuService; this.coordinateConverter = coordinateConverter; /** * Disable default plonter context menu */ this.disableDefaultPlonter = false; this.mapContainer = this.document.createElement('div'); this.mapContainer.style.width = '100%'; this.mapContainer.style.height = '100%'; this.mapContainer.className = 'map-container'; this._cesiumService.init(this.mapContainer, this); this._cameraService.init(this._cesiumService); this.mapEventsManager.init(); this.billboardDrawerService.init(); this.labelDrawerService.init(); this.ellipseDrawerService.init(); this.polylineDrawerService.init(); this.polygonDrawerService.init(); this.arcDrawerService.init(); this.pointDrawerService.init(); this.czmlDrawerService.init(); this.keyboardControlService.init(); this.contextMenuService.init(this.mapEventsManager); } ngOnInit() { this.mapId = this.mapsManagerService._registerMap(this.mapId, this); if (!this.containerId) { this._elemRef.nativeElement.appendChild(this.mapContainer); } } ngOnChanges(changes) { if (changes['sceneMode']) { this._cameraService.setSceneMode(changes['sceneMode'].currentValue); } if (changes['flyTo']) { this._cameraService.cameraFlyTo(changes['flyTo'].currentValue); } if (changes['containerId'] && !changes['containerId'].firstChange) { const element = this.document.getElementById(changes['containerId'].currentValue); if (element) { element.appendChild(this.mapContainer); } else { throw new Error(`No element found with id: ${changes['containerId'].currentValue}`); } } } ngAfterViewInit() { this.mapLayersService.drawAllLayers(); if (this.containerId) { setTimeout(() => { const element = this.document.getElementById(this.containerId); if (element) { element.appendChild(this.mapContainer); } else { throw new Error(`No element found with id: ${this.containerId}`); } }, 0); } } ngOnDestroy() { this.mapContainer.remove(); this.mapsManagerService._removeMapById(this.mapId); } /** * @returns ac-map's cesium service */ getCesiumService() { return this._cesiumService; } /** * @returns map's cesium viewer */ getCesiumViewer() { return this._cesiumService.getViewer(); } getCameraService() { return this._cameraService; } getId() { return this.mapId; } getMapContainer() { return this.mapContainer; } getMapEventsManager() { return this.mapEventsManager; } getContextMenuService() { return this.contextMenuService; } getScreenshotService() { return this.screenshotService; } getKeyboardControlService() { return this.keyboardControlService; } getCoordinateConverter() { return this.coordinateConverter; } }; AcMapComponent.ctorParameters = () => [ { type: CesiumService }, { type: CameraService }, { type: ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: MapsManagerService }, { type: BillboardDrawerService }, { type: LabelDrawerService }, { type: EllipseDrawerService }, { type: PolylineDrawerService }, { type: PolygonDrawerService }, { type: ArcDrawerService }, { type: PointDrawerService }, { type: CzmlDrawerService }, { type: MapEventsManagerService }, { type: KeyboardControlService }, { type: MapLayersService }, { type: ConfigurationService }, { type: ScreenshotService }, { type: ContextMenuService }, { type: CoordinateConverter } ]; __decorate([ Input(), __metadata("design:type", Object) ], AcMapComponent.prototype, "disableDefaultPlonter", void 0); __decorate([ Input(), __metadata("design:type", String) ], AcMapComponent.prototype, "mapId", void 0); __decorate([ Input(), __metadata("design:type", Object) ], AcMapComponent.prototype, "flyTo", void 0); __decorate([ Input(), __metadata("design:type", Number) ], AcMapComponent.prototype, "sceneMode", void 0); __decorate([ Input(), __metadata("design:type", String) ], AcMapComponent.prototype, "containerId", void 0); AcMapComponent = __decorate([ Component({ selector: 'ac-map', template: ` <ac-default-plonter *ngIf="!disableDefaultPlonter"></ac-default-plonter> <ac-context-menu-wrapper></ac-context-menu-wrapper> <ng-content></ng-content> `, providers: [ CesiumService, BillboardDrawerService, CesiumEventBuilder, KeyboardControlService, MapEventsManagerService, PlonterService, LabelDrawerService, PolylineDrawerService, PolylinePrimitiveDrawerService, EllipseDrawerService, PointDrawerService, ArcDrawerService, CzmlDrawerService, PolygonDrawerService, MapLayersService, CameraService, ScreenshotService, ContextMenuService, CoordinateConverter, ] }), __param(3, Inject(DOCUMENT)), __metadata("design:paramtypes", [CesiumService, CameraService, ElementRef, Object, MapsManagerService, BillboardDrawerService, LabelDrawerService, EllipseDrawerService, PolylineDrawerService, PolygonDrawerService, ArcDrawerService, PointDrawerService, CzmlDrawerService, MapEventsManagerService, KeyboardControlService, MapLayersService, ConfigurationService, ScreenshotService, ContextMenuService, CoordinateConverter]) ], AcMapComponent); export { AcMapComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWMtbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItY2VzaXVtLyIsInNvdXJjZXMiOlsibGliL2FuZ3VsYXItY2VzaXVtL2NvbXBvbmVudHMvYWMtbWFwL2FjLW1hcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDeEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDMUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1B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Q0FDTTtBQU1kO0lBREMsS0FBSyxFQUFFOzs2Q0FDRztBQU1YO0lBREMsS0FBSyxFQUFFOztpREFDYTtBQU9yQjtJQURDLEtBQUssRUFBRTs7bURBQ1k7QUEvQlQsY0FBYztJQTdCMUIsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsUUFBUSxFQUFFOzs7O0dBSVQ7UUFDRCxTQUFTLEVBQUU7WUFDVCxhQUFhO1lBQ2Isc0JBQXNCO1lBQ3RCLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLDhCQUE4QjtZQUM5QixvQkFBb0I7WUFDcEIsa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGtCQUFrQjtZQUNsQixtQkFBbUI7U0FDcEI7S0FDRixDQUFDO0lBd0NHLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO3FDQUhPLGFBQWE7UUFDYixhQUFhO1FBQ25CLFVBQVUsVUFFQSxrQkFBa0I7UUFDZCxzQkFBc0I7UUFDMUIsa0JBQWtCO1FBQ2hCLG9CQUFvQjtRQUNuQixxQkFBcUI7UUFDdEIsb0JBQW9CO1FBQ3hCLGdCQUFnQjtRQUNkLGtCQUFrQjtRQUNuQixpQkFBaUI7UUFDbEIsdUJBQXVCO1FBQ2pCLHNCQUFzQjtRQUM1QixnQkFBZ0I7UUFDWixvQkFBb0I7UUFDdkIsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNoQixtQkFBbUI7R0F2RHZDLGNBQWMsQ0F1SzFCO1NBdktZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlc2l1bVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jZXNpdW0tZW5oYW5jZW1lbnRzL0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lTW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy9zY2VuZS1tb2RlLmVudW0nO1xuaW1wb3J0IHsgQ2FtZXJhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhbWVyYS9jYW1lcmEuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0TWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvb3JkaW5hdGUtY29udmVydGVyL2Nvb3JkaW5hdGUtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJjRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvYXJjLWRyYXdlci9hcmMtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmlsbGJvYXJkRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvYmlsbGJvYXJkLWRyYXdlci9iaWxsYm9hcmQtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3ptbERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2N6bWwtZHJhd2VyL2N6bWwtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxsaXBzZURyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2VsbGlwc2UtZHJhd2VyL2VsbGlwc2UtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFiZWxEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9sYWJlbC1kcmF3ZXIvbGFiZWwtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9pbnREcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2ludC1kcmF3ZXIvcG9pbnQtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9seWdvbkRyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL3BvbHlnb24tZHJhd2VyL3BvbHlnb24tZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9seWxpbmVEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2x5bGluZS1kcmF3ZXIvcG9seWxpbmUtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9seWxpbmVQcmltaXRpdmVEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2x5bGluZS1wcmltaXRpdmUtZHJhd2VyL3BvbHlsaW5lLXByaW1pdGl2ZS1kcmF3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlib2FyZENvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2V5Ym9hcmQtY29udHJvbC9rZXlib2FyZC1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VzaXVtRXZlbnRCdWlsZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwLWV2ZW50cy1tYW5hbmdlci9jZXNpdW0tZXZlbnQtYnVpbGRlcic7XG5pbXBvcnQgeyBNYXBFdmVudHNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvbWFwLWV2ZW50cy1tYW5hZ2VyJztcbmltcG9ydCB7IE1hcExheWVyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXAtbGF5ZXJzL21hcC1sYXllcnMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXBzTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBzLW1hbmFnZXIvbWFwcy1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxvbnRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbG9udGVyL3Bsb250ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTY3JlZW5zaG90U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NjcmVlbnNob3Qvc2NyZWVuc2hvdC5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGlzIGlzIGEgbWFwIGltcGxlbWVudGF0aW9uLCBjcmVhdGVzIHRoZSBjZXNpdW0gbWFwLlxuICogRXZlcnkgbGF5ZXIgc2hvdWxkIGJlIHRhZyBpbnNpZGUgYWMtbWFwIHRhZ1xuICpcbiAqIEFjY2Vzc2luZyBjZXNpdW0gdmlld2VyOlxuICogMS4gYWNNYXBDb21wb25lbnQuZ2V0Q2VzaXVtVmlld2VyKClcbiAqIDIuIFVzZSBNYXBNYW5hZ2VyU2VydmljZS5nZXRNYXAoKS5nZXRDZXNpdW1WaWV3ZXIoKSBvciBpZiBtb3JlIHRoZW4gb25lIG1hcDogTWFwTWFuYWdlclNlcnZpY2UuZ2V0TWFwKG1hcElkKS5nZXRDZXNpdW1WaWV3ZXIoKVxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogPGFjLW1hcD5cbiAqICAgICA8YWMtbWFwLWxheWVyLXByb3ZpZGVyPjwvYWMtbWFwLWxheWVyLXByb3ZpZGVyPlxuICogICAgIDxkeW5hbWljLWVsbGlwc2UtbGF5ZXIgI2xheWVyPjwvZHluYW1pYy1lbGxpcHNlLWxheWVyPlxuICogPC9hYy1tYXA+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjLW1hcCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGFjLWRlZmF1bHQtcGxvbnRlciAqbmdJZj1cIiFkaXNhYmxlRGVmYXVsdFBsb250ZXJcIj48L2FjLWRlZmF1bHQtcGxvbnRlcj5cbiAgICA8YWMtY29udGV4dC1tZW51LXdyYXBwZXI+PC9hYy1jb250ZXh0LW1lbnUtd3JhcHBlcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIENlc2l1bVNlcnZpY2UsXG4gICAgQmlsbGJvYXJkRHJhd2VyU2VydmljZSxcbiAgICBDZXNpdW1FdmVudEJ1aWxkZXIsXG4gICAgS2V5Ym9hcmRDb250cm9sU2VydmljZSxcbiAgICBNYXBFdmVudHNNYW5hZ2VyU2VydmljZSxcbiAgICBQbG9udGVyU2VydmljZSxcbiAgICBMYWJlbERyYXdlclNlcnZpY2UsXG4gICAgUG9seWxpbmVEcmF3ZXJTZXJ2aWNlLFxuICAgIFBvbHlsaW5lUHJpbWl0aXZlRHJhd2VyU2VydmljZSxcbiAgICBFbGxpcHNlRHJhd2VyU2VydmljZSxcbiAgICBQb2ludERyYXdlclNlcnZpY2UsXG4gICAgQXJjRHJhd2VyU2VydmljZSxcbiAgICBDem1sRHJhd2VyU2VydmljZSxcbiAgICBQb2x5Z29uRHJhd2VyU2VydmljZSxcbiAgICBNYXBMYXllcnNTZXJ2aWNlLFxuICAgIENhbWVyYVNlcnZpY2UsXG4gICAgU2NyZWVuc2hvdFNlcnZpY2UsXG4gICAgQ29udGV4dE1lbnVTZXJ2aWNlLFxuICAgIENvb3JkaW5hdGVDb252ZXJ0ZXIsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFjTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEaXNhYmxlIGRlZmF1bHQgcGxvbnRlciBjb250ZXh0IG1lbnVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVEZWZhdWx0UGxvbnRlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGlkIG5hbWUgb2YgdGhlIG1hcFxuICAgKiBkZWZhdWx0OiAnZGVmYXVsdC1tYXAtaWQtW2luZGV4XSdcbiAgICovXG4gIEBJbnB1dCgpXG4gIG1hcElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIGZseVRvIG9wdGlvbnMgYWNjb3JkaW5nIHRvIGh0dHBzOi8vY2VzaXVtanMub3JnL0Nlc2l1bS9CdWlsZC9Eb2N1bWVudGF0aW9uL0NhbWVyYS5odG1sP2NsYXNzRmlsdGVyPWNhbSNmbHlUb1xuICAgKi9cbiAgQElucHV0KClcbiAgZmx5VG86IGFueTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgbWFwJ3MgU2NlbmVNb2RlXG4gICAqL1xuICBASW5wdXQoKVxuICBzY2VuZU1vZGU6IFNjZW5lTW9kZTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgLSB0aGUgY29udGFpbmVyIGVsZW1lbnQncyBpZCBpbiB3aGljaCB0aGUgbWFwJ3MgY2FudmFzIHdpbGwgYmUgYXBwZW5kZWQgdG8uXG4gICAqIElmIG5vdCBzdXBwbGllZCAtIHRoZSBjb250YWluZXIgZWxlbWVudCB3aWxsIGJlIHRoZSBwYXJlbnQgZWxlbWVudCBvZiBhYy1tYXA7XG4gICAqL1xuICBASW5wdXQoKVxuICBjb250YWluZXJJZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgbWFwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jZXNpdW1TZXJ2aWNlOiBDZXNpdW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxlbVJlZjogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50LFxuICAgIHByaXZhdGUgbWFwc01hbmFnZXJTZXJ2aWNlOiBNYXBzTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiaWxsYm9hcmREcmF3ZXJTZXJ2aWNlOiBCaWxsYm9hcmREcmF3ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFiZWxEcmF3ZXJTZXJ2aWNlOiBMYWJlbERyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGxpcHNlRHJhd2VyU2VydmljZTogRWxsaXBzZURyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb2x5bGluZURyYXdlclNlcnZpY2U6IFBvbHlsaW5lRHJhd2VyU2VydmljZSxcbiAgICBwcml2YXRlIHBvbHlnb25EcmF3ZXJTZXJ2aWNlOiBQb2x5Z29uRHJhd2VyU2VydmljZSxcbiAgICBwcml2YXRlIGFyY0RyYXdlclNlcnZpY2U6IEFyY0RyYXdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb2ludERyYXdlclNlcnZpY2U6IFBvaW50RHJhd2VyU2VydmljZSxcbiAgICBwcml2YXRlIGN6bWxEcmF3ZXJTZXJ2aWNlOiBDem1sRHJhd2VyU2VydmljZSxcbiAgICBwcml2YXRlIG1hcEV2ZW50c01hbmFnZXI6IE1hcEV2ZW50c01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5Ym9hcmRDb250cm9sU2VydmljZTogS2V5Ym9hcmRDb250cm9sU2VydmljZSxcbiAgICBwcml2YXRlIG1hcExheWVyc1NlcnZpY2U6IE1hcExheWVyc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY3JlZW5zaG90U2VydmljZTogU2NyZWVuc2hvdFNlcnZpY2UsXG4gICAgcHVibGljIGNvbnRleHRNZW51U2VydmljZTogQ29udGV4dE1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcixcbiAgKSB7XG4gICAgdGhpcy5tYXBDb250YWluZXIgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMubWFwQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMubWFwQ29udGFpbmVyLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLm1hcENvbnRhaW5lci5jbGFzc05hbWUgPSAnbWFwLWNvbnRhaW5lcic7XG4gICAgdGhpcy5fY2VzaXVtU2VydmljZS5pbml0KHRoaXMubWFwQ29udGFpbmVyLCB0aGlzKTtcbiAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmluaXQodGhpcy5fY2VzaXVtU2VydmljZSk7XG4gICAgdGhpcy5tYXBFdmVudHNNYW5hZ2VyLmluaXQoKTtcbiAgICB0aGlzLmJpbGxib2FyZERyYXdlclNlcnZpY2UuaW5pdCgpO1xuICAgIHRoaXMubGFiZWxEcmF3ZXJTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLmVsbGlwc2VEcmF3ZXJTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLnBvbHlsaW5lRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5wb2x5Z29uRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5hcmNEcmF3ZXJTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLnBvaW50RHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5jem1sRHJhd2VyU2VydmljZS5pbml0KCk7XG4gICAgdGhpcy5rZXlib2FyZENvbnRyb2xTZXJ2aWNlLmluaXQoKTtcbiAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5pbml0KHRoaXMubWFwRXZlbnRzTWFuYWdlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm1hcElkID0gdGhpcy5tYXBzTWFuYWdlclNlcnZpY2UuX3JlZ2lzdGVyTWFwKHRoaXMubWFwSWQsIHRoaXMpO1xuICAgIGlmICghdGhpcy5jb250YWluZXJJZCkge1xuICAgICAgdGhpcy5fZWxlbVJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubWFwQ29udGFpbmVyKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NjZW5lTW9kZSddKSB7XG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLnNldFNjZW5lTW9kZShjaGFuZ2VzWydzY2VuZU1vZGUnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZmx5VG8nXSkge1xuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFGbHlUbyhjaGFuZ2VzWydmbHlUbyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydjb250YWluZXJJZCddICYmICFjaGFuZ2VzWydjb250YWluZXJJZCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjaGFuZ2VzWydjb250YWluZXJJZCddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubWFwQ29udGFpbmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIGlkOiAke2NoYW5nZXNbJ2NvbnRhaW5lcklkJ10uY3VycmVudFZhbHVlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcExheWVyc1NlcnZpY2UuZHJhd0FsbExheWVycygpO1xuICAgIGlmICh0aGlzLmNvbnRhaW5lcklkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb250YWluZXJJZCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBlbGVtZW50IGZvdW5kIHdpdGggaWQ6ICR7dGhpcy5jb250YWluZXJJZH1gKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5tYXBDb250YWluZXIucmVtb3ZlKCk7XG4gICAgdGhpcy5tYXBzTWFuYWdlclNlcnZpY2UuX3JlbW92ZU1hcEJ5SWQodGhpcy5tYXBJZCk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYWMtbWFwJ3MgY2VzaXVtIHNlcnZpY2VcbiAgICovXG4gIGdldENlc2l1bVNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nlc2l1bVNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgbWFwJ3MgY2VzaXVtIHZpZXdlclxuICAgKi9cbiAgZ2V0Q2VzaXVtVmlld2VyKCkge1xuICAgIHJldHVybiB0aGlzLl9jZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpO1xuICB9XG5cblxuICBnZXRDYW1lcmFTZXJ2aWNlKCk6IENhbWVyYVNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLl9jYW1lcmFTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwSWQ7XG4gIH1cblxuXG4gIGdldE1hcENvbnRhaW5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBDb250YWluZXI7XG4gIH1cblxuXG4gIGdldE1hcEV2ZW50c01hbmFnZXIoKTogTWFwRXZlbnRzTWFuYWdlclNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLm1hcEV2ZW50c01hbmFnZXI7XG4gIH1cblxuICBnZXRDb250ZXh0TWVudVNlcnZpY2UoKTogQ29udGV4dE1lbnVTZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0TWVudVNlcnZpY2U7XG4gIH1cblxuICBnZXRTY3JlZW5zaG90U2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zY3JlZW5zaG90U2VydmljZTtcbiAgfVxuXG4gIGdldEtleWJvYXJkQ29udHJvbFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5Ym9hcmRDb250cm9sU2VydmljZTtcbiAgfVxuXG4gIGdldENvb3JkaW5hdGVDb252ZXJ0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZUNvbnZlcnRlcjtcbiAgfVxufVxuIl19