ln.objects/ng/storage/session/SessionStorageContainer.cs

68 lines
1.5 KiB
C#

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<string, IStorage> storages = new Dictionary<string, IStorage>();
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<string> GetStorageNames()
{
return StorageContainer.GetStorageNames();
}
public void Dispose()
{
}
}
}