@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
200 lines • 26.9 kB
JavaScript
import { NAE_SEARCH_COMPONENT_CONFIGURATION } from '../models/component-configuration/search-component-configuration-injection-token';
import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
import { SearchMode } from '../models/component-configuration/search-mode';
import { NAE_SEARCH_CATEGORIES } from '../category-factory/search-categories-injection-token';
import { NAE_FILTERS_FILTER } from '../../filter/models/filters-filter-injection-token';
import { NAE_NAVIGATION_ITEM_TASK_DATA } from '../../navigation/model/filter-case-injection-token';
import * as i0 from "@angular/core";
import * as i1 from "../search-service/search.service";
import * as i2 from "../../logger/services/logger.service";
import * as i3 from "../../dialog/services/dialog.service";
import * as i4 from "@ngx-translate/core";
import * as i5 from "../../filter/user-filters.service";
import * as i6 from "../../allowed-nets/services/allowed-nets.service";
import * as i7 from "../../user/services/view-id.service";
import * as i8 from "../../filter/models/filter";
/**
* A universal search component that can be used to interactively create search predicates for anything with supported categories.
*
* This component is responsible for the interactive creation of an AND {@link ClausePredicate} object instance.
* The nested Predicates are OR {@link ClausePredicate} instances created by {@link AbstractSearchClauseComponent}.
*
* Search categories must be provided by the {@link NAE_SEARCH_CATEGORIES} injection token.
* Default factory methods for [task]{@link defaultTaskSearchCategoriesFactory} and
* [case]{@link defaultCaseSearchCategoriesFactory} search categories exist. See their documentation for more information.
*
* The search component's visuals can be configured either by the {@link NAE_SEARCH_COMPONENT_CONFIGURATION} injection token,
* or by the appropriate component inputs. The injection token configuration takes precedence over the inputs if both are present.
*/
export class AbstractSearchComponent {
_searchService;
_logger;
_dialogService;
_translate;
_userFilterService;
_allowedNetsService;
_viewIdService;
_searchCategories;
_configuration;
_filtersFilter;
_navigationItemTaskData;
advancedSearchDisplayed;
_showSearchIcon = true;
_showSearchToggleButton = true;
_showAdvancedSearchHelp = true;
_showSaveFilterButton = true;
_showLoadFilterButton = true;
_initialSearchMode = SearchMode.FULLTEXT;
disabled;
/**
* Set data request body, that is sent to the filter in addition to the default body.
* The default body is applied first and can be overridden by this argument.
*/
additionalFilterData = {};
/**
* The emitted data contains the filter case object
*/
filterLoaded = new EventEmitter();
/**
* The emitted data contains only the saved case's ID
*/
filterSaved = new EventEmitter();
constructor(_searchService, _logger, _dialogService, _translate, _userFilterService, _allowedNetsService, _viewIdService, _searchCategories, _configuration, _filtersFilter = null, _navigationItemTaskData = null) {
this._searchService = _searchService;
this._logger = _logger;
this._dialogService = _dialogService;
this._translate = _translate;
this._userFilterService = _userFilterService;
this._allowedNetsService = _allowedNetsService;
this._viewIdService = _viewIdService;
this._searchCategories = _searchCategories;
this._configuration = _configuration;
this._filtersFilter = _filtersFilter;
this._navigationItemTaskData = _navigationItemTaskData;
if (this._configuration === null) {
this._configuration = {};
}
}
ngOnInit() {
this.advancedSearchDisplayed = this.initialSearchMode === SearchMode.ADVANCED;
}
get showSearchIcon() {
return this._configuration.showSearchIcon ?? this._showSearchIcon;
}
set showSearchIcon(value) {
this._showSearchIcon = value;
}
get showAdvancedSearchHelp() {
return this._configuration.showAdvancedSearchHelp ?? this._showAdvancedSearchHelp;
}
set showAdvancedSearchHelp(value) {
this._showAdvancedSearchHelp = value;
}
get showSaveFilterButton() {
return this._configuration.showSaveFilterButton ?? this._showSaveFilterButton;
}
set showSaveFilterButton(value) {
this._showSaveFilterButton = value;
}
get showLoadFilterButton() {
return this._configuration.showLoadFilterButton ?? this._showLoadFilterButton;
}
set showLoadFilterButton(value) {
this._showLoadFilterButton = value;
}
get initialSearchMode() {
return this._configuration.initialSearchMode ?? this._initialSearchMode;
}
set initialSearchMode(value) {
this._initialSearchMode = value;
}
get showSearchToggleButton() {
return this._configuration.showSearchToggleButton ?? this._showSearchToggleButton;
}
set showSearchToggleButton(value) {
this._showSearchToggleButton = value;
}
hasPredicates() {
return Array.from(this._searchService.rootPredicate.getPredicateMap().values()).some(value => value.isVisible);
}
toggleSearchMode() {
if (this.advancedSearchDisplayed) {
this._searchService.clearPredicates();
}
else {
this._searchService.clearFullTextFilter();
}
this.advancedSearchDisplayed = !this.advancedSearchDisplayed;
}
showHelp() {
this._dialogService.openAlertDialog(this._translate.instant('search.help.title'), this._translate.instant('search.help.text'));
}
/**
* The saved filter data are emitted into the [filterSaved]{@link AbstractSearchComponent#filterSaved} `EventEmitter`
*/
saveFilter() {
this._userFilterService.save(this._searchService, this._allowedNetsService.allowedNetsIdentifiers, this._searchCategories, this._viewIdService.viewId, this.additionalFilterData, this._configuration.saveFilterWithDefaultCategories ?? true, this._configuration.inheritAllowedNets ?? true, this._navigationItemTaskData).subscribe(savedFilterData => {
if (savedFilterData) {
this.filterSaved.emit(savedFilterData);
}
});
}
/**
* The loaded filter data are emitted into the [filterLoaded]{@link AbstractSearchComponent#filterLoaded} `EventEmitter`
*/
loadFilter() {
this._userFilterService.load(this._searchService.filterType, this._filtersFilter ?? undefined).subscribe(savedFilterData => {
if (savedFilterData) {
this.filterLoaded.emit(savedFilterData);
}
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchComponent, deps: [{ token: i1.SearchService }, { token: i2.LoggerService }, { token: i3.DialogService }, { token: i4.TranslateService }, { token: i5.UserFiltersService }, { token: i6.AllowedNetsService }, { token: i7.ViewIdService }, { token: NAE_SEARCH_CATEGORIES }, { token: NAE_SEARCH_COMPONENT_CONFIGURATION, optional: true }, { token: NAE_FILTERS_FILTER, optional: true }, { token: NAE_NAVIGATION_ITEM_TASK_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractSearchComponent, selector: "ncc-abstract-search", inputs: { disabled: "disabled", additionalFilterData: "additionalFilterData", showSearchIcon: "showSearchIcon", showAdvancedSearchHelp: "showAdvancedSearchHelp", showSaveFilterButton: "showSaveFilterButton", showLoadFilterButton: "showLoadFilterButton", initialSearchMode: "initialSearchMode", showSearchToggleButton: "showSearchToggleButton" }, outputs: { filterLoaded: "filterLoaded", filterSaved: "filterSaved" }, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractSearchComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-search',
template: ''
}]
}], ctorParameters: () => [{ type: i1.SearchService }, { type: i2.LoggerService }, { type: i3.DialogService }, { type: i4.TranslateService }, { type: i5.UserFiltersService }, { type: i6.AllowedNetsService }, { type: i7.ViewIdService }, { type: Array, decorators: [{
type: Inject,
args: [NAE_SEARCH_CATEGORIES]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_SEARCH_COMPONENT_CONFIGURATION]
}] }, { type: i8.Filter, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_FILTERS_FILTER]
}] }, { type: Array, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_NAVIGATION_ITEM_TASK_DATA]
}] }], propDecorators: { disabled: [{
type: Input
}], additionalFilterData: [{
type: Input
}], filterLoaded: [{
type: Output
}], filterSaved: [{
type: Output
}], showSearchIcon: [{
type: Input
}], showAdvancedSearchHelp: [{
type: Input
}], showSaveFilterButton: [{
type: Input
}], showLoadFilterButton: [{
type: Input
}], initialSearchMode: [{
type: Input
}], showSearchToggleButton: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvc2VhcmNoL3NlYXJjaC1jb21wb25lbnQvYWJzdHJhY3Qtc2VhcmNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUNwSSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQU8sTUFBTSxlQUFlLENBQUM7QUFFckcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBR3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBSTVGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBR3RGLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0FBR2pHOzs7Ozs7Ozs7Ozs7R0FZRztBQUtILE1BQU0sT0FBZ0IsdUJBQXVCO0lBMkJUO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQytCO0lBQ3lCO0lBQ2hCO0lBQ1c7SUFuQzVFLHVCQUF1QixDQUFDO0lBRXZCLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDdkIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0lBQy9CLHVCQUF1QixHQUFHLElBQUksQ0FBQztJQUMvQixxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDN0IscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQzdCLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFFakMsUUFBUSxDQUFVO0lBQ2xDOzs7T0FHRztJQUNNLG9CQUFvQixHQUE2QixFQUFFLENBQUM7SUFFN0Q7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aC1zZXJ2aWNlL3NlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi4vLi4vZGlhbG9nL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge05BRV9TRUFSQ0hfQ09NUE9ORU5UX0NPTkZJR1VSQVRJT059IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQtY29uZmlndXJhdGlvbi9zZWFyY2gtY29tcG9uZW50LWNvbmZpZ3VyYXRpb24taW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1NlYXJjaENvbXBvbmVudENvbmZpZ3VyYXRpb259IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQtY29uZmlndXJhdGlvbi9zZWFyY2gtY29tcG9uZW50LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtTZWFyY2hNb2RlfSBmcm9tICcuLi9tb2RlbHMvY29tcG9uZW50LWNvbmZpZ3VyYXRpb24vc2VhcmNoLW1vZGUnO1xuaW1wb3J0IHtVc2VyRmlsdGVyc1NlcnZpY2V9IGZyb20gJy4uLy4uL2ZpbHRlci91c2VyLWZpbHRlcnMuc2VydmljZSc7XG5pbXBvcnQge0FsbG93ZWROZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vYWxsb3dlZC1uZXRzL3NlcnZpY2VzL2FsbG93ZWQtbmV0cy5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1NFQVJDSF9DQVRFR09SSUVTfSBmcm9tICcuLi9jYXRlZ29yeS1mYWN0b3J5L3NlYXJjaC1jYXRlZ29yaWVzLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge0NhdGVnb3J5fSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnkvY2F0ZWdvcnknO1xuaW1wb3J0IHtTYXZlZEZpbHRlck1ldGFkYXRhfSBmcm9tICcuLi9tb2RlbHMvcGVyc2lzdGFuY2Uvc2F2ZWQtZmlsdGVyLW1ldGFkYXRhJztcbmltcG9ydCB7Vmlld0lkU2VydmljZX0gZnJvbSAnLi4vLi4vdXNlci9zZXJ2aWNlcy92aWV3LWlkLnNlcnZpY2UnO1xuaW1wb3J0IHtOQUVfRklMVEVSU19GSUxURVJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVycy1maWx0ZXItaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge1Rhc2tTZXREYXRhUmVxdWVzdEZpZWxkc30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrLXNldC1kYXRhLXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge05BRV9OQVZJR0FUSU9OX0lURU1fVEFTS19EQVRBfSBmcm9tICcuLi8uLi9uYXZpZ2F0aW9uL21vZGVsL2ZpbHRlci1jYXNlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5cbi8qKlxuICogQSB1bml2ZXJzYWwgc2VhcmNoIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVyYWN0aXZlbHkgY3JlYXRlIHNlYXJjaCBwcmVkaWNhdGVzIGZvciBhbnl0aGluZyB3aXRoIHN1cHBvcnRlZCBjYXRlZ29yaWVzLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJhY3RpdmUgY3JlYXRpb24gb2YgYW4gQU5EIHtAbGluayBDbGF1c2VQcmVkaWNhdGV9IG9iamVjdCBpbnN0YW5jZS5cbiAqIFRoZSBuZXN0ZWQgUHJlZGljYXRlcyBhcmUgT1Ige0BsaW5rIENsYXVzZVByZWRpY2F0ZX0gaW5zdGFuY2VzIGNyZWF0ZWQgYnkge0BsaW5rIEFic3RyYWN0U2VhcmNoQ2xhdXNlQ29tcG9uZW50fS5cbiAqXG4gKiBTZWFyY2ggY2F0ZWdvcmllcyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSB7QGxpbmsgTkFFX1NFQVJDSF9DQVRFR09SSUVTfSBpbmplY3Rpb24gdG9rZW4uXG4gKiBEZWZhdWx0IGZhY3RvcnkgbWV0aG9kcyBmb3IgW3Rhc2tde0BsaW5rIGRlZmF1bHRUYXNrU2VhcmNoQ2F0ZWdvcmllc0ZhY3Rvcnl9IGFuZFxuICogW2Nhc2Vde0BsaW5rIGRlZmF1bHRDYXNlU2VhcmNoQ2F0ZWdvcmllc0ZhY3Rvcnl9IHNlYXJjaCBjYXRlZ29yaWVzIGV4aXN0LiBTZWUgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGUgc2VhcmNoIGNvbXBvbmVudCdzIHZpc3VhbHMgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5IHRoZSB7QGxpbmsgTkFFX1NFQVJDSF9DT01QT05FTlRfQ09ORklHVVJBVElPTn0gaW5qZWN0aW9uIHRva2VuLFxuICogb3IgYnkgdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudCBpbnB1dHMuIFRoZSBpbmplY3Rpb24gdG9rZW4gY29uZmlndXJhdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGlucHV0cyBpZiBib3RoIGFyZSBwcmVzZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1zZWFyY2gnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIFNlYXJjaENvbXBvbmVudENvbmZpZ3VyYXRpb24sIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgYWR2YW5jZWRTZWFyY2hEaXNwbGF5ZWQ7XG5cbiAgICBwcml2YXRlIF9zaG93U2VhcmNoSWNvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd0FkdmFuY2VkU2VhcmNoSGVscCA9IHRydWU7XG4gICAgcHJpdmF0ZSBfc2hvd1NhdmVGaWx0ZXJCdXR0b24gPSB0cnVlO1xuICAgIHByaXZhdGUgX3Nob3dMb2FkRmlsdGVyQnV0dG9uID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9pbml0aWFsU2VhcmNoTW9kZSA9IFNlYXJjaE1vZGUuRlVMTFRFWFQ7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogU2V0IGRhdGEgcmVxdWVzdCBib2R5LCB0aGF0IGlzIHNlbnQgdG8gdGhlIGZpbHRlciBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBib2R5LlxuICAgICAqIFRoZSBkZWZhdWx0IGJvZHkgaXMgYXBwbGllZCBmaXJzdCBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhpcyBhcmd1bWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsRmlsdGVyRGF0YTogVGFza1NldERhdGFSZXF1ZXN0RmllbGRzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZW1pdHRlZCBkYXRhIGNvbnRhaW5zIHRoZSBmaWx0ZXIgY2FzZSBvYmplY3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsdGVyTG9hZGVkOiBFdmVudEVtaXR0ZXI8U2F2ZWRGaWx0ZXJNZXRhZGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLyoqXG4gICAgICogVGhlIGVtaXR0ZWQgZGF0YSBjb250YWlucyBvbmx5IHRoZSBzYXZlZCBjYXNlJ3MgSURcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgZmlsdGVyU2F2ZWQ6IEV2ZW50RW1pdHRlcjxTYXZlZEZpbHRlck1ldGFkYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3NlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJGaWx0ZXJTZXJ2aWNlOiBVc2VyRmlsdGVyc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWxsb3dlZE5ldHNTZXJ2aWNlOiBBbGxvd2VkTmV0c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdmlld0lkU2VydmljZTogVmlld0lkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQEluamVjdChOQUVfU0VBUkNIX0NBVEVHT1JJRVMpIHByb3RlY3RlZCBfc2VhcmNoQ2F0ZWdvcmllczogQXJyYXk8VHlwZTxDYXRlZ29yeTxhbnk+Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX1NFQVJDSF9DT01QT05FTlRfQ09ORklHVVJBVElPTikgcHJvdGVjdGVkIF9jb25maWd1cmF0aW9uOiBTZWFyY2hDb21wb25lbnRDb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9GSUxURVJTX0ZJTFRFUikgcHJvdGVjdGVkIF9maWx0ZXJzRmlsdGVyOiBGaWx0ZXIgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9OQVZJR0FUSU9OX0lURU1fVEFTS19EQVRBKSBwcm90ZWN0ZWQgX25hdmlnYXRpb25JdGVtVGFza0RhdGE6IEFycmF5PERhdGFHcm91cD4gPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWd1cmF0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaERpc3BsYXllZCA9IHRoaXMuaW5pdGlhbFNlYXJjaE1vZGUgPT09IFNlYXJjaE1vZGUuQURWQU5DRUQ7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dTZWFyY2hJY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbi5zaG93U2VhcmNoSWNvbiA/PyB0aGlzLl9zaG93U2VhcmNoSWNvbjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvd1NlYXJjaEljb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NlYXJjaEljb24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd0FkdmFuY2VkU2VhcmNoSGVscCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd0FkdmFuY2VkU2VhcmNoSGVscCA/PyB0aGlzLl9zaG93QWR2YW5jZWRTZWFyY2hIZWxwO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93QWR2YW5jZWRTZWFyY2hIZWxwKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dBZHZhbmNlZFNlYXJjaEhlbHAgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1NhdmVGaWx0ZXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uLnNob3dTYXZlRmlsdGVyQnV0dG9uID8/IHRoaXMuX3Nob3dTYXZlRmlsdGVyQnV0dG9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93U2F2ZUZpbHRlckJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93U2F2ZUZpbHRlckJ1dHRvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzaG93TG9hZEZpbHRlckJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd0xvYWRGaWx0ZXJCdXR0b24gPz8gdGhpcy5fc2hvd0xvYWRGaWx0ZXJCdXR0b247XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNob3dMb2FkRmlsdGVyQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dMb2FkRmlsdGVyQnV0dG9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGluaXRpYWxTZWFyY2hNb2RlKCk6IFNlYXJjaE1vZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbi5pbml0aWFsU2VhcmNoTW9kZSA/PyB0aGlzLl9pbml0aWFsU2VhcmNoTW9kZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaW5pdGlhbFNlYXJjaE1vZGUodmFsdWU6IFNlYXJjaE1vZGUpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFNlYXJjaE1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24uc2hvd1NlYXJjaFRvZ2dsZUJ1dHRvbiA/PyB0aGlzLl9zaG93U2VhcmNoVG9nZ2xlQnV0dG9uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzaG93U2VhcmNoVG9nZ2xlQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZWFyY2hUb2dnbGVCdXR0b24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzUHJlZGljYXRlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2VhcmNoU2VydmljZS5yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLnZhbHVlcygpKS5zb21lKHZhbHVlID0+IHZhbHVlLmlzVmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVNlYXJjaE1vZGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoRGlzcGxheWVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hTZXJ2aWNlLmNsZWFyUHJlZGljYXRlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoU2VydmljZS5jbGVhckZ1bGxUZXh0RmlsdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRGlzcGxheWVkID0gIXRoaXMuYWR2YW5jZWRTZWFyY2hEaXNwbGF5ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dIZWxwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW5BbGVydERpYWxvZyh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnc2VhcmNoLmhlbHAudGl0bGUnKSwgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ3NlYXJjaC5oZWxwLnRleHQnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHNhdmVkIGZpbHRlciBkYXRhIGFyZSBlbWl0dGVkIGludG8gdGhlIFtmaWx0ZXJTYXZlZF17QGxpbmsgQWJzdHJhY3RTZWFyY2hDb21wb25lbnQjZmlsdGVyU2F2ZWR9IGBFdmVudEVtaXR0ZXJgXG4gICAgICovXG4gICAgcHVibGljIHNhdmVGaWx0ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VzZXJGaWx0ZXJTZXJ2aWNlLnNhdmUoXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5fYWxsb3dlZE5ldHNTZXJ2aWNlLmFsbG93ZWROZXRzSWRlbnRpZmllcnMsXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hDYXRlZ29yaWVzLFxuICAgICAgICAgICAgdGhpcy5fdmlld0lkU2VydmljZS52aWV3SWQsXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxGaWx0ZXJEYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlndXJhdGlvbi5zYXZlRmlsdGVyV2l0aERlZmF1bHRDYXRlZ29yaWVzID8/IHRydWUsXG4gICAgICAgICAgICB0aGlzLl9jb25maWd1cmF0aW9uLmluaGVyaXRBbGxvd2VkTmV0cyA/PyB0cnVlLFxuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSkuc3Vic2NyaWJlKHNhdmVkRmlsdGVyRGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNhdmVkRmlsdGVyRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNhdmVkLmVtaXQoc2F2ZWRGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBsb2FkZWQgZmlsdGVyIGRhdGEgYXJlIGVtaXR0ZWQgaW50byB0aGUgW2ZpbHRlckxvYWRlZF17QGxpbmsgQWJzdHJhY3RTZWFyY2hDb21wb25lbnQjZmlsdGVyTG9hZGVkfSBgRXZlbnRFbWl0dGVyYFxuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkRmlsdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl91c2VyRmlsdGVyU2VydmljZS5sb2FkKHRoaXMuX3NlYXJjaFNlcnZpY2UuZmlsdGVyVHlwZSwgdGhpcy5fZmlsdGVyc0ZpbHRlciA/PyB1bmRlZmluZWQpLnN1YnNjcmliZShzYXZlZEZpbHRlckRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKHNhdmVkRmlsdGVyRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyTG9hZGVkLmVtaXQoc2F2ZWRGaWx0ZXJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19