using Sarand.BusinessMgr.Net.Standard.Base.Consoles; using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.CodeTypes; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Diary; using Sarand.Net.Standard.Base.Interfaces; using Sarand.Net.Standard.Base.ItemData; using Sarand.Net.Standard.Base.ItemDocs; using Sarand.Net.Standard.Base.ItemOptions; using Sarand.Net.Standard.Base.ReferenceData; using Sarand.Net.Standard.Base.Security; using Sarand.Net.Standard.Base.UpdateLog; using System; using System.Collections.Generic; namespace Sarand.BusinessMgr.Net.Standard.Base.App { //======================================================================= public abstract class SbmApplication : SacsDisposable { //------------------------------------------------------------------- // Data members. private readonly PropertySet properties; //------------------------------------------------------------------- // Construction. protected SbmApplication(PropertySet properties) { SbmGlobals.Application = this; this.properties = properties; } protected override void Dispose(bool disposing) { if (disposing) { } } //------------------------------------------------------------------- // Application configuration. [Obsolete("Deprecated - properties need to be session context specific.")] public String GetPropertyValue(String section, String name) { return properties.GetPropertyValue(section, name); } //------------------------------------------------------------------- // Properties. public abstract SbmSystem System { get; } // Control & Template Databases. public abstract ISacsDatabase GetControlDatabase(); public abstract ISacsDatabase GetTemplateDatabase(); // Business Mgr Database. public abstract HashSet GetRepositoryContexts(SbmSessionContext sessionContext); public abstract ISacsDatabase GetBusMgrDatabase(SbmSessionContext sessionContext); public IDatabaseInfo CreateBusMgrDbInfo(SbmSessionContext sessionContext) { return GetBusMgrDatabase(sessionContext).CreateDbInfo(); } // Instance and Organisation profiles. public abstract SbmInstanceConfig GetInstanceConfig(SbmSessionContext sessionContext); public abstract SbmInstanceDataCache GetInstanceDataCache(SbmSessionContext sessionContext); public abstract SbmOrganisationConfig GetOrganisationConfig(ISbmUserOrganisationContext userContext); // Database utilities. public IDatabaseInfo CreateDbInfo(ISacsDatabase db) { return db?.CreateDbInfo() ?? null; } public bool DbTableExists(ISacsDatabase db, SbmDbDfn.TableIdx tableIdx) { return db?.TableExists(SbmDbDfn.GetTableName(tableIdx)) ?? false; } public bool DbColumnExists(ISacsDatabase db, SbmDbDfn.ColumnIdx columnIdx) { return db?.ColumnExists(SbmDbDfn.GetTableName(SbmDbDfn.GetTableForColumn(columnIdx)), SbmDbDfn.GetColumnName(columnIdx, false)) ?? false; } // Application instance. public abstract Sbm.InstanceType InstanceType { get; } public bool IsLiveHost() { return InstanceType == Sbm.InstanceType.Production; } public bool IsTestHost() { return InstanceType != Sbm.InstanceType.Production; } public bool IsDevHost() { return InstanceType == Sbm.InstanceType.Dev; } public abstract String EnvironmentName { get; } // Email configuration. public abstract SbmEmailConfig EmailConfig { get; } //------------------------------------------------------------------- } //======================================================================= }