UNPKG

angular-cesium

Version:
222 lines 29 kB
import { DOCUMENT } from '@angular/common'; import { Component, ElementRef, Inject, Input } 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> */ export 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.decorators = [ { type: Component, args: [{ 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, ] },] } ]; 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 } ]; AcMapComponent.propDecorators = { disableDefaultPlonter: [{ type: Input }], mapId: [{ type: Input }], flyTo: [{ type: Input }], sceneMode: [{ type: Input }], containerId: [{ type: Input }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWMtbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vY29tcG9uZW50cy9hYy1tYXAvYWMtbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3BH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LGFBQWE7WUFHYixhQUFhO1lBSmEsVUFBVTs0Q0EyR3hDLE1BQU0sU0FBQyxRQUFRO1lBdkZYLGtCQUFrQjtZQVpsQixzQkFBc0I7WUFHdEIsa0JBQWtCO1lBRGxCLG9CQUFvQjtZQUlwQixxQkFBcUI7WUFEckIsb0JBQW9CO1lBTnBCLGdCQUFnQjtZQUtoQixrQkFBa0I7WUFIbEIsaUJBQWlCO1lBU2pCLHVCQUF1QjtZQUZ2QixzQkFBc0I7WUFHdEIsZ0JBQWdCO1lBakJoQixvQkFBb0I7WUFvQnBCLGlCQUFpQjtZQWpCakIsa0JBQWtCO1lBQ2xCLG1CQUFtQjs7O29DQWtFekIsS0FBSztvQkFPTCxLQUFLO29CQU1MLEtBQUs7d0JBTUwsS0FBSzswQkFPTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2VzaXVtU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nlc2l1bS9jZXNpdW0uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2VzaXVtLWVuaGFuY2VtZW50cy9Db25maWd1cmF0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IFNjZW5lTW9kZSB9IGZyb20gJy4uLy4uL21vZGVscy9zY2VuZS1tb2RlLmVudW0nO1xyXG5pbXBvcnQgeyBDYW1lcmFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FtZXJhL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29vcmRpbmF0ZUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Nvb3JkaW5hdGUtY29udmVydGVyL2Nvb3JkaW5hdGUtY29udmVydGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcmNEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9hcmMtZHJhd2VyL2FyYy1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJpbGxib2FyZERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2JpbGxib2FyZC1kcmF3ZXIvYmlsbGJvYXJkLWRyYXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3ptbERyYXdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kcmF3ZXJzL2N6bWwtZHJhd2VyL2N6bWwtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGxpcHNlRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvZWxsaXBzZS1kcmF3ZXIvZWxsaXBzZS1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IExhYmVsRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvbGFiZWwtZHJhd2VyL2xhYmVsLWRyYXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pbnREcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2ludC1kcmF3ZXIvcG9pbnQtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2x5Z29uRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvcG9seWdvbi1kcmF3ZXIvcG9seWdvbi1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBvbHlsaW5lRHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYXdlcnMvcG9seWxpbmUtZHJhd2VyL3BvbHlsaW5lLWRyYXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9seWxpbmVQcmltaXRpdmVEcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhd2Vycy9wb2x5bGluZS1wcmltaXRpdmUtZHJhd2VyL3BvbHlsaW5lLXByaW1pdGl2ZS1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEtleWJvYXJkQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXlib2FyZC1jb250cm9sL2tleWJvYXJkLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IENlc2l1bUV2ZW50QnVpbGRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvY2VzaXVtLWV2ZW50LWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBNYXBFdmVudHNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcC1ldmVudHMtbWFuYW5nZXIvbWFwLWV2ZW50cy1tYW5hZ2VyJztcclxuaW1wb3J0IHsgTWFwTGF5ZXJzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcC1sYXllcnMvbWFwLWxheWVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFwc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFwcy1tYW5hZ2VyL21hcHMtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxvbnRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbG9udGVyL3Bsb250ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjcmVlbnNob3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NyZWVuc2hvdC9zY3JlZW5zaG90LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgYSBtYXAgaW1wbGVtZW50YXRpb24sIGNyZWF0ZXMgdGhlIGNlc2l1bSBtYXAuXHJcbiAqIEV2ZXJ5IGxheWVyIHNob3VsZCBiZSB0YWcgaW5zaWRlIGFjLW1hcCB0YWdcclxuICpcclxuICogQWNjZXNzaW5nIGNlc2l1bSB2aWV3ZXI6XHJcbiAqIDEuIGFjTWFwQ29tcG9uZW50LmdldENlc2l1bVZpZXdlcigpXHJcbiAqIDIuIFVzZSBNYXBNYW5hZ2VyU2VydmljZS5nZXRNYXAoKS5nZXRDZXNpdW1WaWV3ZXIoKSBvciBpZiBtb3JlIHRoZW4gb25lIG1hcDogTWFwTWFuYWdlclNlcnZpY2UuZ2V0TWFwKG1hcElkKS5nZXRDZXNpdW1WaWV3ZXIoKVxyXG4gKlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8YWMtbWFwPlxyXG4gKiAgICAgPGFjLW1hcC1sYXllci1wcm92aWRlcj48L2FjLW1hcC1sYXllci1wcm92aWRlcj5cclxuICogICAgIDxkeW5hbWljLWVsbGlwc2UtbGF5ZXIgI2xheWVyPjwvZHluYW1pYy1lbGxpcHNlLWxheWVyPlxyXG4gKiA8L2FjLW1hcD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWMtbWFwJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFjLWRlZmF1bHQtcGxvbnRlciAqbmdJZj1cIiFkaXNhYmxlRGVmYXVsdFBsb250ZXJcIj48L2FjLWRlZmF1bHQtcGxvbnRlcj5cclxuICAgIDxhYy1jb250ZXh0LW1lbnUtd3JhcHBlcj48L2FjLWNvbnRleHQtbWVudS13cmFwcGVyPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBDZXNpdW1TZXJ2aWNlLFxyXG4gICAgQmlsbGJvYXJkRHJhd2VyU2VydmljZSxcclxuICAgIENlc2l1bUV2ZW50QnVpbGRlcixcclxuICAgIEtleWJvYXJkQ29udHJvbFNlcnZpY2UsXHJcbiAgICBNYXBFdmVudHNNYW5hZ2VyU2VydmljZSxcclxuICAgIFBsb250ZXJTZXJ2aWNlLFxyXG4gICAgTGFiZWxEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgUG9seWxpbmVEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgUG9seWxpbmVQcmltaXRpdmVEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgRWxsaXBzZURyYXdlclNlcnZpY2UsXHJcbiAgICBQb2ludERyYXdlclNlcnZpY2UsXHJcbiAgICBBcmNEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgQ3ptbERyYXdlclNlcnZpY2UsXHJcbiAgICBQb2x5Z29uRHJhd2VyU2VydmljZSxcclxuICAgIE1hcExheWVyc1NlcnZpY2UsXHJcbiAgICBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgU2NyZWVuc2hvdFNlcnZpY2UsXHJcbiAgICBDb250ZXh0TWVudVNlcnZpY2UsXHJcbiAgICBDb29yZGluYXRlQ29udmVydGVyLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY01hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIERpc2FibGUgZGVmYXVsdCBwbG9udGVyIGNvbnRleHQgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZGlzYWJsZURlZmF1bHRQbG9udGVyID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgaWQgbmFtZSBvZiB0aGUgbWFwXHJcbiAgICogZGVmYXVsdDogJ2RlZmF1bHQtbWFwLWlkLVtpbmRleF0nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBtYXBJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBmbHlUbyBvcHRpb25zIGFjY29yZGluZyB0byBodHRwczovL2Nlc2l1bWpzLm9yZy9DZXNpdW0vQnVpbGQvRG9jdW1lbnRhdGlvbi9DYW1lcmEuaHRtbD9jbGFzc0ZpbHRlcj1jYW0jZmx5VG9cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGZseVRvOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIG1hcCdzIFNjZW5lTW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2NlbmVNb2RlOiBTY2VuZU1vZGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIC0gdGhlIGNvbnRhaW5lciBlbGVtZW50J3MgaWQgaW4gd2hpY2ggdGhlIG1hcCdzIGNhbnZhcyB3aWxsIGJlIGFwcGVuZGVkIHRvLlxyXG4gICAqIElmIG5vdCBzdXBwbGllZCAtIHRoZSBjb250YWluZXIgZWxlbWVudCB3aWxsIGJlIHRoZSBwYXJlbnQgZWxlbWVudCBvZiBhYy1tYXA7XHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBjb250YWluZXJJZDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIG1hcENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lbGVtUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudCxcclxuICAgIHByaXZhdGUgbWFwc01hbmFnZXJTZXJ2aWNlOiBNYXBzTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGJpbGxib2FyZERyYXdlclNlcnZpY2U6IEJpbGxib2FyZERyYXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhYmVsRHJhd2VyU2VydmljZTogTGFiZWxEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlbGxpcHNlRHJhd2VyU2VydmljZTogRWxsaXBzZURyYXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvbHlsaW5lRHJhd2VyU2VydmljZTogUG9seWxpbmVEcmF3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb2x5Z29uRHJhd2VyU2VydmljZTogUG9seWdvbkRyYXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFyY0RyYXdlclNlcnZpY2U6IEFyY0RyYXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvaW50RHJhd2VyU2VydmljZTogUG9pbnREcmF3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjem1sRHJhd2VyU2VydmljZTogQ3ptbERyYXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hcEV2ZW50c01hbmFnZXI6IE1hcEV2ZW50c01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBrZXlib2FyZENvbnRyb2xTZXJ2aWNlOiBLZXlib2FyZENvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYXBMYXllcnNTZXJ2aWNlOiBNYXBMYXllcnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNjcmVlbnNob3RTZXJ2aWNlOiBTY3JlZW5zaG90U2VydmljZSxcclxuICAgIHB1YmxpYyBjb250ZXh0TWVudVNlcnZpY2U6IENvbnRleHRNZW51U2VydmljZSxcclxuICAgIHByaXZhdGUgY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcixcclxuICApIHtcclxuICAgIHRoaXMubWFwQ29udGFpbmVyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMubWFwQ29udGFpbmVyLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgdGhpcy5tYXBDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xyXG4gICAgdGhpcy5tYXBDb250YWluZXIuY2xhc3NOYW1lID0gJ21hcC1jb250YWluZXInO1xyXG4gICAgdGhpcy5fY2VzaXVtU2VydmljZS5pbml0KHRoaXMubWFwQ29udGFpbmVyLCB0aGlzKTtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuaW5pdCh0aGlzLl9jZXNpdW1TZXJ2aWNlKTtcclxuICAgIHRoaXMubWFwRXZlbnRzTWFuYWdlci5pbml0KCk7XHJcbiAgICB0aGlzLmJpbGxib2FyZERyYXdlclNlcnZpY2UuaW5pdCgpO1xyXG4gICAgdGhpcy5sYWJlbERyYXdlclNlcnZpY2UuaW5pdCgpO1xyXG4gICAgdGhpcy5lbGxpcHNlRHJhd2VyU2VydmljZS5pbml0KCk7XHJcbiAgICB0aGlzLnBvbHlsaW5lRHJhd2VyU2VydmljZS5pbml0KCk7XHJcbiAgICB0aGlzLnBvbHlnb25EcmF3ZXJTZXJ2aWNlLmluaXQoKTtcclxuICAgIHRoaXMuYXJjRHJhd2VyU2VydmljZS5pbml0KCk7XHJcbiAgICB0aGlzLnBvaW50RHJhd2VyU2VydmljZS5pbml0KCk7XHJcbiAgICB0aGlzLmN6bWxEcmF3ZXJTZXJ2aWNlLmluaXQoKTtcclxuICAgIHRoaXMua2V5Ym9hcmRDb250cm9sU2VydmljZS5pbml0KCk7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51U2VydmljZS5pbml0KHRoaXMubWFwRXZlbnRzTWFuYWdlcik7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubWFwSWQgPSB0aGlzLm1hcHNNYW5hZ2VyU2VydmljZS5fcmVnaXN0ZXJNYXAodGhpcy5tYXBJZCwgdGhpcyk7XHJcbiAgICBpZiAoIXRoaXMuY29udGFpbmVySWQpIHtcclxuICAgICAgdGhpcy5fZWxlbVJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMubWFwQ29udGFpbmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzY2VuZU1vZGUnXSkge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLnNldFNjZW5lTW9kZShjaGFuZ2VzWydzY2VuZU1vZGUnXS5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ZseVRvJ10pIHtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFGbHlUbyhjaGFuZ2VzWydmbHlUbyddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snY29udGFpbmVySWQnXSAmJiAhY2hhbmdlc1snY29udGFpbmVySWQnXS5maXJzdENoYW5nZSkge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChjaGFuZ2VzWydjb250YWluZXJJZCddLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBlbGVtZW50IGZvdW5kIHdpdGggaWQ6ICR7Y2hhbmdlc1snY29udGFpbmVySWQnXS5jdXJyZW50VmFsdWV9YCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWFwTGF5ZXJzU2VydmljZS5kcmF3QWxsTGF5ZXJzKCk7XHJcbiAgICBpZiAodGhpcy5jb250YWluZXJJZCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbnRhaW5lcklkKTtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIGlkOiAke3RoaXMuY29udGFpbmVySWR9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXBDb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICB0aGlzLm1hcHNNYW5hZ2VyU2VydmljZS5fcmVtb3ZlTWFwQnlJZCh0aGlzLm1hcElkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEByZXR1cm5zIGFjLW1hcCdzIGNlc2l1bSBzZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Q2VzaXVtU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jZXNpdW1TZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgbWFwJ3MgY2VzaXVtIHZpZXdlclxyXG4gICAqL1xyXG4gIGdldENlc2l1bVZpZXdlcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jZXNpdW1TZXJ2aWNlLmdldFZpZXdlcigpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldENhbWVyYVNlcnZpY2UoKTogQ2FtZXJhU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FtZXJhU2VydmljZTtcclxuICB9XHJcblxyXG4gIGdldElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwSWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0TWFwQ29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwQ29udGFpbmVyO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldE1hcEV2ZW50c01hbmFnZXIoKTogTWFwRXZlbnRzTWFuYWdlclNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwRXZlbnRzTWFuYWdlcjtcclxuICB9XHJcblxyXG4gIGdldENvbnRleHRNZW51U2VydmljZSgpOiBDb250ZXh0TWVudVNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dE1lbnVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuc2hvdFNlcnZpY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY3JlZW5zaG90U2VydmljZTtcclxuICB9XHJcblxyXG4gIGdldEtleWJvYXJkQ29udHJvbFNlcnZpY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXlib2FyZENvbnRyb2xTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29vcmRpbmF0ZUNvbnZlcnRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==