void AddRuleWithData()

in CosmosClone/CosmicCloneUI/DataAnonymizationPage.xaml.cs [78:254]


        void AddRuleWithData(WrapPanel parentStackPanel, int ruleIndex, ScrubRule scrubRule = null)
        {
            StackPanel RuleHeadersp = new StackPanel();
            RuleHeadersp.Orientation = Orientation.Horizontal;

            TextBlock HeaderTB = new TextBlock();
            HeaderTB.Text = "Rule " + (ruleIndex);

            Label RuleIdLabel = new Label();
            RuleIdLabel.Content = ruleIndex;
            RuleIdLabel.Visibility = Visibility.Hidden;

            Button DeleteBtn = new Button();
            DeleteBtn.Name = "btnDelete_" + ruleIndex;
            DeleteBtn.HorizontalAlignment = HorizontalAlignment.Right;
            //DeleteBtn.Content = "Delete";
            DeleteBtn.Margin = new Thickness(265, 0, 0, 0);
            DeleteBtn.Click += DeleteBtn_Click;
            DeleteBtn.Content = new Image
            {
                Source = new BitmapImage(new Uri("/Images/closeIcon.png", UriKind.Relative)),
                VerticalAlignment = VerticalAlignment.Center
            };

            RuleHeadersp.Children.Add(HeaderTB);
            RuleHeadersp.Children.Add(DeleteBtn);

            Expander exp = new Expander();
            exp.Header = RuleHeadersp;
            exp.HorizontalAlignment = HorizontalAlignment.Left;
            exp.Margin = new Thickness(20, 30, 0, 0);
            exp.BorderThickness = new Thickness(1, 1, 1, 1);
            exp.Width = 350;
            exp.BorderBrush = Brushes.Gray;
            exp.Background = Brushes.White;
            exp.IsExpanded = true;
            exp.Name = "RuleExpander_" + ruleIndex;

            StackPanel sp = new StackPanel();
            sp.Orientation = Orientation.Vertical;
            sp.Margin = new Thickness(20, 5, 0, 0);

            StackPanel filterSP = new StackPanel();
            filterSP.Orientation = Orientation.Horizontal;
            filterSP.Margin = new Thickness(0, 5, 0, 2);

            StackPanel attributeSP = new StackPanel();
            attributeSP.Orientation = Orientation.Horizontal;
            attributeSP.Margin = new Thickness(0, 5, 0, 2);

            StackPanel scrubTypeSP = new StackPanel();
            scrubTypeSP.Orientation = Orientation.Horizontal;
            scrubTypeSP.Margin = new Thickness(0, 5, 0, 2);

            StackPanel scrubValueSP = new StackPanel();
            scrubValueSP.Orientation = Orientation.Horizontal;
            scrubValueSP.Margin = new Thickness(0, 5, 0, 2);

            TextBlock FilterLabel = new TextBlock();
            FilterLabel.VerticalAlignment = VerticalAlignment.Center;
            FilterLabel.Margin = new Thickness(10, 0, 0, 0);
            //FilterLabel.MaxWidth = 150;

            Run runFilterLabel = new Run();
            runFilterLabel.Text = "Filter Query";
            runFilterLabel.FontSize = 15;

            Run runFilterLabelHint = new Run();
            runFilterLabelHint.Text = " \nEx: c.Type = \"document\"";
            runFilterLabelHint.FontSize = 10;

            FilterLabel.Inlines.Add(runFilterLabel);
            FilterLabel.Inlines.Add(runFilterLabelHint);

            TextBox FilterTB = new TextBox();
            FilterTB.Name = "Filter" + ruleIndex;
            FilterTB.Width = 150;
            FilterTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            FilterTB.VerticalAlignment = VerticalAlignment.Center;
            FilterTB.Margin = new Thickness(20, 0, 0, 0);

            TextBlock AttributeScrubLabel = new TextBlock();
            AttributeScrubLabel.VerticalAlignment = VerticalAlignment.Center;
            AttributeScrubLabel.Margin = new Thickness(10, 0, 0, 0);
            //AttributeScrubLabel.Width = 120;

            Run runAttributeScrubLabel = new Run();
            runAttributeScrubLabel.Text = "Attribute To Scrub";
            runAttributeScrubLabel.FontSize = 15;

            Run runAttributeScrubLabelHint = new Run();
            runAttributeScrubLabelHint.Text = " \nEx: c.Person.Email";
            runAttributeScrubLabelHint.FontSize = 10;

            AttributeScrubLabel.Inlines.Add(runAttributeScrubLabel);
            AttributeScrubLabel.Inlines.Add(runAttributeScrubLabelHint);

            TextBox AttributeScrubTB = new TextBox();
            AttributeScrubTB.Name = "ScrubAttribute" + ruleIndex;
            AttributeScrubTB.Width = 150;
            AttributeScrubTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            AttributeScrubTB.VerticalAlignment = VerticalAlignment.Center;
            AttributeScrubTB.Margin = new Thickness(20, 0, 0, 0);

            TextBlock ScrubTypeLabel = new TextBlock();
            ScrubTypeLabel.Text = "Scrub Type";
            ScrubTypeLabel.FontSize = 15;
            ScrubTypeLabel.VerticalAlignment = VerticalAlignment.Center;
            ScrubTypeLabel.Margin = new Thickness(10, 0, 0, 0);

            ComboBox ScrubTypeCB = new ComboBox();
            ScrubTypeCB.Name = "ScrubType" + ruleIndex;
            ScrubTypeCB.Width = 150;
            ScrubTypeCB.Margin = new Thickness(20, 0, 0, 0);

            foreach (RuleType val in Enum.GetValues(typeof(RuleType)))
            {
                ScrubTypeCB.Items.Add(val.ToString());
            }

            ScrubTypeCB.SelectionChanged += new SelectionChangedEventHandler(scrubTypeComboBox_SelectedIndexChanged);

            TextBlock ScrubValueLabel = new TextBlock();
            ScrubValueLabel.Text = "Replace with";
            ScrubValueLabel.FontSize = 15;
            ScrubValueLabel.VerticalAlignment = VerticalAlignment.Center;
            ScrubValueLabel.Margin = new Thickness(10, 0, 0, 5);

            TextBox ScrubValueTB = new TextBox();
            ScrubValueTB.Name = "ScrubValue" + ruleIndex;
            ScrubValueTB.Width = 150;
            ScrubValueTB.HorizontalContentAlignment = HorizontalAlignment.Left;
            ScrubValueTB.VerticalAlignment = VerticalAlignment.Center;
            ScrubValueTB.Margin = new Thickness(20, 0, 0, 0);

            FilterLabel.Width = 120;
            FilterTB.Width = 150;
            AttributeScrubLabel.Width = 120;
            AttributeScrubTB.Width = 150;
            ScrubTypeLabel.Width = 120;
            ScrubTypeCB.Width = 150;
            ScrubValueLabel.Width = 120;

            filterSP.Children.Add(FilterLabel);
            filterSP.Children.Add(FilterTB);

            attributeSP.Children.Add(AttributeScrubLabel);
            attributeSP.Children.Add(AttributeScrubTB);

            scrubTypeSP.Children.Add(ScrubTypeLabel);
            scrubTypeSP.Children.Add(ScrubTypeCB);

            scrubValueSP.Children.Add(ScrubValueLabel);
            scrubValueSP.Children.Add(ScrubValueTB);
            scrubValueSP.Children.Add(RuleIdLabel);
            scrubValueSP.Visibility = Visibility.Hidden;

            sp.Children.Add(attributeSP);
            sp.Children.Add(filterSP);
            sp.Children.Add(scrubTypeSP);
            sp.Children.Add(scrubValueSP);

            exp.Content = sp;

            if(scrubRule!=null)
            {
                FilterTB.Text = scrubRule.FilterCondition;
                AttributeScrubTB.Text = scrubRule.PropertyName;
                if(scrubRule.Type!=null) ScrubTypeCB.SelectedIndex = (int)scrubRule.Type;
                ScrubValueTB.Text = scrubRule.UpdateValue;
            }
            parentStackPanel.Children.Add(exp);
            if(!SaveRuleButton.IsEnabled)
            {
                SaveRuleButton.IsEnabled = true;
            }
        }