UNPKG

@alfresco/adf-content-services

Version:
175 lines 24.8 kB
import { NodesApiService } from '../../common/services/nodes-api.service'; import { inject, Injectable } from '@angular/core'; import { NodesApi } from '@alfresco/js-api'; import { DocumentLoaderNode } from '../models/document-folder.model'; import { from, forkJoin, Subject } from 'rxjs'; import { map } from 'rxjs/operators'; import { CustomResourcesService } from './custom-resources.service'; import { AlfrescoApiService } from '../../services/alfresco-api.service'; import * as i0 from "@angular/core"; const ROOT_ID = '-root-'; export class DocumentListService { constructor() { this.nodesApiService = inject(NodesApiService); this.apiService = inject(AlfrescoApiService); this.customResourcesService = inject(CustomResourcesService); this._reload = new Subject(); this._resetSelection = new Subject(); /** Gets an observable that emits when the document list should be reloaded. */ this.reload$ = this._reload.asObservable(); /** Gets an observable that emits when the selection should be reset. */ this.resetSelection$ = this._resetSelection.asObservable(); } get nodes() { this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance()); return this._nodesApi; } /** Reloads the document list. */ reload() { this._reload.next(); } /** Resets the selection. */ resetSelection() { this._resetSelection.next(); } /** * Deletes a node. * * @param nodeId ID of the node to delete * @returns Empty response when the operation is complete */ deleteNode(nodeId) { return from(this.nodes.deleteNode(nodeId)); } /** * Copy a node to destination node * * @param nodeId The id of the node to be copied * @param targetParentId The id of the folder where the node will be copied * @returns NodeEntry for the copied node */ copyNode(nodeId, targetParentId) { return from(this.nodes.copyNode(nodeId, { targetParentId })); } /** * Moves a node to destination node. * * @param nodeId The id of the node to be moved * @param targetParentId The id of the folder where the node will be moved * @returns NodeEntry for the moved node */ moveNode(nodeId, targetParentId) { return from(this.nodes.moveNode(nodeId, { targetParentId })); } /** * Gets the folder node with the specified relative name path below the root node. * * @param folder Path to folder. * @param opts Options. * @param includeFields Extra information to include (available options are "aspectNames", "isLink" and "association") * @returns Details of the folder */ getFolder(folder, opts, includeFields = []) { let rootNodeId = ROOT_ID; if (opts?.rootFolderId) { rootNodeId = opts.rootFolderId; } const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields].filter((element, index, array) => index === array.indexOf(element)); const params = { includeSource: true, include: includeFieldsRequest }; if (folder) { params.relativePath = folder; } if (opts) { if (opts.maxItems) { params.maxItems = opts.maxItems; } if (opts.skipCount) { params.skipCount = opts.skipCount; } if (opts.where) { params.where = opts.where; } if (opts.orderBy) { params.orderBy = opts.orderBy; } } return from(this.nodes.listNodeChildren(rootNodeId, params)); } /** * Gets a node via its node ID. * * @param nodeId ID of the target node * @param includeFields Extra information to include (available options are "aspectNames", "isLink" and "association") * @returns Details of the folder */ getNode(nodeId, includeFields = []) { const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'definition', ...includeFields].filter((element, index, array) => index === array.indexOf(element)); const opts = { includeSource: true, include: includeFieldsRequest }; return this.nodesApiService.getNode(nodeId, opts); } /** * Gets a folder node via its node ID. * * @param nodeId ID of the folder node * @param includeFields Extra information to include (available options are "aspectNames", "isLink" and "association") * @returns Details of the folder */ getFolderNode(nodeId, includeFields = []) { const includeFieldsRequest = ['path', 'properties', 'allowableOperations', 'permissions', 'aspectNames', ...includeFields].filter((element, index, array) => index === array.indexOf(element)); const opts = { includeSource: true, include: includeFieldsRequest }; return from(this.nodes.getNode(nodeId, opts)); } isCustomSourceService(nodeId) { return this.customResourcesService.isCustomSource(nodeId); } /** * Load a folder by Node Id. * * @param nodeId ID of the folder node * @param pagination pagination model * @param includeFields List of data field names to include in the results * @param where Optionally filter the list * @param orderBy order by node property * @returns Details of the folder */ loadFolderByNodeId(nodeId, pagination, includeFields, where, orderBy) { if (this.customResourcesService.isCustomSource(nodeId)) { return this.customResourcesService .loadFolderByNodeId(nodeId, pagination, includeFields, where) .pipe(map((result) => new DocumentLoaderNode(null, result))); } else { return this.retrieveDocumentNode(nodeId, pagination, includeFields, where, orderBy); } } retrieveDocumentNode(nodeId, pagination, includeFields, where, orderBy) { return forkJoin([ this.getFolderNode(nodeId, includeFields), this.getFolder(null, { maxItems: pagination.maxItems, skipCount: pagination.skipCount, orderBy, rootFolderId: nodeId, where }, includeFields) ]).pipe(map((results) => new DocumentLoaderNode(results[0], results[1]))); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentListService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DocumentListService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9kb2N1bWVudC1saXN0L3NlcnZpY2VzL2RvY3VtZW50LWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBK0IsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFjLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFekUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDO0FBS3pCLE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJWSxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxlQUFVLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEMsMkJBQXNCLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFReEQsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTlDLCtFQUErRTtRQUMvRSxZQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FB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QyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7OEdBdE1RLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07OzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFBhZ2luYXRpb25Nb2RlbCB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBOb2Rlc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24vc2VydmljZXMvbm9kZXMtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIE5vZGVQYWdpbmcsIE5vZGVzQXBpIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBEb2N1bWVudExvYWRlck5vZGUgfSBmcm9tICcuLi9tb2RlbHMvZG9jdW1lbnQtZm9sZGVyLm1vZGVsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIGZvcmtKb2luLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RMb2FkZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RvY3VtZW50LWxpc3QtbG9hZGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnLi9jdXN0b20tcmVzb3VyY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxmcmVzY29BcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxmcmVzY28tYXBpLnNlcnZpY2UnO1xuXG5jb25zdCBST09UX0lEID0gJy1yb290LSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRMaXN0U2VydmljZSBpbXBsZW1lbnRzIERvY3VtZW50TGlzdExvYWRlciB7XG4gICAgcHJpdmF0ZSBub2Rlc0FwaVNlcnZpY2UgPSBpbmplY3QoTm9kZXNBcGlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFwaVNlcnZpY2UgPSBpbmplY3QoQWxmcmVzY29BcGlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGN1c3RvbVJlc291cmNlc1NlcnZpY2UgPSBpbmplY3QoQ3VzdG9tUmVzb3VyY2VzU2VydmljZSk7XG5cbiAgICBwcml2YXRlIF9ub2Rlc0FwaTogTm9kZXNBcGk7XG4gICAgZ2V0IG5vZGVzKCk6IE5vZGVzQXBpIHtcbiAgICAgICAgdGhpcy5fbm9kZXNBcGkgPSB0aGlzLl9ub2Rlc0FwaSA/PyBuZXcgTm9kZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVsb2FkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIF9yZXNldFNlbGVjdGlvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogR2V0cyBhbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgZG9jdW1lbnQgbGlzdCBzaG91bGQgYmUgcmVsb2FkZWQuICovXG4gICAgcmVsb2FkJCA9IHRoaXMuX3JlbG9hZC5hc09ic2VydmFibGUoKTtcblxuICAgIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlIHJlc2V0LiAqL1xuICAgIHJlc2V0U2VsZWN0aW9uJCA9IHRoaXMuX3Jlc2V0U2VsZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgLyoqIFJlbG9hZHMgdGhlIGRvY3VtZW50IGxpc3QuICovXG4gICAgcmVsb2FkKCkge1xuICAgICAgICB0aGlzLl9yZWxvYWQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBSZXNldHMgdGhlIHNlbGVjdGlvbi4gKi9cbiAgICByZXNldFNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3Rpb24ubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBub2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVJZCBJRCBvZiB0aGUgbm9kZSB0byBkZWxldGVcbiAgICAgKiBAcmV0dXJucyBFbXB0eSByZXNwb25zZSB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAgICAgKi9cbiAgICBkZWxldGVOb2RlKG5vZGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5ub2Rlcy5kZWxldGVOb2RlKG5vZGVJZCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcHkgYSBub2RlIHRvIGRlc3RpbmF0aW9uIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWQgVGhlIGlkIG9mIHRoZSBub2RlIHRvIGJlIGNvcGllZFxuICAgICAqIEBwYXJhbSB0YXJnZXRQYXJlbnRJZCBUaGUgaWQgb2YgdGhlIGZvbGRlciB3aGVyZSB0aGUgbm9kZSB3aWxsIGJlIGNvcGllZFxuICAgICAqIEByZXR1cm5zIE5vZGVFbnRyeSBmb3IgdGhlIGNvcGllZCBub2RlXG4gICAgICovXG4gICAgY29weU5vZGUobm9kZUlkOiBzdHJpbmcsIHRhcmdldFBhcmVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5vZGVFbnRyeT4ge1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLm5vZGVzLmNvcHlOb2RlKG5vZGVJZCwgeyB0YXJnZXRQYXJlbnRJZCB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBub2RlIHRvIGRlc3RpbmF0aW9uIG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZUlkIFRoZSBpZCBvZiB0aGUgbm9kZSB0byBiZSBtb3ZlZFxuICAgICAqIEBwYXJhbSB0YXJnZXRQYXJlbnRJZCBUaGUgaWQgb2YgdGhlIGZvbGRlciB3aGVyZSB0aGUgbm9kZSB3aWxsIGJlIG1vdmVkXG4gICAgICogQHJldHVybnMgTm9kZUVudHJ5IGZvciB0aGUgbW92ZWQgbm9kZVxuICAgICAqL1xuICAgIG1vdmVOb2RlKG5vZGVJZDogc3RyaW5nLCB0YXJnZXRQYXJlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOb2RlRW50cnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5ub2Rlcy5tb3ZlTm9kZShub2RlSWQsIHsgdGFyZ2V0UGFyZW50SWQgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZvbGRlciBub2RlIHdpdGggdGhlIHNwZWNpZmllZCByZWxhdGl2ZSBuYW1lIHBhdGggYmVsb3cgdGhlIHJvb3Qgbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb2xkZXIgUGF0aCB0byBmb2xkZXIuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucy5cbiAgICAgKiBAcGFyYW0gaW5jbHVkZUZpZWxkcyBFeHRyYSBpbmZvcm1hdGlvbiB0byBpbmNsdWRlIChhdmFpbGFibGUgb3B0aW9ucyBhcmUgXCJhc3BlY3ROYW1lc1wiLCBcImlzTGlua1wiIGFuZCBcImFzc29jaWF0aW9uXCIpXG4gICAgICogQHJldHVybnMgRGV0YWlscyBvZiB0aGUgZm9sZGVyXG4gICAgICovXG4gICAgZ2V0Rm9sZGVyKGZvbGRlcjogc3RyaW5nLCBvcHRzPzogYW55LCBpbmNsdWRlRmllbGRzOiBzdHJpbmdbXSA9IFtdKTogT2JzZXJ2YWJsZTxOb2RlUGFnaW5nPiB7XG4gICAgICAgIGxldCByb290Tm9kZUlkID0gUk9PVF9JRDtcbiAgICAgICAgaWYgKG9wdHM/LnJvb3RGb2xkZXJJZCkge1xuICAgICAgICAgICAgcm9vdE5vZGVJZCA9IG9wdHMucm9vdEZvbGRlcklkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZUZpZWxkc1JlcXVlc3QgPSBbJ3BhdGgnLCAncHJvcGVydGllcycsICdhbGxvd2FibGVPcGVyYXRpb25zJywgJ3Blcm1pc3Npb25zJywgJ2FzcGVjdE5hbWVzJywgLi4uaW5jbHVkZUZpZWxkc10uZmlsdGVyKFxuICAgICAgICAgICAgKGVsZW1lbnQsIGluZGV4LCBhcnJheSkgPT4gaW5kZXggPT09IGFycmF5LmluZGV4T2YoZWxlbWVudClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgICAgICAgIGluY2x1ZGVTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlOiBpbmNsdWRlRmllbGRzUmVxdWVzdFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmb2xkZXIpIHtcbiAgICAgICAgICAgIHBhcmFtcy5yZWxhdGl2ZVBhdGggPSBmb2xkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0cykge1xuICAgICAgICAgICAgaWYgKG9wdHMubWF4SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMubWF4SXRlbXMgPSBvcHRzLm1heEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMuc2tpcENvdW50KSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnNraXBDb3VudCA9IG9wdHMuc2tpcENvdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMud2hlcmUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMud2hlcmUgPSBvcHRzLndoZXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcy5vcmRlckJ5ID0gb3B0cy5vcmRlckJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5ub2Rlcy5saXN0Tm9kZUNoaWxkcmVuKHJvb3ROb2RlSWQsIHBhcmFtcykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBub2RlIHZpYSBpdHMgbm9kZSBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWQgSUQgb2YgdGhlIHRhcmdldCBub2RlXG4gICAgICogQHBhcmFtIGluY2x1ZGVGaWVsZHMgRXh0cmEgaW5mb3JtYXRpb24gdG8gaW5jbHVkZSAoYXZhaWxhYmxlIG9wdGlvbnMgYXJlIFwiYXNwZWN0TmFtZXNcIiwgXCJpc0xpbmtcIiBhbmQgXCJhc3NvY2lhdGlvblwiKVxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZvbGRlclxuICAgICAqL1xuICAgIGdldE5vZGUobm9kZUlkOiBzdHJpbmcsIGluY2x1ZGVGaWVsZHM6IHN0cmluZ1tdID0gW10pOiBPYnNlcnZhYmxlPE5vZGU+IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZUZpZWxkc1JlcXVlc3QgPSBbJ3BhdGgnLCAncHJvcGVydGllcycsICdhbGxvd2FibGVPcGVyYXRpb25zJywgJ3Blcm1pc3Npb25zJywgJ2RlZmluaXRpb24nLCAuLi5pbmNsdWRlRmllbGRzXS5maWx0ZXIoXG4gICAgICAgICAgICAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihlbGVtZW50KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wdHM6IGFueSA9IHtcbiAgICAgICAgICAgIGluY2x1ZGVTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlOiBpbmNsdWRlRmllbGRzUmVxdWVzdFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzQXBpU2VydmljZS5nZXROb2RlKG5vZGVJZCwgb3B0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGZvbGRlciBub2RlIHZpYSBpdHMgbm9kZSBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWQgSUQgb2YgdGhlIGZvbGRlciBub2RlXG4gICAgICogQHBhcmFtIGluY2x1ZGVGaWVsZHMgRXh0cmEgaW5mb3JtYXRpb24gdG8gaW5jbHVkZSAoYXZhaWxhYmxlIG9wdGlvbnMgYXJlIFwiYXNwZWN0TmFtZXNcIiwgXCJpc0xpbmtcIiBhbmQgXCJhc3NvY2lhdGlvblwiKVxuICAgICAqIEByZXR1cm5zIERldGFpbHMgb2YgdGhlIGZvbGRlclxuICAgICAqL1xuICAgIGdldEZvbGRlck5vZGUobm9kZUlkOiBzdHJpbmcsIGluY2x1ZGVGaWVsZHM6IHN0cmluZ1tdID0gW10pOiBPYnNlcnZhYmxlPE5vZGVFbnRyeT4ge1xuICAgICAgICBjb25zdCBpbmNsdWRlRmllbGRzUmVxdWVzdCA9IFsncGF0aCcsICdwcm9wZXJ0aWVzJywgJ2FsbG93YWJsZU9wZXJhdGlvbnMnLCAncGVybWlzc2lvbnMnLCAnYXNwZWN0TmFtZXMnLCAuLi5pbmNsdWRlRmllbGRzXS5maWx0ZXIoXG4gICAgICAgICAgICAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihlbGVtZW50KVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wdHM6IGFueSA9IHtcbiAgICAgICAgICAgIGluY2x1ZGVTb3VyY2U6IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlOiBpbmNsdWRlRmllbGRzUmVxdWVzdFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMubm9kZXMuZ2V0Tm9kZShub2RlSWQsIG9wdHMpKTtcbiAgICB9XG5cbiAgICBpc0N1c3RvbVNvdXJjZVNlcnZpY2Uobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5pc0N1c3RvbVNvdXJjZShub2RlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYSBmb2xkZXIgYnkgTm9kZSBJZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlSWQgSUQgb2YgdGhlIGZvbGRlciBub2RlXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb24gcGFnaW5hdGlvbiBtb2RlbFxuICAgICAqIEBwYXJhbSBpbmNsdWRlRmllbGRzIExpc3Qgb2YgZGF0YSBmaWVsZCBuYW1lcyB0byBpbmNsdWRlIGluIHRoZSByZXN1bHRzXG4gICAgICogQHBhcmFtIHdoZXJlICBPcHRpb25hbGx5IGZpbHRlciB0aGUgbGlzdFxuICAgICAqIEBwYXJhbSBvcmRlckJ5IG9yZGVyIGJ5IG5vZGUgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyBEZXRhaWxzIG9mIHRoZSBmb2xkZXJcbiAgICAgKi9cbiAgICBsb2FkRm9sZGVyQnlOb2RlSWQoXG4gICAgICAgIG5vZGVJZDogc3RyaW5nLFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uTW9kZWwsXG4gICAgICAgIGluY2x1ZGVGaWVsZHM6IHN0cmluZ1tdLFxuICAgICAgICB3aGVyZT86IHN0cmluZyxcbiAgICAgICAgb3JkZXJCeT86IHN0cmluZ1tdXG4gICAgKTogT2JzZXJ2YWJsZTxEb2N1bWVudExvYWRlck5vZGU+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5pc0N1c3RvbVNvdXJjZShub2RlSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21SZXNvdXJjZXNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmxvYWRGb2xkZXJCeU5vZGVJZChub2RlSWQsIHBhZ2luYXRpb24sIGluY2x1ZGVGaWVsZHMsIHdoZXJlKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgocmVzdWx0OiBhbnkpID0+IG5ldyBEb2N1bWVudExvYWRlck5vZGUobnVsbCwgcmVzdWx0KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV0cmlldmVEb2N1bWVudE5vZGUobm9kZUlkLCBwYWdpbmF0aW9uLCBpbmNsdWRlRmllbGRzLCB3aGVyZSwgb3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJldHJpZXZlRG9jdW1lbnROb2RlKFxuICAgICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbk1vZGVsLFxuICAgICAgICBpbmNsdWRlRmllbGRzOiBzdHJpbmdbXSxcbiAgICAgICAgd2hlcmU/OiBzdHJpbmcsXG4gICAgICAgIG9yZGVyQnk/OiBzdHJpbmdbXVxuICAgICk6IE9ic2VydmFibGU8RG9jdW1lbnRMb2FkZXJOb2RlPiB7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlck5vZGUobm9kZUlkLCBpbmNsdWRlRmllbGRzKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyKFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBtYXhJdGVtczogcGFnaW5hdGlvbi5tYXhJdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcENvdW50OiBwYWdpbmF0aW9uLnNraXBDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJCeSxcbiAgICAgICAgICAgICAgICAgICAgcm9vdEZvbGRlcklkOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlRmllbGRzXG4gICAgICAgICAgICApXG4gICAgICAgIF0pLnBpcGUobWFwKChyZXN1bHRzKSA9PiBuZXcgRG9jdW1lbnRMb2FkZXJOb2RlKHJlc3VsdHNbMF0sIHJlc3VsdHNbMV0pKSk7XG4gICAgfVxufVxuIl19