using System; using System.Collections.Generic; using ln.types.odb.values; using ln.logging; using System.Linq; namespace ln.types.odb.ng.storage.session { public enum SessionSynchronisationStrategy { BIDIRECTIONAL, FORWARDONLY, REJECTCHANGED } public class SessionStorageContainer : IStorageContainer { public IStorageContainer StorageContainer { get; private set; } public Mapper ODBMapper { get; private set; } public SessionSynchronisationStrategy SynchronisationStrategy { get; set; } = SessionSynchronisationStrategy.REJECTCHANGED; public bool IsOpen => StorageContainer.IsOpen; public SessionStorageContainer(IStorageContainer storageContainer) { StorageContainer = storageContainer; ODBMapper = Mapper.Default; } private Dictionary storages = new Dictionary(); public IStorage GetStorage(string storageName) { if (storages.ContainsKey(storageName)) return storages[storageName]; IStorage storage = StorageContainer.GetStorage(storageName); storages.Add(storageName, new SessionStorage(this,storage)); if (!storage.IsOpen) storage.Open(); return storages[storageName]; } public IStorageContainer Open() { StorageContainer.Open(); return this; } public void Close() { StorageContainer.Close(); } public IEnumerable GetStorageNames() { return StorageContainer.GetStorageNames(); } public void Dispose() { } } }