UNPKG

@progress/telerik-angular-native-report-viewer

Version:

Progress® Telerik® Native Report Viewer for Angular

184 lines 28.6 kB
import { EventEmitter, Injectable } from '@angular/core'; import { DocumentInfo, ReportControllerOptions, ServiceType, ServiceClientOptions, ServiceClientLoginInfo, reportSourcesAreEqual } from '@progress/telerik-common-report-viewer'; import { messages } from './localization/messages'; import * as i0 from "@angular/core"; const zoomStep = 0.25; const minScale = 0.25; const maxScale = 4; export class ReportingAngularViewerService { constructor() { this.options = { contentTabIndex: 1000, authenticationToken: '', reportSource: { parameters: {}, report: null, }, scale: 1, scaleMode: 2, serviceType: 0, serviceUrl: null, viewMode: 0, keepClientAlive: true, messages: messages, pageMode: 0, printMode: 0, reportServer: null, }; this.documentInfo = { documentReady: false, documentMapAvailable: false, containsFrozenContent: false, pageCount: 1, documentMapNodes: [], bookmarkNodes: [], renderingExtensions: [], }; this.onZoomChange = new EventEmitter(); this.parameters = []; this.isSearchWindowOpen = false; this.currentHistoryIndex = -1; this.history = []; this.currentPageIndex = 0; this.renderingInProgress = false; this.isBackwardsNavigationInProgress = false; this.isParametersSectionAvailable = false; this.windowWidth = 310; this.windowHeight = 390; this.totalPages = 1; this.skip = 0; } getServiceClientOptions() { if (this.options.serviceType === ServiceType.ReportServer && this.options.reportServer !== null) { let serverOptions = this.options.reportServer; let serviceUrl = serverOptions.url + '/api/reports'; let tokenUrl = serverOptions.url + '/Token'; let loginInfo = new ServiceClientLoginInfo(tokenUrl, serverOptions.username, serverOptions.password); return new ServiceClientOptions(serviceUrl, loginInfo); } return new ServiceClientOptions(this.options.serviceUrl); } getControllerOptions() { return new ReportControllerOptions(this.options.keepClientAlive, this.options.authenticationToken, this.options.reportSource, this.options.printMode, this.options.pageMode, this.options.viewMode, this.options.scaleMode, this.options.scale, this.options.messages); } setOptions(options) { this.options = options; this.controller.setOptions(this.getControllerOptions()); this.controller.refreshReport(true, ''); } applyHistory(reportSource, page, reportDocumentId, scale, scaleMode, viewMode) { this.controller.setReportSource(reportSource); this.controller.setReportDocumentId(reportDocumentId); if (this.controller.getScale() !== scale) { this.setScale(scale); } if (this.controller.getScaleMode() !== scaleMode) { this.setScaleMode(scaleMode); } if (this.controller.getViewMode() !== viewMode) { this.setViewMode(viewMode); } this.controller.refreshReport(false /* ignoreCache */, reportDocumentId, true /* alwaysRespectAutoRun */); this.controller.navigateToPage(page, undefined); } applyParameter(id, value) { this.isSearchWindowOpen = false; this.controller.setParameter(id, value); this.controller.previewReport(); } setScale(scale) { this.options.scale = scale; this.controller.setScale(scale); this.onZoomChange.emit(scale); } setScaleMode(scaleMode) { this.options.scaleMode = scaleMode; this.controller.setScaleMode(scaleMode); } setViewMode(mode) { if (mode) { this.options.viewMode = mode; } else { this.options.viewMode ? this.options.viewMode = 0 : this.options.viewMode = 1; } this.controller.setViewMode(this.options.viewMode); this.controller.refreshReportCore(false, this.controller.getReportDocumentId()); } zoomIn() { if (this.options.scale < maxScale) { this.options.scale += zoomStep; this.setScale(this.options.scale); } } zoomOut() { if (this.options.scale > minScale) { this.options.scale -= zoomStep; this.setScale(this.options.scale); } } navigateBackwards() { this.renderingInProgress = true; this.isSearchWindowOpen = false; this.isBackwardsNavigationInProgress = true; this.currentHistoryIndex--; if (this.history.length >= 0) { const currentHistoryItem = this.history[this.currentHistoryIndex]; this.applyHistory(currentHistoryItem.reportSource, currentHistoryItem.page, currentHistoryItem.documentId, currentHistoryItem.scale, currentHistoryItem.scaleMode, currentHistoryItem.viewMode); } } navigateForward() { this.renderingInProgress = true; this.isSearchWindowOpen = false; this.currentHistoryIndex++; if (this.currentHistoryIndex < this.history.length) { const currentHistoryItem = this.history[this.currentHistoryIndex]; this.applyHistory(currentHistoryItem.reportSource, currentHistoryItem.page, currentHistoryItem.documentId, currentHistoryItem.scale, currentHistoryItem.scaleMode, currentHistoryItem.viewMode); } } addHistoryItem(temp = false) { this.removeTempHistoryItems(); const historyItem = { reportSource: { report: this.controller.getReportSource()?.report, parameters: this.options.reportSource.parameters }, documentId: this.controller.getReportDocumentId(), page: this.getPageNumber(), scale: this.controller.getScale(), scaleMode: this.controller.getScaleMode(), viewMode: this.controller.getViewMode(), temp: temp }; const controllerReportSource = this.controller.getReportSource(); if (!this.history.some(item => reportSourcesAreEqual({ firstReportSource: item.reportSource, secondReportSource: controllerReportSource }))) { this.currentHistoryIndex++; let deleteCount = this.isBackwardsNavigationInProgress ? 0 : this.history.length - this.currentHistoryIndex; this.history.splice(this.currentHistoryIndex, deleteCount, historyItem); } this.isBackwardsNavigationInProgress = false; return historyItem; } removeTempHistoryItems() { var lastIndex = this.history.length - 1; while (lastIndex >= 0 && this.history[lastIndex].temp) { this.history.splice(lastIndex, 1); if (this.currentHistoryIndex >= lastIndex) { this.currentHistoryIndex--; } lastIndex--; } } clearReport() { this.isSearchWindowOpen = this.renderingInProgress = false; this.currentPageIndex = 0; this.totalPages = 0; this.documentInfo = new DocumentInfo(); } getPageNumber() { return this.currentPageIndex + 1; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ReportingAngularViewerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ReportingAngularViewerService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ReportingAngularViewerService, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWFuZ3VsYXItdmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlcG9ydGluZy1hbmd1bGFyLXZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFFSCxZQUFZLEVBRVosdUJBQXVCLEVBR3ZCLFdBQVcsRUFJWCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBRXRCLHFCQUFxQixFQUN4QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFJbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztBQUN0QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFHbkIsTUFBTSxPQUFPLDZCQUE2QjtJQUQxQztRQUVXLFlBQU8sR0FBUTtZQUNsQixlQUFlLEVBQUUsSUFBSTtZQUNyQixtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLFlBQVksRUFBRTtnQkFDVixVQUFVLEVBQUUsRUFBRTtnQkFDZCxNQUFNLEVBQUUsSUFBSTthQUNmO1lBQ0QsS0FBSyxFQUFFLENBQUM7WUFDUixTQUFTLEVBQUUsQ0FBQztZQUNaLFdBQVcsRUFBRSxDQUFDO1lBQ2QsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLENBQUM7WUFDWCxlQUFlLEVBQUUsSUFBSTtZQUNyQixRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsQ0FBQztZQUNYLFNBQVMsRUFBRSxDQUFDO1lBQ1osWUFBWSxFQUFFLElBQUk7U0FDckIsQ0FBQztRQUVLLGlCQUFZLEdBQWlCO1lBQ2hDLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLG9CQUFvQixFQUFFLEtBQUs7WUFDM0IscUJBQXFCLEVBQUUs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QUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFbEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksU0FBUyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzthQUM5QjtZQUNELFNBQVMsRUFBRSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDOytHQWpPUSw2QkFBNkI7bUhBQTdCLDZCQUE2Qjs7NEZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50QXJlYSxcbiAgICBEb2N1bWVudEluZm8sXG4gICAgUmVwb3J0Q29udHJvbGxlcixcbiAgICBSZXBvcnRDb250cm9sbGVyT3B0aW9ucyxcbiAgICBSZXBvcnRTb3VyY2VPcHRpb25zLFxuICAgIFNjYWxlTW9kZSxcbiAgICBTZXJ2aWNlVHlwZSxcbiAgICBWaWV3TW9kZSxcbiAgICBTZXJ2aWNlQ2xpZW50LFxuICAgIFNlYXJjaE1hbmFnZXIsXG4gICAgU2VydmljZUNsaWVudE9wdGlvbnMsXG4gICAgU2VydmljZUNsaWVudExvZ2luSW5mbyxcbiAgICBQYXJhbWV0ZXJJbmZvLFxuICAgIHJlcG9ydFNvdXJjZXNBcmVFcXVhbFxufSBmcm9tICdAcHJvZ3Jlc3MvdGVsZXJpay1jb21tb24tcmVwb3J0LXZpZXdlcic7XG5pbXBvcnQgeyBtZXNzYWdlcyB9IGZyb20gJy4vbG9jYWxpemF0aW9uL21lc3NhZ2VzJztcbmltcG9ydCB7IEhpc3RvcnlJdGVtIH0gZnJvbSAnLi9tb2RlbHMvaGlzdG9yeS1pdGVtLmludGVyZmFjZSc7XG5cblxuY29uc3Qgem9vbVN0ZXAgPSAwLjI1O1xuY29uc3QgbWluU2NhbGUgPSAwLjI1O1xuY29uc3QgbWF4U2NhbGUgPSA0O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVwb3J0aW5nQW5ndWxhclZpZXdlclNlcnZpY2Uge1xuICAgIHB1YmxpYyBvcHRpb25zOiBhbnkgPSB7XG4gICAgICAgIGNvbnRlbnRUYWJJbmRleDogMTAwMCxcbiAgICAgICAgYXV0aGVudGljYXRpb25Ub2tlbjogJycsXG4gICAgICAgIHJlcG9ydFNvdXJjZToge1xuICAgICAgICAgICAgcGFyYW1ldGVyczoge30sXG4gICAgICAgICAgICByZXBvcnQ6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBzY2FsZU1vZGU6IDIsXG4gICAgICAgIHNlcnZpY2VUeXBlOiAwLFxuICAgICAgICBzZXJ2aWNlVXJsOiBudWxsLFxuICAgICAgICB2aWV3TW9kZTogMCxcbiAgICAgICAga2VlcENsaWVudEFsaXZlOiB0cnVlLFxuICAgICAgICBtZXNzYWdlczogbWVzc2FnZXMsXG4gICAgICAgIHBhZ2VNb2RlOiAwLFxuICAgICAgICBwcmludE1vZGU6IDAsXG4gICAgICAgIHJlcG9ydFNlcnZlcjogbnVsbCxcbiAgICB9O1xuXG4gICAgcHVibGljIGRvY3VtZW50SW5mbzogRG9jdW1lbnRJbmZvID0ge1xuICAgICAgICBkb2N1bWVudFJlYWR5OiBmYWxzZSxcbiAgICAgICAgZG9jdW1lbnRNYXBBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICBjb250YWluc0Zyb3plbkNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICBwYWdlQ291bnQ6IDEsXG4gICAgICAgIGRvY3VtZW50TWFwTm9kZXM6IFtdLFxuICAgICAgICBib29rbWFya05vZGVzOiBbXSxcbiAgICAgICAgcmVuZGVyaW5nRXh0ZW5zaW9uczogW10sXG4gICAgfTtcblxuICAgIHB1YmxpYyBvblpvb21DaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBwdWJsaWMgcGFyYW1ldGVyczogUGFyYW1ldGVySW5mb1tdID0gW107XG4gICAgcHVibGljIGlzU2VhcmNoV2luZG93T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjdXJyZW50SGlzdG9yeUluZGV4ID0gLTE7XG4gICAgcHVibGljIGhpc3Rvcnk6IGFueVtdID0gW107XG4gICAgcHVibGljIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHJlbmRlcmluZ0luUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNCYWNrd2FyZHNOYXZpZ2F0aW9uSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc1BhcmFtZXRlcnNTZWN0aW9uQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgcmVwb3J0V2lkdGg6IG51bWJlcjtcbiAgICBwdWJsaWMgd2luZG93V2lkdGg6IG51bWJlciA9IDMxMDtcbiAgICBwdWJsaWMgd2luZG93SGVpZ2h0OiBudW1iZXIgPSAzOTA7XG4gICAgcHVibGljIHRvdGFsUGFnZXM6IG51bWJlciA9IDE7XG4gICAgcHVibGljIHNraXA6IG51bWJlciA9IDA7XG5cbiAgICBwdWJsaWMgY29udHJvbGxlciE6IFJlcG9ydENvbnRyb2xsZXI7XG4gICAgcHVibGljIHNlcnZpY2VDbGllbnQhOiBTZXJ2aWNlQ2xpZW50O1xuICAgIHB1YmxpYyBzZWFyY2hNYW5hZ2VyITogU2VhcmNoTWFuYWdlcjtcbiAgICBwdWJsaWMgY29udGVudEFyZWEhOiBDb250ZW50QXJlYTtcblxuICAgIHB1YmxpYyBnZXRTZXJ2aWNlQ2xpZW50T3B0aW9ucygpOiBTZXJ2aWNlQ2xpZW50T3B0aW9ucyB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VydmljZVR5cGUgPT09IFNlcnZpY2VUeXBlLlJlcG9ydFNlcnZlciAmJiB0aGlzLm9wdGlvbnMucmVwb3J0U2VydmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgc2VydmVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5yZXBvcnRTZXJ2ZXI7XG4gICAgICAgICAgICBsZXQgc2VydmljZVVybCA9IHNlcnZlck9wdGlvbnMudXJsICsgJy9hcGkvcmVwb3J0cyc7XG4gICAgICAgICAgICBsZXQgdG9rZW5VcmwgPSBzZXJ2ZXJPcHRpb25zLnVybCArICcvVG9rZW4nO1xuICAgICAgICAgICAgbGV0IGxvZ2luSW5mbyA9IG5ldyBTZXJ2aWNlQ2xpZW50TG9naW5JbmZvKHRva2VuVXJsLCBzZXJ2ZXJPcHRpb25zLnVzZXJuYW1lLCBzZXJ2ZXJPcHRpb25zLnBhc3N3b3JkKTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xpZW50T3B0aW9ucyhzZXJ2aWNlVXJsLCBsb2dpbkluZm8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xpZW50T3B0aW9ucyh0aGlzLm9wdGlvbnMuc2VydmljZVVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRyb2xsZXJPcHRpb25zKCk6IFJlcG9ydENvbnRyb2xsZXJPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXBvcnRDb250cm9sbGVyT3B0aW9ucyhcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5rZWVwQ2xpZW50QWxpdmUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0aGVudGljYXRpb25Ub2tlbixcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZXBvcnRTb3VyY2UsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucHJpbnRNb2RlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhZ2VNb2RlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxlTW9kZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5tZXNzYWdlc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRPcHRpb25zKG9wdGlvbnM6IGFueSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0T3B0aW9ucyh0aGlzLmdldENvbnRyb2xsZXJPcHRpb25zKCkpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIucmVmcmVzaFJlcG9ydCh0cnVlLCAnJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SGlzdG9yeShyZXBvcnRTb3VyY2U6IFJlcG9ydFNvdXJjZU9wdGlvbnMsIFxuICAgICAgICBwYWdlOiBudW1iZXIsIFxuICAgICAgICByZXBvcnREb2N1bWVudElkOiBzdHJpbmcsIFxuICAgICAgICBzY2FsZTogbnVtYmVyLCBcbiAgICAgICAgc2NhbGVNb2RlOiBudW1iZXIsIFxuICAgICAgICB2aWV3TW9kZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRSZXBvcnRTb3VyY2UocmVwb3J0U291cmNlKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldFJlcG9ydERvY3VtZW50SWQocmVwb3J0RG9jdW1lbnRJZCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlci5nZXRTY2FsZSgpICE9PSBzY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTY2FsZShzY2FsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldFNjYWxlTW9kZSgpICE9PSBzY2FsZU1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NhbGVNb2RlKHNjYWxlTW9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldFZpZXdNb2RlKCkgIT09IHZpZXdNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZpZXdNb2RlKHZpZXdNb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29udHJvbGxlci5yZWZyZXNoUmVwb3J0KGZhbHNlIC8qIGlnbm9yZUNhY2hlICovLCByZXBvcnREb2N1bWVudElkLCB0cnVlIC8qIGFsd2F5c1Jlc3BlY3RBdXRvUnVuICovKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLm5hdmlnYXRlVG9QYWdlKHBhZ2UsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5UGFyYW1ldGVyKGlkOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldFBhcmFtZXRlcihpZCwgdmFsdWUpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIucHJldmlld1JlcG9ydCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0U2NhbGUoc2NhbGUpO1xuICAgICAgICB0aGlzLm9uWm9vbUNoYW5nZS5lbWl0KHNjYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U2NhbGVNb2RlKHNjYWxlTW9kZTogU2NhbGVNb2RlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZU1vZGUgPSBzY2FsZU1vZGU7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRTY2FsZU1vZGUoc2NhbGVNb2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Vmlld01vZGUobW9kZT86IFZpZXdNb2RlKTogdm9pZCB7XG4gICAgICAgIGlmIChtb2RlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudmlld01vZGUgPSBtb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlID8gdGhpcy5vcHRpb25zLnZpZXdNb2RlID0gMCA6IHRoaXMub3B0aW9ucy52aWV3TW9kZSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Vmlld01vZGUodGhpcy5vcHRpb25zLnZpZXdNb2RlKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlZnJlc2hSZXBvcnRDb3JlKGZhbHNlLCB0aGlzLmNvbnRyb2xsZXIuZ2V0UmVwb3J0RG9jdW1lbnRJZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgem9vbUluKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlIDwgbWF4U2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSArPSB6b29tU3RlcDtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NhbGUodGhpcy5vcHRpb25zLnNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB6b29tT3V0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlID4gbWluU2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZSAtPSB6b29tU3RlcDtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NhbGUodGhpcy5vcHRpb25zLnNjYWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuYXZpZ2F0ZUJhY2t3YXJkcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJpbmdJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0JhY2t3YXJkc05hdmlnYXRpb25JblByb2dyZXNzID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgtLTtcblxuICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeUl0ZW0gPSB0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4XTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlIaXN0b3J5KGN1cnJlbnRIaXN0b3J5SXRlbS5yZXBvcnRTb3VyY2UsIGN1cnJlbnRIaXN0b3J5SXRlbS5wYWdlLCBjdXJyZW50SGlzdG9yeUl0ZW0uZG9jdW1lbnRJZCwgY3VycmVudEhpc3RvcnlJdGVtLnNjYWxlLCBjdXJyZW50SGlzdG9yeUl0ZW0uc2NhbGVNb2RlLCBjdXJyZW50SGlzdG9yeUl0ZW0udmlld01vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlRm9yd2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJpbmdJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgrKztcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SGlzdG9yeUluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEhpc3RvcnlJdGVtID0gdGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEhpc3RvcnlJbmRleF07XG4gICAgICAgICAgICB0aGlzLmFwcGx5SGlzdG9yeShjdXJyZW50SGlzdG9yeUl0ZW0ucmVwb3J0U291cmNlLCBjdXJyZW50SGlzdG9yeUl0ZW0ucGFnZSwgY3VycmVudEhpc3RvcnlJdGVtLmRvY3VtZW50SWQsIGN1cnJlbnRIaXN0b3J5SXRlbS5zY2FsZSwgY3VycmVudEhpc3RvcnlJdGVtLnNjYWxlTW9kZSwgY3VycmVudEhpc3RvcnlJdGVtLnZpZXdNb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGRIaXN0b3J5SXRlbSh0ZW1wOiBib29sZWFuID0gZmFsc2UpOiBIaXN0b3J5SXRlbSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVGVtcEhpc3RvcnlJdGVtcygpO1xuXG4gICAgICAgIGNvbnN0IGhpc3RvcnlJdGVtOiBIaXN0b3J5SXRlbSA9IHtcbiAgICAgICAgICAgIHJlcG9ydFNvdXJjZTogeyByZXBvcnQ6IHRoaXMuY29udHJvbGxlci5nZXRSZXBvcnRTb3VyY2UoKT8ucmVwb3J0LCBwYXJhbWV0ZXJzOiB0aGlzLm9wdGlvbnMucmVwb3J0U291cmNlLnBhcmFtZXRlcnMgfSxcbiAgICAgICAgICAgIGRvY3VtZW50SWQ6IHRoaXMuY29udHJvbGxlci5nZXRSZXBvcnREb2N1bWVudElkKCksXG4gICAgICAgICAgICBwYWdlOiB0aGlzLmdldFBhZ2VOdW1iZXIoKSxcbiAgICAgICAgICAgIHNjYWxlOiB0aGlzLmNvbnRyb2xsZXIuZ2V0U2NhbGUoKSxcbiAgICAgICAgICAgIHNjYWxlTW9kZTogdGhpcy5jb250cm9sbGVyLmdldFNjYWxlTW9kZSgpLFxuICAgICAgICAgICAgdmlld01vZGU6IHRoaXMuY29udHJvbGxlci5nZXRWaWV3TW9kZSgpLFxuICAgICAgICAgICAgdGVtcDogdGVtcFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXJSZXBvcnRTb3VyY2UgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0UmVwb3J0U291cmNlKCk7XG4gICAgICAgIGlmICghdGhpcy5oaXN0b3J5LnNvbWUoaXRlbSA9PiByZXBvcnRTb3VyY2VzQXJlRXF1YWwoeyBmaXJzdFJlcG9ydFNvdXJjZTogaXRlbS5yZXBvcnRTb3VyY2UsIHNlY29uZFJlcG9ydFNvdXJjZTogY29udHJvbGxlclJlcG9ydFNvdXJjZSB9KSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCsrO1xuXG4gICAgICAgICAgICBsZXQgZGVsZXRlQ291bnQ6IG51bWJlciA9IHRoaXMuaXNCYWNrd2FyZHNOYXZpZ2F0aW9uSW5Qcm9ncmVzcyA/IDAgOiB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4O1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5LnNwbGljZSh0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgsIGRlbGV0ZUNvdW50LCBoaXN0b3J5SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQmFja3dhcmRzTmF2aWdhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZVxuXG4gICAgICAgIHJldHVybiBoaXN0b3J5SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlVGVtcEhpc3RvcnlJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxO1xuXG4gICAgICAgIHdoaWxlIChsYXN0SW5kZXggPj0gMCAmJiB0aGlzLmhpc3RvcnlbbGFzdEluZGV4XS50ZW1wKSB7XG4gICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKGxhc3RJbmRleCwgMSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXggPj0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0SW5kZXgtLTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclJlcG9ydCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSB0aGlzLnJlbmRlcmluZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gMDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEluZm8gPSBuZXcgRG9jdW1lbnRJbmZvKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhZ2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDE7XG4gICAgfVxufVxuIl19