UNPKG

@linid-dm/directory-manager-client-core

Version:

Core package by providing a set of angular components for the Directory Manager app.

656 lines 69.8 kB
import { __decorate } from "tslib"; /** * Copyright (C) 2020-2024 Linagora * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version, provided you comply with the Additional Terms applicable for * LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU * Affero General Public License, subsections (b), (c), and (e), pursuant to * which these Appropriate Legal Notices must notably (i) retain the display of * the "LinID™" trademark/logo at the top of the interface window, the display * of the “You are using the Open Source and free version of LinID™, powered by * Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise * offer!” infobox and in the e-mails sent with the Program, notice appended to * any type of outbound messages (e.g. e-mail and meeting requests) as well as * in the LinID Directory Manager user interface, (ii) retain all hypertext * links between LinID Directory Manager and https://linid.org/, as well as * between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA * intellectual property rights over its trademarks and commercial brands. Other * Additional Terms apply, see <http://www.linagora.com/licenses/> for more * details. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License and * its applicable Additional Terms for LinID Directory Manager along with this * program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero * General Public License version 3 and <http://www.linagora.com/licenses/> for * the Additional Terms applicable to the LinID Directory Manager software. */ import { Injectable } from '@angular/core'; import { Action, Selector, State } from '@ngxs/store'; import { emptyJsTable, putById, toJsTable, updateById, } from '../../helpers/jstable.helper'; import * as Data from './data.actions'; import * as i0 from "@angular/core"; const _persistentUiDataRowFactory = () => { return { filterValue: '', searchForm: '', expandedTreeNodesUuids: [], advancedSearchChips: [], }; }; export function initDataStateDefaultValues() { return { ...emptyJsTable(), selectedResourceTypeId: null, selectedEntryIds: null, selectedEntryParentIds: null, rootIdSelectedResourceType: null, isFetchingResources: false, isFetchingResourcesError: false, isFetchingResourcesSuccess: false, resources: null, entriesIdsMatchingAdvancedSearch: {}, isFetchingDataDetail: false, isFetchingDataDetailError: false, isFetchingDataDetailSuccess: false, dataDetail: null, }; } let DataState = class DataState { static getDataState(state) { return state; } static getSelectedResourceTypeId(state) { return state.selectedResourceTypeId; } static getSelectedEntryIds(state) { return state.selectedEntryIds; } static getSelectedEntryId(state) { return state.selectedEntryIds.id; } static getSelectedEntryExternalId(state) { return state.selectedEntryIds.externalId; } static getSelectedEntryParentIds(state) { return state.selectedEntryParentIds; } static getSelectedEntryParentId(state) { return state.selectedEntryParentIds.id; } static getSelectedEntryParentExternalId(state) { return state.selectedEntryParentIds.externalId; } static getRootIdSelectedResourceType(state) { return state.rootIdSelectedResourceType; } static isFetchingResources(state) { return state.isFetchingResources; } static isFetchingResourcesSuccess(state) { return state.isFetchingResourcesSuccess; } static isFetchingResourcesError(state) { return state.isFetchingResourcesError; } static getResources(state) { return state.resources; } static getEntriesIdsMatchingAdvancedSearch(state) { return state.entriesIdsMatchingAdvancedSearch; } static isFetchingDataDetail(state) { return state.isFetchingDataDetail; } static isFetchingDataDetailSuccess(state) { return state.isFetchingDataDetailSuccess; } static isFetchingDataDetailError(state) { return state.isFetchingDataDetailError; } static getDataDetail(state) { return state.dataDetail; } static getDataById(state) { return state.byId; } static getDataAllIds(state) { return state.allIds; } static getDataJsTable(state) { return { byId: state.byId, allIds: state.allIds, }; } static getAdvancedSearchChips(state) { return state.byId[state.rootIdSelectedResourceType].advancedSearchChips; } static getSearchFormValue(state) { return state.byId[state.rootIdSelectedResourceType].searchForm; } static isAdvancedSearchActivated(state) { return (state.byId[state.rootIdSelectedResourceType].searchForm !== '' || state.byId[state.rootIdSelectedResourceType].advancedSearchChips.length > 0); } setSelectedResourceTypeId(ctx, action) { ctx.setState({ ...ctx.getState(), selectedResourceTypeId: action.payload.id, }); } resetSelectedResourceTypeId(ctx) { ctx.setState({ ...ctx.getState(), selectedResourceTypeId: null, }); } setSelectedEntryIds(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryIds: action.payload.ids, }); } resetSelectedEntryIds(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryIds: null, }); } setSelectedEntryId(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryIds: { ...ctx.getState().selectedEntryIds, id: action.payload.id, }, }); } resetSelectedEntryId(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryIds: { ...ctx.getState().selectedEntryIds, id: null, }, }); } setSelectedEntryExternalId(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryIds: { ...ctx.getState().selectedEntryIds, externalId: action.payload.externalId, }, }); } resetSelectedEntryExternalId(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryIds: { ...ctx.getState().selectedEntryIds, externalId: null, }, }); } setSelectedEntryParentIds(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: action.payload.ids, }); } resetSelectedEntryParentIds(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: null, }); } setSelectedEntryParentId(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: { ...ctx.getState().selectedEntryParentIds, id: action.payload.id, }, }); } resetSelectedEntryParentId(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: { ...ctx.getState().selectedEntryParentIds, id: null, }, }); } setSelectedEntryParentExternalId(ctx, action) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: { ...ctx.getState().selectedEntryParentIds, externalId: action.payload.externalId, }, }); } resetSelectedEntryParentExternalId(ctx) { ctx.setState({ ...ctx.getState(), selectedEntryParentIds: { ...ctx.getState().selectedEntryParentIds, externalId: null, }, }); } setRootIdSelectedResourceType(ctx, action) { ctx.setState({ ...ctx.getState(), rootIdSelectedResourceType: action.payload.id, }); } resetIdRootSelectedResourceType(ctx) { ctx.setState({ ...ctx.getState(), rootIdSelectedResourceType: null, }); } initDataJsTable(ctx, action) { const jsTable = toJsTable(action.payload.resourcesTypesIds.reduce((acc, resourceTypeId) => ({ ...acc, [resourceTypeId]: _persistentUiDataRowFactory(), }), {})); ctx.setState({ ...ctx.getState(), ...jsTable, }); } toggleFoldTreeNode(ctx, action) { const jsTable = action.payload.isFolding ? updateById(ctx.getState(), action.payload.dataTypeId, { expandedTreeNodesUuids: [ ...ctx .getState() .byId[action.payload.dataTypeId].expandedTreeNodesUuids.filter((link) => link !== action.payload.treeNodeId), ], }) : putById(ctx.getState(), action.payload.dataTypeId, { expandedTreeNodesUuids: [ ...ctx.getState().byId[action.payload.dataTypeId] .expandedTreeNodesUuids, action.payload.treeNodeId, ], }, _persistentUiDataRowFactory); ctx.setState({ ...ctx.getState(), ...jsTable, }); } setFilterValue(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { filterValue: action.payload.filterValue, }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } setSearchFormValue(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { searchForm: action.payload.searchForm, }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } setAdvancedSearchChips(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { advancedSearchChips: action.payload.advancedSearchChips, }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } resetSearchFormValue(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { searchForm: '', }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } removeAdvancedSearchChip(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { advancedSearchChips: [ ...ctx .getState() .byId[action.payload.dataTypeId].advancedSearchChips.filter((chip) => { const chipModelRef = chip.associatedFieldId ?? chip.modelRef; return chipModelRef !== action.payload.modelRef; }), ], }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } resetAdvancedSearchChips(ctx, action) { const jsTable = updateById(ctx.getState(), action.payload.dataTypeId, { advancedSearchChips: [] }); ctx.setState({ ...ctx.getState(), ...jsTable, }); } filterResources(ctx) { ctx.setState({ ...ctx.getState(), isFetchingResources: true, isFetchingResourcesSuccess: false, isFetchingResourcesError: false, }); } fetchResources(ctx) { ctx.setState({ ...ctx.getState(), resources: null, entriesIdsMatchingAdvancedSearch: {}, isFetchingResources: true, isFetchingResourcesSuccess: false, isFetchingResourcesError: false, }); } stopFilteringResources(ctx) { ctx.setState({ ...ctx.getState(), isFetchingResources: false, }); } addEntryIdMatchingAdvancedSearch(ctx, action) { ctx.setState({ ...ctx.getState(), entriesIdsMatchingAdvancedSearch: { ...ctx.getState().entriesIdsMatchingAdvancedSearch, [action.payload.entryId]: true, }, }); } removeEntriesIdsMatchingAdvancedSearch(ctx, action) { action.payload.entriesIds.forEach((id) => delete ctx.getState().entriesIdsMatchingAdvancedSearch[id]); } fetchResourcesSuccess(ctx, action) { ctx.setState({ ...ctx.getState(), resources: action.payload.resources, entriesIdsMatchingAdvancedSearch: action.payload.entriesIdsMatchingAdvancedSearch, isFetchingResources: false, isFetchingResourcesSuccess: true, }); } fetchResourcesError(ctx) { ctx.setState({ ...ctx.getState(), resources: null, entriesIdsMatchingAdvancedSearch: {}, isFetchingResources: false, isFetchingResourcesError: true, }); } setResources(ctx, action) { ctx.setState({ ...ctx.getState(), resources: action.payload.resources, }); } resetResources(ctx) { ctx.setState({ ...ctx.getState(), resources: null, entriesIdsMatchingAdvancedSearch: {}, }); } fetchDataDetail(ctx) { ctx.setState({ ...ctx.getState(), dataDetail: null, isFetchingDataDetail: true, isFetchingDataDetailSuccess: false, isFetchingDataDetailError: false, }); } fetchDataDetailSuccess(ctx) { ctx.setState({ ...ctx.getState(), isFetchingDataDetail: false, isFetchingDataDetailSuccess: true, }); } fetchDataDetailError(ctx) { ctx.setState({ ...ctx.getState(), dataDetail: null, isFetchingDataDetail: false, isFetchingDataDetailError: true, }); } setDataDetail(ctx, action) { ctx.setState({ ...ctx.getState(), dataDetail: action.payload.dataDetail, }); } resetDataDetail(ctx) { ctx.setState({ ...ctx.getState(), dataDetail: null, }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DataState, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DataState }); } }; __decorate([ Action(Data.SetSelectedResourceTypeId) ], DataState.prototype, "setSelectedResourceTypeId", null); __decorate([ Action(Data.ResetSelectedResourceTypeId) ], DataState.prototype, "resetSelectedResourceTypeId", null); __decorate([ Action(Data.SetSelectedEntryIds) ], DataState.prototype, "setSelectedEntryIds", null); __decorate([ Action(Data.ResetSelectedEntryIds) ], DataState.prototype, "resetSelectedEntryIds", null); __decorate([ Action(Data.SetSelectedEntryId) ], DataState.prototype, "setSelectedEntryId", null); __decorate([ Action(Data.ResetSelectedEntryId) ], DataState.prototype, "resetSelectedEntryId", null); __decorate([ Action(Data.SetSelectedEntryExternalId) ], DataState.prototype, "setSelectedEntryExternalId", null); __decorate([ Action(Data.ResetSelectedEntryExternalId) ], DataState.prototype, "resetSelectedEntryExternalId", null); __decorate([ Action(Data.SetSelectedEntryParentIds) ], DataState.prototype, "setSelectedEntryParentIds", null); __decorate([ Action(Data.ResetSelectedEntryParentIds) ], DataState.prototype, "resetSelectedEntryParentIds", null); __decorate([ Action(Data.SetSelectedEntryParentId) ], DataState.prototype, "setSelectedEntryParentId", null); __decorate([ Action(Data.ResetSelectedEntryParentId) ], DataState.prototype, "resetSelectedEntryParentId", null); __decorate([ Action(Data.SetSelectedEntryParentExternalId) ], DataState.prototype, "setSelectedEntryParentExternalId", null); __decorate([ Action(Data.ResetSelectedEntryParentExternalId) ], DataState.prototype, "resetSelectedEntryParentExternalId", null); __decorate([ Action(Data.SetRootIdSelectedResourceType) ], DataState.prototype, "setRootIdSelectedResourceType", null); __decorate([ Action(Data.ResetRootIdSelectedResourceType) ], DataState.prototype, "resetIdRootSelectedResourceType", null); __decorate([ Action(Data.InitDataJsTable) ], DataState.prototype, "initDataJsTable", null); __decorate([ Action(Data.ToggleFoldTreeNode) ], DataState.prototype, "toggleFoldTreeNode", null); __decorate([ Action(Data.SetFilterValue) ], DataState.prototype, "setFilterValue", null); __decorate([ Action(Data.SetSearchFormValue) ], DataState.prototype, "setSearchFormValue", null); __decorate([ Action(Data.SetAdvancedSearchChips) ], DataState.prototype, "setAdvancedSearchChips", null); __decorate([ Action(Data.ResetSearchFormValue) ], DataState.prototype, "resetSearchFormValue", null); __decorate([ Action(Data.RemoveAdvancedSearchChip) ], DataState.prototype, "removeAdvancedSearchChip", null); __decorate([ Action(Data.ResetAdvancedSearchChips) ], DataState.prototype, "resetAdvancedSearchChips", null); __decorate([ Action(Data.FilterResources) ], DataState.prototype, "filterResources", null); __decorate([ Action(Data.FetchResources) ], DataState.prototype, "fetchResources", null); __decorate([ Action([Data.StopFilteringResources]) ], DataState.prototype, "stopFilteringResources", null); __decorate([ Action(Data.AddEntryIdMatchingAdvancedSearch) ], DataState.prototype, "addEntryIdMatchingAdvancedSearch", null); __decorate([ Action(Data.RemoveEntriesIdsMatchingAdvancedSearch) ], DataState.prototype, "removeEntriesIdsMatchingAdvancedSearch", null); __decorate([ Action(Data.FetchResourcesSuccess) ], DataState.prototype, "fetchResourcesSuccess", null); __decorate([ Action(Data.FetchResourcesError) ], DataState.prototype, "fetchResourcesError", null); __decorate([ Action(Data.SetResources) ], DataState.prototype, "setResources", null); __decorate([ Action(Data.ResetResources) ], DataState.prototype, "resetResources", null); __decorate([ Action(Data.FetchDataDetail) ], DataState.prototype, "fetchDataDetail", null); __decorate([ Action(Data.FetchDataDetailSuccess) ], DataState.prototype, "fetchDataDetailSuccess", null); __decorate([ Action(Data.FetchDataDetailError) ], DataState.prototype, "fetchDataDetailError", null); __decorate([ Action(Data.SetDataDetail) ], DataState.prototype, "setDataDetail", null); __decorate([ Action(Data.ResetDataDetail) ], DataState.prototype, "resetDataDetail", null); __decorate([ Selector() ], DataState, "getDataState", null); __decorate([ Selector() ], DataState, "getSelectedResourceTypeId", null); __decorate([ Selector() ], DataState, "getSelectedEntryIds", null); __decorate([ Selector() ], DataState, "getSelectedEntryId", null); __decorate([ Selector() ], DataState, "getSelectedEntryExternalId", null); __decorate([ Selector() ], DataState, "getSelectedEntryParentIds", null); __decorate([ Selector() ], DataState, "getSelectedEntryParentId", null); __decorate([ Selector() ], DataState, "getSelectedEntryParentExternalId", null); __decorate([ Selector() ], DataState, "getRootIdSelectedResourceType", null); __decorate([ Selector() ], DataState, "isFetchingResources", null); __decorate([ Selector() ], DataState, "isFetchingResourcesSuccess", null); __decorate([ Selector() ], DataState, "isFetchingResourcesError", null); __decorate([ Selector() ], DataState, "getResources", null); __decorate([ Selector() ], DataState, "getEntriesIdsMatchingAdvancedSearch", null); __decorate([ Selector() ], DataState, "isFetchingDataDetail", null); __decorate([ Selector() ], DataState, "isFetchingDataDetailSuccess", null); __decorate([ Selector() ], DataState, "isFetchingDataDetailError", null); __decorate([ Selector() ], DataState, "getDataDetail", null); __decorate([ Selector() ], DataState, "getDataById", null); __decorate([ Selector() ], DataState, "getDataAllIds", null); __decorate([ Selector() ], DataState, "getDataJsTable", null); __decorate([ Selector() ], DataState, "getAdvancedSearchChips", null); __decorate([ Selector() ], DataState, "getSearchFormValue", null); __decorate([ Selector() ], DataState, "isAdvancedSearchActivated", null); DataState = __decorate([ State({ name: 'data', defaults: initDataStateDefaultValues(), }) ], DataState); export { DataState }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DataState, decorators: [{ type: Injectable }], propDecorators: { setSelectedResourceTypeId: [], resetSelectedResourceTypeId: [], setSelectedEntryIds: [], resetSelectedEntryIds: [], setSelectedEntryId: [], resetSelectedEntryId: [], setSelectedEntryExternalId: [], resetSelectedEntryExternalId: [], setSelectedEntryParentIds: [], resetSelectedEntryParentIds: [], setSelectedEntryParentId: [], resetSelectedEntryParentId: [], setSelectedEntryParentExternalId: [], resetSelectedEntryParentExternalId: [], setRootIdSelectedResourceType: [], resetIdRootSelectedResourceType: [], initDataJsTable: [], toggleFoldTreeNode: [], setFilterValue: [], setSearchFormValue: [], setAdvancedSearchChips: [], resetSearchFormValue: [], removeAdvancedSearchChip: [], resetAdvancedSearchChips: [], filterResources: [], fetchResources: [], stopFilteringResources: [], addEntryIdMatchingAdvancedSearch: [], removeEntriesIdsMatchingAdvancedSearch: [], fetchResourcesSuccess: [], fetchResourcesError: [], setResources: [], resetResources: [], fetchDataDetail: [], fetchDataDetailSuccess: [], fetchDataDetailError: [], setDataDetail: [], resetDataDetail: [] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvc3RhdGVzL2RhdGEvZGF0YS5zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFFTCxZQUFZLEVBQ1osT0FBTyxFQUNQLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSw4QkFBOEIsQ0FBQztBQVN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixDQUFDOztBQWtCdkMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLEVBQUU7SUFDdkMsT0FBTztRQUNMLFdBQVcsRUFBRSxFQUFFO1FBQ2YsVUFBVSxFQUFFLEVBQUU7UUFDZCxzQkFBc0IsRUFBRSxFQUFFO1FBQzFCLG1CQUFtQixFQUFFLEVBQUU7S0FDeEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTztRQUNMLEdBQUcsWUFBWSxFQUFxQjtRQUNwQyxzQkFBc0IsRUFBRSxJQUFJO1FBQzVCLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsc0JBQXNCLEVBQUUsSUFBSTtRQUM1QiwwQkFBMEIsRUFBRSxJQUFJO1FBQ2hDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsd0JBQXdCLEVBQUUsS0FBSztRQUMvQiwwQkFBMEIsRUFBRSxLQUFLO1FBQ2pDLFNBQVMsRUFBRSxJQUFJO1FBQ2YsZ0NBQWdDLEVBQUUsRUFBRTtRQUNwQyxvQkFBb0IsRUFBRSxLQUFLO1FBQzNCLHlCQUF5QixFQUFFLEtBQUs7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QUFvQixNQWtCcEIsd0JBQXdCLE1BNEJ4Qix3QkFBd0IsTUFnQnhCLGVBQWUsTUFVZixjQUFjLE1BWWQsc0JBQXNCLE1BUXRCLGdDQUFnQyxNQWNoQyxzQ0FBc0MsTUFVdEMscUJBQXFCLE1BZXJCLG1CQUFtQixNQVduQixZQUFZLE1BV1osY0FBYyxNQVNkLGVBQWUsTUFXZixzQkFBc0IsTUFTdEIsb0JBQW9CLE1BVXBCLGFBQWEsTUFXYixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyNCBMaW5hZ29yYVxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyXG4gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWVcbiAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55XG4gKiBsYXRlciB2ZXJzaW9uLCBwcm92aWRlZCB5b3UgY29tcGx5IHdpdGggdGhlIEFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSBmb3JcbiAqIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIHNvZnR3YXJlIGJ5IExJTkFHT1JBIHB1cnN1YW50IHRvIFNlY3Rpb24gNyBvZiB0aGUgR05VXG4gKiBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgc3Vic2VjdGlvbnMgKGIpLCAoYyksIGFuZCAoZSksIHB1cnN1YW50IHRvXG4gKiB3aGljaCB0aGVzZSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIG11c3Qgbm90YWJseSAoaSkgcmV0YWluIHRoZSBkaXNwbGF5IG9mXG4gKiB0aGUgXCJMaW5JROKEolwiIHRyYWRlbWFyay9sb2dvIGF0IHRoZSB0b3Agb2YgdGhlIGludGVyZmFjZSB3aW5kb3csIHRoZSBkaXNwbGF5XG4gKiBvZiB0aGUg4oCcWW91IGFyZSB1c2luZyB0aGUgT3BlbiBTb3VyY2UgYW5kIGZyZWUgdmVyc2lvbiBvZiBMaW5JROKEoiwgcG93ZXJlZCBieVxuICogTGluYWdvcmEgwqkgMjAwOeKAkzIwMTMuIENvbnRyaWJ1dGUgdG8gTGluSUQgUiZEIGJ5IHN1YnNjcmliaW5nIHRvIGFuIEVudGVycHJpc2VcbiAqIG9mZmVyIeKAnSBpbmZvYm94IGFuZCBpbiB0aGUgZS1tYWlscyBzZW50IHdpdGggdGhlIFByb2dyYW0sIG5vdGljZSBhcHBlbmRlZCB0b1xuICogYW55IHR5cGUgb2Ygb3V0Ym91bmQgbWVzc2FnZXMgKGUuZy4gZS1tYWlsIGFuZCBtZWV0aW5nIHJlcXVlc3RzKSBhcyB3ZWxsIGFzXG4gKiBpbiB0aGUgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgdXNlciBpbnRlcmZhY2UsIChpaSkgcmV0YWluIGFsbCBoeXBlcnRleHRcbiAqIGxpbmtzIGJldHdlZW4gTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgYW5kIGh0dHBzOi8vbGluaWQub3JnLywgYXMgd2VsbCBhc1xuICogYmV0d2VlbiBMSU5BR09SQSBhbmQgTElOQUdPUkEuY29tLCBhbmQgKGlpaSkgcmVmcmFpbiBmcm9tIGluZnJpbmdpbmcgTElOQUdPUkFcbiAqIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciBpdHMgdHJhZGVtYXJrcyBhbmQgY29tbWVyY2lhbCBicmFuZHMuIE90aGVyXG4gKiBBZGRpdGlvbmFsIFRlcm1zIGFwcGx5LCBzZWUgPGh0dHA6Ly93d3cubGluYWdvcmEuY29tL2xpY2Vuc2VzLz4gZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUXG4gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTU1xuICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZVxuICogZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kXG4gKiBpdHMgYXBwbGljYWJsZSBBZGRpdGlvbmFsIFRlcm1zIGZvciBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBhbG9uZyB3aXRoIHRoaXNcbiAqIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPiBmb3IgdGhlIEdOVSBBZmZlcm9cbiAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIGFuZCA8aHR0cDovL3d3dy5saW5hZ29yYS5jb20vbGljZW5zZXMvPiBmb3JcbiAqIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIHNvZnR3YXJlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQge1xuICBKc1RhYmxlLFxuICBlbXB0eUpzVGFibGUsXG4gIHB1dEJ5SWQsXG4gIHRvSnNUYWJsZSxcbiAgdXBkYXRlQnlJZCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy9qc3RhYmxlLmhlbHBlcic7XG5pbXBvcnQge1xuICBJRGF0YSxcbiAgSURhdGFJdGVtLFxuICBJRGF0YU5vZGUsXG4gIElFbnRyeUlkcyxcbiAgSVBlcnNpc3RlbnRVaURhdGEsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUFkdmFuY2VkU2VhcmNoQ2hpcCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdWkuaW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIERhdGEgZnJvbSAnLi9kYXRhLmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdGF0ZU1vZGVsIGV4dGVuZHMgSnNUYWJsZTxJUGVyc2lzdGVudFVpRGF0YT4ge1xuICBzZWxlY3RlZFJlc291cmNlVHlwZUlkOiBzdHJpbmc7XG4gIHNlbGVjdGVkRW50cnlJZHM6IElFbnRyeUlkcztcbiAgc2VsZWN0ZWRFbnRyeVBhcmVudElkczogSUVudHJ5SWRzO1xuICByb290SWRTZWxlY3RlZFJlc291cmNlVHlwZTogc3RyaW5nO1xuICBpc0ZldGNoaW5nUmVzb3VyY2VzOiBib29sZWFuO1xuICBpc0ZldGNoaW5nUmVzb3VyY2VzRXJyb3I6IGJvb2xlYW47XG4gIGlzRmV0Y2hpbmdSZXNvdXJjZXNTdWNjZXNzOiBib29sZWFuO1xuICByZXNvdXJjZXM6IElEYXRhIHwgSURhdGFOb2RlW10gfCBJRGF0YUl0ZW1bXTtcbiAgZW50cmllc0lkc01hdGNoaW5nQWR2YW5jZWRTZWFyY2g6IHsgW2lkOiBzdHJpbmddOiB0cnVlIH07XG4gIGlzRmV0Y2hpbmdEYXRhRGV0YWlsOiBib29sZWFuO1xuICBpc0ZldGNoaW5nRGF0YURldGFpbEVycm9yOiBib29sZWFuO1xuICBpc0ZldGNoaW5nRGF0YURldGFpbFN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGFEZXRhaWw6IGFueTtcbn1cblxuY29uc3QgX3BlcnNpc3RlbnRVaURhdGFSb3dGYWN0b3J5ID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZpbHRlclZhbHVlOiAnJyxcbiAgICBzZWFyY2hGb3JtOiAnJyxcbiAgICBleHBhbmRlZFRyZWVOb2Rlc1V1aWRzOiBbXSxcbiAgICBhZHZhbmNlZFNlYXJjaENoaXBzOiBbXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0RGF0YVN0YXRlRGVmYXVsdFZhbHVlcygpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbXB0eUpzVGFibGU8SVBlcnNpc3RlbnRVaURhdGE+KCksXG4gICAgc2VsZWN0ZWRSZXNvdXJjZVR5cGVJZDogbnVsbCxcbiAgICBzZWxlY3RlZEVudHJ5SWRzOiBudWxsLFxuICAgIHNlbGVjdGVkRW50cnlQYXJlbnRJZHM6IG51bGwsXG4gICAgcm9vdElkU2VsZWN0ZWRSZXNvdXJjZVR5cGU6IG51bGwsXG4gICAgaXNGZXRjaGluZ1Jlc291cmNlczogZmFsc2UsXG4gICAgaXNGZXRjaGluZ1Jlc291cmNlc0Vycm9yOiBmYWxzZSxcbiAgICBpc0ZldGNoaW5nUmVzb3VyY2VzU3VjY2VzczogZmFsc2UsXG4gICAgcmVzb3VyY2VzOiBudWxsLFxuICAgIGVudHJpZXNJZHNNYXRjaGluZ0FkdmFuY2VkU2VhcmNoOiB7fSxcbiAgICBpc0ZldGNoaW5nRGF0YURldGFpbDogZmFsc2UsXG4gICAgaXNGZXRjaGluZ0RhdGFEZXRhaWxFcnJvcjogZmFsc2UsXG4gICAgaXNGZXRjaGluZ0RhdGFEZXRhaWxTdWNjZXNzOiBmYWxzZSxcbiAgICBkYXRhRGV0YWlsOiBudWxsLFxuICB9O1xufVxuXG5AU3RhdGU8RGF0YVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2RhdGEnLFxuICBkZWZhdWx0czogaW5pdERhdGFTdGF0ZURlZmF1bHRWYWx1ZXMoKSxcbn0pXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YVN0YXRlIHtcbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldERhdGFTdGF0ZShzdGF0ZTogRGF0YVN0YXRlTW9kZWwpOiBEYXRhU3RhdGVNb2RlbCB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldFNlbGVjdGVkUmVzb3VyY2VUeXBlSWQoc3RhdGU6IERhdGFTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRSZXNvdXJjZVR5cGVJZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRTZWxlY3RlZEVudHJ5SWRzKHN0YXRlOiBEYXRhU3RhdGVNb2RlbCk6IElFbnRyeUlkcyB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkRW50cnlJZHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0U2VsZWN0ZWRFbnRyeUlkKHN0YXRlOiBEYXRhU3RhdGVNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkRW50cnlJZHMuaWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0U2VsZWN0ZWRFbnRyeUV4dGVybmFsSWQoc3RhdGU6IERhdGFTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRFbnRyeUlkcy5leHRlcm5hbElkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGdldFNlbGVjdGVkRW50cnlQYXJlbnRJZHMoc3RhdGU6IERhdGFTdGF0ZU1vZGVsKTogSUVudHJ5SWRzIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRFbnRyeVBhcmVudElkcztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRTZWxlY3RlZEVudHJ5UGFyZW50SWQoc3RhdGU6IERhdGFTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWRFbnRyeVBhcmVudElkcy5pZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBnZXRTZWxlY3RlZEVudHJ5UGFyZW50RXh0ZXJuYWxJZChzdGF0ZTogRGF0YVN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZEVudHJ5UGFyZW50SWRzLmV4dGVybmFsSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0Um9vdElkU2VsZWN0ZWRSZXNvdXJjZVR5cGUoc3RhdGU6IERhdGFTdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUucm9vdElkU2VsZWN0ZWRSZXNvdXJjZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgaXNGZXRjaGluZ1Jlc291cmNlcyhzdGF0ZTogRGF0YVN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuaXNGZXRjaGluZ1Jlc291cmNlcztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBpc0ZldGNoaW5nUmVzb3VyY2VzU3VjY2VzcyhzdGF0ZTogRGF0YVN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuaXNGZXRjaGluZ1Jlc291cmNlc1N1Y2Nlc3M7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgaXNGZXRjaGluZ1Jlc291cmNlc0Vycm9yKHN0YXRlOiBEYXRhU3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5pc0ZldGNoaW5nUmVzb3VyY2VzRXJyb3I7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZ2V0UmVzb3VyY2VzKFxuICAgIHN0YXRlOiBEYXRhU3RhdGVNb2RlbFxuICApOiBJRGF0YSB8IElEYXRhTm9kZVtdIHwgSU