public override void Execute(object parameter) { patchModel.ClearQueryError(); AskUser.ConfirmationAsync("Patch Documents", "Are you sure you want to apply this patch to all selected documents?") .ContinueWhenTrueInTheUIThread(() => { var values = patchModel.GetValues(); if (values == null) { return; } var request = new ScriptedPatchRequest { Script = patchModel.Script.CurrentSnapshot.Text, Values = values }; var selectedItems = patchModel.QueryResults.ItemSelection.GetSelectedItems(); var commands = new ICommandData[selectedItems.Count()]; var counter = 0; foreach (var item in selectedItems) { commands[counter] = new ScriptedPatchCommandData { Patch = request, Key = item.Item.Id }; counter++; } ApplicationModel.Database.Value.AsyncDatabaseCommands .BatchAsync(commands) .ContinueOnUIThread(t => { if (t.IsFaulted) { patchModel.HandlePatchError(t.Exception); } }) .ContinueOnSuccessInTheUIThread(() => ApplicationModel.Database.Value .AsyncDatabaseCommands .GetAsync(patchModel.SelectedItem) .ContinueOnSuccessInTheUIThread(doc => { if (doc != null) { patchModel.OriginalDoc.SetText(doc.ToJson().ToString()); patchModel.NewDoc.SetText(""); patchModel.ShowAfterPrompt = true; } else { patchModel.OriginalDoc.SetText(""); patchModel.NewDoc.SetText(""); patchModel.ShowAfterPrompt = true; patchModel.ShowBeforeAndAfterPrompt = true; } })); }); }
public override void Execute(object parameter) { var dbName = ApplicationModel.Database.Value.Name; if (dbName == Constants.SystemDatabase) { dbName = null; } AskUser.SelectItem("Load", "Choose saved patching to load", () => ApplicationModel.Current.Server.Value.DocumentStore.OpenAsyncSession(dbName).Advanced. LoadStartingWithAsync <PatchDocument>("Studio/Patch/").ContinueWith( task => { IList <string> objects = task.Result.Select(document => document.Id.Substring("Studio/Patch/".Length)).ToList(); return(objects); })) .ContinueOnSuccessInTheUIThread(result => ApplicationModel.Current.Server.Value.DocumentStore.OpenAsyncSession(dbName). LoadAsync <PatchDocument>("Studio/Patch/" + result) .ContinueOnSuccessInTheUIThread(patch => { if (patch == null) { ApplicationModel.Current.Notifications.Add(new Notification("Could not find Patch document named " + result, NotificationLevel.Error)); } else { patchModel.KeepSelectedItem = true; patchModel.SelectedItem = patch.SelectedItem; patchModel.PatchOn = patch.PatchOnOption; patchModel.QueryDoc.SetText(patch.Query); patchModel.Script.SetText(patch.Script); patchModel.Values = new ObservableCollection <PatchValue>(patch.Values); patchModel.UpdateDoc(result); patchModel.ClearQueryError(); } })); }
public override void Execute(object parameter) { AskUser.ConfirmationAsync("Patch Documents", "Are you sure you want to apply this patch to all matching documents?") .ContinueWhenTrueInTheUIThread(() => { patchModel.ClearQueryError(); var values = patchModel.GetValues(); if (values == null) { return; } var request = new ScriptedPatchRequest { Script = patchModel.Script.CurrentSnapshot.Text, Values = values }; patchModel.InProcess.Value = true; switch (patchModel.PatchOn) { case PatchOnOptions.Document: var commands = new ICommandData[1]; commands[0] = new ScriptedPatchCommandData { Patch = request, Key = patchModel.SelectedItem }; ApplicationModel.Database.Value.AsyncDatabaseCommands.BatchAsync(commands) .ContinueOnUIThread(t => { if (t.IsFaulted) { patchModel.HandlePatchError(t.Exception); } }) .ContinueOnSuccessInTheUIThread( () => ApplicationModel.Database.Value.AsyncDatabaseCommands.GetAsync(patchModel.SelectedItem). ContinueOnSuccessInTheUIThread(doc => { patchModel.OriginalDoc.SetText(doc.ToJson().ToString()); patchModel.NewDoc.SetText(""); patchModel.ShowAfterPrompt = true; })) .Finally(() => patchModel.InProcess.Value = false); break; case PatchOnOptions.Collection: ApplicationModel.Database.Value.AsyncDatabaseCommands.UpdateByIndex(PatchModel.CollectionsIndex, new IndexQuery { Query = "Tag:" + patchModel.SelectedItem }, request) .ContinueOnSuccessInTheUIThread(() => patchModel.UpdateCollectionSource()) .ContinueOnUIThread(t => { if (t.IsFaulted) { patchModel.HandlePatchError(t.Exception); } }) .Finally(() => patchModel.InProcess.Value = false); break; case PatchOnOptions.Index: ApplicationModel.Database.Value.AsyncDatabaseCommands.UpdateByIndex(patchModel.SelectedItem, new IndexQuery { Query = patchModel.QueryDoc.CurrentSnapshot.Text }, request) .ContinueOnSuccessInTheUIThread(() => patchModel.UpdateCollectionSource()) .ContinueOnUIThread(t => { if (t.IsFaulted) { patchModel.HandlePatchError(t.Exception); } }) .Finally(() => patchModel.InProcess.Value = false); break; } }); }
public override void Execute(object parameter) { patchModel.ClearQueryError(); var values = patchModel.GetValues(); if (values == null) { return; } var request = new ScriptedPatchRequest { Script = patchModel.Script.CurrentSnapshot.Text, Values = values }; var commands = new ICommandData[1]; switch (patchModel.PatchOn) { case PatchOnOptions.Document: ApplicationModel.Database.Value.AsyncDatabaseCommands.GetAsync(patchModel.SelectedItem). ContinueOnSuccessInTheUIThread(doc => patchModel.OriginalDoc.SetText(doc.ToJson().ToString())); commands[0] = new ScriptedPatchCommandData { Patch = request, Key = patchModel.SelectedItem, DebugMode = true }; break; case PatchOnOptions.Collection: case PatchOnOptions.Index: var selectedItem = patchModel.QueryResults.ItemSelection.GetSelectedItems().FirstOrDefault(); if (selectedItem == null || !selectedItem.IsRealized) { return; } patchModel.OriginalDoc.SetText(selectedItem.Item.Document.ToJson().ToString()); var docId = selectedItem.Item.Document.Key; commands[0] = new ScriptedPatchCommandData { Patch = request, Key = docId, DebugMode = true }; break; } patchModel.InProcess.Value = true; ApplicationModel.Database.Value.AsyncDatabaseCommands.BatchAsync(commands) .ContinueOnSuccessInTheUIThread(batch => patchModel.NewDoc.SetText(batch[0].AdditionalData.ToString())) .ContinueOnUIThread(t => { if (t.IsFaulted) { patchModel.HandlePatchError(t.Exception); } }) .Finally(() => patchModel.InProcess.Value = false); patchModel.ShowBeforeAndAfterPrompt = false; patchModel.ShowAfterPrompt = false; }