acr-assist-simulator-module
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.7.4.
169 lines (168 loc) • 23.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Injectable } from '@angular/core';
import { DataElementCreationBaseService } from './data-element-creation-base-service';
import { DiagramService } from './diagram.service';
import { ChoiceDataElement } from '../../../core/elements/models/choice-data-element-model';
import { Choice } from '../../../core/elements/models/choice.model';
import { ImageMap } from '../../../core/elements/models/image-map.model';
import { Area } from '../../../core/elements/models/area-model';
import { AreaMap } from '../../../core/elements/models/area-map.model';
import { ArrayCheckerService } from './array-checker.service';
import { NotRelevantDataElements } from '../../../core/models/notrelevantdataelements.model';
import { ConditionalProperty } from '../../../core/elements/models/conditionalproperty.model';
import { ConditionsCreationService } from './conditions-creation.service';
import { ComputedValueCreationService } from './computed-value-creation.service';
export class ChoiceDataElementCreationService extends DataElementCreationBaseService {
/**
* @param {?} diagramService
* @param {?} arrayCheckerService
* @param {?} conditionsCreationService
* @param {?} computedValueCreationService
*/
constructor(diagramService, arrayCheckerService, conditionsCreationService, computedValueCreationService) {
super(diagramService);
this.arrayCheckerService = arrayCheckerService;
this.conditionsCreationService = conditionsCreationService;
this.computedValueCreationService = computedValueCreationService;
this.elementType = 'ChoiceDataElement';
}
/**
* @param {?} choiceItem
* @return {?}
*/
returnChoice(choiceItem) {
const /** @type {?} */ choice = new Choice();
choice.label = choiceItem.Label;
choice.value = choiceItem.Value;
choice.hint = choiceItem.Hint;
choice.reportText = choiceItem.ReportText;
choice.default = false;
if (choiceItem.Attr && choiceItem.Attr.IsDefault) {
choice.default = choiceItem.Attr.IsDefault;
}
return choice;
}
/**
* @param {?} areaJSON
* @return {?}
*/
returnArea(areaJSON) {
const /** @type {?} */ area = new Area();
area.choiceValue = areaJSON.Attr.ChoiceValue;
area.coords = areaJSON.Attr.Coords;
area.shape = areaJSON.Attr.Shape;
return area;
}
/**
* @param {?} data
* @return {?}
*/
createElement(data) {
const /** @type {?} */ dataElement = new ChoiceDataElement();
super.populateBasicData(data, dataElement);
dataElement.allowFreetext = data.Attr.AllowFreetext ? data.Attr.AllowFreetext : false;
const /** @type {?} */ choiceItems = data.ChoiceInfo.Choice;
let /** @type {?} */ defaultValue;
if (choiceItems !== undefined) {
dataElement.choiceInfo = new Array();
if (this.arrayCheckerService.isArray(choiceItems)) {
for (const /** @type {?} */ choiceItem of choiceItems) {
const /** @type {?} */ choice = this.returnChoice(choiceItem);
if (choice.default) {
defaultValue = choice.value;
}
dataElement.choiceInfo.push(choice);
}
}
else {
const /** @type {?} */ choice = this.returnChoice(choiceItems);
if (choice.default) {
defaultValue = choice.value;
}
dataElement.choiceInfo.push(choice);
}
}
dataElement.defaultValue = defaultValue;
dataElement.currentValue = defaultValue;
const /** @type {?} */ imageMap = data.ImageMap;
if (imageMap !== undefined) {
dataElement.imageMap = new ImageMap();
dataElement.imageMap.location = imageMap.Location;
const /** @type {?} */ areaMaps = imageMap.Map.Area;
if (areaMaps !== undefined) {
dataElement.imageMap.map = new AreaMap();
dataElement.imageMap.map.areas = new Array();
if (this.arrayCheckerService.isArray(areaMaps)) {
for (const /** @type {?} */ areaMap of areaMaps) {
dataElement.imageMap.map.areas.push(this.returnArea(areaMap));
}
}
else {
dataElement.imageMap.map.areas.push(this.returnArea(areaMaps));
}
}
}
const /** @type {?} */ ConditionalProperties = data.ConditionalProperties;
if (ConditionalProperties !== undefined) {
const /** @type {?} */ notRelevantDataElements = new NotRelevantDataElements();
const /** @type {?} */ dataElementRefs = data.ConditionalProperties;
// .NotRelevantDataElements.DataElementRef;
if (data.ConditionalProperties !== undefined) {
dataElement.conditionalProperties = new Array();
if (data.ConditionalProperties.ConditionalProperty instanceof Array) {
for (const /** @type {?} */ conditionalProperty of data.ConditionalProperties.ConditionalProperty) {
dataElement.conditionalProperties.push(this.GetConditionalProperties(conditionalProperty));
}
}
else {
dataElement.conditionalProperties.push(this.GetConditionalProperties(data.ConditionalProperties.ConditionalProperty));
}
}
}
return dataElement;
}
/**
* @param {?} conditionalProperty
* @return {?}
*/
GetConditionalProperties(conditionalProperty) {
const /** @type {?} */ _conditionalProperty = new ConditionalProperty();
_conditionalProperty.condition = this.conditionsCreationService.returnCondition(conditionalProperty);
// var test = this.computedValueCreationService.createComputedValue(conditionalProperty);
if (this.conditionsCreationService.isComposite(conditionalProperty)) {
_conditionalProperty.compositeCondition = this.conditionsCreationService.returnCompositeCondition(conditionalProperty);
}
_conditionalProperty.isRelevant = conditionalProperty.IsRelevant;
_conditionalProperty.isRequired = conditionalProperty.IsRequired;
_conditionalProperty.DisplaySequence = conditionalProperty.DisplaySequence;
if (conditionalProperty.ChoiceNotRelevant !== undefined) {
_conditionalProperty.ChoiceNotRelevant = new Array();
for (const /** @type {?} */ choiceNotRelevant of conditionalProperty.ChoiceNotRelevant) {
_conditionalProperty.ChoiceNotRelevant.push(choiceNotRelevant.Attr.ChoiceValue);
}
}
return _conditionalProperty;
}
}
ChoiceDataElementCreationService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
ChoiceDataElementCreationService.ctorParameters = () => [
{ type: DiagramService },
{ type: ArrayCheckerService },
{ type: ConditionsCreationService },
{ type: ComputedValueCreationService }
];
function ChoiceDataElementCreationService_tsickle_Closure_declarations() {
/** @type {?} */
ChoiceDataElementCreationService.prototype.arrayCheckerService;
/** @type {?} */
ChoiceDataElementCreationService.prototype.conditionsCreationService;
/** @type {?} */
ChoiceDataElementCreationService.prototype.computedValueCreationService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvaWNlLWRhdGEtZWxlbWVudC1jcmVhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWNyLWFzc2lzdC1zaW11bGF0b3ItbW9kdWxlLyIsInNvdXJjZXMiOlsic3JjL2FwcC9tb2R1bGVzL2Fjci1hc3Npc3Qtc2ltdWxhdG9yL3NoYXJlZC9zZXJ2aWNlcy9jaG9pY2UtZGF0YS1lbGVtZW50LWNyZWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUM5RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUlqRixNQUFNLHVDQUF3QyxTQUFRLDhCQUE4Qjs7Ozs7OztJQUVsRixZQUFZLGNBQThCLEVBQVUsbUJBQXdDLEVBQ2xGLDJCQUNBO1FBRVIsS0FB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QyxtQkFBbUIsQ0FBQyxDQUFDOztRQUVyRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLG9CQUFvQixDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3hIO1FBRUQsb0JBQW9CLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztRQUNqRSxvQkFBb0IsQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDO1FBQ2pFLG9CQUFvQixDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7UUFDM0UsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN4RCxvQkFBb0IsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1lBQzdELEdBQUcsQ0FBQyxDQUFDLHVCQUFNLGlCQUFpQixJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDdEUsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqRjtTQUNGO1FBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDOzs7O1lBckgvQixVQUFVOzs7O1lBZEYsY0FBYztZQU9kLG1CQUFtQjtZQUduQix5QkFBeUI7WUFDekIsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhRWxlbWVudENyZWF0aW9uQmFzZVNlcnZpY2UgfSBmcm9tICcuL2RhdGEtZWxlbWVudC1jcmVhdGlvbi1iYXNlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFncmFtU2VydmljZSB9IGZyb20gJy4vZGlhZ3JhbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hvaWNlRGF0YUVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VsZW1lbnRzL21vZGVscy9jaG9pY2UtZGF0YS1lbGVtZW50LW1vZGVsJztcclxuaW1wb3J0IHsgQmFzZURhdGFFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbGVtZW50cy9tb2RlbHMvYmFzZS1kYXRhLWVsZW1lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDaG9pY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VsZW1lbnRzL21vZGVscy9jaG9pY2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJbWFnZU1hcCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZWxlbWVudHMvbW9kZWxzL2ltYWdlLW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IEFyZWEgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VsZW1lbnRzL21vZGVscy9hcmVhLW1vZGVsJztcclxuaW1wb3J0IHsgQXJlYU1hcCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZWxlbWVudHMvbW9kZWxzL2FyZWEtbWFwLm1vZGVsJztcclxuaW1wb3J0IHsgQXJyYXlDaGVja2VyU2VydmljZSB9IGZyb20gJy4vYXJyYXktY2hlY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90UmVsZXZhbnREYXRhRWxlbWVudHMgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9ub3RyZWxldmFudGRhdGFlbGVtZW50cy5tb2RlbCc7XHJcbmltcG9ydCB7IENvbmRpdGlvbmFsUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VsZW1lbnRzL21vZGVscy9jb25kaXRpb25hbHByb3BlcnR5Lm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZGl0aW9uc0NyZWF0aW9uU2VydmljZSB9IGZyb20gJy4vY29uZGl0aW9ucy1jcmVhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcHV0ZWRWYWx1ZUNyZWF0aW9uU2VydmljZSB9IGZyb20gJy4vY29tcHV0ZWQtdmFsdWUtY3JlYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEJyYW5jaCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2JyYW5jaC5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDaG9pY2VEYXRhRWxlbWVudENyZWF0aW9uU2VydmljZSBleHRlbmRzIERhdGFFbGVtZW50Q3JlYXRpb25CYXNlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGRpYWdyYW1TZXJ2aWNlOiBEaWFncmFtU2VydmljZSwgcHJpdmF0ZSBhcnJheUNoZWNrZXJTZXJ2aWNlOiBBcnJheUNoZWNrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25kaXRpb25zQ3JlYXRpb25TZXJ2aWNlOiBDb25kaXRpb25zQ3JlYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wdXRlZFZhbHVlQ3JlYXRpb25TZXJ2aWNlOiBDb21wdXRlZFZhbHVlQ3JlYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihkaWFncmFtU2VydmljZSk7XHJcbiAgICB0aGlzLmVsZW1lbnRUeXBlID0gJ0Nob2ljZURhdGFFbGVtZW50JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmV0dXJuQ2hvaWNlKGNob2ljZUl0ZW06IGFueSk6IENob2ljZSB7XHJcbiAgICBjb25zdCBjaG9pY2UgPSBuZXcgQ2hvaWNlKCk7XHJcbiAgICBjaG9pY2UubGFiZWwgPSBjaG9pY2VJdGVtLkxhYmVsO1xyXG4gICAgY2hvaWNlLnZhbHVlID0gY2hvaWNlSXRlbS5WYWx1ZTtcclxuICAgIGNob2ljZS5oaW50ID0gY2hvaWNlSXRlbS5IaW50O1xyXG4gICAgY2hvaWNlLnJlcG9ydFRleHQgPSBjaG9pY2VJdGVtLlJlcG9ydFRleHQ7XHJcbiAgICBjaG9pY2UuZGVmYXVsdCA9IGZhbHNlO1xyXG4gICAgaWYgKGNob2ljZUl0ZW0uQXR0ciAmJiBjaG9pY2VJdGVtLkF0dHIuSXNEZWZhdWx0KSB7XHJcbiAgICAgIGNob2ljZS5kZWZhdWx0ID0gY2hvaWNlSXRlbS5BdHRyLklzRGVmYXVsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBjaG9pY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJldHVybkFyZWEoYXJlYUpTT046IGFueSk6IEFyZWEge1xyXG4gICAgY29uc3QgYXJlYSA9IG5ldyBBcmVhKCk7XHJcbiAgICBhcmVhLmNob2ljZVZhbHVlID0gYXJlYUpTT04uQXR0ci5DaG9pY2VWYWx1ZTtcclxuICAgIGFyZWEuY29vcmRzID0gYXJlYUpTT04uQXR0ci5Db29yZHM7XHJcbiAgICBhcmVhLnNoYXBlID0gYXJlYUpTT04uQXR0ci5TaGFwZTtcclxuICAgIHJldHVybiBhcmVhO1xyXG4gIH1cclxuXHJcblxyXG4gIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55KTogQmFzZURhdGFFbGVtZW50IHtcclxuICAgIGNvbnN0IGRhdGFFbGVtZW50ID0gbmV3IENob2ljZURhdGFFbGVtZW50KCk7XHJcbiAgICBzdXBlci5wb3B1bGF0ZUJhc2ljRGF0YShkYXRhLCBkYXRhRWxlbWVudCk7XHJcbiAgICBkYXRhRWxlbWVudC5hbGxvd0ZyZWV0ZXh0ID0gZGF0YS5BdHRyLkFsbG93RnJlZXRleHQgPyBkYXRhLkF0dHIuQWxsb3dGcmVldGV4dCA6IGZhbHNlO1xyXG4gICAgY29uc3QgY2hvaWNlSXRlbXMgPSBkYXRhLkNob2ljZUluZm8uQ2hvaWNlO1xyXG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xyXG4gICAgaWYgKGNob2ljZUl0ZW1zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZGF0YUVsZW1lbnQuY2hvaWNlSW5mbyA9IG5ldyBBcnJheTxDaG9pY2U+KCk7XHJcbiAgICAgIGlmICh0aGlzLmFycmF5Q2hlY2tlclNlcnZpY2UuaXNBcnJheShjaG9pY2VJdGVtcykpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNob2ljZUl0ZW0gb2YgY2hvaWNlSXRlbXMpIHtcclxuICAgICAgICAgIGNvbnN0IGNob2ljZSA9IHRoaXMucmV0dXJuQ2hvaWNlKGNob2ljZUl0ZW0pO1xyXG4gICAgICAgICAgaWYgKGNob2ljZS5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNob2ljZS52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGFFbGVtZW50LmNob2ljZUluZm8ucHVzaChjaG9pY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjaG9pY2UgPSB0aGlzLnJldHVybkNob2ljZShjaG9pY2VJdGVtcyk7XHJcbiAgICAgICAgaWYgKGNob2ljZS5kZWZhdWx0KSB7XHJcbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaG9pY2UudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGFFbGVtZW50LmNob2ljZUluZm8ucHVzaChjaG9pY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBkYXRhRWxlbWVudC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICBkYXRhRWxlbWVudC5jdXJyZW50VmFsdWUgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICBjb25zdCBpbWFnZU1hcCA9IGRhdGEuSW1hZ2VNYXA7XHJcbiAgICBpZiAoaW1hZ2VNYXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkYXRhRWxlbWVudC5pbWFnZU1hcCA9IG5ldyBJbWFnZU1hcCgpO1xyXG4gICAgICBkYXRhRWxlbWVudC5pbWFnZU1hcC5sb2NhdGlvbiA9IGltYWdlTWFwLkxvY2F0aW9uO1xyXG4gICAgICBjb25zdCBhcmVhTWFwcyA9IGltYWdlTWFwLk1hcC5BcmVhO1xyXG4gICAgICBpZiAoYXJlYU1hcHMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGRhdGFFbGVtZW50LmltYWdlTWFwLm1hcCA9IG5ldyBBcmVhTWFwKCk7XHJcbiAgICAgICAgZGF0YUVsZW1lbnQuaW1hZ2VNYXAubWFwLmFyZWFzID0gbmV3IEFycmF5PEFyZWE+KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlDaGVja2VyU2VydmljZS5pc0FycmF5KGFyZWFNYXBzKSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBhcmVhTWFwIG9mIGFyZWFNYXBzKSB7XHJcbiAgICAgICAgICAgIGRhdGFFbGVtZW50LmltYWdlTWFwLm1hcC5hcmVhcy5wdXNoKHRoaXMucmV0dXJuQXJlYShhcmVhTWFwKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGFFbGVtZW50LmltYWdlTWFwLm1hcC5hcmVhcy5wdXNoKHRoaXMucmV0dXJuQXJlYShhcmVhTWFwcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBDb25kaXRpb25hbFByb3BlcnRpZXMgPSBkYXRhLkNvbmRpdGlvbmFsUHJvcGVydGllcztcclxuICAgIGlmIChDb25kaXRpb25hbFByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBub3RSZWxldmFudERhdGFFbGVtZW50cyA9IG5ldyBOb3RSZWxldmFudERhdGFFbGVtZW50cygpO1xyXG4gICAgICBjb25zdCBkYXRhRWxlbWVudFJlZnMgPSBkYXRhLkNvbmRpdGlvbmFsUHJvcGVydGllcztcclxuICAgICAgLy8gLk5vdFJlbGV2YW50RGF0YUVsZW1lbnRzLkRhdGFFbGVtZW50UmVmO1xyXG5cclxuICAgICAgaWYgKGRhdGEuQ29uZGl0aW9uYWxQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBkYXRhRWxlbWVudC5jb25kaXRpb25hbFByb3BlcnRpZXMgPSBuZXcgQXJyYXk8Q29uZGl0aW9uYWxQcm9wZXJ0eT4oKTtcclxuICAgICAgICBpZiAoZGF0YS5Db25kaXRpb25hbFByb3BlcnRpZXMuQ29uZGl0aW9uYWxQcm9wZXJ0eSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbmFsUHJvcGVydHkgb2YgZGF0YS5Db25kaXRpb25hbFByb3BlcnRpZXMuQ29uZGl0aW9uYWxQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICBkYXRhRWxlbWVudC5jb25kaXRpb25hbFByb3BlcnRpZXMucHVzaCh0aGlzLkdldENvbmRpdGlvbmFsUHJvcGVydGllcyhjb25kaXRpb25hbFByb3BlcnR5KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGFFbGVtZW50LmNvbmRpdGlvbmFsUHJvcGVydGllcy5wdXNoKHRoaXMuR2V0Q29uZGl0aW9uYWxQcm9wZXJ0aWVzKGRhdGEuQ29uZGl0aW9uYWxQcm9wZXJ0aWVzLkNvbmRpdGlvbmFsUHJvcGVydHkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldENvbmRpdGlvbmFsUHJvcGVydGllcyhjb25kaXRpb25hbFByb3BlcnR5KTogQ29uZGl0aW9uYWxQcm9wZXJ0eSB7XHJcbiAgICBjb25zdCBfY29uZGl0aW9uYWxQcm9wZXJ0eSA9IG5ldyBDb25kaXRpb25hbFByb3BlcnR5KCk7XHJcbiAgICBfY29uZGl0aW9uYWxQcm9wZXJ0eS5jb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbnNDcmVhdGlvblNlcnZpY2UucmV0dXJuQ29uZGl0aW9uKGNvbmRpdGlvbmFsUHJvcGVydHkpO1xyXG4gICAgLy8gdmFyIHRlc3QgPSB0aGlzLmNvbXB1dGVkVmFsdWVDcmVhdGlvblNlcnZpY2UuY3JlYXRlQ29tcHV0ZWRWYWx1ZShjb25kaXRpb25hbFByb3BlcnR5KTtcclxuICAgIGlmICh0aGlzLmNvbmRpdGlvbnNDcmVhdGlvblNlcnZpY2UuaXNDb21wb3NpdGUoY29uZGl0aW9uYWxQcm9wZXJ0eSkpIHtcclxuICAgICAgX2NvbmRpdGlvbmFsUHJvcGVydHkuY29tcG9zaXRlQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb25zQ3JlYXRpb25TZXJ2aWNlLnJldHVybkNvbXBvc2l0ZUNvbmRpdGlvbihjb25kaXRpb25hbFByb3BlcnR5KTtcclxuICAgIH1cclxuXHJcbiAgICBfY29uZGl0aW9uYWxQcm9wZXJ0eS5pc1JlbGV2YW50ID0gY29uZGl0aW9uYWxQcm9wZXJ0eS5Jc1JlbGV2YW50O1xyXG4gICAgX2NvbmRpdGlvbmFsUHJvcGVydHkuaXNSZXF1aXJlZCA9IGNvbmRpdGlvbmFsUHJvcGVydHkuSXNSZXF1aXJlZDtcclxuICAgIF9jb25kaXRpb25hbFByb3BlcnR5LkRpc3BsYXlTZXF1ZW5jZSA9IGNvbmRpdGlvbmFsUHJvcGVydHkuRGlzcGxheVNlcXVlbmNlO1xyXG4gICAgaWYgKGNvbmRpdGlvbmFsUHJvcGVydHkuQ2hvaWNlTm90UmVsZXZhbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBfY29uZGl0aW9uYWxQcm9wZXJ0eS5DaG9pY2VOb3RSZWxldmFudCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgIGZvciAoY29uc3QgY2hvaWNlTm90UmVsZXZhbnQgb2YgY29uZGl0aW9uYWxQcm9wZXJ0eS5DaG9pY2VOb3RSZWxldmFudCkge1xyXG4gICAgICAgIF9jb25kaXRpb25hbFByb3BlcnR5LkNob2ljZU5vdFJlbGV2YW50LnB1c2goY2hvaWNlTm90UmVsZXZhbnQuQXR0ci5DaG9pY2VWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gX2NvbmRpdGlvbmFsUHJvcGVydHk7XHJcbiAgfVxyXG59XHJcbiJdfQ==