public override void Execute() { // Verify all [Required] and [Import]ed properties have valid values. this.ValidateObject(); var endpoint = CurrentElement.As <IAbstractEndpoint>(); var app = CurrentElement.Root.As <IApplication>(); // Get available events var elements = app.Design.Services.Service .Select(s => Tuple.Create( s.InstanceName, (ICollection <string>)s.Contract.Events.Event.Select(x => x.InstanceName).OrderBy(c => c).ToList())) .OrderBy(t => t.Item1).ToList(); var viewModel = new ElementHierarchyPickerViewModel(elements) { MasterName = "Service Name", SlaveName = "Event Name", Title = "Publish Event" }; var picker = WindowFactory.CreateDialog <ElementHierarchyPicker>(viewModel); using (new MouseCursor(Cursors.Arrow)) { if (picker.ShowDialog().GetValueOrDefault()) { var selectedService = viewModel.SelectedMasterItem; var selectedEvent = viewModel.SelectedSlaveItem; var service = app.Design.Services.Service.FirstOrDefault(x => x.InstanceName == selectedService); if (service == null) { service = app.Design.Services.CreateService(selectedService); } var @event = service.Contract.Events.Event.FirstOrDefault(x => x.InstanceName == selectedEvent); if (@event == null) { @event = service.Contract.Events.CreateEvent(selectedEvent); } var component = service.Components.Component.FirstOrDefault(x => x.Publishes.EventLinks.Any(y => y.EventReference.Value == @event)); if (component == null) { component = service.Components.CreateComponent(@event.InstanceName + "Sender", x => x.Publishes.CreateLink(@event)); var deployToEndpoint = default(EventHandler); deployToEndpoint = (s, e) => { var c = s as IComponent; if (c != null && c == component) { c.DeployTo(endpoint); app.OnInstantiatedComponent -= deployToEndpoint; } }; app.OnInstantiatedComponent += deployToEndpoint; } else { component.DeployTo(endpoint); } } } }
public override void Execute() { // Verify all [Required] and [Import]ed properties have valid values. this.ValidateObject(); var endpoint = CurrentElement.As<IAbstractEndpoint>(); var app = CurrentElement.Root.As<IApplication>(); // Get available events var elements = app.Design.Services.Service .Select(s => Tuple.Create( s.InstanceName, (ICollection<string>)s.Contract.Events.Event.Select(x => x.InstanceName).OrderBy(c => c).ToList())) .OrderBy(t => t.Item1).ToList(); var viewModel = new ElementHierarchyPickerViewModel(elements) { MasterName = "Service Name", SlaveName = "Event Name", Title = "Publish Event" }; var picker = WindowFactory.CreateDialog<ElementHierarchyPicker>(viewModel); using (new MouseCursor(Cursors.Arrow)) { if (picker.ShowDialog().GetValueOrDefault()) { var selectedService = viewModel.SelectedMasterItem; var selectedEvent = viewModel.SelectedSlaveItem; var service = app.Design.Services.Service.FirstOrDefault(x => x.InstanceName == selectedService); if (service == null) { service = app.Design.Services.CreateService(selectedService); } var @event = service.Contract.Events.Event.FirstOrDefault(x => x.InstanceName == selectedEvent); if (@event == null) { @event = service.Contract.Events.CreateEvent(selectedEvent); } var component = service.Components.Component.FirstOrDefault(x => x.Publishes.EventLinks.Any(y => y.EventReference.Value == @event)); if (component == null) { component = service.Components.CreateComponent(@event.InstanceName + "Sender", x => x.Publishes.CreateLink(@event)); var deployToEndpoint = default(EventHandler); deployToEndpoint = (s, e) => { var c = s as IComponent; if (c != null && c == component) { c.DeployTo(endpoint); app.OnInstantiatedComponent -= deployToEndpoint; } }; app.OnInstantiatedComponent += deployToEndpoint; } else { component.DeployTo(endpoint); } } } }