Пример #1
0
        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,
                },
            });
        }
Пример #2
0
 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();
 }
Пример #3
0
    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();
    }
Пример #4
0
        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,
                },
            });
        }
Пример #5
0
 public Dictionary <Type, StrategyPair> GetStrategyPairs()
 {
     return(Return(MethodInfo.GetCurrentMethod(), () =>
                   DisconnectedLogic.GetStrategyPairs()));
 }
Пример #6
0
 public DisconnectedImportEntity GetUploadEstimation(Lite <DisconnectedMachineEntity> machine)
 {
     return(Return(MethodInfo.GetCurrentMethod(), () => DisconnectedLogic.GetUploadEstimation(machine)));
 }
Пример #7
0
 public Lite <DisconnectedMachineEntity> GetDisconnectedMachine(string machineName)
 {
     return(Return(MethodInfo.GetCurrentMethod(), () => DisconnectedLogic.GetDisconnectedMachine(machineName)));
 }
Пример #8
0
        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();
        }
Пример #9
0
    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);
    }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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();
        }