UNPKG

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

Version:

Progress® Telerik® Native Report Viewer for Angular

189 lines 29.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.isAiPromptWindowOpen = 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.isAiPromptWindowOpen = 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.isAiPromptWindowOpen = 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.isAiPromptWindowOpen = 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.isAiPromptWindowOpen = this.renderingInProgress = false; 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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QUFHLEtBQUssQ0FBQTtRQUU1QyxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRU0sc0JBQXNCO1FBQ3pCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUV4QyxPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWxDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLFNBQVMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDOUI7WUFDRCxTQUFTLEVBQUUsQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDdkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVNLGFBQWE7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7K0dBdE9RLDZCQUE2QjttSEFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRlbnRBcmVhLFxuICAgIERvY3VtZW50SW5mbyxcbiAgICBSZXBvcnRDb250cm9sbGVyLFxuICAgIFJlcG9ydENvbnRyb2xsZXJPcHRpb25zLFxuICAgIFJlcG9ydFNvdXJjZU9wdGlvbnMsXG4gICAgU2NhbGVNb2RlLFxuICAgIFNlcnZpY2VUeXBlLFxuICAgIFZpZXdNb2RlLFxuICAgIFNlcnZpY2VDbGllbnQsXG4gICAgU2VhcmNoTWFuYWdlcixcbiAgICBTZXJ2aWNlQ2xpZW50T3B0aW9ucyxcbiAgICBTZXJ2aWNlQ2xpZW50TG9naW5JbmZvLFxuICAgIFBhcmFtZXRlckluZm8sXG4gICAgcmVwb3J0U291cmNlc0FyZUVxdWFsXG59IGZyb20gJ0Bwcm9ncmVzcy90ZWxlcmlrLWNvbW1vbi1yZXBvcnQtdmlld2VyJztcbmltcG9ydCB7IG1lc3NhZ2VzIH0gZnJvbSAnLi9sb2NhbGl6YXRpb24vbWVzc2FnZXMnO1xuaW1wb3J0IHsgSGlzdG9yeUl0ZW0gfSBmcm9tICcuL21vZGVscy9oaXN0b3J5LWl0ZW0uaW50ZXJmYWNlJztcblxuXG5jb25zdCB6b29tU3RlcCA9IDAuMjU7XG5jb25zdCBtaW5TY2FsZSA9IDAuMjU7XG5jb25zdCBtYXhTY2FsZSA9IDQ7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRpbmdBbmd1bGFyVmlld2VyU2VydmljZSB7XG4gICAgcHVibGljIG9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgY29udGVudFRhYkluZGV4OiAxMDAwLFxuICAgICAgICBhdXRoZW50aWNhdGlvblRva2VuOiAnJyxcbiAgICAgICAgcmVwb3J0U291cmNlOiB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7fSxcbiAgICAgICAgICAgIHJlcG9ydDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgIHNjYWxlTW9kZTogMixcbiAgICAgICAgc2VydmljZVR5cGU6IDAsXG4gICAgICAgIHNlcnZpY2VVcmw6IG51bGwsXG4gICAgICAgIHZpZXdNb2RlOiAwLFxuICAgICAgICBrZWVwQ2xpZW50QWxpdmU6IHRydWUsXG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICAgICAgcGFnZU1vZGU6IDAsXG4gICAgICAgIHByaW50TW9kZTogMCxcbiAgICAgICAgcmVwb3J0U2VydmVyOiBudWxsLFxuICAgIH07XG5cbiAgICBwdWJsaWMgZG9jdW1lbnRJbmZvOiBEb2N1bWVudEluZm8gPSB7XG4gICAgICAgIGRvY3VtZW50UmVhZHk6IGZhbHNlLFxuICAgICAgICBkb2N1bWVudE1hcEF2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbnRhaW5zRnJvemVuQ29udGVudDogZmFsc2UsXG4gICAgICAgIHBhZ2VDb3VudDogMSxcbiAgICAgICAgZG9jdW1lbnRNYXBOb2RlczogW10sXG4gICAgICAgIGJvb2ttYXJrTm9kZXM6IFtdLFxuICAgICAgICByZW5kZXJpbmdFeHRlbnNpb25zOiBbXSxcbiAgICB9O1xuXG4gICAgcHVibGljIG9uWm9vbUNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIHB1YmxpYyBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJJbmZvW10gPSBbXTtcbiAgICBwdWJsaWMgaXNTZWFyY2hXaW5kb3dPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGlzQWlQcm9tcHRXaW5kb3dPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGN1cnJlbnRIaXN0b3J5SW5kZXggPSAtMTtcbiAgICBwdWJsaWMgaGlzdG9yeTogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgY3VycmVudFBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgICBwdWJsaWMgcmVuZGVyaW5nSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0JhY2t3YXJkc05hdmlnYXRpb25JblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGlzUGFyYW1ldGVyc1NlY3Rpb25BdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyByZXBvcnRXaWR0aDogbnVtYmVyO1xuICAgIHB1YmxpYyB3aW5kb3dXaWR0aDogbnVtYmVyID0gMzEwO1xuICAgIHB1YmxpYyB3aW5kb3dIZWlnaHQ6IG51bWJlciA9IDM5MDtcbiAgICBwdWJsaWMgdG90YWxQYWdlczogbnVtYmVyID0gMTtcbiAgICBwdWJsaWMgc2tpcDogbnVtYmVyID0gMDtcblxuICAgIHB1YmxpYyBjb250cm9sbGVyITogUmVwb3J0Q29udHJvbGxlcjtcbiAgICBwdWJsaWMgc2VydmljZUNsaWVudCE6IFNlcnZpY2VDbGllbnQ7XG4gICAgcHVibGljIHNlYXJjaE1hbmFnZXIhOiBTZWFyY2hNYW5hZ2VyO1xuICAgIHB1YmxpYyBjb250ZW50QXJlYSE6IENvbnRlbnRBcmVhO1xuXG4gICAgcHVibGljIGdldFNlcnZpY2VDbGllbnRPcHRpb25zKCk6IFNlcnZpY2VDbGllbnRPcHRpb25zIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZXJ2aWNlVHlwZSA9PT0gU2VydmljZVR5cGUuUmVwb3J0U2VydmVyICYmIHRoaXMub3B0aW9ucy5yZXBvcnRTZXJ2ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJPcHRpb25zID0gdGhpcy5vcHRpb25zLnJlcG9ydFNlcnZlcjtcbiAgICAgICAgICAgIGxldCBzZXJ2aWNlVXJsID0gc2VydmVyT3B0aW9ucy51cmwgKyAnL2FwaS9yZXBvcnRzJztcbiAgICAgICAgICAgIGxldCB0b2tlblVybCA9IHNlcnZlck9wdGlvbnMudXJsICsgJy9Ub2tlbic7XG4gICAgICAgICAgICBsZXQgbG9naW5JbmZvID0gbmV3IFNlcnZpY2VDbGllbnRMb2dpbkluZm8odG9rZW5VcmwsIHNlcnZlck9wdGlvbnMudXNlcm5hbWUsIHNlcnZlck9wdGlvbnMucGFzc3dvcmQpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGllbnRPcHRpb25zKHNlcnZpY2VVcmwsIGxvZ2luSW5mbyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VDbGllbnRPcHRpb25zKHRoaXMub3B0aW9ucy5zZXJ2aWNlVXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udHJvbGxlck9wdGlvbnMoKTogUmVwb3J0Q29udHJvbGxlck9wdGlvbnMge1xuICAgICAgICByZXR1cm4gbmV3IFJlcG9ydENvbnRyb2xsZXJPcHRpb25zKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmtlZXBDbGllbnRBbGl2ZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hdXRoZW50aWNhdGlvblRva2VuLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnJlcG9ydFNvdXJjZSxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmludE1vZGUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFnZU1vZGUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudmlld01vZGUsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGVNb2RlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNjYWxlLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm1lc3NhZ2VzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRPcHRpb25zKHRoaXMuZ2V0Q29udHJvbGxlck9wdGlvbnMoKSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5yZWZyZXNoUmVwb3J0KHRydWUsICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlIaXN0b3J5KHJlcG9ydFNvdXJjZTogUmVwb3J0U291cmNlT3B0aW9ucywgXG4gICAgICAgIHBhZ2U6IG51bWJlciwgXG4gICAgICAgIHJlcG9ydERvY3VtZW50SWQ6IHN0cmluZywgXG4gICAgICAgIHNjYWxlOiBudW1iZXIsIFxuICAgICAgICBzY2FsZU1vZGU6IG51bWJlciwgXG4gICAgICAgIHZpZXdNb2RlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldFJlcG9ydFNvdXJjZShyZXBvcnRTb3VyY2UpO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0UmVwb3J0RG9jdW1lbnRJZChyZXBvcnREb2N1bWVudElkKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmdldFNjYWxlKCkgIT09IHNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuZ2V0U2NhbGVNb2RlKCkgIT09IHNjYWxlTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTY2FsZU1vZGUoc2NhbGVNb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuZ2V0Vmlld01vZGUoKSAhPT0gdmlld01vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Vmlld01vZGUodmlld01vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnJlZnJlc2hSZXBvcnQoZmFsc2UgLyogaWdub3JlQ2FjaGUgKi8sIHJlcG9ydERvY3VtZW50SWQsIHRydWUgLyogYWx3YXlzUmVzcGVjdEF1dG9SdW4gKi8pO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIubmF2aWdhdGVUb1BhZ2UocGFnZSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlQYXJhbWV0ZXIoaWQ6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmlzU2VhcmNoV2luZG93T3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQWlQcm9tcHRXaW5kb3dPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRQYXJhbWV0ZXIoaWQsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnByZXZpZXdSZXBvcnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U2NhbGUoc2NhbGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgdGhpcy5vblpvb21DaGFuZ2UuZW1pdChzY2FsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNjYWxlTW9kZShzY2FsZU1vZGU6IFNjYWxlTW9kZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGVNb2RlID0gc2NhbGVNb2RlO1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0U2NhbGVNb2RlKHNjYWxlTW9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpZXdNb2RlKG1vZGU/OiBWaWV3TW9kZSk6IHZvaWQge1xuICAgICAgICBpZiAobW9kZSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdNb2RlID0gbW9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy52aWV3TW9kZSA/IHRoaXMub3B0aW9ucy52aWV3TW9kZSA9IDAgOiB0aGlzLm9wdGlvbnMudmlld01vZGUgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZpZXdNb2RlKHRoaXMub3B0aW9ucy52aWV3TW9kZSk7XG4gICAgICAgIHRoaXMuY29udHJvbGxlci5yZWZyZXNoUmVwb3J0Q29yZShmYWxzZSwgdGhpcy5jb250cm9sbGVyLmdldFJlcG9ydERvY3VtZW50SWQoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHpvb21JbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsZSA8IG1heFNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGUgKz0gem9vbVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnNldFNjYWxlKHRoaXMub3B0aW9ucy5zY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgem9vbU91dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsZSA+IG1pblNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGUgLT0gem9vbVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnNldFNjYWxlKHRoaXMub3B0aW9ucy5zY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmF2aWdhdGVCYWNrd2FyZHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyaW5nSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNTZWFyY2hXaW5kb3dPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBaVByb21wdFdpbmRvd09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0JhY2t3YXJkc05hdmlnYXRpb25JblByb2dyZXNzID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgtLTtcblxuICAgICAgICBpZiAodGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeUl0ZW0gPSB0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4XTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlIaXN0b3J5KGN1cnJlbnRIaXN0b3J5SXRlbS5yZXBvcnRTb3VyY2UsIGN1cnJlbnRIaXN0b3J5SXRlbS5wYWdlLCBjdXJyZW50SGlzdG9yeUl0ZW0uZG9jdW1lbnRJZCwgY3VycmVudEhpc3RvcnlJdGVtLnNjYWxlLCBjdXJyZW50SGlzdG9yeUl0ZW0uc2NhbGVNb2RlLCBjdXJyZW50SGlzdG9yeUl0ZW0udmlld01vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlRm9yd2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJpbmdJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FpUHJvbXB0V2luZG93T3BlbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCsrO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SGlzdG9yeUl0ZW0gPSB0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4XTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlIaXN0b3J5KGN1cnJlbnRIaXN0b3J5SXRlbS5yZXBvcnRTb3VyY2UsIGN1cnJlbnRIaXN0b3J5SXRlbS5wYWdlLCBjdXJyZW50SGlzdG9yeUl0ZW0uZG9jdW1lbnRJZCwgY3VycmVudEhpc3RvcnlJdGVtLnNjYWxlLCBjdXJyZW50SGlzdG9yeUl0ZW0uc2NhbGVNb2RlLCBjdXJyZW50SGlzdG9yeUl0ZW0udmlld01vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEhpc3RvcnlJdGVtKHRlbXA6IGJvb2xlYW4gPSBmYWxzZSk6IEhpc3RvcnlJdGVtIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUZW1wSGlzdG9yeUl0ZW1zKCk7XG5cbiAgICAgICAgY29uc3QgaGlzdG9yeUl0ZW06IEhpc3RvcnlJdGVtID0ge1xuICAgICAgICAgICAgcmVwb3J0U291cmNlOiB7IHJlcG9ydDogdGhpcy5jb250cm9sbGVyLmdldFJlcG9ydFNvdXJjZSgpPy5yZXBvcnQsIHBhcmFtZXRlcnM6IHRoaXMub3B0aW9ucy5yZXBvcnRTb3VyY2UucGFyYW1ldGVycyB9LFxuICAgICAgICAgICAgZG9jdW1lbnRJZDogdGhpcy5jb250cm9sbGVyLmdldFJlcG9ydERvY3VtZW50SWQoKSxcbiAgICAgICAgICAgIHBhZ2U6IHRoaXMuZ2V0UGFnZU51bWJlcigpLFxuICAgICAgICAgICAgc2NhbGU6IHRoaXMuY29udHJvbGxlci5nZXRTY2FsZSgpLFxuICAgICAgICAgICAgc2NhbGVNb2RlOiB0aGlzLmNvbnRyb2xsZXIuZ2V0U2NhbGVNb2RlKCksXG4gICAgICAgICAgICB2aWV3TW9kZTogdGhpcy5jb250cm9sbGVyLmdldFZpZXdNb2RlKCksXG4gICAgICAgICAgICB0ZW1wOiB0ZW1wXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29udHJvbGxlclJlcG9ydFNvdXJjZSA9IHRoaXMuY29udHJvbGxlci5nZXRSZXBvcnRTb3VyY2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhpc3Rvcnkuc29tZShpdGVtID0+IHJlcG9ydFNvdXJjZXNBcmVFcXVhbCh7IGZpcnN0UmVwb3J0U291cmNlOiBpdGVtLnJlcG9ydFNvdXJjZSwgc2Vjb25kUmVwb3J0U291cmNlOiBjb250cm9sbGVyUmVwb3J0U291cmNlIH0pKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGlzdG9yeUluZGV4Kys7XG5cbiAgICAgICAgICAgIGxldCBkZWxldGVDb3VudDogbnVtYmVyID0gdGhpcy5pc0JhY2t3YXJkc05hdmlnYXRpb25JblByb2dyZXNzID8gMCA6IHRoaXMuaGlzdG9yeS5sZW5ndGggLSB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXg7XG4gICAgICAgICAgICB0aGlzLmhpc3Rvcnkuc3BsaWNlKHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCwgZGVsZXRlQ291bnQsIGhpc3RvcnlJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNCYWNrd2FyZHNOYXZpZ2F0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlXG5cbiAgICAgICAgcmV0dXJuIGhpc3RvcnlJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVUZW1wSGlzdG9yeUl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB2YXIgbGFzdEluZGV4ID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKGxhc3RJbmRleCA+PSAwICYmIHRoaXMuaGlzdG9yeVtsYXN0SW5kZXhdLnRlbXApIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeS5zcGxpY2UobGFzdEluZGV4LCAxKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEhpc3RvcnlJbmRleCA+PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRIaXN0b3J5SW5kZXgtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RJbmRleC0tO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyUmVwb3J0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2VhcmNoV2luZG93T3BlbiA9IHRoaXMuaXNBaVByb21wdFdpbmRvd09wZW4gPSB0aGlzLnJlbmRlcmluZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1NlYXJjaFdpbmRvd09wZW4gPSB0aGlzLnJlbmRlcmluZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gMDtcbiAgICAgICAgdGhpcy5kb2N1bWVudEluZm8gPSBuZXcgRG9jdW1lbnRJbmZvKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhZ2VOdW1iZXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDE7XG4gICAgfVxufVxuIl19