private void _buttonNewDatabase_Click(object sender, RoutedEventArgs e)
        {
            OpenControls.Wpf.Serialisation.RegistryItemSerialiser        registryItemSerialiser = new OpenControls.Wpf.Serialisation.RegistryItemSerialiser(_keyPath);
            OpenControls.Wpf.DatabaseDialogs.Model.DatabaseConfiguration databaseConfiguration  = new OpenControls.Wpf.DatabaseDialogs.Model.DatabaseConfiguration(registryItemSerialiser);
            if (registryItemSerialiser.OpenKey())
            {
                databaseConfiguration.Load();
            }

            OpenControls.Wpf.DatabaseDialogs.ViewModel.NewDatabaseViewModel newDatabaseViewModel = new OpenControls.Wpf.DatabaseDialogs.ViewModel.NewDatabaseViewModel(databaseConfiguration);
            OpenControls.Wpf.DatabaseDialogs.View.NewDatabaseView           newDatabaseView      =
                new OpenControls.Wpf.DatabaseDialogs.View.NewDatabaseView(new OpenControls.Wpf.DatabaseDialogs.Model.Encryption());
            newDatabaseView.DataContext = newDatabaseViewModel;
            if (newDatabaseView.ShowDialog() != true)
            {
                return;
            }
            if (!registryItemSerialiser.IsOpen)
            {
                registryItemSerialiser.CreateKey();
            }
            databaseConfiguration.Save();
            registryItemSerialiser.Close();

            try
            {
                OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider databaseProvider = (OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider)newDatabaseViewModel.SelectedDatabaseProvider;
                if (databaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.SQLite)
                {
                    SQLiteDatabase.CreateDatabase(this, newDatabaseViewModel.SQLite_Folder, newDatabaseViewModel.SQLite_DatabaseName);
                    IDatabaseHost.IConfigurationStore = new DBStore.SQLiteConfigurationStore(IDatabaseHost.Database);
                    IDatabaseHost.ISpeciesStore       = new DBStore.SQLiteSpeciesStore(IDatabaseHost.Database);
                    IDatabaseHost.IImagePathsStore    = new DBStore.SQLiteImagePathsStore(IDatabaseHost.Database);
                    IDatabaseHost.IImageStore         = new DBStore.SQLiteImageStore(IDatabaseHost.Database);
                }
                else if (databaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.MicrosoftSQLServer)
                {
                    string server =
                        (newDatabaseViewModel.SqlServerInstances.Count > 0) ?
                        newDatabaseViewModel.SqlServerInstances[newDatabaseViewModel.SelectedSqlServerInstance] :
                        null;
                    SQLServerDatabase.CreateDatabase(
                        this,
                        server,
                        newDatabaseViewModel.SQLServer_UseWindowsAuthentication,
                        newDatabaseViewModel.SQLServer_UserName,
                        newDatabaseViewModel.SQLServer_Password,
                        newDatabaseViewModel.SQLServer_Folder,
                        newDatabaseViewModel.SQLServer_Filename);
                    IDatabaseHost.IConfigurationStore = new DBStore.SQLServerConfigurationStore(IDatabaseHost.Database);
                    IDatabaseHost.ISpeciesStore       = new DBStore.SQLServerSpeciesStore(IDatabaseHost.Database);
                    IDatabaseHost.IImagePathsStore    = new DBStore.SQLServerImagePathsStore(IDatabaseHost.Database);
                    IDatabaseHost.IImageStore         = new DBStore.SQLServerImageStore(IDatabaseHost.Database);
                }
                else if (databaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.PostGreSQL)
                {
                    PostgreSQLDatabase.CreateDatabase(this, newDatabaseViewModel.PostgreSQL_IPAddress, newDatabaseViewModel.PostgreSQL_Port, newDatabaseViewModel.PostgreSQL_UseWindowsAuthentication, newDatabaseViewModel.PostgreSQL_UserName, newDatabaseViewModel.PostgreSQL_Password, newDatabaseViewModel.PostgreSQL_DatabaseName);
                    IDatabaseHost.IConfigurationStore = new DBStore.PostgreSQLConfigurationStore(IDatabaseHost.Database);
                    IDatabaseHost.ISpeciesStore       = new DBStore.PostgreSQLSpeciesStore(IDatabaseHost.Database);
                    IDatabaseHost.IImagePathsStore    = new DBStore.PostgreSQLImagePathsStore(IDatabaseHost.Database);
                    IDatabaseHost.IImageStore         = new DBStore.PostgreSQLImageStore(IDatabaseHost.Database);
                }
                else if (databaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.MySQL)
                {
                    MySQLDatabase.CreateDatabase(this, newDatabaseViewModel.MySQL_IPAddress, newDatabaseViewModel.MySQL_Port, newDatabaseViewModel.MySQL_UseWindowsAuthentication, newDatabaseViewModel.MySQL_UserName, newDatabaseViewModel.MySQL_Password, newDatabaseViewModel.MySQL_DatabaseName);
                    IDatabaseHost.IConfigurationStore = new DBStore.MySQLConfigurationStore(IDatabaseHost.Database);
                    IDatabaseHost.ISpeciesStore       = new DBStore.MySQLSpeciesStore(IDatabaseHost.Database);
                    IDatabaseHost.IImagePathsStore    = new DBStore.MySQLImagePathsStore(IDatabaseHost.Database);
                    IDatabaseHost.IImageStore         = new DBStore.MySQLImageStore(IDatabaseHost.Database);
                }
                else
                {
                    throw new Exception("Unsupported database type");
                }

                IDatabaseHost.IConfigurationStore.CreateTable();
                IDatabaseHost.IConfigurationStore.Initialise();
                IDatabaseHost.ISpeciesStore.CreateTable();
                IDatabaseHost.IImagePathsStore.CreateTable();
                IDatabaseHost.IImageStore.CreateTable();
            }
            catch (Exception exception)
            {
                System.Windows.Forms.MessageBox.Show(exception.Message);
                return;
            }

            ShowSpeciesListView(IDatabaseHost.Database);
        }
