public override void Execute() { // Verify all [Required] and [Import]ed properties have valid values. this.ValidateObject(); var application = CurrentElement.Root.As <IApplication>(); var command = CurrentElement.As <ICommand>(); var handlerLinks = application.Design.Services.Service .SelectMany(s => s.Components.Component.SelectMany(c => c.Subscribes.ProcessedCommandLinks.Where(l => l.CommandReference.Value == command))) .ToList(); var senderLinks = application.Design.Services.Service .SelectMany(s => s.Components.Component.SelectMany(c => c.Publishes.CommandLinks.Where(l => l.CommandReference.Value == command))) .ToList(); var relatedComponents = handlerLinks.Select(l => l.Parent.Parent) .Concat(senderLinks.Select(l => l.Parent.Parent)) .Distinct() .ToList(); if (relatedComponents.Count == 0) { return; } var viewModel = new RelatedComponentsPickerViewModel(relatedComponents, command) { Title = "Related Components" }; var picker = WindowFactory.CreateDialog <RelatedComponentsPicker>(viewModel); using (new MouseCursor(Cursors.Arrow)) { if (picker.ShowDialog().GetValueOrDefault()) { foreach (var component in viewModel.SelectedComponents) { component.Delete(); } } foreach (var link in handlerLinks) { link.Delete(); } foreach (var link in senderLinks) { link.Delete(); } } }
public override void Execute() { // Verify all [Required] and [Import]ed properties have valid values. this.ValidateObject(); var application = CurrentElement.Root.As <IApplication>(); var command = CurrentElement.As <ICommand>(); var handlerLinks = application.Design.Services.Service .SelectMany(s => s.Components.Component.SelectMany(c => c.Subscribes.ProcessedCommandLinks.Where(l => l.CommandReference.Value == command))) .ToList(); var senderLinks = application.Design.Services.Service .SelectMany(s => s.Components.Component.SelectMany(c => c.Publishes.CommandLinks.Where(l => l.CommandReference.Value == command))) .ToList(); var relatedComponents = handlerLinks.Select(l => l.Parent.Parent) .Concat(senderLinks.Select(l => l.Parent.Parent)) .Where(c => c != null) .Distinct() .ToList(); tracer.Verbose( "Prompting for confirmation of deletion for command '{0}' with related components {1}", command.InstanceName, string.Join(", ", relatedComponents.Select(c => "'" + c.InstanceName + "'"))); var viewModel = new RelatedComponentsPickerViewModel(relatedComponents, command) { Title = "Delete the component?" }; var picker = WindowFactory.CreateDialog <RelatedComponentsPicker>(viewModel); using (new MouseCursor(Cursors.Arrow)) { if (picker.ShowDialog().GetValueOrDefault()) { var selectedComponents = viewModel.SelectedComponents.ToList(); tracer.Info( "Deleting command '{0}' and related components {1}", command.InstanceName, string.Join(", ", selectedComponents.Select(c => "'" + c.InstanceName + "'"))); foreach (var component in selectedComponents) { component.Delete(); } foreach (var link in handlerLinks) { link.Delete(); } foreach (var link in senderLinks) { link.Delete(); } command.Delete(); } else { tracer.Verbose("Deletion for command '{0}' cancelled", command.InstanceName); } } }