public GroupContainer(Junos.SecurityPoliciesGroup group)
        {
            this.InitializeComponent();

            this.labelName.Content = group.Name;

            this.policyContainer.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
            for (int i = 0; i < group.Policies.Count(); i++)
            {
                this.policyContainer.RowDefinitions.Add(new RowDefinition { Height = new GridLength(24) });
            }

            int index = 0;
            foreach (var item in group.Policies)
            {
                var element = new Policy(item)
                {
                    HorizontalAlignment = HorizontalAlignment.Stretch,
                    VerticalAlignment = VerticalAlignment.Top,
                    Height = 24
                };

                this.policyContainer.Children.Add(element);
                Grid.SetColumn(element, 0);
                Grid.SetRow(element, index++);
            }

            this.policyContainer.Height = group.Policies.Count() * 24;

            if (group.Policies.All(p => p.Action == group.Policies.First().Action))
            {
                this.Background = new SolidColorBrush(UiHelpers.GetPolicyColor(group.Policies.First()));
            }
        }
Пример #2
0
        private void Draw()
        {
            for (int i = 0; i <= this.client.Zones.Count; i++)
            {
                this.mainGrid.ColumnDefinitions.Add(
                    new ColumnDefinition
                {
                    Width    = new GridLength(1, GridUnitType.Star),
                    MinWidth = 120
                });
                this.mainGrid.RowDefinitions.Add(
                    new RowDefinition
                {
                    Height = GridLength.Auto
                });
            }

            var label = new Label();

            this.mainGrid.Children.Add(label);
            label.Content    = "From \\ To";
            label.FontWeight = FontWeights.Bold;
            label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
            Grid.SetColumn(label, 0);
            Grid.SetRow(label, 0);

            int index = 1;

            foreach (var zone in this.client.Zones)
            {
                label = new Label();

                this.mainGrid.Children.Add(label);
                label.Content    = zone.Name;
                label.FontWeight = FontWeights.Bold;
                label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
                Grid.SetColumn(label, index);
                Grid.SetRow(label, 0);

                label = new Label();

                this.mainGrid.Children.Add(label);
                label.Content    = zone.Name;
                label.FontWeight = FontWeights.Bold;
                label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
                Grid.SetColumn(label, 0);
                Grid.SetRow(label, index);

                int toIndex = 1;
                foreach (var toZone in this.client.Zones)
                {
                    var elementGrid = new Grid
                    {
                        HorizontalAlignment = HorizontalAlignment.Stretch,
                        VerticalAlignment   = VerticalAlignment.Top,
                        Margin = new Thickness(2)
                    };

                    var policySelection = this.client.Policies.Where(p => p.FromZone == zone.Name && p.ToZone == toZone.Name).ToList();
                    int count           = Math.Max(policySelection.Sum(p => p.Policies.Count() + p.AppliedGroups.Count()), 1);

                    elementGrid.ColumnDefinitions.Add(new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    });
                    for (int i = 0; i < count; i++)
                    {
                        elementGrid.RowDefinitions.Add(new RowDefinition {
                            Height = GridLength.Auto
                        });
                    }

                    int elementIndex = 0;
                    foreach (var policy in policySelection)
                    {
                        UserControl element;

                        foreach (var item in policy.Policies)
                        {
                            element = new Policy(item)
                            {
                                Height            = 24,
                                VerticalAlignment = VerticalAlignment.Top,
                                Margin            = new Thickness(1)
                            };

                            elementGrid.Children.Add(element);
                            Grid.SetColumn(element, 0);
                            Grid.SetRow(element, elementIndex++);
                        }

                        foreach (var item in policy.AppliedGroups)
                        {
                            string groupName = item.Name;

                            element = new GroupContainer(item)
                            {
                                Height            = 24,
                                VerticalAlignment = VerticalAlignment.Top,
                                Margin            = new Thickness(1)
                            };

                            element.MouseEnter += (o, args) => this.MouseOverGroup(groupName);
                            element.MouseLeave += (o, args) => this.MouseOutGroup(groupName);

                            elementGrid.Children.Add(element);
                            Grid.SetColumn(element, 0);
                            Grid.SetRow(element, elementIndex++);

                            List <GroupContainer> value;
                            if (this.groups.TryGetValue(groupName, out value))
                            {
                                value.Add((GroupContainer)element);
                            }
                            else
                            {
                                this.groups.Add(item.Name, new List <GroupContainer> {
                                    (GroupContainer)element
                                });
                            }
                        }
                    }

                    if (elementGrid.Children.Count == 0)
                    {
                        var element = new Policy(new SecurityPolicy {
                            Name = "-", Action = PolicyAction.Deny
                        })
                        {
                            VerticalAlignment = VerticalAlignment.Stretch,
                            Margin            = new Thickness(1)
                        };

                        elementGrid.Children.Add(element);
                        Grid.SetColumn(element, 0);
                        Grid.SetRow(element, elementIndex);
                    }

                    this.mainGrid.Children.Add(elementGrid);
                    Grid.SetColumn(elementGrid, toIndex++);
                    Grid.SetRow(elementGrid, index);
                }

                index++;
            }
        }
        private void Draw()
        {
            for (int i = 0; i <= this.client.Zones.Count; i++)
            {
                this.mainGrid.ColumnDefinitions.Add(
                    new ColumnDefinition
                    {
                        Width = new GridLength(1, GridUnitType.Star),
                        MinWidth = 120
                    });
                this.mainGrid.RowDefinitions.Add(
                    new RowDefinition
                    {
                        Height = GridLength.Auto
                    });
            }

            var label = new Label();

            this.mainGrid.Children.Add(label);
            label.Content = "From \\ To";
            label.FontWeight = FontWeights.Bold;
            label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
            Grid.SetColumn(label, 0);
            Grid.SetRow(label, 0);

            int index = 1;
            foreach (var zone in this.client.Zones)
            {
                label = new Label();

                this.mainGrid.Children.Add(label);
                label.Content = zone.Name;
                label.FontWeight = FontWeights.Bold;
                label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
                Grid.SetColumn(label, index);
                Grid.SetRow(label, 0);

                label = new Label();

                this.mainGrid.Children.Add(label);
                label.Content = zone.Name;
                label.FontWeight = FontWeights.Bold;
                label.Background = new SolidColorBrush(Color.FromArgb(255, 220, 220, 220));
                Grid.SetColumn(label, 0);
                Grid.SetRow(label, index);

                int toIndex = 1;
                foreach (var toZone in this.client.Zones)
                {
                    var elementGrid = new Grid
                    {
                        HorizontalAlignment = HorizontalAlignment.Stretch,
                        VerticalAlignment = VerticalAlignment.Top,
                        Margin = new Thickness(2)
                    };

                    var policySelection = this.client.Policies.Where(p => p.FromZone == zone.Name && p.ToZone == toZone.Name).ToList();
                    int count = Math.Max(policySelection.Sum(p => p.Policies.Count() + p.AppliedGroups.Count()), 1);

                    elementGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
                    for (int i = 0; i < count; i++)
                    {
                        elementGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
                    }

                    int elementIndex = 0;
                    foreach (var policy in policySelection)
                    {
                        UserControl element;

                        foreach (var item in policy.Policies)
                        {
                            element = new Policy(item)
                            {
                                Height = 24,
                                VerticalAlignment = VerticalAlignment.Top,
                                Margin = new Thickness(1)
                            };

                            elementGrid.Children.Add(element);
                            Grid.SetColumn(element, 0);
                            Grid.SetRow(element, elementIndex++);
                        }

                        foreach (var item in policy.AppliedGroups)
                        {
                            string groupName = item.Name;

                            element = new GroupContainer(item)
                            {
                                Height = 24,
                                VerticalAlignment = VerticalAlignment.Top,
                                Margin = new Thickness(1)
                            };

                            element.MouseEnter += (o, args) => this.MouseOverGroup(groupName);
                            element.MouseLeave += (o, args) => this.MouseOutGroup(groupName);

                            elementGrid.Children.Add(element);
                            Grid.SetColumn(element, 0);
                            Grid.SetRow(element, elementIndex++);

                            List<GroupContainer> value;
                            if (this.groups.TryGetValue(groupName, out value))
                            {
                                value.Add((GroupContainer)element);
                            }
                            else
                            {
                                this.groups.Add(item.Name, new List<GroupContainer> { (GroupContainer)element });
                            }
                        }
                    }

                    if (elementGrid.Children.Count == 0)
                    {
                        var element = new Policy(new SecurityPolicy { Name = "-", Action = PolicyAction.Deny })
                        {
                            VerticalAlignment = VerticalAlignment.Stretch,
                            Margin = new Thickness(1)
                        };

                        elementGrid.Children.Add(element);
                        Grid.SetColumn(element, 0);
                        Grid.SetRow(element, elementIndex);
                    }

                    this.mainGrid.Children.Add(elementGrid);
                    Grid.SetColumn(elementGrid, toIndex++);
                    Grid.SetRow(elementGrid, index);
                }

                index++;
            }
        }