this._register(storageService.onWillSaveState(() => { // Ask the component to persist state into the memento this.saveState(); // Then save the memento into storage this.memento.saveMemento(); }));
constructor( private _storageService: IStorageService, private _context: Memento, private _configurationEditService: ConfigurationEditingService, private _workspaceConfigurationService: IWorkspaceConfigurationService, private _credentialService: ICredentialsService, private _capabilitiesService: ICapabilitiesService, private _connectionConfig?: IConnectionConfig ) { if (_context) { this._memento = this._context.getMemento(this._storageService, MementoScope.GLOBAL); } this._groupIdToFullNameMap = {}; this._groupFullNameToIdMap = {}; if (!this._connectionConfig) { this._connectionConfig = new ConnectionConfig(this._configurationEditService, this._workspaceConfigurationService, this._capabilitiesService); } }
test('Save and Load', () => { let myMemento = new Memento('memento.test'); // Global let memento = myMemento.getMemento(storage, context); memento.foo = [1, 2, 3]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert(memento); memento.foo = 'Hello World'; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context); assert.deepEqual(memento, { foo: [1, 2, 3] }); let globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, { foo: 'Hello World' }); // Global memento = myMemento.getMemento(storage, context); memento.foo = [4, 5, 6]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert(memento); memento.foo = 'World Hello'; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context); assert.deepEqual(memento, { foo: [4, 5, 6] }); globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, { foo: 'World Hello' }); // Delete Global memento = myMemento.getMemento(storage, context); delete memento.foo; // Delete Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); delete memento.foo; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context); assert.deepEqual(memento, {}); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, {}); });
test('Loading and Saving Memento with Scopes', () => { let myMemento = new Memento('memento.test'); // Global let memento = myMemento.getMemento(storage); memento.foo = [1, 2, 3]; let globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert(memento); memento.foo = 'Hello World'; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage); assert.deepEqual(memento, { foo: [1, 2, 3] }); globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, { foo: 'Hello World' }); // Assert the Mementos are stored properly in storage assert.deepEqual(JSON.parse(storage.get('memento/memento.test')), { foo: [1, 2, 3] }); assert.deepEqual(JSON.parse(storage.get('memento/memento.test', StorageScope.WORKSPACE)), { foo: 'Hello World' }); // Delete Global memento = myMemento.getMemento(storage, context); delete memento.foo; // Delete Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); delete memento.foo; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context); assert.deepEqual(memento, {}); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, {}); // Assert the Mementos are also removed from storage assert.strictEqual(storage.get('memento/memento.test', Scope.GLOBAL, null), null); assert.strictEqual(storage.get('memento/memento.test', Scope.WORKSPACE, null), null); });
test('Save and Load - 2 Components with same id', () => { let myMemento = new Memento('memento.test'); let myMemento2 = new Memento('memento.test'); // Global let memento = myMemento.getMemento(storage, context); memento.foo = [1, 2, 3]; memento = myMemento2.getMemento(storage, context); memento.bar = [1, 2, 3]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert(memento); memento.foo = 'Hello World'; memento = myMemento2.getMemento(storage, Scope.WORKSPACE); assert(memento); memento.bar = 'Hello World'; myMemento.saveMemento(); myMemento2.saveMemento(); // Global memento = myMemento.getMemento(storage, context); assert.deepEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] }); let globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); memento = myMemento2.getMemento(storage, context); assert.deepEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] }); globalMemento = myMemento2.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, { foo: 'Hello World', bar: 'Hello World' }); memento = myMemento2.getMemento(storage, Scope.WORKSPACE); assert.deepEqual(memento, { foo: 'Hello World', bar: 'Hello World' }); });
test("Save and Load", () => { let myMemento = new Memento("memento.test"); // Global let memento = myMemento.getMemento(storage, context) memento.foo = [1, 2, 3]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert(memento); memento.foo = "Hello World"; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context) assert.deepEqual(memento, { foo: [1, 2, 3] }); let globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert.deepEqual(memento, { foo: "Hello World" }); // Global memento = myMemento.getMemento(storage, context) memento.foo = [4, 5, 6]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert(memento); memento.foo = "World Hello"; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context) assert.deepEqual(memento, { foo: [4, 5, 6] }); globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert.deepEqual(memento, { foo: "World Hello" }); // Delete Global memento = myMemento.getMemento(storage, context) delete memento.foo; // Delete Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) delete memento.foo; myMemento.saveMemento(); // Global memento = myMemento.getMemento(storage, context) assert.deepEqual(memento, {}); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert.deepEqual(memento, {}); });
test("Save and Load - 2 Components with same id", () => { let myMemento = new Memento("memento.test"); let myMemento2 = new Memento("memento.test"); // Global let memento = myMemento.getMemento(storage, context) memento.foo = [1, 2, 3]; memento = myMemento2.getMemento(storage, context) memento.bar = [1, 2, 3]; // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert(memento); memento.foo = "Hello World"; memento = myMemento2.getMemento(storage, Scope.WORKSPACE) assert(memento); memento.bar = "Hello World"; myMemento.saveMemento(); myMemento2.saveMemento(); // Global memento = myMemento.getMemento(storage, context) assert.deepEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] }); let globalMemento = myMemento.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); memento = myMemento2.getMemento(storage, context) assert.deepEqual(memento, { foo: [1, 2, 3], bar: [1, 2, 3] }); globalMemento = myMemento2.getMemento(storage, Scope.GLOBAL); assert.deepEqual(globalMemento, memento); // Workspace memento = myMemento.getMemento(storage, Scope.WORKSPACE) assert.deepEqual(memento, { foo: "Hello World", bar: "Hello World" }); memento = myMemento2.getMemento(storage, Scope.WORKSPACE) assert.deepEqual(memento, { foo: "Hello World", bar: "Hello World" }); });
protected getMemento(scope: StorageScope): object { return this.memento.getMemento(scope); }
/** * Saves all data of the mementos that have been loaded to the local storage. This includes * global and workspace scope. * * Mementos are shared across components with the same id. This means that multiple components * with the same id will store data into the same data structure. */ protected saveMemento(): void { this.componentMemento.saveMemento(); }
/** * Returns a JSON Object that represents the data of this memento. The optional * parameter scope allows to specify the scope of the memento to load. If not * provided, the scope will be global, Scope.WORKSPACE can be used to * scope the memento to the workspace. * * Mementos are shared across components with the same id. This means that multiple components * with the same id will store data into the same data structure. */ protected getMemento(storageService: IStorageService, scope: Scope = Scope.GLOBAL): any { return this.componentMemento.getMemento(storageService, scope); }