UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

275 lines (274 loc) 27.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractDataLangSelector } from './AbstractDataLangSelector'; import { I18N, Option } from '../../decorator/decorators'; /** * @abstract */ export class AbstractComponentDataLangSelector extends AbstractDataLangSelector { /** * @param {?} elementRef * @param {?} dialogService */ constructor(elementRef, dialogService) { super(elementRef, dialogService); this.componentInstances = {}; this.defaultComponentHandler = (result) => { this.defaultComponentInstance = result.instance; let /** @type {?} */ defaultData = this.getDefaultData(); let /** @type {?} */ defWrapData = this.getInstanceDefaultData(defaultData); if (typeof this.defaultComponentInstance.setData === 'function') { this.defaultComponentInstance.setData(defWrapData); } }; this.componentHandler = (result) => { if (result !== null && typeof result !== 'undefined') { if (result.setting !== null && typeof result.setting !== 'undefined' && result.setting.code !== null && typeof result.setting.code !== 'undefined') { this.componentInstances[result.setting.code] = result.instance; let /** @type {?} */ dataLang = this.getDataLangFromIndex(result.setting.index); let /** @type {?} */ dataLangWrapData = this.getInstanceDataLanguage(dataLang); if (typeof this.componentInstances[result.setting.code].setData === 'function') { this.componentInstances[result.setting.code].setData(dataLangWrapData); } } } }; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} data * @return {?} */ getIndexFromDataLang(data) { if (data !== null && typeof data !== 'undefined') { return this.dataLangList.indexOf(data); } return -1; } /** * @param {?} index * @return {?} */ getDataLangFromIndex(index) { if (index !== null && typeof index === 'number' && index > -1) { if (index < this.dataLangList.length) { return this.dataLangList[index]; } } return null; } /** * @param {?} langCode * @return {?} */ getLanuageIndexFromCode(langCode) { if (langCode === null || typeof langCode === 'undefined') { return -1; } for (let /** @type {?} */ i = 0; i < this.languageList.length; i++) { let /** @type {?} */ lang = this.languageList[i]; if (lang === null || typeof lang === 'undefined') { continue; } let /** @type {?} */ lCode = lang.code; if (langCode === lCode) { return i; } } return -1; } /** * @return {?} */ reAddingDataToInstance() { let /** @type {?} */ defaultData = this.getDefaultData(); let /** @type {?} */ defWrapData = this.getInstanceDefaultData(defaultData); if (this.defaultComponentInstance !== null && typeof this.defaultComponentInstance !== 'undefined') { if (typeof this.defaultComponentInstance.setData === 'function') { this.defaultComponentInstance.setData(defWrapData); } } for (let /** @type {?} */ i = 0; i < this.dataLangList.length; i++) { let /** @type {?} */ d = this.dataLangList[i]; let /** @type {?} */ setting = this.getComponentSetting(i); let /** @type {?} */ langCode = null; if (setting !== null && typeof setting !== 'undefined') { langCode = setting.code; } if (langCode === null || typeof langCode === 'undefined') { continue; } let /** @type {?} */ instance = null; if (this.componentInstances !== null && typeof this.componentInstances !== 'undefined') { instance = this.componentInstances[langCode]; } if (instance !== null && typeof instance !== 'undefined') { if (typeof instance.setData === 'function') { let /** @type {?} */ dWrap = this.getInstanceDataLanguage(d); instance.setData(dWrap); } } } } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); this.reAddingDataToInstance(); } /** * @param {?} langCode string as a language code * @return {?} any as a component instance of langCode return defaultInstance if langCode is null */ getComponentInstance(langCode) { if (langCode === null) { // if null should return default instance return this.defaultComponentInstance; } else { if (typeof langCode !== 'undefined') { let /** @type {?} */ inst = this.componentInstances[langCode]; if (inst !== null && typeof inst !== 'undefined') { return inst; } } } return null; } /** * data null return as a defaultInstanceDirty * @param {?} data as a dataLanguage * @return {?} boolean is dataLanguageDirty */ isDataLanguageDirty(data) { let /** @type {?} */ inst = null; if (typeof data !== 'undefined') { if (data === null) { // default inst = this.defaultComponentInstance; } else { // index let /** @type {?} */ index = this.getIndexFromDataLang(data); let /** @type {?} */ setting = this.getComponentSetting(index); let /** @type {?} */ langCode = null; if (setting !== null && typeof setting !== 'undefined') { langCode = setting.code; } if (langCode !== null && typeof langCode !== 'undefined') { inst = this.componentInstances[langCode]; } } } if (inst !== null && typeof inst !== 'undefined') { if (typeof inst.isDataDirty === 'function') { return inst.isDataDirty(); } } return false; } /** * @param {?} index * @return {?} */ getComponentSetting(index) { let /** @type {?} */ langCode = null; if (index !== null && typeof index === 'number') { if (index > -1 && index < this.languageList.length) { langCode = this.languageList[index].code; } } let /** @type {?} */ setting = { code: langCode, index: index }; return setting; } /** * @return {?} */ getDefaultComponentInstance() { return this.defaultComponentInstance; } /** * @return {?} */ getComponentInstances() { return this.componentInstances; } /** * @return {?} */ getDefaultComponentHandler() { return this.defaultComponentHandler; } /** * @return {?} */ getComponentHandler() { return this.componentHandler; } } tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], AbstractComponentDataLangSelector.prototype, "componentInstances", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], AbstractComponentDataLangSelector.prototype, "defaultComponentInstance", void 0); function AbstractComponentDataLangSelector_tsickle_Closure_declarations() { /** @type {?} */ AbstractComponentDataLangSelector.prototype.componentHandler; /** * the object map that contains component instances that has langCode as a key * @type {?} */ AbstractComponentDataLangSelector.prototype.defaultComponentHandler; /** @type {?} */ AbstractComponentDataLangSelector.prototype.componentInstances; /** @type {?} */ AbstractComponentDataLangSelector.prototype.defaultComponentInstance; /** * @abstract * @return {?} */ AbstractComponentDataLangSelector.prototype.getLanguageFieldName = function () { }; /** * @abstract * @return {?} */ AbstractComponentDataLangSelector.prototype.getObjectIdFieldName = function () { }; /** * @abstract * @param {?} data * @return {?} */ AbstractComponentDataLangSelector.prototype.getInstanceDefaultData = function (data) { }; /** * @abstract * @param {?} data * @return {?} */ AbstractComponentDataLangSelector.prototype.getInstanceDataLanguage = function (data) { }; /** * @abstract * @param {?} langCode * @return {?} */ AbstractComponentDataLangSelector.prototype.parseLanguageButtonModel = function (langCode) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L0Fic3RyYWN0Q29tcG9uZW50RGF0YUxhbmdTZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFFMUQsTUFBTSx3Q0FBa0QsU0FBUSx3QkFBd0I7Ozs7O0lBY3BGLFlBQVksVUFBc0IsRUFBRSxhQUE0QjtRQUM1RCxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFFaEQscUJBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxxQkFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3REO1NBQ0osQ0FBQTtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3BDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENB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QUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDOUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQzthQUM1QztTQUNKO1FBQ0QscUJBQUksT0FBTyxHQUFHO1lBQ1YsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsS0FBSztTQUNmLENBQUM7UUFFRixNQUFNLENBQUMsT0FBTyxDQUFDOzs7OztJQUdaLDJCQUEyQjtRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDOzs7OztJQUdoQyxxQkFBcUI7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzs7Ozs7SUFHMUIsMEJBQTBCO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7Ozs7O0lBRy9CLG1CQUFtQjtRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDOztDQVlsQzs7SUFsTkksSUFBSSxFQUFFO0lBQ04sTUFBTSxFQUFFOzs7O0lBRVIsSUFBSSxFQUFFO0lBQ04sTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9EaWFsb2dTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yIH0gZnJvbSAnLi9BYnN0cmFjdERhdGFMYW5nU2VsZWN0b3InO1xuaW1wb3J0IHsgTGFuZ3VhZ2VCdXR0b25Nb2RlbCB9IGZyb20gJy4uL21vZGVsL0xhbmd1YWdlQnV0dG9uTW9kZWwnO1xuaW1wb3J0IHsgSTE4TiwgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDb21wb25lbnREYXRhTGFuZ1NlbGVjdG9yIGV4dGVuZHMgQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByb3RlY3RlZCBjb21wb25lbnRIYW5kbGVyOiBGdW5jdGlvbjtcbiAgICAvKipcbiAgICAgKiB0aGUgb2JqZWN0IG1hcCB0aGF0IGNvbnRhaW5zIGNvbXBvbmVudCBpbnN0YW5jZXMgdGhhdCBoYXMgbGFuZ0NvZGUgYXMgYSBrZXlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdENvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICAgIEBJMThOKClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgY29tcG9uZW50SW5zdGFuY2VzOiBhbnk7XG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkZWZhdWx0Q29tcG9uZW50SW5zdGFuY2U6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXMgPSB7fTtcblxuICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZSA9IHJlc3VsdC5pbnN0YW5jZTtcblxuICAgICAgICAgICAgbGV0IGRlZmF1bHREYXRhID0gdGhpcy5nZXREZWZhdWx0RGF0YSgpO1xuICAgICAgICAgICAgbGV0IGRlZldyYXBEYXRhID0gdGhpcy5nZXRJbnN0YW5jZURlZmF1bHREYXRhKGRlZmF1bHREYXRhKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlLnNldERhdGEoZGVmV3JhcERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRIYW5kbGVyID0gKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQuc2V0dGluZyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldHRpbmcuY29kZSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0LnNldHRpbmcuY29kZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0gPSByZXN1bHQuaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFMYW5nID0gdGhpcy5nZXREYXRhTGFuZ0Zyb21JbmRleChyZXN1bHQuc2V0dGluZy5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhTGFuZ1dyYXBEYXRhID0gdGhpcy5nZXRJbnN0YW5jZURhdGFMYW5ndWFnZShkYXRhTGFuZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0uc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbcmVzdWx0LnNldHRpbmcuY29kZV0uc2V0RGF0YShkYXRhTGFuZ1dyYXBEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4RnJvbURhdGFMYW5nKGRhdGE6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUxhbmdMaXN0LmluZGV4T2YoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhTGFuZ0Zyb21JbmRleChpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgJiYgaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdGhpcy5kYXRhTGFuZ0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUxhbmdMaXN0W2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhbnVhZ2VJbmRleEZyb21Db2RlKGxhbmdDb2RlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBpZiAobGFuZ0NvZGUgPT09IG51bGwgfHwgdHlwZW9mIGxhbmdDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhbmd1YWdlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGxhbmcgPSB0aGlzLmxhbmd1YWdlTGlzdFtpXTtcbiAgICAgICAgICAgIGlmIChsYW5nID09PSBudWxsIHx8IHR5cGVvZiBsYW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxDb2RlID0gbGFuZy5jb2RlO1xuICAgICAgICAgICAgaWYgKGxhbmdDb2RlID09PSBsQ29kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVBZGRpbmdEYXRhVG9JbnN0YW5jZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRlZmF1bHREYXRhID0gdGhpcy5nZXREZWZhdWx0RGF0YSgpO1xuICAgICAgICBsZXQgZGVmV3JhcERhdGEgPSB0aGlzLmdldEluc3RhbmNlRGVmYXVsdERhdGEoZGVmYXVsdERhdGEpO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2Uuc2V0RGF0YShkZWZXcmFwRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YUxhbmdMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgZCA9IHRoaXMuZGF0YUxhbmdMaXN0W2ldO1xuICAgICAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLmdldENvbXBvbmVudFNldHRpbmcoaSk7XG4gICAgICAgICAgICBsZXQgbGFuZ0NvZGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHNldHRpbmcgIT09IG51bGwgJiYgdHlwZW9mIHNldHRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgbGFuZ0NvZGUgPSBzZXR0aW5nLmNvZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsYW5nQ29kZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFuZ0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnRJbnN0YW5jZXMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9uZW50SW5zdGFuY2VzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRJbnN0YW5jZXNbbGFuZ0NvZGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZFdyYXAgPSB0aGlzLmdldEluc3RhbmNlRGF0YUxhbmd1YWdlKGQpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5zZXREYXRhKGRXcmFwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5yZUFkZGluZ0RhdGFUb0luc3RhbmNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGxhbmdDb2RlIHN0cmluZyBhcyBhIGxhbmd1YWdlIGNvZGVcbiAgICAgKiBAcmV0dXJuIGFueSBhcyBhIGNvbXBvbmVudCBpbnN0YW5jZSBvZiBsYW5nQ29kZSByZXR1cm4gZGVmYXVsdEluc3RhbmNlIGlmIGxhbmdDb2RlIGlzIG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50SW5zdGFuY2UobGFuZ0NvZGU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmIChsYW5nQ29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgbnVsbCBzaG91bGQgcmV0dXJuIGRlZmF1bHQgaW5zdGFuY2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbGFuZ0NvZGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluc3QgPSB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tsYW5nQ29kZV07XG4gICAgICAgICAgICAgICAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRhdGEgbnVsbCByZXR1cm4gYXMgYSBkZWZhdWx0SW5zdGFuY2VEaXJ0eVxuICAgICAqIEBwYXJhbSBkYXRhIGFzIGEgZGF0YUxhbmd1YWdlXG4gICAgICogQHJldHVybiBib29sZWFuIGlzIGRhdGFMYW5ndWFnZURpcnR5XG4gICAgICovXG4gICAgcHVibGljIGlzRGF0YUxhbmd1YWdlRGlydHkoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpbnN0ID0gbnVsbFxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHRcbiAgICAgICAgICAgICAgICBpbnN0ID0gdGhpcy5kZWZhdWx0Q29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGluZGV4XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5nZXRJbmRleEZyb21EYXRhTGFuZyhkYXRhKTtcbiAgICAgICAgICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMuZ2V0Q29tcG9uZW50U2V0dGluZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgbGV0IGxhbmdDb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZyAhPT0gbnVsbCAmJiB0eXBlb2Ygc2V0dGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFuZ0NvZGUgPSBzZXR0aW5nLmNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsYW5nQ29kZSAhPT0gbnVsbCAmJiB0eXBlb2YgbGFuZ0NvZGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3QgPSB0aGlzLmNvbXBvbmVudEluc3RhbmNlc1tsYW5nQ29kZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGluc3QuaXNEYXRhRGlydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdC5pc0RhdGFEaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29tcG9uZW50U2V0dGluZyhpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgbGV0IGxhbmdDb2RlID0gbnVsbDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xICYmIGluZGV4IDwgdGhpcy5sYW5ndWFnZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGFuZ0NvZGUgPSB0aGlzLmxhbmd1YWdlTGlzdFtpbmRleF0uY29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgc2V0dGluZyA9IHtcbiAgICAgICAgICAgIGNvZGU6IGxhbmdDb2RlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHNldHRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlZmF1bHRDb21wb25lbnRJbnN0YW5jZSgpOiBhbnkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbXBvbmVudEluc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRJbnN0YW5jZXMoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdENvbXBvbmVudEhhbmRsZXIoKTogRnVuY3Rpb24ge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbXBvbmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEhhbmRsZXIoKTogRnVuY3Rpb24ge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0TGFuZ3VhZ2VGaWVsZE5hbWUoKTogc3RyaW5nO1xuXG4gICAgcHVibGljIGFic3RyYWN0IGdldE9iamVjdElkRmllbGROYW1lKCk6IHN0cmluZztcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXRJbnN0YW5jZURlZmF1bHREYXRhKGRhdGE6IGFueSk6IGFueTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXRJbnN0YW5jZURhdGFMYW5ndWFnZShkYXRhOiBhbnkpOiBhbnk7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgcGFyc2VMYW5ndWFnZUJ1dHRvbk1vZGVsKGxhbmdDb2RlOiBzdHJpbmcpOiBMYW5ndWFnZUJ1dHRvbk1vZGVsO1xufVxuIl19