Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vipera-npm-registry / motif-web-admin-core   js

Repository URL to install this package:

Version: 0.3.1 

/ esm2015 / lib / sections / Scheduler / components / scheduler-section.component.js

/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { Component, ViewChild } from '@angular/core';
import { PluginView } from 'web-console-core';
import { NGXLogger } from 'web-console-core';
import * as _ from 'lodash';
import { WCNotificationCenter, NotificationType } from 'web-console-ui-kit';
import { SchedulerService } from '@wa-motif-open-api/scheduler-service';
import { GridComponent } from '@progress/kendo-angular-grid';
/** @type {?} */
const LOG_TAG = '[SchedulerSection]';
let SchedulerSectionComponent = class SchedulerSectionComponent {
    /**
     * @param {?} logger
     * @param {?} schedulerService
     * @param {?} notificationCenter
     */
    constructor(logger, schedulerService, notificationCenter) {
        this.logger = logger;
        this.schedulerService = schedulerService;
        this.notificationCenter = notificationCenter;
        //Data
        this.scheduledTasksList = [];
        this.scheduledTaskExecutionsList = [];
        this.statusConfirmationTitleProvider = {
            /**
             * @param {?} rowData
             * @return {?}
             */
            getTitle(rowData) {
                if (rowData.enabled) {
                    return "Disable ?";
                }
                else {
                    return "Enable ?";
                }
            }
        };
        this.logger.debug(LOG_TAG, 'Opening...');
    }
    /**
     * @return {?}
     */
    ngOnInit() {
        this.logger.debug(LOG_TAG, 'Initializing...');
        this.refreshData();
    }
    /**
     * @return {?}
     */
    ngOnDestroy() {
        this.logger.debug(LOG_TAG, 'ngOnDestroy ');
    }
    /**
     * @private
     * @return {?}
     */
    loadData() {
        this.logger.debug(LOG_TAG, 'loadData');
        this.loading = true;
        this.schedulerService.getTaskList().subscribe((/**
         * @param {?} response
         * @return {?}
         */
        (response) => {
            this.scheduledTasksList = response;
            _.forEach(this.scheduledTasksList, (/**
             * @param {?} element
             * @return {?}
             */
            function (element) {
                element.created = new Date(element.created);
                element.updated = new Date(element.updated);
            }));
            this.loading = false;
        }), (/**
         * @param {?} error
         * @return {?}
         */
        error => {
            this.logger.error(LOG_TAG, 'getTaskList failed: ', error);
            this.loading = false;
        }));
    }
    /**
     * @return {?}
     */
    refreshData() {
        this.loadData();
    }
    /**
     * @param {?} dataItem
     * @return {?}
     */
    onDeleteOKPressed(dataItem) {
        this.logger.debug(LOG_TAG, 'onDeleteOKPressed token=', dataItem.name);
        this.schedulerService.deleteTask(dataItem.name).subscribe((/**
         * @param {?} value
         * @return {?}
         */
        value => {
            this.refreshData();
            this.notificationCenter.post({
                name: 'DeleteScheduledTaskSuccess',
                title: 'Delete Scheduled Task',
                message: 'The Scheduled Task has been successfully removed',
                type: NotificationType.Success
            });
        }), (/**
         * @param {?} error
         * @return {?}
         */
        (error) => {
            this.notificationCenter.post({
                name: 'DeleteScheduledTaskError',
                title: 'Delete Scheduled Task',
                message: 'The Scheduled Task could not be removed.',
                type: NotificationType.Error,
                error: error,
                closable: true
            });
        }));
    }
    /**
     * @param {?} dataItem
     * @return {?}
     */
    onDeleteCancelPressed(dataItem) {
        this.logger.debug(LOG_TAG, 'onDeleteCancelPressed');
    }
    /**
     * @return {?}
     */
    onRefreshClicked() {
        this.refreshData();
    }
    /**
     * @param {?} dataItem
     * @return {?}
     */
    onStatusTogglePressed(dataItem) {
        this.logger.debug(LOG_TAG, 'onStatusTogglePressed dataItem: ', dataItem);
        this.changeTaskStatus(dataItem.name, !dataItem.enabled);
    }
    /**
     * @private
     * @param {?} taskName
     * @param {?} enabled
     * @return {?}
     */
    changeTaskStatus(taskName, enabled) {
        if (enabled) {
            this.enabledTask(taskName);
        }
        else {
            this.disableTask(taskName);
        }
    }
    /**
     * @private
     * @param {?} taskName
     * @return {?}
     */
    disableTask(taskName) {
        this.schedulerService.disableTask(taskName).subscribe((/**
         * @param {?} value
         * @return {?}
         */
        value => {
            this.refreshData();
            this.notificationCenter.post({
                name: 'DisableScheduledTaskSuccess',
                title: 'Disable Scheduled Task',
                message: 'The Scheduled Task has been successfully disabled',
                type: NotificationType.Success
            });
        }), (/**
         * @param {?} error
         * @return {?}
         */
        (error) => {
            this.notificationCenter.post({
                name: 'DisableScheduledTaskError',
                title: 'Disable Scheduled Task',
                message: 'The Scheduled Task could not be disabled.',
                type: NotificationType.Error,
                error: error,
                closable: true
            });
        }));
    }
    /**
     * @private
     * @param {?} taskName
     * @return {?}
     */
    enabledTask(taskName) {
        this.schedulerService.enableTask(taskName).subscribe((/**
         * @param {?} value
         * @return {?}
         */
        value => {
            this.refreshData();
            this.notificationCenter.post({
                name: 'EnableScheduledTaskSuccess',
                title: 'Enable Scheduled Task',
                message: 'The Scheduled Task has been successfully enabled',
                type: NotificationType.Success
            });
        }), (/**
         * @param {?} error
         * @return {?}
         */
        (error) => {
            this.notificationCenter.post({
                name: 'EnableScheduledTaskError',
                title: 'Enable Scheduled Task',
                message: 'The Scheduled Task could not be enabled.',
                type: NotificationType.Error,
                error: error,
                closable: true
            });
        }));
    }
};
SchedulerSectionComponent.decorators = [
    { type: Component, args: [{
                selector: 'wa-scheduler-section',
                template: "<wc-dashboard-header [title]=\"'Scheduler Management'\"></wc-dashboard-header>\n<wc-loading-overlay [visible]='loading'></wc-loading-overlay>\n\n<div class=\"row spread\">\n    <div class=\"flex-cmd\">\n        <kendo-buttongroup look=\"flat\">\n          <button\n            kendoButton\n            [toggleable]=\"false\"\n            [icon]=\"'refresh'\"\n            (click)=\"onRefreshClicked()\"\n          >\n            Refresh\n          </button>\n        </kendo-buttongroup>\n      </div>\n</div>\n\n<div class=\"row fill\">\n    <div>\n        <kendo-grid [data]=\"scheduledTasksList\" [scrollable]=\"true\">\n            <kendo-grid-column field=\"created\" title=\"Created\" format=\"{0:dd/MM/yyyy HH:mm:ss}\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"updated\" title=\"Updated\" format=\"{0:dd/MM/yyyy HH:mm:ss}\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"name\" title=\"Name\" witdh=\"30\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"cronPattern\" title=\"Cron\">\n            </kendo-grid-column>\n\n            <!--\n            <kendo-grid-column field=\"enabled\" title=\"Enabled\" witdth=\"20\">\n            </kendo-grid-column>\n            -->\n\n            <kendo-grid-column field=\"enabled\" title=\"Status\">\n                <ng-template kendoGridCellTemplate let-dataItem let-columnIndex=\"columnIndex\" let-rowIndex=\"rowIndex\" let-column=\"column\">\n                        <wc-grid-editor-command\n                        [motif-acl]=\"['com.vipera.osgi.foundation.scheduler.api.rest.SchedulerApi:CREATE:enableTask',\n                                        'com.vipera.osgi.foundation.scheduler.api.rest.SchedulerApi:DELETE:disableTask']\"\n                        [alignMode]=\"'left'\"\n                        [rowIndex]=\"rowIndex\" \n                        [hasConfirmation]=\"true\"\n                        [confirmationTitleProvider]=\"statusConfirmationTitleProvider\"\n                        [columnIndex]=\"columnIndex\" \n                        [column]=\"column\" \n                        [value]=\"dataItem[column.field]\" \n                        [dataItem]=\"dataItem\"\n                        (commandConfirm)=\"onStatusTogglePressed(dataItem)\"  \n                        >\n                        <span *ngIf=\"dataItem.enabled\" class=\"badge badge-status badge-enabled\">\n                                ENABLED\n                            </span>\n                            <span *ngIf=\"!dataItem.enabled\" class=\"badge badge-status  badge-disabled\">\n                                    DISABLED\n                            </span>\n                        </wc-grid-editor-command>\n                </ng-template>\n          </kendo-grid-column>\n\n            <kendo-grid-column field=\"serviceName\" title=\"Service\" witdh=\"50\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"serviceMethod\" title=\"Method\" witdh=\"50\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"failurePolicy\" title=\"On Failure\">\n            </kendo-grid-column>\n            <kendo-grid-column field=\"clusterExecutionPolicy\" title=\"Cluster Policy\">\n            </kendo-grid-column>\n            \n            <kendo-grid-column title=\"\" width=\"150\" minResizableWidth=\"140\">\n                <ng-template kendoGridCellTemplate let-dataItem let-columnIndex=\"columnIndex\" let-rowIndex=\"rowIndex\" let-column=\"column\">\n                        <wc-grid-editor-command\n                            motif-acl=\"com.vipera.osgi.foundation.scheduler.api.rest.SchedulerApi:DELETE:deleteTask\"\n                            motif-acl-hidden=\"true\" \n                            [alignMode]=\"'end'\"\n                            [hasConfirmation]=\"true\"\n                            [confirmationTitle]=\"'Remove ?'\"\n                            [rowIndex]=\"rowIndex\" \n                            [columnIndex]=\"columnIndex\" \n                            [column]=\"column\" \n                            [commandIcon]=\"'wa-ico-no'\"\n                            [dataItem]=\"dataItem\"\n                            (commandConfirm)=\"onDeleteOKPressed(dataItem)\"  \n                            >\n                        </wc-grid-editor-command>\n                </ng-template>\n            </kendo-grid-column>\n\n            <div *kendoGridDetailTemplate=\"let dataItem\">\n                <wa-scheduler-section-task-details [scheduledTask]=\"dataItem.name\"></wa-scheduler-section-task-details>\n            </div>\n        </kendo-grid>\n\n    </div>\n\n</div>\n",
                styles: [":host{display:flex;flex:1;flex-direction:column}:host ::ng-deep .grid-btn-editor.wc-table-delete-command{justify-content:center}:host ::ng-deep tr.k-grid-norecords.ng-star-inserted{text-align:left;display:contents}"]
            }] }
];
/** @nocollapse */
SchedulerSectionComponent.ctorParameters = () => [
    { type: NGXLogger },
    { type: SchedulerService },
    { type: WCNotificationCenter }
];
SchedulerSectionComponent.propDecorators = {
    _grid: [{ type: ViewChild, args: [GridComponent,] }]
};
SchedulerSectionComponent = tslib_1.__decorate([
    PluginView('Scheduler', {
        iconName: 'wa-ico-scheduler',
        userData: {
            acl: {
                permissions: ['com.vipera.osgi.foundation.scheduler.api.rest.SchedulerApi:READ:getTaskList',
                    'com.vipera.osgi.foundation.scheduler.api.rest.SchedulerApi:READ:getTaskExecutionsList']
            }
        }
    }),
    tslib_1.__metadata("design:paramtypes", [NGXLogger,
        SchedulerService,
        WCNotificationCenter])
], SchedulerSectionComponent);
export { SchedulerSectionComponent };
if (false) {
    /** @type {?} */
    SchedulerSectionComponent.prototype._grid;
    /** @type {?} */
    SchedulerSectionComponent.prototype.scheduledTasksList;
    /** @type {?} */
    SchedulerSectionComponent.prototype.scheduledTaskExecutionsList;
    /** @type {?} */
    SchedulerSectionComponent.prototype.loading;
    /** @type {?} */
    SchedulerSectionComponent.prototype.statusConfirmationTitleProvider;
    /**
     * @type {?}
     * @private
     */
    SchedulerSectionComponent.prototype.logger;
    /**
     * @type {?}
     * @private
     */
    SchedulerSectionComponent.prototype.schedulerService;
    /**
     * @type {?}
     * @private
     */
    SchedulerSectionComponent.prototype.notificationCenter;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLXNlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VjdGlvbnMvU2NoZWR1bGVyL2NvbXBvbmVudHMvc2NoZWR1bGVyLXNlY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUErQyxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7TUFHdkQsT0FBTyxHQUFHLG9CQUFvQjtJQWdCdkIseUJBQXlCLFNBQXpCLHlCQUF5Qjs7Ozs7O0lBdUJwQyxZQUFvQixNQUFpQixFQUMzQixnQkFBa0MsRUFDbEMsa0JBQXdDO1FBRjlCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCOztRQXBCM0MsdUJBQWtCLEdBQXlCLEVBQUUsQ0FBQztRQUM5QyxnQ0FBMkIsR0FBd0MsRUFBRSxDQUFDO1FBTTdFLG9DQUErQixHQUFnQzs7Ozs7WUFDN0QsUUFBUSxDQUFDLE9BQU87Z0JBQ1osSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFDO29CQUNoQixPQUFPLFdBQVcsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsT0FBTyxVQUFVLENB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QUFDOzZDQXdCNEIsU0FBUztRQUNULGdCQUFnQjtRQUNkLG9CQUFvQjtHQXpCdkMseUJBQXlCLENBdUpyQztTQXZKWSx5QkFBeUI7OztJQUVwQywwQ0FBK0M7O0lBRy9DLHVEQUFxRDs7SUFDckQsZ0VBQTZFOztJQUc3RSw0Q0FBaUI7O0lBR2pCLG9FQVFEOzs7OztJQUdhLDJDQUF5Qjs7Ozs7SUFDbkMscURBQTBDOzs7OztJQUMxQyx1REFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5WaWV3IH0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5pbXBvcnQgeyBOR1hMb2dnZXIgfSBmcm9tICd3ZWItY29uc29sZS1jb3JlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFdDTm90aWZpY2F0aW9uQ2VudGVyLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnd2ViLWNvbnNvbGUtdWkta2l0JztcbmltcG9ydCB7IFNjaGVkdWxlZFRhc2ssIFNjaGVkdWxlZFRhc2tFeGVjdXRpb25FbnRpdHksIFNjaGVkdWxlclNlcnZpY2UgfSBmcm9tICdAd2EtbW90aWYtb3Blbi1hcGkvc2NoZWR1bGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbXBvbmVudCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xuaW1wb3J0IHsgV0NHcmlkRWRpdG9yQ29tbWFuZHNDb25maWcsIFdDR3JpZEVkaXRvckNvbW1hbmRDb21wb25lbnRFdmVudCwgV0NDb25maXJtYXRpb25UaXRsZVByb3ZpZGVyIH0gZnJvbSAnd2ViLWNvbnNvbGUtdWkta2l0JztcblxuY29uc3QgTE9HX1RBRyA9ICdbU2NoZWR1bGVyU2VjdGlvbl0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3YS1zY2hlZHVsZXItc2VjdGlvbicsXG4gIHN0eWxlVXJsczogWycuL3NjaGVkdWxlci1zZWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9zY2hlZHVsZXItc2VjdGlvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5AUGx1Z2luVmlldygnU2NoZWR1bGVyJywge1xuICBpY29uTmFtZTogJ3dhLWljby1zY2hlZHVsZXInLFxuICB1c2VyRGF0YToge1xuICAgICAgYWNsOiB7XG4gICAgICAgICAgcGVybWlzc2lvbnM6IFsnY29tLnZpcGVyYS5vc2dpLmZvdW5kYXRpb24uc2NoZWR1bGVyLmFwaS5yZXN0LlNjaGVkdWxlckFwaTpSRUFEOmdldFRhc2tMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb20udmlwZXJhLm9zZ2kuZm91bmRhdGlvbi5zY2hlZHVsZXIuYXBpLnJlc3QuU2NoZWR1bGVyQXBpOlJFQUQ6Z2V0VGFza0V4ZWN1dGlvbnNMaXN0J11cbiAgICAgIH1cbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZXJTZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoR3JpZENvbXBvbmVudCkgX2dyaWQ6IEdyaWRDb21wb25lbnQ7XG5cbiAgLy9EYXRhXG4gIHB1YmxpYyBzY2hlZHVsZWRUYXNrc0xpc3Q6IEFycmF5PFNjaGVkdWxlZFRhc2s+ID0gW107XG4gIHB1YmxpYyBzY2hlZHVsZWRUYXNrRXhlY3V0aW9uc0xpc3Q6IEFycmF5PFNjaGVkdWxlZFRhc2tFeGVjdXRpb25FbnRpdHk+ID0gW107XG5cbiAgLy9HcmlkIE9wdGlvbnNcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuXG4gIHN0YXR1c0NvbmZpcm1hdGlvblRpdGxlUHJvdmlkZXI6IFdDQ29uZmlybWF0aW9uVGl0bGVQcm92aWRlciA9IHtcbiAgICBnZXRUaXRsZShyb3dEYXRhKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHJvd0RhdGEuZW5hYmxlZCl7XG4gICAgICAgICAgICByZXR1cm4gXCJEaXNhYmxlID9cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVuYWJsZSA/XCI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgIHByaXZhdGUgc2NoZWR1bGVyU2VydmljZTogU2NoZWR1bGVyU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkNlbnRlcjogV0NOb3RpZmljYXRpb25DZW50ZXJcbiAgICAgICAgKSB7XG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnT3BlbmluZy4uLicpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ0luaXRpYWxpemluZy4uLicpO1xuICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcgLCAnbmdPbkRlc3Ryb3kgJyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKCkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdsb2FkRGF0YScpO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNjaGVkdWxlclNlcnZpY2UuZ2V0VGFza0xpc3QoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLnNjaGVkdWxlZFRhc2tzTGlzdCA9IHJlc3BvbnNlO1xuICAgICAgXy5mb3JFYWNoKHRoaXMuc2NoZWR1bGVkVGFza3NMaXN0LCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNyZWF0ZWQgPSBuZXcgRGF0ZShlbGVtZW50LmNyZWF0ZWQpO1xuICAgICAgICBlbGVtZW50LnVwZGF0ZWQgPSBuZXcgRGF0ZShlbGVtZW50LnVwZGF0ZWQpO1xuICAgICAgfSk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoTE9HX1RBRywgJ2dldFRhc2tMaXN0IGZhaWxlZDogJywgZXJyb3IpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgb25EZWxldGVPS1ByZXNzZWQoZGF0YUl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvbkRlbGV0ZU9LUHJlc3NlZCB0b2tlbj0nLCBkYXRhSXRlbS5uYW1lKTtcblxuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5kZWxldGVUYXNrKGRhdGFJdGVtLm5hbWUpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgbmFtZTogJ0RlbGV0ZVNjaGVkdWxlZFRhc2tTdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgU2NoZWR1bGVkIFRhc2snLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIFNjaGVkdWxlZCBUYXNrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkJyxcbiAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfSk7XG5cbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnBvc3Qoe1xuICAgICAgICBuYW1lOiAnRGVsZXRlU2NoZWR1bGVkVGFza0Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdEZWxldGUgU2NoZWR1bGVkIFRhc2snLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIFNjaGVkdWxlZCBUYXNrIGNvdWxkIG5vdCBiZSByZW1vdmVkLicsXG4gICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgY2xvc2FibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZWxldGVDYW5jZWxQcmVzc2VkKGRhdGFJdGVtOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnb25EZWxldGVDYW5jZWxQcmVzc2VkJyk7XG4gIH1cblxuICBvblJlZnJlc2hDbGlja2VkKCkge1xuICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgfVxuXG4gIG9uU3RhdHVzVG9nZ2xlUHJlc3NlZChkYXRhSXRlbSk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvblN0YXR1c1RvZ2dsZVByZXNzZWQgZGF0YUl0ZW06ICcsIGRhdGFJdGVtKTtcbiAgICB0aGlzLmNoYW5nZVRhc2tTdGF0dXMoZGF0YUl0ZW0ubmFtZSwgIWRhdGFJdGVtLmVuYWJsZWQpO1xuICB9XG5cblxuICBwcml2YXRlIGNoYW5nZVRhc2tTdGF0dXModGFza05hbWU6c3RyaW5nLCBlbmFibGVkOmJvb2xlYW4pIHtcbiAgICBpZiAoZW5hYmxlZCl7XG4gICAgICB0aGlzLmVuYWJsZWRUYXNrKHRhc2tOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlVGFzayh0YXNrTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlVGFzayh0YXNrTmFtZTpzdHJpbmcpe1xuICAgIHRoaXMuc2NoZWR1bGVyU2VydmljZS5kaXNhYmxlVGFzayh0YXNrTmFtZSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnBvc3Qoe1xuICAgICAgICBuYW1lOiAnRGlzYWJsZVNjaGVkdWxlZFRhc2tTdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFNjaGVkdWxlZCBUYXNrJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBTY2hlZHVsZWQgVGFzayBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGlzYWJsZWQnLFxuICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcbiAgICB9KTtcblxuICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgIG5hbWU6ICdEaXNhYmxlU2NoZWR1bGVkVGFza0Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdEaXNhYmxlIFNjaGVkdWxlZCBUYXNrJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBTY2hlZHVsZWQgVGFzayBjb3VsZCBub3QgYmUgZGlzYWJsZWQuJyxcbiAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5FcnJvcixcbiAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZWRUYXNrKHRhc2tOYW1lOnN0cmluZyl7XG4gICAgdGhpcy5zY2hlZHVsZXJTZXJ2aWNlLmVuYWJsZVRhc2sodGFza05hbWUpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgbmFtZTogJ0VuYWJsZVNjaGVkdWxlZFRhc2tTdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdFbmFibGUgU2NoZWR1bGVkIFRhc2snLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIFNjaGVkdWxlZCBUYXNrIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBlbmFibGVkJyxcbiAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgfSk7XG5cbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uQ2VudGVyLnBvc3Qoe1xuICAgICAgICBuYW1lOiAnRW5hYmxlU2NoZWR1bGVkVGFza0Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdFbmFibGUgU2NoZWR1bGVkIFRhc2snLFxuICAgICAgICBtZXNzYWdlOiAnVGhlIFNjaGVkdWxlZCBUYXNrIGNvdWxkIG5vdCBiZSBlbmFibGVkLicsXG4gICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgY2xvc2FibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==