@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
169 lines • 27.3 kB
JavaScript
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