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 / CountersAndThresholds / components / thresholds / thresholds-component.js

/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import { Component, EventEmitter, Output, Input } from '@angular/core';
import { NGXLogger } from 'web-console-core';
import { WCNotificationCenter, NotificationType } from 'web-console-ui-kit';
import { CountersService } from '@wa-motif-open-api/counters-thresholds-service';
import { WCSubscriptionHandler } from '../../../../components/Commons/wc-subscription-handler';
import { ThresholdsInfosModel } from './data/model';
import { faEdit } from '@fortawesome/free-solid-svg-icons';
/** @type {?} */
const LOG_TAG = '[ThresholdsComponent]';
/**
 * @record
 */
export function SelectionEvent() { }
if (false) {
    /** @type {?} */
    SelectionEvent.prototype.thresholdName;
    /** @type {?} */
    SelectionEvent.prototype.data;
}
/** @enum {string} */
const EditType = {
    Delete: 'Delete',
    Edit: 'Edit',
    StatusChange: 'StatusChange',
};
export { EditType };
/**
 * @record
 */
export function EditEvent() { }
if (false) {
    /** @type {?} */
    EditEvent.prototype.editType;
    /** @type {?} */
    EditEvent.prototype.dataItem;
}
export class ThresholdsComponent {
    /**
     * @param {?} logger
     * @param {?} notificationCenter
     * @param {?} countersService
     */
    constructor(logger, notificationCenter, countersService) {
        this.logger = logger;
        this.notificationCenter = notificationCenter;
        this.countersService = countersService;
        this.loading = false;
        this._subHandler = new WCSubscriptionHandler();
        this.faEdit = faEdit;
        this.selectionChange = new EventEmitter();
        this.edit = new EventEmitter();
        this.statusConfirmationTitleProvider = {
            /**
             * @param {?} rowData
             * @return {?}
             */
            getTitle(rowData) {
                if (rowData.enabled) {
                    return "Disable ?";
                }
                else {
                    return "Enable ?";
                }
            }
        };
        this.commands = [
            {
                commandIcon: 'wa-ico-edit',
                commandId: EditType.Edit,
                title: 'Edit'
            },
            {
                commandIcon: 'wa-ico-no',
                commandId: EditType.Delete,
                title: 'Delete',
                hasConfirmation: true,
                confirmationTitle: 'Delete ?'
            }
        ];
        this.tableModel = new ThresholdsInfosModel();
    }
    /**
     * @return {?}
     */
    ngOnInit() {
        this.reloadData();
    }
    /**
     * @return {?}
     */
    ngOnDestroy() {
        this.logger.debug(LOG_TAG, 'ngOnDestroy ');
        this.freeMem();
    }
    /**
     * @return {?}
     */
    freeMem() {
        this.tableModel.close();
    }
    /**
     * @return {?}
     */
    reloadData() {
        this.logger.debug(LOG_TAG, 'reloadData called');
        this.loading = true;
        if (this._counterInfo) {
            this._subHandler.add(this.countersService.getThresholdInfoList(this._counterInfo).subscribe((/**
             * @param {?} data
             * @return {?}
             */
            (data) => {
                this.logger.debug(LOG_TAG, 'getThresholdInfoList done: ', data);
                this.tableModel.loadData(data);
                this.loading = false;
                this.clearSelection();
            }), (/**
             * @param {?} error
             * @return {?}
             */
            (error) => {
                this.logger.error(LOG_TAG, 'getThresholdInfoList error: ', error);
                this.notificationCenter.post({
                    name: 'GetThresholdsListError',
                    title: 'Get Thresholds List',
                    message: 'Error getting thresholds list:',
                    type: NotificationType.Error,
                    error: error,
                    closable: true
                });
                this.clearSelection();
                this.loading = false;
            })));
        }
        else {
            this.tableModel.close();
            this.loading = false;
            this.clearSelection();
        }
    }
    /**
     * @private
     * @return {?}
     */
    clearSelection() {
        this.selectedThreshold = null;
        this.selectionChange.emit({
            thresholdName: this.selectedThreshold,
            data: null
        });
    }
    /**
     * @param {?} counterInfo
     * @return {?}
     */
    set counterInfo(counterInfo) {
        this.logger.debug(LOG_TAG, 'set counterInfo:', counterInfo);
        this._counterInfo = counterInfo;
        this.reloadData();
    }
    /**
     * @return {?}
     */
    get counterInfo() {
        return this._counterInfo;
    }
    /**
     * @param {?} dataItem
     * @return {?}
     */
    onStatusTogglePressed(dataItem) {
        this.logger.debug(LOG_TAG, 'onStatusTogglePressed dataItem: ', dataItem);
        this.edit.emit({
            editType: EditType.StatusChange,
            dataItem: dataItem
        });
    }
    /**
     * @param {?} event
     * @return {?}
     */
    onCommandConfirm(event) {
        this.logger.debug(LOG_TAG, 'onCommandConfirm event: ', event);
        this.edit.emit({
            editType: EditType[event.id],
            dataItem: event.rowData.dataItem
        });
    }
    /**
     * @param {?} event
     * @return {?}
     */
    onCommandClick(event) {
        this.logger.debug(LOG_TAG, 'onCommandClick event: ', event);
        this.edit.emit({
            editType: EditType[event.id],
            dataItem: event.rowData.dataItem
        });
    }
    /**
     * @param {?} event
     * @return {?}
     */
    onSelectionChange(event) {
        this.logger.debug(LOG_TAG, 'onSelectionChange event: ', event);
        /** @type {?} */
        let data = null;
        if (event.selectedRows.length > 0) {
            this.selectedThreshold = event.selectedRows[0].dataItem.name;
            data = event.selectedRows[0].dataItem;
        }
        else {
            this.selectedThreshold = null;
        }
        this.selectionChange.emit({
            thresholdName: this.selectedThreshold,
            data: data
        });
    }
}
ThresholdsComponent.decorators = [
    { type: Component, args: [{
                // tslint:disable-next-line:component-selector
                selector: 'wa-threshols-component',
                template: "<wc-loading-overlay [visible]='loading'></wc-loading-overlay>\n\n<kendo-grid #datagrid [data]=\"tableModel.data\" (selectionChange)=\"onSelectionChange($event)\">\n  <kendo-grid-column field=\"name\" title=\"Name\" width=\"150\"> </kendo-grid-column>\n\n  <kendo-grid-column field=\"description\" title=\"Description\">\n  </kendo-grid-column>\n\n  <kendo-grid-column\n    field=\"created\"\n    title=\"Created\"\n    width=\"150\"\n    format=\"{0:dd/MM/yyyy HH:mm:ss}\"\n  >\n  </kendo-grid-column>\n\n  <kendo-grid-column field=\"enabled\" title=\"Status\">\n    <ng-template\n      kendoGridCellTemplate\n      let-dataItem\n      let-columnIndex=\"columnIndex\"\n      let-rowIndex=\"rowIndex\"\n      let-column=\"column\"\n    >\n    <wc-grid-editor-command\n    [motif-acl]=\"['com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:CREATE:enableThresholdInfo', \n                  'com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:DELETE:disableThresholdInfo']\"\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\n  </ng-template>\n  </kendo-grid-column>\n\n  <kendo-grid-column media=\"(min-width: 80px)\" title=\"Deny\" width=\"80\">\n                <ng-template kendoGridCellTemplate let-dataItem>\n                  <label\n                    class=\"k-icon grid-cell-checkbox grid-cell-checkbox-{{\n                      dataItem.deny\n                    }}\"\n                  ></label>\n                </ng-template>\n              </kendo-grid-column>\n\n              <kendo-grid-column media=\"(min-width: 80px)\" title=\"Type\" width=\"80\">\n                        <ng-template kendoGridCellTemplate let-dataItem>\n                          <label>{{dataItem.type}}</label>\n                        </ng-template>\n                      </kendo-grid-column>\n        \n\n  <kendo-grid-column title=\"\">\n    <ng-template\n      kendoGridCellTemplate\n      let-dataItem\n      let-columnIndex=\"columnIndex\"\n      let-rowIndex=\"rowIndex\"\n      let-column=\"column\"\n    >\n      <wc-grid-editor-commands-group\n      [motif-acl]=\"['com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:UPDATE:updateThresholdInfo',\n                    'com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:DELETE:deleteThresholdInfo']\"\n      motif-acl-hidden=\"true\"\n      [rowIndex]=\"rowIndex\"\n      [columnIndex]=\"columnIndex\" \n      [column]=\"column\" \n      [value]=\"dataItem[column.field]\" \n      [dataItem]=\"dataItem\"\n      [commands]=\"commands\"\n        [alignMode]=\"'end'\"\n        (commandConfirm)=\"onCommandConfirm($event)\"\n        (commandClick)=\"onCommandClick($event)\"\n></wc-grid-editor-commands-group>\n    </ng-template>\n  </kendo-grid-column>\n\n  <div *kendoGridDetailTemplate=\"let dataItem\">\n                <wa-threshold-details [dataItem]=\"dataItem\"></wa-threshold-details>\n  </div>\n    \n\n</kendo-grid>\n",
                styles: [".badge{border-radius:4px;display:inline-block;padding:1px 7px}.badge-status{cursor:pointer;text-decoration:none;font-size:.63rem;line-height:1.3;font-weight:700;padding:3px 7px;text-align:center;vertical-align:baseline;white-space:nowrap}.badge-enabled{background-color:green;color:#fff}.badge-disabled{background-color:gray;color:#454545}.counter-info-row-details{padding:0}.counter-info-row-details p{margin:0;padding:.1rem 0;color:#595959}.counter-info-row-details p a{color:#539653;margin-left:10px}"]
            }] }
];
/** @nocollapse */
ThresholdsComponent.ctorParameters = () => [
    { type: NGXLogger },
    { type: WCNotificationCenter },
    { type: CountersService }
];
ThresholdsComponent.propDecorators = {
    selectionChange: [{ type: Output }],
    edit: [{ type: Output }],
    counterInfo: [{ type: Input }]
};
if (false) {
    /** @type {?} */
    ThresholdsComponent.prototype.loading;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype._subHandler;
    /** @type {?} */
    ThresholdsComponent.prototype.tableModel;
    /** @type {?} */
    ThresholdsComponent.prototype.faEdit;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype._counterInfo;
    /** @type {?} */
    ThresholdsComponent.prototype.selectedThreshold;
    /** @type {?} */
    ThresholdsComponent.prototype.selectionChange;
    /** @type {?} */
    ThresholdsComponent.prototype.edit;
    /** @type {?} */
    ThresholdsComponent.prototype.statusConfirmationTitleProvider;
    /** @type {?} */
    ThresholdsComponent.prototype.commands;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.logger;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.notificationCenter;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.countersService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkcy1jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tb3RpZi13ZWItYWRtaW4tY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWN0aW9ucy9Db3VudGVyc0FuZFRocmVzaG9sZHMvY29tcG9uZW50cy90aHJlc2hvbGRzL3RocmVzaG9sZHMtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztNQUVyRCxPQUFPLEdBQUcsdUJBQXVCOzs7O0FBRXZDLG9DQUdDOzs7SUFGRyx1Q0FBc0I7O0lBQ3RCLDhCQUFTOzs7O0lBSVQsUUFBUyxRQUFRO0lBQ2pCLE1BQU8sTUFBTTtJQUNiLGNBQWUsY0FBYzs7Ozs7O0FBR2pDLCtCQUdDOzs7SUFGRyw2QkFBa0I7O0lBQ2xCLDZCQUE4Qjs7QUFTbEMsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7O0lBc0M1QixZQUNZLE1BQWlCLEVBQ2pCLGtCQUF3QyxFQUN4QyxlQUFnQztRQUZoQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBc0I7UUFDeEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBdEM1QyxZQUFPLEdBQUcsS0FBSyxDQUFD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Q2hCLDBDQUF5RTs7SUFDekUseUNBQXdDOztJQUN4QyxxQ0FBZ0I7Ozs7O0lBQ2hCLDJDQUE2Qjs7SUFDN0IsZ0RBQTBCOztJQUUxQiw4Q0FBOEU7O0lBQzlFLG1DQUF3RTs7SUFFeEUsOERBUUM7O0lBRUQsdUNBYUU7Ozs7O0lBR0UscUNBQXlCOzs7OztJQUN6QixpREFBZ0Q7Ozs7O0lBQ2hELDhDQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdDR3JpZEVkaXRvckNvbW1hbmRzQ29uZmlnLCBXQ0dyaWRFZGl0b3JDb21tYW5kQ29tcG9uZW50RXZlbnQsIFdDQ29uZmlybWF0aW9uVGl0bGVQcm92aWRlciAgfSBmcm9tICd3ZWItY29uc29sZS11aS1raXQnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hMb2dnZXJ9IGZyb20gJ3dlYi1jb25zb2xlLWNvcmUnO1xuaW1wb3J0IHsgV0NOb3RpZmljYXRpb25DZW50ZXIsIE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICd3ZWItY29uc29sZS11aS1raXQnO1xuaW1wb3J0IHsgQ291bnRlcnNTZXJ2aWNlLCBUaHJlc2hvbGRJbmZvRW50aXR5IH0gZnJvbSAnQHdhLW1vdGlmLW9wZW4tYXBpL2NvdW50ZXJzLXRocmVzaG9sZHMtc2VydmljZSc7XG5pbXBvcnQgeyBXQ1N1YnNjcmlwdGlvbkhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL0NvbW1vbnMvd2Mtc3Vic2NyaXB0aW9uLWhhbmRsZXInO1xuaW1wb3J0IHsgVGhyZXNob2xkc0luZm9zTW9kZWwgfSBmcm9tICcuL2RhdGEvbW9kZWwnOyBcbmltcG9ydCB7IGZhRWRpdCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmNvbnN0IExPR19UQUcgPSAnW1RocmVzaG9sZHNDb21wb25lbnRdJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gICAgdGhyZXNob2xkTmFtZTogc3RyaW5nO1xuICAgIGRhdGE6IGFueVxufVxuXG5leHBvcnQgZW51bSBFZGl0VHlwZSB7XG4gICAgRGVsZXRlID0gJ0RlbGV0ZScsXG4gICAgRWRpdCA9ICdFZGl0JyxcbiAgICBTdGF0dXNDaGFuZ2UgPSAnU3RhdHVzQ2hhbmdlJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRFdmVudCB7XG4gICAgZWRpdFR5cGU6IEVkaXRUeXBlXG4gICAgZGF0YUl0ZW06IFRocmVzaG9sZEluZm9FbnRpdHk7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ3dhLXRocmVzaG9scy1jb21wb25lbnQnLFxuICAgIHN0eWxlVXJsczogWycuL3RocmVzaG9sZHMtY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGhyZXNob2xkcy1jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGhyZXNob2xkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3N1YkhhbmRsZXI6IFdDU3Vic2NyaXB0aW9uSGFuZGxlciA9IG5ldyBXQ1N1YnNjcmlwdGlvbkhhbmRsZXIoKTtcbiAgICBwdWJsaWMgdGFibGVNb2RlbDogVGhyZXNob2xkc0luZm9zTW9kZWw7XG4gICAgZmFFZGl0ID0gZmFFZGl0O1xuICAgIHByaXZhdGUgX2NvdW50ZXJJbmZvOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWRUaHJlc2hvbGQ6IHN0cmluZztcblxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBlZGl0OiBFdmVudEVtaXR0ZXI8RWRpdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RWRpdEV2ZW50PigpO1xuXG4gICAgc3RhdHVzQ29uZmlybWF0aW9uVGl0bGVQcm92aWRlcjogV0NDb25maXJtYXRpb25UaXRsZVByb3ZpZGVyID0ge1xuICAgICAgICBnZXRUaXRsZShyb3dEYXRhKTogc3RyaW5nIHtcbiAgICAgICAgICAgIGlmIChyb3dEYXRhLmVuYWJsZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiBcIkRpc2FibGUgP1wiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbmFibGUgP1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNvbW1hbmRzOiBXQ0dyaWRFZGl0b3JDb21tYW5kc0NvbmZpZyA9IFtcbiAgICAgICAgeyBcbiAgICAgICAgICAgIGNvbW1hbmRJY29uOiAnd2EtaWNvLWVkaXQnLFxuICAgICAgICAgICAgY29tbWFuZElkOiBFZGl0VHlwZS5FZGl0LFxuICAgICAgICAgICAgdGl0bGU6ICdFZGl0J1xuICAgICAgICB9LFxuICAgICAgICB7IFxuICAgICAgICAgICAgY29tbWFuZEljb246ICd3YS1pY28tbm8nLFxuICAgICAgICAgICAgY29tbWFuZElkOiBFZGl0VHlwZS5EZWxldGUsXG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG4gICAgICAgICAgICBoYXNDb25maXJtYXRpb246IHRydWUsXG4gICAgICAgICAgICBjb25maXJtYXRpb25UaXRsZTogJ0RlbGV0ZSA/JyBcbiAgICAgICAgfVxuICAgIF07XG4gICAgXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uQ2VudGVyOiBXQ05vdGlmaWNhdGlvbkNlbnRlcixcbiAgICAgICAgcHJpdmF0ZSBjb3VudGVyc1NlcnZpY2U6IENvdW50ZXJzU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnRhYmxlTW9kZWwgPSBuZXcgVGhyZXNob2xkc0luZm9zTW9kZWwoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcgLCAnbmdPbkRlc3Ryb3kgJyk7XG4gICAgICAgIHRoaXMuZnJlZU1lbSgpO1xuICAgIH1cblxuICAgIGZyZWVNZW0oKSB7XG4gICAgICAgIHRoaXMudGFibGVNb2RlbC5jbG9zZSgpO1xuICAgIH1cblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdyZWxvYWREYXRhIGNhbGxlZCcpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5fY291bnRlckluZm8pe1xuICAgICAgICAgICAgdGhpcy5fc3ViSGFuZGxlci5hZGQodGhpcy5jb3VudGVyc1NlcnZpY2UuZ2V0VGhyZXNob2xkSW5mb0xpc3QodGhpcy5fY291bnRlckluZm8pLnN1YnNjcmliZSggKGRhdGE6IEFycmF5PFRocmVzaG9sZEluZm9FbnRpdHk+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ2dldFRocmVzaG9sZEluZm9MaXN0IGRvbmU6ICcsIGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVNb2RlbC5sb2FkRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0VGhyZXNob2xkSW5mb0xpc3QgZXJyb3I6ICcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0dldFRocmVzaG9sZHNMaXN0RXJyb3InLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0dldCBUaHJlc2hvbGRzIExpc3QnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgZ2V0dGluZyB0aHJlc2hvbGRzIGxpc3Q6JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVNb2RlbC5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJTZWxlY3Rpb24oKXtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRocmVzaG9sZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdGhyZXNob2xkTmFtZTogdGhpcy5zZWxlY3RlZFRocmVzaG9sZCxcbiAgICAgICAgICAgIGRhdGE6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcHVibGljIHNldCBjb3VudGVySW5mbyhjb3VudGVySW5mbzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdzZXQgY291bnRlckluZm86JywgY291bnRlckluZm8pO1xuICAgICAgICB0aGlzLl9jb3VudGVySW5mbyA9IGNvdW50ZXJJbmZvO1xuICAgICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvdW50ZXJJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3VudGVySW5mbztcbiAgICB9XG5cbiAgICBvblN0YXR1c1RvZ2dsZVByZXNzZWQoZGF0YUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ29uU3RhdHVzVG9nZ2xlUHJlc3NlZCBkYXRhSXRlbTogJywgZGF0YUl0ZW0pO1xuICAgICAgICB0aGlzLmVkaXQuZW1pdCh7XG4gICAgICAgICAgICBlZGl0VHlwZTogRWRpdFR5cGUuU3RhdHVzQ2hhbmdlLFxuICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgb25Db21tYW5kQ29uZmlybShldmVudDogV0NHcmlkRWRpdG9yQ29tbWFuZENvbXBvbmVudEV2ZW50KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvbkNvbW1hbmRDb25maXJtIGV2ZW50OiAnLCBldmVudCk7XG4gICAgICAgIHRoaXMuZWRpdC5lbWl0KHtcbiAgICAgICAgICAgIGVkaXRUeXBlOiBFZGl0VHlwZVtldmVudC5pZF0sXG4gICAgICAgICAgICBkYXRhSXRlbTogZXZlbnQucm93RGF0YS5kYXRhSXRlbVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ29tbWFuZENsaWNrKGV2ZW50OiBXQ0dyaWRFZGl0b3JDb21tYW5kQ29tcG9uZW50RXZlbnQpe1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnb25Db21tYW5kQ2xpY2sgZXZlbnQ6ICcsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5lZGl0LmVtaXQoe1xuICAgICAgICAgICAgZWRpdFR5cGU6IEVkaXRUeXBlW2V2ZW50LmlkXSxcbiAgICAgICAgICAgIGRhdGFJdGVtOiBldmVudC5yb3dEYXRhLmRhdGFJdGVtXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ29uU2VsZWN0aW9uQ2hhbmdlIGV2ZW50OiAnLCBldmVudCk7XG4gICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgaWYgKGV2ZW50LnNlbGVjdGVkUm93cy5sZW5ndGg+MCl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhyZXNob2xkID0gZXZlbnQuc2VsZWN0ZWRSb3dzWzBdLmRhdGFJdGVtLm5hbWU7XG4gICAgICAgICAgICBkYXRhID0gZXZlbnQuc2VsZWN0ZWRSb3dzWzBdLmRhdGFJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRocmVzaG9sZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICB0aHJlc2hvbGROYW1lOiB0aGlzLnNlbGVjdGVkVGhyZXNob2xkLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdfQ==