angular-cesium
Version:
Angular library for working with Cesium.
222 lines • 29 kB
JavaScript
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==