Exemple #1
0
        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);
                    }
                }
            }
        }