import { injectable } from 'inversify'; import { CancellationToken, WaitUntilEvent, DisposableCollection, EmitterProxy } from '@gedit/utils'; import { CompositeTreeNode, Tree, TreeNode } from './tree'; /** * originTree的代理, 不需要存储数据 * @param originTree */ @injectable() export class TreeProxy implements Tree { protected toDispose = new DisposableCollection(); // 代理所有的事件 protected onNodeRefreshedEmitter = new EmitterProxy & WaitUntilEvent>(this.originTree.onNodeRefreshed); protected onChangedEmitter = new EmitterProxy(this.originTree.onChanged); protected onDidChangeBusyEmitter = new EmitterProxy(this.originTree.onDidChangeBusy); onNodeRefreshed = this.onNodeRefreshedEmitter.event; onChanged = this.onChangedEmitter.event; onDidChangeBusy = this.onDidChangeBusyEmitter.event; constructor( readonly originTree: Tree ) { this.toDispose.push(this.onNodeRefreshedEmitter); this.toDispose.push(this.onDidChangeBusyEmitter); this.toDispose.push(this.onChangedEmitter); } get root(): TreeNode | undefined { return this.originTree.root; } set root(root: TreeNode | undefined) { this.originTree.root = root; } dispose(): void { // 代理不需要销毁原来的originTree,只需要销毁当前的originTreeProxy this.toDispose.dispose(); } getNode(id: string | undefined): TreeNode | undefined { return this.originTree.getNode(id); } validateNode(node: TreeNode | undefined): TreeNode | undefined { return this.originTree.validateNode(node); } refresh(raw?: CompositeTreeNode): Promise { return this.originTree.refresh(raw as CompositeTreeNode); } markAsBusy(node: Readonly, ms: number, token: CancellationToken): Promise { return this.originTree.markAsBusy(node, ms, token); } get size(): number { return this.originTree.size; } }