Exemple #2
0
        private bool NewDatabase(out MycoKeyCreator.Library.Database.IDatabase iDatabase, out MycoKeyCreator.Library.Database.KeyManager keyManager)
        {
            iDatabase  = null;
            keyManager = null;

            OpenControls.Wpf.Serialisation.RegistryItemSerialiser        registryItemSerialiser = new OpenControls.Wpf.Serialisation.RegistryItemSerialiser(_keyPath);
            OpenControls.Wpf.DatabaseDialogs.Model.DatabaseConfiguration databaseConfiguration  = new OpenControls.Wpf.DatabaseDialogs.Model.DatabaseConfiguration(registryItemSerialiser);
            if (registryItemSerialiser.OpenKey())
            {
                databaseConfiguration.Load();
            }

            OpenControls.Wpf.DatabaseDialogs.ViewModel.NewDatabaseViewModel newDatabaseViewModel = new OpenControls.Wpf.DatabaseDialogs.ViewModel.NewDatabaseViewModel(databaseConfiguration);
            OpenControls.Wpf.DatabaseDialogs.View.NewDatabaseView           newDatabaseView      =
                new OpenControls.Wpf.DatabaseDialogs.View.NewDatabaseView(new OpenControls.Wpf.DatabaseDialogs.Model.Encryption());
            newDatabaseView.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            newDatabaseView.Owner       = this;
            newDatabaseView.DataContext = newDatabaseViewModel;
            if (newDatabaseView.ShowDialog() != true)
            {
                return(false);
            }
            if (!registryItemSerialiser.IsOpen)
            {
                registryItemSerialiser.CreateKey();
            }
            databaseConfiguration.Save();
            registryItemSerialiser.Close();

            try
            {
                OpenControls.Wpf.DatabaseDialogs.Model.Encryption encryption = new OpenControls.Wpf.DatabaseDialogs.Model.Encryption();
                if (newDatabaseViewModel.SelectedDatabaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.MicrosoftSQLServer)
                {
                    MycoKeyCreator.Library.PetaPocoAdapter.SQLServerDatabaseFactory.CreateDatabase(
                        out iDatabase,
                        newDatabaseViewModel.SelectedSqlServerInstance,
                        newDatabaseViewModel.SQLServer_UseWindowsAuthentication,
                        newDatabaseViewModel.SQLServer_UserName,
                        encryption.Decrypt(newDatabaseViewModel.SQLServer_Password),
                        newDatabaseViewModel.SQLServer_Folder,
                        newDatabaseViewModel.SQLServer_Filename);
                }
                else if (newDatabaseViewModel.SelectedDatabaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.MySQL)
                {
                    MycoKeyCreator.Library.PetaPocoAdapter.MySQLDatabaseFactory.CreateDatabase(
                        out iDatabase,
                        newDatabaseViewModel.MySQL_IPAddress,
                        newDatabaseViewModel.MySQL_Port,
                        newDatabaseViewModel.MySQL_UseWindowsAuthentication,
                        newDatabaseViewModel.MySQL_UserName,
                        encryption.Decrypt(newDatabaseViewModel.MySQL_Password),
                        newDatabaseViewModel.MySQL_DatabaseName);
                }
                else if (newDatabaseViewModel.SelectedDatabaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.PostGreSQL)
                {
                    MycoKeyCreator.Library.PetaPocoAdapter.MySQLDatabaseFactory.CreateDatabase(
                        out iDatabase,
                        newDatabaseViewModel.PostgreSQL_IPAddress,
                        newDatabaseViewModel.PostgreSQL_Port,
                        newDatabaseViewModel.PostgreSQL_UseWindowsAuthentication,
                        newDatabaseViewModel.PostgreSQL_UserName,
                        encryption.Decrypt(newDatabaseViewModel.PostgreSQL_Password),
                        newDatabaseViewModel.PostgreSQL_DatabaseName);
                }
                else if (newDatabaseViewModel.SelectedDatabaseProvider == OpenControls.Wpf.DatabaseDialogs.Model.DatabaseProvider.SQLite)
                {
                    MycoKeyCreator.Library.PetaPocoAdapter.SQLiterDatabaseFactory.CreateDatabase(
                        out iDatabase,
                        newDatabaseViewModel.SQLite_Folder,
                        newDatabaseViewModel.SQLite_DatabaseName);
                }
                else
                {
                    throw new Exception("Unsupported database type");
                }

                keyManager = MycoKeyCreator.Library.PetaPocoAdapter.KeyManagerFactory.BuildKeyManager(iDatabase);
            }
            catch (Exception exception)
            {
                System.Windows.Forms.MessageBox.Show(exception.Message);
                return(false);
            }

            return(true);
        }