예제 #1
0
        private static CreateSettingsModel ConfigureSettingsModel(NewDatabase newDatabase)
        {
            CreateSettingsModel bundlesModel;

            bundlesModel = new CreateSettingsModel();

            if (newDatabase.Quotas.IsChecked == true)
            {
                AddSection(bundlesModel, new QuotaSettingsSectionModel()
                {
                    MaxSize  = 50,
                    WarnSize = 45,
                    MaxDocs  = 10000,
                    WarnDocs = 8000,
                });
            }
            if (newDatabase.Versioning.IsChecked == true)
            {
                AddSection(bundlesModel, new VersioningSettingsSectionModel(true)
                {
                    VersioningConfigurations =
                    {
                        new VersioningConfiguration()
                        {
                            Exclude      = false,
                            Id           = "Raven/Versioning/DefaultConfiguration",
                            MaxRevisions = 5
                        }
                    }
                });
            }
            return(bundlesModel);
        }
예제 #2
0
 private static void AddSection(CreateSettingsModel bundlesModel, SettingsSectionModel section)
 {
     bundlesModel.Sections.Add(section);
     if (bundlesModel.SelectedSection.Value == null)
     {
         bundlesModel.SelectedSection.Value = section;
     }
 }
예제 #3
0
        private void HandleBundleAfterCreation(CreateSettingsModel settingsModel, string databaseName, string encryptionKey)
        {
            var session = ApplicationModel.Current.Server.Value.DocumentStore.OpenAsyncSession(databaseName);

            var versioningSection = settingsModel.GetSection <VersioningSettingsSectionModel>();

            if (versioningSection != null)
            {
                StoreVersioningData(versioningSection.VersioningConfigurations, session);
            }

            var replicationSection = settingsModel.GetSection <ReplicationSettingsSectionModel>();

            if (replicationSection != null)
            {
                var replicationDocument = new ReplicationDocument();
                foreach (var replicationDestination in replicationSection.ReplicationDestinations
                         .Where(replicationDestination => !string.IsNullOrWhiteSpace(replicationDestination.Url) || !string.IsNullOrWhiteSpace(replicationDestination.ClientVisibleUrl)))
                {
                    replicationDocument.Destinations.Add(replicationDestination);
                }

                session.Store(replicationDocument);
            }

            var sqlReplicationSettings = settingsModel.GetSection <SqlReplicationSettingsSectionModel>();

            if (sqlReplicationSettings != null)
            {
                sqlReplicationSettings.UpdateIds();

                foreach (var sqlReplicationConfig in sqlReplicationSettings.SqlReplicationConfigs)
                {
                    session.Store(sqlReplicationConfig);
                }
            }


            var authorizationSection = settingsModel.GetSection <AuthorizationSettingsSectionModel>();

            if (authorizationSection != null)
            {
                StoreAuthorizationData(authorizationSection, session);
            }

            session.SaveChangesAsync();

            if (!string.IsNullOrEmpty(encryptionKey))
            {
                new ShowEncryptionMessage(encryptionKey).Show();
            }
        }
