private void tvDs_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            _selectedTreeViewItem = ((XmlTreeViewItem)((TreeView)sender).SelectedItem);
            ContextMenu contextMenu = new ContextMenu();

            if (_selectedTreeViewItem == null)
            {
                return;
            }

            if (_selectedTreeViewItem.TagName == "table")
            {
                _currentInjectionStrategy.SelectedTable = _selectedTreeViewItem.Header.ToString();
                _currentInjectionStrategy.SelectedDb    = ((XmlTreeViewItem)_selectedTreeViewItem.Parent).Header.ToString();
            }
            else if (_selectedTreeViewItem.TagName == "db")
            {
                _currentInjectionStrategy.SelectedTable = string.Empty;
                _currentInjectionStrategy.SelectedDb    = _selectedTreeViewItem.Header.ToString();
            }


            MenuItem menuItem = new MenuItem {
                Header = "Insert"
            };

            menuItem.Click += OptionClick;
            contextMenu.Items.Add(new MenuItem().Header = "Copy");
            _selectedTreeViewItem.ContextMenu           = contextMenu;
        }
        private void btnExecuteCustomQuery_Click(object sender, RoutedEventArgs e)
        {
            txtCustomQueryResult.Clear();
            DisableAll();

            var th = new Thread(() =>
            {
                string result = string.Empty;

                int total = 0;

                try
                {
                    total = _currentInjectionStrategy.GetTotalNoOfCustomQueryResultRows();
                }
                catch (Exception ex)
                {
                    txtCustomQueryResult.Dispatcher.Invoke(
                        System.Windows.Threading.DispatcherPriority.Normal,
                        new Action(
                            delegate()
                    {
                        txtCustomQueryResult.Text = ex.Message;
                    }
                            ));
                }

                if (_currentInjectionStrategy.NumberOfResultsPerRequest > 0)
                {
                    for (int i = 0; i < total; i = i + _currentInjectionStrategy.NumberOfResultsPerRequest)
                    {
                        if (_stopCurrentActionSingleUrlTab)
                        {
                            break;
                        }
                        try
                        {
                            result = _currentInjectionStrategy.GetSingleCustomQueryResultRow(i);
                        }
                        catch (Exception ex)
                        {
                            result = ex.Message;
                        }
                        if (!string.IsNullOrEmpty(result))
                        {
                            #region map to ui

                            List <string> valuesToInsert = new List <string>();
                            if (result.Contains(Environment.NewLine))
                            {
                                valuesToInsert.AddRange(result.Split(new string[] { Environment.NewLine }, StringSplitOptions.None));
                            }
                            else
                            {
                                valuesToInsert.Add(result);
                            }

                            if (_currentInjectionStrategy.PayloadDetails != null &&
                                !string.IsNullOrEmpty(_currentInjectionStrategy.PayloadDetails.NodeToMapTo))
                            {
                                var xpath = XmlHelpers.CreateProperMapToNodeFinderXpath(_currentInjectionStrategy.PayloadDetails, _currentInjectionStrategy);
                                //var xpath = XmlHelpers.CreateProperMapToNodeCreatorXpath(_currentInjectionStrategy.PayloadDetails,
                                //    result);
                                var tagName = XmlHelpers.GetLastTagFromXpath(xpath);

                                XmlTreeViewItem newChildItem  = null;
                                XmlTreeViewItem oldParentItem = null;

                                if (tagName == "databases")//@TODO: no more hardconding
                                {
                                    oldParentItem = UIHelpers.GetTreeViewRoot(tvDs);
                                }
                                else if (tagName == "db" || tagName == "table")//@TODO: no more hardconding
                                {
                                    oldParentItem = _selectedTreeViewItem;
                                }

                                if (oldParentItem != null)
                                {
                                    foreach (var value in valuesToInsert)
                                    {
                                        if (!string.IsNullOrEmpty(value))
                                        {
                                            tvDs.Dispatcher.Invoke(
                                                System.Windows.Threading.DispatcherPriority.Normal,
                                                new Action(
                                                    delegate()
                                            {
                                                newChildItem = UIHelpers.GetXmlTreeViewItemRec(oldParentItem,
                                                                                               _currentInjectionStrategy.PayloadDetails.NodeToMapTo,
                                                                                               value);
                                            }
                                                    ));
                                            if (newChildItem == null)
                                            {
                                                tvDs.Dispatcher.Invoke(
                                                    System.Windows.Threading.DispatcherPriority.Normal,
                                                    new Action(
                                                        delegate()
                                                {
                                                    UIHelpers.XmlTreeViewAdd(oldParentItem, _currentInjectionStrategy.PayloadDetails.NodeToMapTo, value);
                                                }
                                                        ));
                                            }
                                        }
                                    }
                                }
                            }
                            #endregion map to ui

                            txtCustomQueryResult.Dispatcher.Invoke(
                                System.Windows.Threading.DispatcherPriority.Normal,
                                new Action(
                                    delegate()
                            {
                                txtCustomQueryResult.Text += result + Environment.NewLine;
                            }
                                    ));
                        }
                    }
                }

                _stopCurrentActionSingleUrlTab = false;
                EnableAllFromOtherThread();
            });

            th.Start();
        }