public Generator(ProjectDefinaton project, PatternProject pattern, DbDatabase database, ExSchemaEngine schemaEngine)
 {
     _patternProject = pattern;
     _projectDef = project;
     _database = database;
     _schemaEngine = schemaEngine;
     _optionGenerateUnselectedForeigns = false;
 }
        /// <summary>
        /// Reloads tables and views list from database
        /// </summary>
        public void RefetchDatabaseCache()
        {
            using (DbConnection conn = GetNewConnection())
                using (ExSchemaEngine engine = GetSchemaEngine(conn))
                {
                    StringCollection dbTables, dbViews;

                    // Open the connection
                    conn.Open();

                    // Woot! no error!

                    // the schema engine

                    // shcema engine options
                    engine.SpecificOwner = this.DatabaseProvider == DatabaseProvider.Oracle ?
                                           this.SqlUsername :
                                           this.SchemaName;

                    // Read schema list from db
                    engine.ReadViewsTablesList(out dbTables, out dbViews);

                    List <SelectedTablesType> newTables = new List <SelectedTablesType>();
                    List <SelectedTablesType> newViews  = new List <SelectedTablesType>();

                    // Adding new tables
                    foreach (var tableName in dbTables)
                    {
                        bool added = false;
                        // looking for previous setting
                        foreach (var prevTable in Tables)
                        {
                            if (prevTable.Name == tableName)
                            {
                                newTables.Add(new SelectedTablesType()
                                {
                                    Name     = tableName,
                                    Selected = prevTable.Selected
                                });
                                added = true;
                                break;
                            }
                        }

                        if (added)
                        {
                            continue;
                        }

                        // nothing found, add as not selected
                        newTables.Add(new SelectedTablesType()
                        {
                            Name     = tableName,
                            Selected = false
                        });
                    }

                    // Adding new views
                    foreach (var viewName in dbViews)
                    {
                        bool added = false;

                        // looking for previous settings
                        foreach (var prevView in Views)
                        {
                            if (prevView.Name == viewName)
                            {
                                newViews.Add(new SelectedTablesType()
                                {
                                    Name     = viewName,
                                    Selected = prevView.Selected
                                });
                                added = true;
                                break;
                            }
                        }

                        if (added)
                        {
                            continue;
                        }

                        // nothing found, add as not selected
                        newViews.Add(new SelectedTablesType()
                        {
                            Name     = viewName,
                            Selected = false
                        });
                    }

                    // Replacing the old ones
                    Tables.Clear();
                    Views.Clear();
                    Tables = newTables;
                    Views  = newViews;

                    // sort
                    Views.Sort((x, y) => string.Compare(x.Name, y.Name));
                    Tables.Sort((x, y) => string.Compare(x.Name, y.Name));
                }
        }
Exemple #3
0
        private void UiAction_Generate()
        {
            PleaseWait.ShowPleaseWait("Connecting to database server", true, false);

            using (System.Data.Common.DbConnection conn = _projectDefinition.DbSettions.GetNewConnection())
                using (ExSchemaEngine schemaEngine = _projectDefinition.DbSettions.GetSchemaEngine(conn))
                {
                    // Connection to database
                    conn.Open();

                    // Let application catchup
                    Application.DoEvents();

                    // Reading database
                    PleaseWait.WaitingState = "Reading database schema";

                    // 1 ==========================
                    // Database schema reader
                    var schemaDatabase = new DbDatabase();
                    schemaDatabase.Provider = _projectDefinition.DbSettions.DatabaseProvider;

                    // shcema engine options
                    schemaEngine.SpecificOwner = _projectDefinition.DbSettions.DatabaseProvider == DatabaseProvider.Oracle
                                                 ? _projectDefinition.DbSettions.SqlUsername
                                                 : _projectDefinition.DbSettions.SchemaName;

                    // columns descriptions
                    schemaEngine.ReadColumnsDescription = _projectDefinition.CodeGenSettings.GenerateColumnsDescription;
                    schemaEngine.ReadTablesForeignKeys  = _projectDefinition.CodeGenSettings.GenerateTablesForeignKeys;
                    schemaEngine.ReadConstraintKeys     = _projectDefinition.CodeGenSettings.GenerateConstraintKeys;

                    // only selected tables
                    schemaEngine.OnlyReadSelectedItems = true;
                    schemaEngine.SelectedTables        = _projectDefinition.DbSettions.GetSelectedTablesList();
                    schemaEngine.SelectedViews         = _projectDefinition.DbSettions.GetSelectedViewsList();

                    // read database schema
                    schemaEngine.FillSchema(schemaDatabase);

                    PleaseWait.WaitingState = "Analyzing database schema";
                    // 2 ======================
                    var alanyzer = new SchemaAnalyzer(_projectDefinition, _patternProject, schemaDatabase);
                    alanyzer.AnalyzeAndRename();

                    PleaseWait.WaitingState = "Generating output files";
                    // 3 ==========================
                    // Start the generator
                    var engine = new Generator(_projectDefinition, _patternProject, schemaDatabase, schemaEngine);
                    engine.Generate();

                    // Update last generation
                    _projectDefinition.LastGeneration = DateTime.Now;

                    // 4 ==========================
                    // Reaload the form
                    Refresh_Form();

                    // Abort the please wait
                    PleaseWait.Abort();

                    // Data is modified
                    SetModified(true);

                    // to active tab
                    tabMainProject.SelectedTab = tabGenFiles;
                }
        }