예제 #4
0
        public override void Execute(object parameter)
        {
            new NewDatabase().ShowAsync()
            .ContinueOnSuccessInTheUIThread(newDatabase =>
            {
                var databaseName = newDatabase.DbName.Text;

                if (Path.GetInvalidPathChars().Any(databaseName.Contains))
                {
                    throw new ArgumentException("Cannot create a database with invalid path characters: " + databaseName);
                }
                if (ApplicationModel.Current.Server.Value.Databases.Count(s => s == databaseName) != 0)
                {
                    throw new ArgumentException("A database with the name " + databaseName + " already exists");
                }

                AssertValidName(databaseName);

                var bundlesModel    = new CreateSettingsModel();
                var bundlesSettings = new List <ChildWindow>();
                if (newDatabase.Encryption.IsChecked == true)
                {
                    bundlesSettings.Add(new EncryptionSettings());
                }
                if (newDatabase.Quotas.IsChecked == true || newDatabase.Versioning.IsChecked == true)
                {
                    bundlesModel = ConfigureSettingsModel(newDatabase);

                    var bundleView = new SettingsDialog()
                    {
                        DataContext = bundlesModel
                    };

                    var bundlesSettingsWindow = new ChildWindow()
                    {
                        Title   = "Setup bundles",
                        Content = bundleView,
                    };

                    bundlesSettingsWindow.KeyDown += (sender, args) =>
                    {
                        if (args.Key == Key.Escape)
                        {
                            bundlesSettingsWindow.DialogResult = false;
                        }
                    };

                    bundlesSettings.Add(bundlesSettingsWindow);
                }

                new Wizard(bundlesSettings).StartAsync()
                .ContinueOnSuccessInTheUIThread(bundlesData =>
                {
                    ApplicationModel.Current.AddNotification(new Notification("Creating database: " + databaseName));
                    var settings        = UpdateSettings(newDatabase, newDatabase, bundlesModel);
                    var securedSettings = UpdateSecuredSettings(bundlesData);

                    var databaseDocument = new DatabaseDocument
                    {
                        Id              = newDatabase.DbName.Text,
                        Settings        = settings,
                        SecuredSettings = securedSettings
                    };

                    string encryptionKey   = null;
                    var encryptionSettings = bundlesData.FirstOrDefault(window => window is EncryptionSettings) as EncryptionSettings;
                    if (encryptionSettings != null)
                    {
                        encryptionKey = encryptionSettings.EncryptionKey.Text;
                    }

                    DatabaseCommands.CreateDatabaseAsync(databaseDocument).ContinueOnSuccess(
                        () => DatabaseCommands.ForDatabase(databaseName).EnsureSilverlightStartUpAsync())
                    .ContinueOnSuccessInTheUIThread(() =>
                    {
                        var model = parameter as DatabasesListModel;
                        if (model != null)
                        {
                            model.ForceTimerTicked();
                        }
                        ApplicationModel.Current.AddNotification(
                            new Notification("Database " + databaseName + " created"));

                        HandleBundleAfterCreation(bundlesModel, databaseName, encryptionKey);

                        ExecuteCommand(new ChangeDatabaseCommand(), databaseName);
                    })
                    .Catch();
                });
            })
            .Catch();
        }
예제 #5
0
        private static Dictionary <string, string> UpdateSettings(NewDatabase newDatabase, NewDatabase bundles, CreateSettingsModel settingsData)
        {
            var settings = new Dictionary <string, string>
            {
                {
                    Constants.RavenDataDir, newDatabase.ShowAdvanced.IsChecked == true
                                                                ? newDatabase.DbPath.Text
                                                                : Path.Combine("~", Path.Combine("Databases", newDatabase.DbName.Text))
                },
                { Constants.ActiveBundles, string.Join(";", bundles.Bundles) }
            };

            if (!string.IsNullOrWhiteSpace(newDatabase.LogsPath.Text))
            {
                settings.Add(Constants.RavenLogsPath, newDatabase.LogsPath.Text);
            }
            if (!string.IsNullOrWhiteSpace(newDatabase.IndexPath.Text))
            {
                settings.Add(Constants.RavenIndexPath, newDatabase.IndexPath.Text);
            }

            var quotasData = settingsData.GetSection <QuotaSettingsSectionModel>();

            if (quotasData != null)
            {
                settings[Constants.DocsHardLimit]     = (quotasData.MaxDocs).ToString(CultureInfo.InvariantCulture);
                settings[Constants.DocsSoftLimit]     = (quotasData.WarnDocs).ToString(CultureInfo.InvariantCulture);
                settings[Constants.SizeHardLimitInKB] = (quotasData.MaxSize * 1024).ToString(CultureInfo.InvariantCulture);
                settings[Constants.SizeSoftLimitInKB] = (quotasData.WarnSize * 1024).ToString(CultureInfo.InvariantCulture);
            }

            return(settings);
        }