예제 #1
0
        public EntityApp Build(DbFirstConfig config)
        {
            _config = config;
            _app    = new EntityApp();
            var log = new BufferedLog();

            _dbSettings = new DbSettings(_config.Driver, config.Driver.GetDefaultOptions(), _config.ConnectionString);
            // create loader and setup filter
            var modelLoader = _config.Driver.CreateDbModelLoader(_dbSettings, log);

            modelLoader.SetSchemasSubset(_config.Schemas);
            //actually load model
            _dbModel = modelLoader.LoadModel();
            Util.Check(_dbModel.Tables.Count() > 0, "No tables found in the database. Code generation aborted.");
            // Prepare type generator
            _tempNamespace = "_dummy_" + _callCount++; // artificial unique namespace for dummy interface types
            // Construct model setup and model
            GenerateModulesAndAreas();
            _entityModel = new EntityModel(_app);
            // EntityModelBuilder.SetModel(_app, _entityModel);
            //generate entities and members
            GenerateEntities();
            SetupPrimaryKeys();
            GenerateReferenceMembers();
            CreateIndexes();
            SetupKeyMembers();
            return(_app);
        }
예제 #2
0
        /// <summary>
        /// Initializes the loggers and set the proper one according to the given parameters. If a DevNull mode is set at the beginning, the other logging modes become unavailable.
        /// </summary>
        /// <param name="loggingMode">Determines what kind of logging mode will be used to perform all the outputs.</param>
        /// <param name="isBinaryEnabled">Determines if the binary writing is enabled when the logging mode is set to File mode, otherwise it has no effect.</param>
        public void InitiLogging(Log.LogginMode loggingMode, bool isBinaryEnabled)
        {
            this.loggingMode   = loggingMode;
            this.binaryEnabled = isBinaryEnabled;
            switch (this.loggingMode)
            {
            case Log.LogginMode.Console:
                this.fileLogger    = null;
                this.consoleLogger = new ConsoleLog();
                this.log           = this.consoleLogger;
                break;

            case Log.LogginMode.File:
                this.consoleLogger = null;
                this.fileLogger    = new FileLog(this.ioFilePath + FileLog.GetAUniqueFilename("KSPMLog"), this.binaryEnabled);
                this.log           = this.fileLogger;
                break;

            case Log.LogginMode.Buffered:
                this.consoleLogger = null;
                this.fileLogger    = null;
                this.bufferLogger  = new BufferedLog();
                this.log           = this.bufferLogger;
                break;

            ///In this mode no other loggers will be created, so if you need to change the logging mode we have to create a method to handle that action.
            case Log.LogginMode.DevNull:
                this.log = this.nullLogger;
                break;
            }
        }
예제 #3
0
        public bool GenerateScripts(XmlDocument xmlConfig)
        {
            const string header =
                @"-- DDL Scripts generated by VITA DB Tool. 
-- Generated on: {0}
-- Target database: {1}
-- Executed by user {2} on machine {3}.
";

            _config = new DbUpdateConfig(xmlConfig);
            Util.Check(File.Exists(_config.AssemblyPath), "Assembly file '{0}' not found.", _config.AssemblyPath);
            var asm     = Assembly.LoadFrom(_config.AssemblyPath);
            var appType = asm.GetType(_config.AppClassName);

            Util.Check(appType != null, "Type {0} not found in target assembly.");
            // Using NonPublic flag to allow internal constructor;
            // EntityApp must have a parameterless constructor, but it may be made internal, to hide from regular code
            var flags  = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
            var appObj = Activator.CreateInstance(appType, flags, null, null, null);

            Util.Check(appObj != null, "Failed to create instance of class {0}.", _config.AppClassName);
            var entApp = appObj as EntityApp;

            Util.Check(entApp != null, "The target instance of class {0} is not an EntityApp instance.", _config.AppClassName);
            entApp.Init();
            var dbSettings = new DbSettings(_config.Driver, _config.DbOptions, _config.ConnectionString,
                                            upgradeMode: DbUpgradeMode.Always, upgradeOptions: _config.ModelUpdateOptions);

            /*
             * var schemas = entApp.Areas.Select(a => a.Name).ToList();
             * dbSettings.SetSchemas(schemas);
             */

            var log            = new BufferedLog(LogContext.SystemLogContext);
            var dbModelBuilder = new DbModelBuilder(entApp.Model, dbSettings.ModelConfig, log);
            var dbModel        = dbModelBuilder.Build();
            var db             = new Database(dbModel, dbSettings);
            var updateMgr      = new DbUpgradeManager(db, log);
            var upgrades       = updateMgr.BuildUpgradeInfo();
            var ddlSep         = dbModel.Driver.SqlDialect.DDLSeparator;
            var ddl            = string.Join(ddlSep, upgrades.AllScripts.Select(scr => scr.Sql));

            if (string.IsNullOrEmpty(ddl))
            {
                ddl = "-- (No changes detected)";
            }
            var text = string.Format(header, DateTime.Now.ToString("s"), _config.ConnectionString, "(unknown)", Environment.MachineName) + ddl;

            File.WriteAllText(_config.OutputPath, text);
            _feedback.WriteLine(" Generated {0} scripts.", upgrades.AllScripts.Count);
            _feedback.WriteLine(" DDL scripts are saved to '{0}'", _config.OutputPath);
            return(true);
        }
