private void buttonFetch_Click(object sender, EventArgs e)
        {
            string      csprojFilename = textBoxCsProjFile.Text;
            XmlDocument doc            = new XmlDocument();

            doc.LoadXml(fileController.ReadAllText(csprojFilename));
            ArchAngel.Providers.EntityModel.Model.MappingLayer.MappingSet mappingSet = null;

            GetProject(mappingSet, doc, csprojFilename);
        }
Пример #2
0
        public FormDatabase(IDatabase database, ArchAngel.Providers.EntityModel.Model.MappingLayer.MappingSet mappingSet)
        {
            InitializeComponent();

            Instance = this;

            ArchAngel.Interfaces.SharedData.AboutToSave += new EventHandler(SharedData_AboutToSave);
            modelChanges1.RefreshCalled += new EventHandler(RefreshWasCalled);

            labelTablePrefixes.Top    = ucDatabaseInformation1.BottomOfControls + 20;
            textBoxTablePrefixes.Top  = labelTablePrefixes.Top;
            labelColumnPrefixes.Top   = textBoxTablePrefixes.Bottom + 5;
            textBoxColumnPrefixes.Top = labelColumnPrefixes.Top;

            labelTableSuffixes.Top    = textBoxColumnPrefixes.Bottom + 5;
            textBoxTableSuffixes.Top  = labelTableSuffixes.Top;
            labelColumnSuffixes.Top   = textBoxTableSuffixes.Bottom + 5;
            textBoxColumnSuffixes.Top = labelColumnSuffixes.Top;

            buttonResync.Top         = textBoxColumnSuffixes.Bottom + 20;
            buttonTestConnection.Top = buttonResync.Top;

            if (DesignMode)
            {
                return;
            }

            superTabConnectionSettings.SelectedTab = superTabItemConnection;
            MappingSet = mappingSet;
            ucDatabaseInformation1.UsernameChanged             += (sender, e) => UsernameChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.PasswordChanged             += (sender, e) => PasswordChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.SelectedDatabaseChanged     += (sender, e) => SelectedDatabaseChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.SelectedDatabaseTypeChanged += (sender, e) => SelectedDatabaseTypeChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.ServerNameChanged           += (sender, e) => ServerNameChanged.RaiseEvent(sender, e);

            Database = database;

            if (Database != null)
            {
                labelHeader.Text = Database.Name;
            }
            else
            {
                labelHeader.Text = "No Database Selected";
            }

            PopulatePrefixes();

            buttonImport.Enabled = false;
        }
        private void GetProject(ArchAngel.Providers.EntityModel.Model.MappingLayer.MappingSet mappingSet, XmlDocument csprojDocument, string filename)
        {
            var hbmFiles = ProjectLoader.GetHBMFilesFromCSProj(new CSProjFile(csprojDocument, filename), fileController);

            // Load HBMs
            var mappings = hbmFiles.Select(f => MappingFiles.Version_2_2.Utility.Open(f)).ToList();

            // Parse the CSharp files
            var          csharpFiles  = ProjectLoader.GetCSharpFilesFromCSProj(new CSProjFile(csprojDocument, filename), fileController);
            ParseResults parseResults = ParseResults.ParseCSharpFiles(csharpFiles);

            //foreach (ArchAngel.Providers.CodeProvider.DotNet.Class c in parseResults.parsedClasses)
            //{
            //}
            //mappingSet.CodeParseResults = parseResults;

            // Clear the current mapped class.
            //mappingSet.EntitySet.Entities.ForEach(e => e.MappedClass = null);

            // Map the Entity objects to the parsed Class
            var entities = mappingSet.EntitySet.Entities.ToDictionary(e => e.Name);

            foreach (var hm in mappings)
            {
                foreach (var hClass in hm.Classes())
                {
                    var fullClassName  = HibernateMappingHelper.ResolveFullClassName(hClass, hm);
                    var shortClassName = HibernateMappingHelper.ResolveShortClassName(hClass, hm);

                    // try find the entity
                    Entity entity;
                    if (entities.TryGetValue(shortClassName, out entity))
                    {
                        // try find class in parse results
                        var parsedClass = parseResults.FindClass(fullClassName, entity.Properties.Select(p => p.Name).ToList());
                        entity.MappedClass = parsedClass;
                    }
                    else
                    {
                        //Log.InfoFormat("Could not find entity for class named {0} in the NHibernate project on disk.", shortClassName);
                    }
                }
            }
        }
Пример #4
0
        public FormDatabase(IDatabase database, ArchAngel.Providers.EntityModel.Model.MappingLayer.MappingSet mappingSet)
        {
            InitializeComponent();

            Instance = this;

            ArchAngel.Interfaces.SharedData.AboutToSave += new EventHandler(SharedData_AboutToSave);
            modelChanges1.RefreshCalled += new EventHandler(RefreshWasCalled);

            labelTablePrefixes.Top = ucDatabaseInformation1.BottomOfControls + 20;
            textBoxTablePrefixes.Top = labelTablePrefixes.Top;
            labelColumnPrefixes.Top = textBoxTablePrefixes.Bottom + 5;
            textBoxColumnPrefixes.Top = labelColumnPrefixes.Top;

            labelTableSuffixes.Top = textBoxColumnPrefixes.Bottom + 5;
            textBoxTableSuffixes.Top = labelTableSuffixes.Top;
            labelColumnSuffixes.Top = textBoxTableSuffixes.Bottom + 5;
            textBoxColumnSuffixes.Top = labelColumnSuffixes.Top;

            buttonResync.Top = textBoxColumnSuffixes.Bottom + 20;
            buttonTestConnection.Top = buttonResync.Top;

            if (DesignMode)
                return;

            superTabConnectionSettings.SelectedTab = superTabItemConnection;
            MappingSet = mappingSet;
            ucDatabaseInformation1.UsernameChanged += (sender, e) => UsernameChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.PasswordChanged += (sender, e) => PasswordChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.SelectedDatabaseChanged += (sender, e) => SelectedDatabaseChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.SelectedDatabaseTypeChanged += (sender, e) => SelectedDatabaseTypeChanged.RaiseEvent(sender, e);
            ucDatabaseInformation1.ServerNameChanged += (sender, e) => ServerNameChanged.RaiseEvent(sender, e);

            Database = database;

            if (Database != null)
                labelHeader.Text = Database.Name;
            else
                labelHeader.Text = "No Database Selected";

            PopulatePrefixes();

            buttonImport.Enabled = false;
        }
