Example #1
0
        /// <summary>
        /// Configure the setting
        /// </summary>
        public void Configure(SanteDBConfiguration configuration, IDictionary <string, string> settings)
        {
            var configSection = configuration.GetSection <AdoAuditConfigurationSection>();

            if (configSection == null)
            {
                configSection = new AdoAuditConfigurationSection()
                {
                    ProviderType              = "Npgsql",
                    ReadonlyConnectionString  = "AUDIT",
                    ReadWriteConnectionString = "AUDIT"
                };
                configuration.AddSection(configSection);
            }

            if (settings.TryGetValue(ConnectionStringSetting, out string rwConnection))
            {
                configSection.ReadonlyConnectionString = configSection.ReadWriteConnectionString = rwConnection;
            }

            // Add service for persisting
            var serviceConfiguration = configuration.GetSection <ApplicationServiceContextConfigurationSection>().ServiceProviders;

            if (!serviceConfiguration.Any(s => s.Type == typeof(AdoAuditRepositoryService)))
            {
                serviceConfiguration.Add(new TypeReferenceConfiguration(typeof(AdoAuditRepositoryService)));
            }
        }
#pragma warning restore CS0067

        /// <summary>
        /// Create new audit repository service
        /// </summary>
        public AdoAuditRepositoryService(IConfigurationManager configurationManager,
                                         IDataCachingService dataCachingService,
                                         IBiMetadataRepository biMetadataRepository,
                                         IConceptRepositoryService conceptRepository,
                                         IAdhocCacheService adhocCacheService = null)
        {
            this.m_configuration      = configurationManager.GetSection <AdoAuditConfigurationSection>();
            this.m_adhocCache         = adhocCacheService;
            this.m_dataCachingService = dataCachingService;
            this.m_conceptRepository  = conceptRepository;

            try
            {
                this.m_configuration.Provider.UpgradeSchema("SanteDB.Persistence.Audit.ADO");

                ApplicationServiceContext.Current.Started += (o, e) =>
                {
                    using (AuthenticationContext.EnterSystemContext())
                    {
                        // Add audits as a BI data source
                        biMetadataRepository
                        .Insert(new BiDataSourceDefinition()
                        {
                            IsSystemObject   = true,
                            ConnectionString = this.m_configuration.ReadonlyConnectionString,
                            MetaData         = new BiMetadata()
                            {
                                Version = typeof(AdoAuditRepositoryService).Assembly.GetName().Version.ToString(),
                                Status  = BiDefinitionStatus.Active,
                                Demands = new List <string>()
                                {
                                    PermissionPolicyIdentifiers.AccessAuditLog
                                }
                            },
                            Id           = "org.santedb.bi.dataSource.audit",
                            Name         = "audit",
                            ProviderType = typeof(OrmBiDataProvider)
                        });
                    }
                };

                this.m_mapper  = new ModelMapper(typeof(AdoAuditRepositoryService).Assembly.GetManifestResourceStream("SanteDB.Persistence.Auditing.ADO.Data.Map.ModelMap.xml"));
                this.m_builder = new QueryBuilder(this.m_mapper, this.m_configuration.Provider);
            }
            catch (ModelMapValidationException e)
            {
                this.m_traceSource.TraceError("Error validing map: {0}", e.Message);
                foreach (var i in e.ValidationDetails)
                {
                    this.m_traceSource.TraceError("{0}:{1} @ {2}", i.Level, i.Message, i.Location);
                }
                throw;
            }
        }