예제 #4
0
        protected override IEnumerable <GameObject> CreateObjs()
        {
            var delay = TimeSpan.FromMilliseconds(800);
            var log   = new BufferedLog {
                BufferDuration = delay
            };
            var presenter  = new UIBattlePresenter(log, AddObj);
            var targetting = new BattleTargetSelection();

            yield return(Entity.Create("Battle UI Presenter")
                         .Add(presenter));

            yield return(Entity.Create("Battle Background", new Transform2 {
                Location = new Vector2(0, -100), Size = new Size2(1600, 1228), ZIndex = BackgroundLayer
            })
                         .Add((o, r) => new Texture(r.LoadTexture("Battle/tek-orange-room.jpg", o))));

            yield return(Entity.Create("Battle Log", new Transform2 {
                Location = new Vector2(150, 50), Size = new Size2(1300, 50), ZIndex = CombatLogLayer
            })
                         .Add((o, r) => new Texture(r.CreateRectangle(Color.DarkBlue, o)))
                         .Add((o, r) => new BorderTexture(r.CreateRectangle(Color.AntiqueWhite, o)))
                         .Add(log)
                         .Add(new TextDisplay {
                Text = () => log.Lines.Last()
            }));

            var char1Battle = BattleCharacter.Create(BattleSide.Gamer, Samples.CreateElectrician());
            var heroDisplay = CharacterDisplay.Create(char1Battle, "Heroes/gareth.png", new Vector2(1200, 350), targetting);

            yield return(heroDisplay);

            var enemy1Battle = BattleCharacter.Create(BattleSide.Enemy, Enemy.CreateLaserDrone());

            yield return(CharacterDisplay.Create(enemy1Battle, "Enemies/drone1.png", new Vector2(200, 350), targetting));

            BattlePresenter.Instance = presenter;
            BattleLog.Instance       = log;
            var battle = Battle.Create(new BattleCardSelectionPresenter(AddObj, targetting), new AIPlayer(), char1Battle, enemy1Battle);

            yield return(Entity.Create("Current Battle")
                         .Add(new CurrentBattle {
                Battle = battle
            }));
        }
예제 #5
0
        public static List <DbUpgradeScript> CompareDatabaseSchemas(DbFirstConfig config, Type modelType)
        {
            var entApp = Activator.CreateInstance(modelType) as EntityApp;

            entApp.Init();
            // important - do not use DbOptions.AutoIndexForeignKeys - which is recommended for MS SQL, but is not helpful here.
            // This will create a bunch of extra indexes on FKs in entities schema and result in extra differences with original schema.
            //  We ignore stored procs
            var dbOptions  = config.Driver.GetDefaultOptions() & ~DbOptions.AutoIndexForeignKeys;
            var dbSettings = new DbSettings(config.Driver, dbOptions, config.ConnectionString,
                                            upgradeMode: DbUpgradeMode.Always,
                                            upgradeOptions: DbUpgradeOptions.UpdateTables | DbUpgradeOptions.UpdateIndexes
                                            );
            //dbSettings.SetSchemas(config.Schemas);
            var log            = new BufferedLog();
            var dbModelBuilder = new DbModelBuilder(entApp.Model, dbSettings.ModelConfig, log);
            var dbModel        = dbModelBuilder.Build();
            var db             = new Database(dbModel, dbSettings);
            var ds             = new DataSource("main", db);
            var upgradeMgr     = new DbUpgradeManager(db, log);
            var upgradeInfo    = upgradeMgr.BuildUpgradeInfo();

            return(upgradeInfo.AllScripts);
        }