static MapColorProvider[] GetMapColors() { var strategies = DisconnectedLogic.GetStrategyPairs().SelectDictionary(t => TypeLogic.GetCleanName(t), p => p); return(new[] { new MapColorProvider { Name = "disconnected", NiceName = "Disconnected", AddExtra = t => { var s = strategies.TryGetC(t.typeName); if (s == null) { return; } t.extra["disc-upload"] = s.Upload.ToString(); foreach (var mt in t.mlistTables) { mt.extra["disc-upload"] = s.Upload.ToString(); } t.extra["disc-download"] = s.Download.ToString(); foreach (var mt in t.mlistTables) { mt.extra["disc-download"] = s.Download.ToString(); } }, Order = 4, }, }); }
public void Initialize() { downloadTables = Schema.Current.Tables.Values .Select(t => new DownloadTable(t.Type, t, DisconnectedLogic.GetStrategy(t.Type))) .Where(p => p.Strategy.Download != Download.None) .ToList(); }
public void Initialize() { var tables = Schema.Current.Tables.Values .Select(t => new UploadTable(t.Type, t, DisconnectedLogic.GetStrategy(t.Type))) .Where(p => p.Strategy.Upload != Upload.None) .ToList(); var dic = tables.ToDictionary(a => a.Table); DirectedGraph <Table> graph = DirectedGraph <Table> .Generate( dic.Keys, t => t.DependentTables().Select(a => a.Key).Where(tab => dic.ContainsKey(tab))); var feedback = graph.FeedbackEdgeSet(); foreach (var edge in feedback.Edges) { var strategy = dic[edge.From].Strategy; if (strategy.DisableForeignKeys == null) { strategy.DisableForeignKeys = true; } } foreach (var item in dic.Values.Where(a => a.Strategy.DisableForeignKeys == null)) { item.Strategy.DisableForeignKeys = false; } graph.RemoveEdges(feedback.Edges); uploadTables = graph.CompilationOrder().Select(t => dic[t]).ToList(); }
static MapColorProvider[] GetMapColors() { var strategies = DisconnectedLogic.GetStrategyPairs().SelectDictionary(t => Navigator.ResolveWebTypeName(t), p => p); return(new[] { new MapColorProvider { Name = "disconnected", NiceName = "Disconnected", GetJsProvider = ColorModule["disconnectedColors"](MapClient.NodesConstant), AddExtra = t => { var s = strategies.TryGetC(t.webTypeName); if (s == null) { return; } t.extra["disc-upload"] = s.Upload.ToString(); foreach (var mt in t.mlistTables) { mt.extra["disc-upload"] = s.Upload.ToString(); } t.extra["disc-download"] = s.Download.ToString(); foreach (var mt in t.mlistTables) { mt.extra["disc-download"] = s.Download.ToString(); } }, Defs = new HtmlStringBuilder( from u in EnumExtensions.GetValues <Upload>() from d in EnumExtensions.GetValues <Download>() select GradientDef(u, d)).ToHtml(), Order = 4, }, }); }
public Dictionary <Type, StrategyPair> GetStrategyPairs() { return(Return(MethodInfo.GetCurrentMethod(), () => DisconnectedLogic.GetStrategyPairs())); }
public DisconnectedImportEntity GetUploadEstimation(Lite <DisconnectedMachineEntity> machine) { return(Return(MethodInfo.GetCurrentMethod(), () => DisconnectedLogic.GetUploadEstimation(machine))); }
public Lite <DisconnectedMachineEntity> GetDisconnectedMachine(string machineName) { return(Return(MethodInfo.GetCurrentMethod(), () => DisconnectedLogic.GetDisconnectedMachine(machineName))); }
public static void Start(string connectionString) { string logDatabase = Connector.TryExtractDatabaseNameWithPostfix(ref connectionString, "_Log"); SchemaBuilder sb = new SchemaBuilder(); sb.Schema.Version = typeof(Starter).Assembly.GetName().Version; sb.Schema.ForceCultureInfo = CultureInfo.GetCultureInfo("en-US"); MixinDeclarations.Register <OperationLogEntity, DiffLogMixin>(); MixinDeclarations.Register <UserEntity, UserEmployeeMixin>(); OverrideAttributes(sb); SetupDisconnectedStrategies(sb); DynamicQueryManager dqm = new DynamicQueryManager(); Connector.Default = new SqlConnector(connectionString, sb.Schema, dqm, SqlServerVersion.SqlServer2012); CacheLogic.Start(sb); TypeLogic.Start(sb, dqm); OperationLogic.Start(sb, dqm); MigrationLogic.Start(sb, dqm); CultureInfoLogic.Start(sb, dqm); EmbeddedFilePathLogic.Start(sb, dqm); SmtpConfigurationLogic.Start(sb, dqm); EmailLogic.Start(sb, dqm, () => Configuration.Value.Email, et => Configuration.Value.SmtpConfiguration); AuthLogic.Start(sb, dqm, "System", null); AuthLogic.StartAllModules(sb, dqm); ResetPasswordRequestLogic.Start(sb, dqm); UserTicketLogic.Start(sb, dqm); SessionLogLogic.Start(sb, dqm); ProcessLogic.Start(sb, dqm); PackageLogic.Start(sb, dqm, packages: true, packageOperations: true); MapLogic.Start(sb, dqm); SchedulerLogic.Start(sb, dqm); QueryLogic.Start(sb); UserQueryLogic.Start(sb, dqm); UserQueryLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); UserQueryLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); ChartLogic.Start(sb, dqm); UserChartLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); UserChartLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); DashboardLogic.Start(sb, dqm); DashboardLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); DashboardLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); ViewLogLogic.Start(sb, dqm, new HashSet <Type> { typeof(UserQueryEntity), typeof(UserChartEntity), typeof(DashboardEntity) }); DiffLogLogic.Start(sb, dqm); ExceptionLogic.Start(sb, dqm); SMSLogic.Start(sb, dqm, null, () => Configuration.Value.Sms); SMSLogic.RegisterPhoneNumberProvider <PersonEntity>(p => p.Phone, p => null); SMSLogic.RegisterDataObjectProvider((PersonEntity p) => new { p.FirstName, p.LastName, p.Title, p.DateOfBirth }); SMSLogic.RegisterPhoneNumberProvider <CompanyEntity>(p => p.Phone, p => null); NoteLogic.Start(sb, dqm, typeof(UserEntity), /*Note*/ typeof(OrderEntity)); AlertLogic.Start(sb, dqm, typeof(UserEntity), /*Alert*/ typeof(OrderEntity)); FileLogic.Start(sb, dqm); TranslationLogic.Start(sb, dqm); TranslatedInstanceLogic.Start(sb, dqm, () => CultureInfo.GetCultureInfo("en")); HelpLogic.Start(sb, dqm); WordTemplateLogic.Start(sb, dqm); EmployeeLogic.Start(sb, dqm); ProductLogic.Start(sb, dqm); CustomerLogic.Start(sb, dqm); OrderLogic.Start(sb, dqm); ShipperLogic.Start(sb, dqm); StartSouthwindConfiguration(sb, dqm); TypeConditionLogic.Register <OrderEntity>(SouthwindGroup.UserEntities, o => o.Employee.RefersTo(EmployeeEntity.Current)); TypeConditionLogic.Register <EmployeeEntity>(SouthwindGroup.UserEntities, e => e == EmployeeEntity.Current); TypeConditionLogic.Register <OrderEntity>(SouthwindGroup.CurrentCustomer, o => o.Customer == CustomerEntity.Current); TypeConditionLogic.Register <PersonEntity>(SouthwindGroup.CurrentCustomer, o => o == CustomerEntity.Current); TypeConditionLogic.Register <CompanyEntity>(SouthwindGroup.CurrentCustomer, o => o == CustomerEntity.Current); DisconnectedLogic.Start(sb, dqm); DisconnectedLogic.BackupFolder = @"D:\SouthwindTemp\Backups"; DisconnectedLogic.BackupNetworkFolder = @"D:\SouthwindTemp\Backups"; DisconnectedLogic.DatabaseFolder = @"D:\SouthwindTemp\Database"; ProfilerLogic.Start(sb, dqm, timeTracker: true, heavyProfiler: true, overrideSessionTimeout: true); SetupCache(sb); SetSchemaNames(Schema.Current); if (logDatabase.HasText()) { SetLogDatabase(sb.Schema, new DatabaseName(null, logDatabase)); } Schema.Current.OnSchemaCompleted(); }
public virtual Lite <DisconnectedExportEntity> BeginExportDatabase(DisconnectedMachineEntity machine) { Lite <DisconnectedExportEntity> export = new DisconnectedExportEntity { Machine = machine.ToLite(), Copies = downloadTables.Select(t => new DisconnectedExportTableEmbedded { Type = t.Type.ToTypeEntity().ToLite() }).ToMList() }.Save().ToLite(); var cancelationSource = new CancellationTokenSource(); var user = UserHolder.Current; var token = cancelationSource.Token; var task = Task.Factory.StartNew(() => { using (UserHolder.UserSession(user)) { OnStartExporting(machine); DisconnectedMachineEntity.Current = machine.ToLite(); try { using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.Lock, s => l).Execute())) { foreach (var tuple in downloadTables) { token.ThrowIfCancellationRequested(); if (tuple.Strategy.Upload == Upload.Subset) { miUnsafeLock.MakeGenericMethod(tuple.Type).Invoke(this, new object[] { machine.ToLite(), tuple.Strategy, export }); } } } string connectionString; using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.CreateDatabase, s => l).Execute())) connectionString = CreateDatabase(machine); var newDatabase = new SqlServerConnector(connectionString, Schema.Current, ((SqlServerConnector)Connector.Current).Version); using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.CreateSchema, s => l).Execute())) using (Connector.Override(newDatabase)) using (ObjectName.OverrideOptions(new ObjectNameOptions { AvoidDatabaseName = true })) { Administrator.TotalGeneration(); } using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.DisableForeignKeys, s => l).Execute())) using (Connector.Override(newDatabase)) using (ObjectName.OverrideOptions(new ObjectNameOptions { AvoidDatabaseName = true })) { foreach (var tuple in downloadTables.Where(t => !t.Type.IsEnumEntity())) { token.ThrowIfCancellationRequested(); DisableForeignKeys(tuple.Table); } } var isPostgres = Schema.Current.Settings.IsPostgres; DatabaseName newDatabaseName = new DatabaseName(null, newDatabase.DatabaseName(), isPostgres); foreach (var tuple in downloadTables) { token.ThrowIfCancellationRequested(); int ms = 0; using (token.MeasureTime(l => ms = l)) { tuple.Strategy.Exporter !.Export(tuple.Table, tuple.Strategy, newDatabaseName, machine); } export.MListElementsLite(_ => _.Copies).Where(c => c.Element.Type.Is(tuple.Type.ToTypeEntity())).UnsafeUpdateMList() .Set(mle => mle.Element.CopyTable, mle => ms) .Execute(); } using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.EnableForeignKeys, s => l).Execute())) foreach (var tuple in downloadTables.Where(t => !t.Type.IsEnumEntity())) { token.ThrowIfCancellationRequested(); EnableForeignKeys(tuple.Table); } using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.ReseedIds, s => l).Execute())) { var tablesToUpload = Schema.Current.Tables.Values.Where(t => DisconnectedLogic.GetStrategy(t.Type).Upload != Upload.None) .SelectMany(t => t.TablesMList().Cast <ITable>().And(t)).Where(t => t.PrimaryKey.Identity).ToList(); var maxIdDictionary = tablesToUpload.ToDictionary(t => t, t => DisconnectedTools.MaxIdInRange(t, machine.SeedMin, machine.SeedMax)); using (Connector.Override(newDatabase)) using (ObjectName.OverrideOptions(new ObjectNameOptions { AvoidDatabaseName = true })) { foreach (var table in tablesToUpload) { token.ThrowIfCancellationRequested(); long?max = maxIdDictionary.GetOrThrow(table); DisconnectedTools.SetNextId(table, (max + 1) ?? machine.SeedMin); } } } CopyExport(export, newDatabase); machine.InDB().UnsafeUpdate().Set(s => s.State, s => DisconnectedMachineState.Disconnected).Execute(); using (SqlServerConnector.Override(newDatabase)) using (ObjectName.OverrideOptions(new ObjectNameOptions { AvoidDatabaseName = true })) machine.InDB().UnsafeUpdate().Set(s => s.State, s => DisconnectedMachineState.Disconnected).Execute(); using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.BackupDatabase, s => l).Execute())) BackupDatabase(machine, export, newDatabase); using (token.MeasureTime(l => export.InDB().UnsafeUpdate().Set(s => s.DropDatabase, s => l).Execute())) DropDatabase(newDatabase); token.ThrowIfCancellationRequested(); export.InDB().UnsafeUpdate() .Set(s => s.State, s => DisconnectedExportState.Completed) .Set(s => s.Total, s => s.CalculateTotal()) .Execute(); } catch (Exception e) { var ex = e.LogException(); export.InDB().UnsafeUpdate() .Set(s => s.Exception, s => ex.ToLite()) .Set(s => s.State, s => DisconnectedExportState.Error) .Execute(); OnExportingError(machine, export, e); } finally { runningExports.Remove(export); DisconnectedMachineEntity.Current = null; OnEndExporting(); } } }); runningExports.Add(export, new RunningExports(task, cancelationSource)); return(export); }
private static void SetupDisconnectedStrategies(SchemaBuilder sb) { //Signum.Entities DisconnectedLogic.Register <TypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Authorization DisconnectedLogic.Register <UserEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RoleEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ResetPasswordRequestEntity>(Download.None, Upload.None); DisconnectedLogic.Register <RuleTypeEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RulePropertyEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RuleQueryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RuleOperationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <PermissionSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <RulePermissionEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SessionLogEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserTicketEntity>(Download.None, Upload.None); DisconnectedLogic.Register <LastAuthRulesImportEntity>(Download.None, Upload.None); //Signum.Entities.Basics DisconnectedLogic.Register <TypeConditionSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <PropertyRouteEntity>(Download.Replace, Upload.None); DisconnectedLogic.Register <QueryEntity>(Download.Replace, Upload.New); //Signum.Entities.Notes DisconnectedLogic.Register <NoteEntity>(Download.None, Upload.None); DisconnectedLogic.Register <NoteTypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Alerts DisconnectedLogic.Register <AlertEntity>(Download.None, Upload.None); DisconnectedLogic.Register <AlertTypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Chart DisconnectedLogic.Register <ChartColorEntity>(Download.All, Upload.None); DisconnectedLogic.Register <UserChartEntity>(Download.All, Upload.New); DisconnectedLogic.Register <ChartScriptEntity>(Download.All, Upload.New); //Signum.Entities.Files DisconnectedLogic.Register <FileEntity>(Download.All, Upload.New); //Signum.Entities.Help DisconnectedLogic.Register <EntityHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <NamespaceHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <AppendixHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <QueryHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <OperationHelpEntity>(Download.None, Upload.None); //Signum.Entities.ControlPanel DisconnectedLogic.Register <DashboardEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserChartPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserQueryPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CountSearchControlPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <LinkListPartEntity>(Download.None, Upload.None); //Signum.Entities.Disconnected DisconnectedLogic.Register <DisconnectedMachineEntity>(Download.All, Upload.None); DisconnectedLogic.Register <DisconnectedExportEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DisconnectedImportEntity>(Download.None, Upload.None); //Signum.Entities.Files DisconnectedLogic.Register <FileTypeSymbol>(Download.Replace, Upload.None); //Signum.Entities.Mailing DisconnectedLogic.Register <EmailMessageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailTemplateEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailPackageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailMasterTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SmtpConfigurationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SystemEmailEntity>(Download.Replace, Upload.None); //Signum.Entities.Migrations DisconnectedLogic.Register <SqlMigrationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <CSharpMigrationEntity>(Download.All, Upload.None); //Signum.Entities.Translation DisconnectedLogic.Register <CultureInfoEntity>(Download.All, Upload.None); //Signum.Entities.Operations DisconnectedLogic.Register <OperationSymbol>(Download.Replace, Upload.None); Expression <Func <OperationLogEntity, bool> > operationLogCondition = ol => ol.Target.EntityType == typeof(OrderEntity) && ((OrderEntity)ol.Target.Entity).Employee.RefersTo(EmployeeEntity.Current) || ol.Target.EntityType == typeof(PersonEntity) && Database.Query <OrderEntity>().Any(o => o.Employee.RefersTo(EmployeeEntity.Current) && o.Customer == ((PersonEntity)ol.Target.Entity)) || ol.Target.EntityType == typeof(CompanyEntity) && Database.Query <OrderEntity>().Any(o => o.Employee.RefersTo(EmployeeEntity.Current) && o.Customer == ((CompanyEntity)ol.Target.Entity) || ol.Target.EntityType == typeof(EmployeeEntity) || ol.Target.EntityType == typeof(ProductEntity)); DisconnectedLogic.Register <OperationLogEntity>(operationLogCondition, Upload.New); //Signum.Entities.Processes DisconnectedLogic.Register <ProcessAlgorithmSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <ProcessEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageOperationEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageLineEntity>(Download.None, Upload.New); DisconnectedLogic.Register <ProcessExceptionLineEntity>(Download.None, Upload.New); //Signum.Entities.Scheduler DisconnectedLogic.Register <SimpleTaskSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <ScheduledTaskEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleMonthsEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleWeekDaysEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleMinutelyEntity>(Download.None, Upload.None); DisconnectedLogic.Register <HolidayCalendarEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduledTaskLogEntity>(Download.None, Upload.None); //Signum.Entities.Word DisconnectedLogic.Register <WordTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SystemWordTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <WordTransformerSymbol>(Download.None, Upload.None); DisconnectedLogic.Register <WordConverterSymbol>(Download.None, Upload.None); //Signum.Entities.SMS DisconnectedLogic.Register <SMSMessageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSTemplateEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSSendPackageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSUpdatePackageEntity>(Download.None, Upload.None); //Signum.Entities.Translation DisconnectedLogic.Register <TranslatorUserEntity>(Download.None, Upload.None); DisconnectedLogic.Register <TranslatedInstanceEntity>(Download.None, Upload.None); //Signum.Entities.Exceptions DisconnectedLogic.Register <ExceptionEntity>(e => Database.Query <OperationLogEntity>() .Any(ol => operationLogCondition.Evaluate(ol) && ol.Exception.RefersTo(e)), Upload.New); //Signum.Entities.ViewLog DisconnectedLogic.Register <ViewLogEntity>(Download.None, Upload.New); //Signum.Entities.UserQueries DisconnectedLogic.Register <UserQueryEntity>(Download.All, Upload.New); //Southwind.Entities DisconnectedLogic.Register <EmployeeEntity>(Download.All, Upload.None); DisconnectedLogic.Register <TerritoryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RegionEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ProductEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SupplierEntity>(Download.All, Upload.None); DisconnectedLogic.Register <CategoryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <OrderEntity>(o => o.Employee.RefersTo(EmployeeEntity.Current)); DisconnectedLogic.Register <PersonEntity>(p => Database.Query <OrderEntity>().Any(o => o.Employee.RefersTo(EmployeeEntity.Current) && o.Customer == p), Upload.New); DisconnectedLogic.Register <CompanyEntity>(p => Database.Query <OrderEntity>().Any(o => o.Employee.RefersTo(EmployeeEntity.Current) && o.Customer == p), Upload.New); DisconnectedLogic.Register <ShipperEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ApplicationConfigurationEntity>(Download.All, Upload.None); }
private static void SetupDisconnectedStrategies(SchemaBuilder sb) { //Signum.Entities DisconnectedLogic.Register <TypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Authorization DisconnectedLogic.Register <UserEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RoleEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ResetPasswordRequestEntity>(Download.None, Upload.None); DisconnectedLogic.Register <RuleTypeEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RulePropertyEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RuleQueryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RuleOperationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <PermissionSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <RulePermissionEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SessionLogEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserTicketEntity>(Download.None, Upload.None); //Signum.Entities.Basics DisconnectedLogic.Register <TypeConditionSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <PropertyRouteEntity>(Download.Replace, Upload.None); DisconnectedLogic.Register <QueryEntity>(Download.Replace, Upload.None); //Signum.Entities.Notes DisconnectedLogic.Register <NoteEntity>(Download.None, Upload.None); DisconnectedLogic.Register <NoteTypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Alerts DisconnectedLogic.Register <AlertEntity>(Download.None, Upload.None); DisconnectedLogic.Register <AlertTypeEntity>(Download.Replace, Upload.None); //Signum.Entities.Chart DisconnectedLogic.Register <ChartColorEntity>(Download.All, Upload.None); DisconnectedLogic.Register <UserChartEntity>(Download.All, Upload.New); DisconnectedLogic.Register <ChartScriptEntity>(Download.All, Upload.New); //Signum.Entities.Files DisconnectedLogic.Register <FileEntity>(Download.All, Upload.New); //Signum.Entities.Excel DisconnectedLogic.Register <ExcelReportEntity>(Download.None, Upload.None); //Signum.Entities.Templating DisconnectedLogic.Register <ModelConverterSymbol>(Download.None, Upload.None); //Signum.Entities.Help DisconnectedLogic.Register <EntityHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <NamespaceHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <AppendixHelpEntity>(Download.None, Upload.None); DisconnectedLogic.Register <QueryHelpEntity>(Download.None, Upload.None); //Signum.Entities.ControlPanel DisconnectedLogic.Register <DashboardEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserChartPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <UserQueryPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ValueUserQueryListPartEntity>(Download.None, Upload.None); DisconnectedLogic.Register <LinkListPartEntity>(Download.None, Upload.None); //Signum.Entities.Disconnected DisconnectedLogic.Register <DisconnectedMachineEntity>(Download.All, Upload.None); DisconnectedLogic.Register <DisconnectedExportEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DisconnectedImportEntity>(Download.None, Upload.None); //Signum.Entities.Toolbar DisconnectedLogic.Register <ToolbarEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ToolbarMenuEntity>(Download.None, Upload.None); //Signum.Entities.Files DisconnectedLogic.Register <FileTypeSymbol>(Download.Replace, Upload.None); //Signum.Entities.Mailing DisconnectedLogic.Register <EmailMessageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailTemplateEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ImageAttachmentEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailPackageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <EmailMasterTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SmtpConfigurationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SystemEmailEntity>(Download.Replace, Upload.None); //Signum.Entities.Migrations DisconnectedLogic.Register <SqlMigrationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <CSharpMigrationEntity>(Download.All, Upload.None); DisconnectedLogic.Register <LoadMethodLogEntity>(Download.None, Upload.None); //Signum.Entities.Translation DisconnectedLogic.Register <CultureInfoEntity>(Download.All, Upload.None); //Signum.Entities.MachineLearning DisconnectedLogic.Register <PredictorEntity>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorAlgorithmSymbol>(Download.None, Upload.None); DisconnectedLogic.Register <NeuralNetworkSettingsEntity>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorSubQueryEntity>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorCodificationEntity>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorPublicationSymbol>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorEpochProgressEntity>(Download.None, Upload.None); DisconnectedLogic.Register <PredictorResultSaverSymbol>(Download.None, Upload.None); DisconnectedLogic.Register <PredictSimpleResultEntity>(Download.None, Upload.None); DisconnectedLogic.Register <AutoconfigureNeuralNetworkEntity>(Download.None, Upload.None); //Signum.Entities.Operations DisconnectedLogic.Register <OperationSymbol>(Download.Replace, Upload.None); Expression <Func <OperationLogEntity, bool> > operationLogCondition = ol => ol.Target.EntityType == typeof(OrderEntity) && ((OrderEntity)ol.Target.Entity).Employee == EmployeeEntity.Current || ol.Target.EntityType == typeof(PersonEntity) && Database.Query <OrderEntity>().Any(o => o.Employee == EmployeeEntity.Current && o.Customer == ((PersonEntity)ol.Target.Entity)) || ol.Target.EntityType == typeof(CompanyEntity) && Database.Query <OrderEntity>().Any(o => o.Employee == EmployeeEntity.Current && o.Customer == ((CompanyEntity)ol.Target.Entity) || ol.Target.EntityType == typeof(EmployeeEntity) || ol.Target.EntityType == typeof(ProductEntity)); DisconnectedLogic.Register <OperationLogEntity>(operationLogCondition, Upload.New); //Signum.Entities.Processes DisconnectedLogic.Register <ProcessAlgorithmSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <ProcessEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageOperationEntity>(Download.None, Upload.New); DisconnectedLogic.Register <PackageLineEntity>(Download.None, Upload.New); DisconnectedLogic.Register <ProcessExceptionLineEntity>(Download.None, Upload.New); //Signum.Entities.Scheduler DisconnectedLogic.Register <SimpleTaskSymbol>(Download.Replace, Upload.None); DisconnectedLogic.Register <ScheduledTaskEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleMonthsEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleWeekDaysEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduleRuleMinutelyEntity>(Download.None, Upload.None); DisconnectedLogic.Register <HolidayCalendarEntity>(Download.None, Upload.None); DisconnectedLogic.Register <ScheduledTaskLogEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SchedulerTaskExceptionLineEntity>(Download.None, Upload.None); //Signum.Entities.Word DisconnectedLogic.Register <WordTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SystemWordTemplateEntity>(Download.All, Upload.None); DisconnectedLogic.Register <WordTransformerSymbol>(Download.None, Upload.None); DisconnectedLogic.Register <WordConverterSymbol>(Download.None, Upload.None); //Signum.Entities.SMS DisconnectedLogic.Register <SMSMessageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSTemplateEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSSendPackageEntity>(Download.None, Upload.None); DisconnectedLogic.Register <SMSUpdatePackageEntity>(Download.None, Upload.None); //Signum.Entities.Translation DisconnectedLogic.Register <TranslatedInstanceEntity>(Download.None, Upload.None); //Signum.Entities.Exceptions DisconnectedLogic.Register <ExceptionEntity>(e => Database.Query <OperationLogEntity>() .Any(ol => operationLogCondition.Evaluate(ol) && ol.Exception.RefersTo(e)), Upload.New); //Signum.Entities.ViewLog DisconnectedLogic.Register <ViewLogEntity>(Download.None, Upload.New); //Signum.Entities.UserQueries DisconnectedLogic.Register <UserQueryEntity>(Download.All, Upload.New); //Southwind.Entities DisconnectedLogic.Register <EmployeeEntity>(Download.All, Upload.None); DisconnectedLogic.Register <TerritoryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <RegionEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ProductEntity>(Download.All, Upload.None); DisconnectedLogic.Register <SupplierEntity>(Download.All, Upload.None); DisconnectedLogic.Register <CategoryEntity>(Download.All, Upload.None); DisconnectedLogic.Register <OrderEntity>(o => o.Employee == EmployeeEntity.Current); DisconnectedLogic.Register <PersonEntity>(p => Database.Query <OrderEntity>().Any(o => o.Employee == EmployeeEntity.Current && o.Customer == p), Upload.New); DisconnectedLogic.Register <CompanyEntity>(p => Database.Query <OrderEntity>().Any(o => o.Employee == EmployeeEntity.Current && o.Customer == p), Upload.New); DisconnectedLogic.Register <ShipperEntity>(Download.All, Upload.None); DisconnectedLogic.Register <ApplicationConfigurationEntity>(Download.All, Upload.None); //Signum.Entities.Dynamic DisconnectedLogic.Register <DynamicRenameEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicSqlMigrationEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicValidationEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicViewEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicViewSelectorEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicViewOverrideEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicTypeEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicTypeConditionSymbolEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicTypeConditionEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicExpressionEntity>(Download.None, Upload.None); DisconnectedLogic.Register <DynamicMixinConnectionEntity>(Download.None, Upload.None); //Signum.Entities.Workflow DisconnectedLogic.Register <WorkflowEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowPoolEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowLaneEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowActivityEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowConditionEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowActionEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowEventEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowGatewayEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowScriptEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowScriptRetryStrategyEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowConnectionEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CaseEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CaseTagTypeEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CaseTagEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CaseActivityEntity>(Download.None, Upload.None); DisconnectedLogic.Register <CaseNotificationEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowEventTaskEntity>(Download.None, Upload.None); DisconnectedLogic.Register <WorkflowEventTaskConditionResultEntity>(Download.None, Upload.None); }
public static void Start(string connectionString) { StartParameters.IgnoredDatabaseMismatches = new List <Exception>(); StartParameters.IgnoredCodeErrors = new List <Exception>(); string logDatabase = Connector.TryExtractDatabaseNameWithPostfix(ref connectionString, "_Log"); SchemaBuilder sb = new CustomSchemaBuilder { LogDatabaseName = logDatabase }; sb.Schema.Version = typeof(Starter).Assembly.GetName().Version; sb.Schema.ForceCultureInfo = CultureInfo.GetCultureInfo("en-US"); MixinDeclarations.Register <OperationLogEntity, DiffLogMixin>(); MixinDeclarations.Register <UserEntity, UserEmployeeMixin>(); OverrideAttributes(sb); SetupDisconnectedStrategies(sb); DynamicQueryManager dqm = new DynamicQueryManager(); Connector.Default = new SqlConnector(connectionString, sb.Schema, dqm, SqlServerVersion.SqlServer2012); CacheLogic.Start(sb); DynamicLogicStarter.Start(sb, dqm); DynamicLogic.CompileDynamicCode(); DynamicLogic.RegisterMixins(); DynamicLogic.BeforeSchema(sb); TypeLogic.Start(sb, dqm); OperationLogic.Start(sb, dqm); ExceptionLogic.Start(sb, dqm); MigrationLogic.Start(sb, dqm); CultureInfoLogic.Start(sb, dqm); FilePathEmbeddedLogic.Start(sb, dqm); SmtpConfigurationLogic.Start(sb, dqm); EmailLogic.Start(sb, dqm, () => Configuration.Value.Email, et => Configuration.Value.SmtpConfiguration); AuthLogic.Start(sb, dqm, "System", null); AuthLogic.StartAllModules(sb, dqm); ResetPasswordRequestLogic.Start(sb, dqm); UserTicketLogic.Start(sb, dqm); SessionLogLogic.Start(sb, dqm); ProcessLogic.Start(sb, dqm); PackageLogic.Start(sb, dqm, packages: true, packageOperations: true); SchedulerLogic.Start(sb, dqm); QueryLogic.Start(sb, dqm); UserQueryLogic.Start(sb, dqm); UserQueryLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); UserQueryLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); ChartLogic.Start(sb, dqm); UserChartLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); UserChartLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); DashboardLogic.Start(sb, dqm); DashboardLogic.RegisterUserTypeCondition(sb, SouthwindGroup.UserEntities); DashboardLogic.RegisterRoleTypeCondition(sb, SouthwindGroup.RoleEntities); ViewLogLogic.Start(sb, dqm, new HashSet <Type> { typeof(UserQueryEntity), typeof(UserChartEntity), typeof(DashboardEntity) }); DiffLogLogic.Start(sb, dqm, registerAll: true); ExcelLogic.Start(sb, dqm, excelReport: true); ToolbarLogic.Start(sb, dqm); SMSLogic.Start(sb, dqm, null, () => Configuration.Value.Sms); SMSLogic.RegisterPhoneNumberProvider <PersonEntity>(p => p.Phone, p => null); SMSLogic.RegisterDataObjectProvider((PersonEntity p) => new { p.FirstName, p.LastName, p.Title, p.DateOfBirth }); SMSLogic.RegisterPhoneNumberProvider <CompanyEntity>(p => p.Phone, p => null); NoteLogic.Start(sb, dqm, typeof(UserEntity), /*Note*/ typeof(OrderEntity)); AlertLogic.Start(sb, dqm, typeof(UserEntity), /*Alert*/ typeof(OrderEntity)); FileLogic.Start(sb, dqm); TranslationLogic.Start(sb, dqm, countLocalizationHits: false); TranslatedInstanceLogic.Start(sb, dqm, () => CultureInfo.GetCultureInfo("en")); HelpLogic.Start(sb, dqm); WordTemplateLogic.Start(sb, dqm); MapLogic.Start(sb, dqm); PredictorLogic.Start(sb, dqm, () => new FileTypeAlgorithm { GetPrefixPair = f => new PrefixPair(Starter.Configuration.Value.Folders.PredictorModelFolder) }); PredictorLogic.RegisterAlgorithm(CNTKPredictorAlgorithm.NeuralNetwork, new CNTKNeuralNetworkPredictorAlgorithm()); PredictorLogic.RegisterPublication(ProductPredictorPublication.MonthlySales, new PublicationSettings { QueryName = typeof(OrderEntity) }); //PredictorLogic WorkflowLogicStarter.Start(sb, dqm, () => Starter.Configuration.Value.Workflow); EmployeeLogic.Start(sb, dqm); ProductLogic.Start(sb, dqm); CustomerLogic.Start(sb, dqm); OrderLogic.Start(sb, dqm); ShipperLogic.Start(sb, dqm); StartSouthwindConfiguration(sb, dqm); TypeConditionLogic.Register <OrderEntity>(SouthwindGroup.UserEntities, o => o.Employee == EmployeeEntity.Current); TypeConditionLogic.Register <EmployeeEntity>(SouthwindGroup.UserEntities, e => EmployeeEntity.Current.RefersTo(e)); TypeConditionLogic.Register <OrderEntity>(SouthwindGroup.CurrentCustomer, o => o.Customer == CustomerEntity.Current); TypeConditionLogic.Register <PersonEntity>(SouthwindGroup.CurrentCustomer, o => o == CustomerEntity.Current); TypeConditionLogic.Register <CompanyEntity>(SouthwindGroup.CurrentCustomer, o => o == CustomerEntity.Current); DisconnectedLogic.Start(sb, dqm); DisconnectedLogic.BackupFolder = @"D:\SouthwindTemp\Backups"; DisconnectedLogic.BackupNetworkFolder = @"D:\SouthwindTemp\Backups"; DisconnectedLogic.DatabaseFolder = @"D:\SouthwindTemp\Database"; ProfilerLogic.Start(sb, dqm, timeTracker: true, heavyProfiler: true, overrideSessionTimeout: true); DynamicLogic.StartDynamicModules(sb, dqm); DynamicLogic.RegisterExceptionIfAny(); Starter.DynamicDisconnectedStrategis(sb); SetupCache(sb); Schema.Current.OnSchemaCompleted(); }