UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

169 lines 27.3 kB
import { Component, Input, Optional } from '@angular/core'; import { AbstractPanelWithHeaderBindingComponent } from '../abstract/panel-with-header-binding'; import { toMoment } from '../../resources/types/nae-date-type'; import { DATE_TIME_FORMAT_STRING } from '../../moment/time-formats'; import { TextField } from '../../data-fields/text-field/models/text-field'; import { DateTimeField } from '../../data-fields/date-time-field/models/date-time-field'; import { WorkflowMetaField } from '../../header/workflow-header/workflow-meta-enum'; import { ProgressType } from '../../resources/resource-provider.service'; import * as i0 from "@angular/core"; import * as i1 from "../../logger/services/logger.service"; import * as i2 from "@ngx-translate/core"; import * as i3 from "../../view/workflow-view/workflow-view.service"; import * as i4 from "../../resources/engine-endpoint/petri-net-resource.service"; import * as i5 from "../../header/services/overflow.service"; export class AbstractWorkflowPanelComponent extends AbstractPanelWithHeaderBindingComponent { _log; _translate; _workflowService; _petriNetResource; _overflowService; workflow; responsiveBody = true; showDeleteMenu = false; first; last; panelRef; panelContent; _subscription; TRANSLATION_NET = 'panel.workflow.net'; TRANSLATION_TITLE = 'panel.workflow.title'; TRANSLATION_VERSION = 'panel.workflow.version'; TRANSLATION_AUTHOR = 'panel.workflow.author'; TRANSLATION_UPLOAD = 'panel.workflow.upload'; dataFieldsBehaviour = { visible: true, editable: false }; constructor(_log, _translate, _workflowService, _petriNetResource, _overflowService) { super(_overflowService); this._log = _log; this._translate = _translate; this._workflowService = _workflowService; this._petriNetResource = _petriNetResource; this._overflowService = _overflowService; this._subscription = _translate.onLangChange.subscribe((event) => { this.panelContent.netIdentifier.title = this._translate.instant(this.TRANSLATION_NET); this.panelContent.title.title = this._translate.instant(this.TRANSLATION_TITLE); this.panelContent.version.title = this._translate.instant(this.TRANSLATION_VERSION); this.panelContent.author.title = this._translate.instant(this.TRANSLATION_AUTHOR); this.panelContent.uploaded.title = this._translate.instant(this.TRANSLATION_UPLOAD); }); } ngOnInit() { super.ngOnInit(); this.panelContent = this.createPanelContent(); } ngOnDestroy() { super.ngOnDestroy(); this._subscription.unsubscribe(); } show(event) { event.stopPropagation(); return false; } collapse() { } setPanelRef(panelRef) { this.panelRef = panelRef; } /** * Handles the logic that should be executed when the "delete workflow" button is clicked. * * Calls the appropriate method in the {@link WorkflowViewService}. */ deleteWorkflow() { this._workflowService.deleteWorkflow(this.workflow); } /** * Handles the logic that should be executed when the "download workflow" button is clicked. * * Calls the appropriate method in the {@link WorkflowViewService}. */ downloadNetFile() { this._petriNetResource.getNetFile(this.workflow.stringId).subscribe(response => { if (!response.type || response.type !== ProgressType.DOWNLOAD) { this._log.debug(`File ${this.workflow.identifier} was successfully downloaded`); this.downloadViaAnchor(response); } }, error => { this._log.error(`Downloading file ${this.workflow.identifier} has failed!`, error); }); } downloadViaAnchor(blob) { const a = document.createElement('a'); document.body.appendChild(a); a.setAttribute('style', 'display: none'); blob = new Blob([blob], { type: blob.type }); const url = window.URL.createObjectURL(blob); a.href = url; a.download = this.workflow.identifier; a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); } /** * Populate data fields group for every petri net model */ createPanelContent() { return { netIdentifier: new TextField('', this._translate.instant(this.TRANSLATION_NET), this.workflow.identifier, this.dataFieldsBehaviour), title: new TextField('', this._translate.instant(this.TRANSLATION_TITLE), this.workflow.title, this.dataFieldsBehaviour), version: new TextField('', this._translate.instant(this.TRANSLATION_VERSION), this.workflow.version, this.dataFieldsBehaviour), author: new TextField('', this._translate.instant(this.TRANSLATION_AUTHOR), this.workflow.author.fullName, this.dataFieldsBehaviour), uploaded: new DateTimeField('', this._translate.instant(this.TRANSLATION_UPLOAD), toMoment(this.workflow.createdDate), this.dataFieldsBehaviour) }; } resolveFeaturedFieldsValues() { if (!this._lastSelectedHeaders) { return; } this.featuredFieldsValues.splice(0, this.featuredFieldsValues.length); this._lastSelectedHeaders.forEach(header => { this.featuredFieldsValues.push(this.getFeaturedValue(header)); }); } getFeaturedMetaValue(selectedHeader) { switch (selectedHeader.fieldIdentifier) { case WorkflowMetaField.INITIALS: return { value: this.workflow.initials, icon: '', type: 'meta' }; case WorkflowMetaField.TITLE: return { value: this.workflow.title || this.workflow.identifier, icon: '', type: 'meta' }; case WorkflowMetaField.NET_ID: return { value: this.workflow.stringId, icon: '', type: 'meta' }; case WorkflowMetaField.VERSION: return { value: this.workflow.version, icon: '', type: 'meta' }; case WorkflowMetaField.AUTHOR: return { value: this.workflow.author.fullName, icon: 'account_circle', type: 'meta' }; case WorkflowMetaField.CREATION_DATE: return { value: toMoment(this.workflow.createdDate).format(DATE_TIME_FORMAT_STRING), icon: 'event', type: 'meta' }; } } getFeaturedImmediateValue(selectedHeader) { this._log.warn('Immediate data in workflow panel headers are currently not supported'); return { value: '', icon: '', type: '' }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractWorkflowPanelComponent, deps: [{ token: i1.LoggerService }, { token: i2.TranslateService }, { token: i3.WorkflowViewService }, { token: i4.PetriNetResourceService }, { token: i5.OverflowService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractWorkflowPanelComponent, selector: "ncc-abstract-workflow-panel", inputs: { workflow: "workflow", responsiveBody: "responsiveBody", showDeleteMenu: "showDeleteMenu", first: "first", last: "last" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractWorkflowPanelComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-workflow-panel', template: '' }] }], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.TranslateService }, { type: i3.WorkflowViewService }, { type: i4.PetriNetResourceService }, { type: i5.OverflowService, decorators: [{ type: Optional }] }], propDecorators: { workflow: [{ type: Input }], responsiveBody: [{ type: Input }], showDeleteMenu: [{ type: Input }], first: [{ type: Input }], last: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtd29ya2Zsb3ctcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9wYW5lbC93b3JrZmxvdy1wYW5lbC9hYnN0cmFjdC13b3JrZmxvdy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU1RSxPQUFPLEVBQUMsdUNBQXVDLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUk5RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUl2RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUlsRixPQUFPLEVBQUMsWUFBWSxFQUFtQixNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7O0FBZXpGLE1BQU0sT0FBZ0IsOEJBQStCLFNBQVEsdUNBQXVDO0lBa0JoRTtJQUNBO0lBQ0E7SUFDQTtJQUNZO0lBcEI1QixRQUFRLENBQU07SUFDckIsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssQ0FBVTtJQUNmLElBQUksQ0FBVTtJQUN2QixRQUFRLENBQW9CO0lBQzVCLFlBQVksQ0FBdUI7SUFDbEMsYUFBYSxDQUFlO0lBQ25CLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztJQUN2QyxpQkFBaUIsR0FBRyxzQkFBc0IsQ0FBQztJQUMzQyxtQkFBbUIsR0FBRyx3QkFBd0Is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UUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztvQkFDMUUsSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLE1BQU07aUJBQ2YsQ0FBQztTQUNUO0lBQ0wsQ0FBQztJQUVTLHlCQUF5QixDQUFDLGNBQTRCO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDdkYsT0FBTyxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDM0MsQ0FBQzt3R0FwSmlCLDhCQUE4Qjs0RkFBOUIsOEJBQThCLDhOQUZ0QyxFQUFFOzs0RkFFTSw4QkFBOEI7a0JBSm5ELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OzBCQXVCMEIsUUFBUTt5Q0FwQmYsUUFBUTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRFeHBhbnNpb25QYW5lbH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7QWJzdHJhY3RQYW5lbFdpdGhIZWFkZXJCaW5kaW5nQ29tcG9uZW50fSBmcm9tICcuLi9hYnN0cmFjdC9wYW5lbC13aXRoLWhlYWRlci1iaW5kaW5nJztcbmltcG9ydCB7SGVhZGVyQ29sdW1ufSBmcm9tICcuLi8uLi9oZWFkZXIvbW9kZWxzL2hlYWRlci1jb2x1bW4nO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHt0b01vbWVudH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3R5cGVzL25hZS1kYXRlLXR5cGUnO1xuaW1wb3J0IHtEQVRFX1RJTUVfRk9STUFUX1NUUklOR30gZnJvbSAnLi4vLi4vbW9tZW50L3RpbWUtZm9ybWF0cyc7XG5pbXBvcnQge1RleHRGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGV4dC1maWVsZC9tb2RlbHMvdGV4dC1maWVsZCc7XG5pbXBvcnQge0RhdGVUaW1lRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL2RhdGUtdGltZS1maWVsZC9tb2RlbHMvZGF0ZS10aW1lLWZpZWxkJztcbmltcG9ydCB7QmVoYXZpb3J9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9iZWhhdmlvcic7XG5pbXBvcnQge05ldH0gZnJvbSAnLi4vLi4vcHJvY2Vzcy9uZXQnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGlvbkNoYW5nZUV2ZW50fSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7V29ya2Zsb3dNZXRhRmllbGR9IGZyb20gJy4uLy4uL2hlYWRlci93b3JrZmxvdy1oZWFkZXIvd29ya2Zsb3ctbWV0YS1lbnVtJztcbmltcG9ydCB7V29ya2Zsb3dWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vdmlldy93b3JrZmxvdy12aWV3L3dvcmtmbG93LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0ZlYXR1cmVkVmFsdWV9IGZyb20gJy4uL2Fic3RyYWN0L2ZlYXR1cmVkLXZhbHVlJztcbmltcG9ydCB7UGV0cmlOZXRSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvcGV0cmktbmV0LXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9ncmVzc1R5cGUsIFByb3ZpZGVyUHJvZ3Jlc3N9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9yZXNvdXJjZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7T3ZlcmZsb3dTZXJ2aWNlfSBmcm9tICcuLi8uLi9oZWFkZXIvc2VydmljZXMvb3ZlcmZsb3cuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dQYW5lbENvbnRlbnQge1xuICAgIG5ldElkZW50aWZpZXI6IFRleHRGaWVsZDtcbiAgICB0aXRsZTogVGV4dEZpZWxkO1xuICAgIHZlcnNpb246IFRleHRGaWVsZDtcbiAgICBhdXRob3I6IFRleHRGaWVsZDtcbiAgICB1cGxvYWRlZDogRGF0ZVRpbWVGaWVsZDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3Qtd29ya2Zsb3ctcGFuZWwnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdvcmtmbG93UGFuZWxDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFBhbmVsV2l0aEhlYWRlckJpbmRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgd29ya2Zsb3c6IE5ldDtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlQm9keSA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0RlbGV0ZU1lbnUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZmlyc3Q6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGxhc3Q6IGJvb2xlYW47XG4gICAgcHVibGljIHBhbmVsUmVmOiBNYXRFeHBhbnNpb25QYW5lbDtcbiAgICBwdWJsaWMgcGFuZWxDb250ZW50OiBXb3JrZmxvd1BhbmVsQ29udGVudDtcbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRSQU5TTEFUSU9OX05FVCA9ICdwYW5lbC53b3JrZmxvdy5uZXQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVElUTEUgPSAncGFuZWwud29ya2Zsb3cudGl0bGUnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVkVSU0lPTiA9ICdwYW5lbC53b3JrZmxvdy52ZXJzaW9uJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRSQU5TTEFUSU9OX0FVVEhPUiA9ICdwYW5lbC53b3JrZmxvdy5hdXRob3InO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVFJBTlNMQVRJT05fVVBMT0FEID0gJ3BhbmVsLndvcmtmbG93LnVwbG9hZCc7XG5cbiAgICBwcm90ZWN0ZWQgZGF0YUZpZWxkc0JlaGF2aW91cjogQmVoYXZpb3IgPSB7dmlzaWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXJ2aWNlOiBXb3JrZmxvd1ZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX292ZXJmbG93U2VydmljZTogT3ZlcmZsb3dTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKF9vdmVyZmxvd1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IF90cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IFRyYW5zbGF0aW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxDb250ZW50Lm5ldElkZW50aWZpZXIudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX05FVCk7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC50aXRsZS50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVElUTEUpO1xuICAgICAgICAgICAgdGhpcy5wYW5lbENvbnRlbnQudmVyc2lvbi50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVkVSU0lPTik7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC5hdXRob3IudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX0FVVEhPUik7XG4gICAgICAgICAgICB0aGlzLnBhbmVsQ29udGVudC51cGxvYWRlZC50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fVVBMT0FEKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMucGFuZWxDb250ZW50ID0gdGhpcy5jcmVhdGVQYW5lbENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3coZXZlbnQ6IE1vdXNlRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBhbmVsUmVmKHBhbmVsUmVmOiBNYXRFeHBhbnNpb25QYW5lbCkge1xuICAgICAgICB0aGlzLnBhbmVsUmVmID0gcGFuZWxSZWY7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB0aGUgbG9naWMgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgXCJkZWxldGUgd29ya2Zsb3dcIiBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKlxuICAgICAqIENhbGxzIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QgaW4gdGhlIHtAbGluayBXb3JrZmxvd1ZpZXdTZXJ2aWNlfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlV29ya2Zsb3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2VydmljZS5kZWxldGVXb3JrZmxvdyh0aGlzLndvcmtmbG93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSBsb2dpYyB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIHRoZSBcImRvd25sb2FkIHdvcmtmbG93XCIgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBDYWxscyB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIGluIHRoZSB7QGxpbmsgV29ya2Zsb3dWaWV3U2VydmljZX0uXG4gICAgICovXG4gICAgcHVibGljIGRvd25sb2FkTmV0RmlsZSgpIHtcbiAgICAgICAgdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5nZXROZXRGaWxlKHRoaXMud29ya2Zsb3cuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAoIShyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlIHx8IChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlICE9PSBQcm9ncmVzc1R5cGUuRE9XTkxPQUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpbGUgJHt0aGlzLndvcmtmbG93LmlkZW50aWZpZXJ9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRWaWFBbmNob3IocmVzcG9uc2UgYXMgQmxvYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgRG93bmxvYWRpbmcgZmlsZSAke3RoaXMud29ya2Zsb3cuaWRlbnRpZmllcn0gaGFzIGZhaWxlZCFgLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb3dubG9hZFZpYUFuY2hvcihibG9iOiBCbG9iKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICAgIGJsb2IgPSBuZXcgQmxvYihbYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTtcblxuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gdGhpcy53b3JrZmxvdy5pZGVudGlmaWVyO1xuICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUG9wdWxhdGUgZGF0YSBmaWVsZHMgZ3JvdXAgZm9yIGV2ZXJ5IHBldHJpIG5ldCBtb2RlbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVQYW5lbENvbnRlbnQoKTogV29ya2Zsb3dQYW5lbENvbnRlbnQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV0SWRlbnRpZmllcjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9ORVQpLFxuICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3cuaWRlbnRpZmllciwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHRpdGxlOiBuZXcgVGV4dEZpZWxkKCcnLCB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh0aGlzLlRSQU5TTEFUSU9OX1RJVExFKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnRpdGxlLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpLFxuICAgICAgICAgICAgdmVyc2lvbjogbmV3IFRleHRGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9WRVJTSU9OKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LnZlcnNpb24sIHRoaXMuZGF0YUZpZWxkc0JlaGF2aW91ciksXG4gICAgICAgICAgICBhdXRob3I6IG5ldyBUZXh0RmllbGQoJycsIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHRoaXMuVFJBTlNMQVRJT05fQVVUSE9SKSxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93LmF1dGhvci5mdWxsTmFtZSwgdGhpcy5kYXRhRmllbGRzQmVoYXZpb3VyKSxcbiAgICAgICAgICAgIHVwbG9hZGVkOiBuZXcgRGF0ZVRpbWVGaWVsZCgnJywgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQodGhpcy5UUkFOU0xBVElPTl9VUExPQUQpLFxuICAgICAgICAgICAgICAgIHRvTW9tZW50KHRoaXMud29ya2Zsb3cuY3JlYXRlZERhdGUpLCB0aGlzLmRhdGFGaWVsZHNCZWhhdmlvdXIpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVGZWF0dXJlZEZpZWxkc1ZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sYXN0U2VsZWN0ZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLnNwbGljZSgwLCB0aGlzLmZlYXR1cmVkRmllbGRzVmFsdWVzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZEhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlZEZpZWxkc1ZhbHVlcy5wdXNoKHRoaXMuZ2V0RmVhdHVyZWRWYWx1ZShoZWFkZXIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEZlYXR1cmVkTWV0YVZhbHVlKHNlbGVjdGVkSGVhZGVyOiBIZWFkZXJDb2x1bW4pOiBGZWF0dXJlZFZhbHVlIHtcbiAgICAgICAgc3dpdGNoIChzZWxlY3RlZEhlYWRlci5maWVsZElkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuSU5JVElBTFM6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy53b3JrZmxvdy5pbml0aWFscywgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLlRJVExFOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cudGl0bGUgfHwgdGhpcy53b3JrZmxvdy5pZGVudGlmaWVyLCBpY29uOiAnJywgdHlwZTogJ21ldGEnfTtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuTkVUX0lEOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cuc3RyaW5nSWQsIGljb246ICcnLCB0eXBlOiAnbWV0YSd9O1xuICAgICAgICAgICAgY2FzZSBXb3JrZmxvd01ldGFGaWVsZC5WRVJTSU9OOlxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMud29ya2Zsb3cudmVyc2lvbiwgaWNvbjogJycsIHR5cGU6ICdtZXRhJ307XG4gICAgICAgICAgICBjYXNlIFdvcmtmbG93TWV0YUZpZWxkLkFVVEhPUjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLndvcmtmbG93LmF1dGhvci5mdWxsTmFtZSwgaWNvbjogJ2FjY291bnRfY2lyY2xlJywgdHlwZTogJ21ldGEnfTtcbiAgICAgICAgICAgIGNhc2UgV29ya2Zsb3dNZXRhRmllbGQuQ1JFQVRJT05fREFURTpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG9Nb21lbnQodGhpcy53b3JrZmxvdy5jcmVhdGVkRGF0ZSkuZm9ybWF0KERBVEVfVElNRV9GT1JNQVRfU1RSSU5HKSxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2V2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21ldGEnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGZWF0dXJlZEltbWVkaWF0ZVZhbHVlKHNlbGVjdGVkSGVhZGVyOiBIZWFkZXJDb2x1bW4pOiBGZWF0dXJlZFZhbHVlIHtcbiAgICAgICAgdGhpcy5fbG9nLndhcm4oJ0ltbWVkaWF0ZSBkYXRhIGluIHdvcmtmbG93IHBhbmVsIGhlYWRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgIHJldHVybiB7dmFsdWU6ICcnLCBpY29uOiAnJywgdHlwZTogJyd9O1xuICAgIH1cblxufVxuIl19