Пример #5
0
        private void RefreshSchema()
        {
            // Note: this is only ok because this method only runs on the UI thread.
            // Two instances of it will not run at once, so this is not a race condition.
            // The moment it can run from another thread, this assumption is false and the
            // code is incorrect.
            if (RefreshingSchema)
            {
                return;
            }

            Cursor = Cursors.WaitCursor;
            databaseLock.WaitOne();
            RefreshingSchema = true;
            IDatabaseLoader loader = CreateDatabaseLoader();

            // Test connection first
            if (TestConnection(false) == false)
            {
                databaseLock.Set();
                RefreshingSchema = false;
                Cursor           = Cursors.Default;
                return;
            }
            labelNoChanges.Visible       = false;
            labelNoChangesExport.Visible = false;

            Thread thread = new Thread(
                () =>
            {
                try
                {
                    List <string> schemasToLimit = Database.Tables.Union(Database.Views).Select(t => t.Schema).Distinct().ToList();
                    IDatabase newDb = loader.LoadDatabase(loader.DatabaseObjectsToFetch, schemasToLimit);
                    new DatabaseProcessor().CreateRelationships(newDb);

                    if (Database.Name == "New Database" && Database.Tables.Count == 0)
                    {
                        var mappingSet = new EntityModel.Controller.MappingLayer.MappingProcessor(new EntityModel.Controller.MappingLayer.OneToOneEntityProcessor())
                                         .CreateOneToOneMapping(newDb, Database.MappingSet.TablePrefixes, Database.MappingSet.ColumnPrefixes, Database.MappingSet.TableSuffixes, Database.MappingSet.ColumnSuffixes);

                        MappingSet = mappingSet;
                        _Database  = newDb;

                        if (NewDatabaseCreated != null)
                        {
                            NewDatabaseCreated(mappingSet);
                        }
                    }
                    else
                    {
                        var result = new DatabaseProcessor().MergeDatabases(Database, newDb);

                        if (result.AnyChanges)
                        {
                            databaseChanges1.Fill(result, Database, newDb);
                            modelChanges1.Fill(result, Database, newDb);
                            SetControlEnabled(buttonImport, true);
                        }
                        else
                        {
                            ShowNoChangesLabel();
                        }
                    }
                }
                finally
                {
                    databaseLock.Set();
                    RefreshingSchema = false;
                    SetCursor(Cursors.Default);
                }
            });

            thread.Start();
        }
Пример #6
0
        private void RefreshSchema()
        {
            // Note: this is only ok because this method only runs on the UI thread.
            // Two instances of it will not run at once, so this is not a race condition.
            // The moment it can run from another thread, this assumption is false and the
            // code is incorrect.
            if (RefreshingSchema)
                return;

            Cursor = Cursors.WaitCursor;
            databaseLock.WaitOne();
            RefreshingSchema = true;
            IDatabaseLoader loader = CreateDatabaseLoader();

            // Test connection first
            if (TestConnection(false) == false)
            {
                databaseLock.Set();
                RefreshingSchema = false;
                Cursor = Cursors.Default;
                return;
            }
            labelNoChanges.Visible = false;
            labelNoChangesExport.Visible = false;

            Thread thread = new Thread(
                () =>
                {
                    try
                    {
                        List<string> schemasToLimit = Database.Tables.Union(Database.Views).Select(t => t.Schema).Distinct().ToList();
                        IDatabase newDb = loader.LoadDatabase(loader.DatabaseObjectsToFetch, schemasToLimit);
                        new DatabaseProcessor().CreateRelationships(newDb);

                        if (Database.Name == "New Database" && Database.Tables.Count == 0)
                        {
                            var mappingSet = new EntityModel.Controller.MappingLayer.MappingProcessor(new EntityModel.Controller.MappingLayer.OneToOneEntityProcessor())
                                .CreateOneToOneMapping(newDb, Database.MappingSet.TablePrefixes, Database.MappingSet.ColumnPrefixes, Database.MappingSet.TableSuffixes, Database.MappingSet.ColumnSuffixes);

                            MappingSet = mappingSet;
                            _Database = newDb;

                            if (NewDatabaseCreated != null)
                                NewDatabaseCreated(mappingSet);
                        }
                        else
                        {
                            var result = new DatabaseProcessor().MergeDatabases(Database, newDb);

                            if (result.AnyChanges)
                            {
                                databaseChanges1.Fill(result, Database, newDb);
                                modelChanges1.Fill(result, Database, newDb);
                                SetControlEnabled(buttonImport, true);
                            }
                            else
                                ShowNoChangesLabel();
                        }
                    }
                    finally
                    {
                        databaseLock.Set();
                        RefreshingSchema = false;
                        SetCursor(Cursors.Default);
                    }
                });
            thread.Start();
        }