private void comboBoxFilterOptions_SelectedIndexChanged(object sender, EventArgs e) { isFiltering = true; string filter = comboBoxFilterOptions.SelectedItem.ToString(); List<TreeNode> allTreeNodes = GetAllTreeNodes(); #region 所有站点 if (filter == "选择所有站点") { foreach (TreeNode treenode in allTreeNodes) { treenode.Checked = true; } } #endregion #region 已启动站点 else if (filter == "已启动站点") { using (ServerManager serverManager = new ServerManager()) { IEnumerable<TreeNode> allSiteNodes = treeHelper.GetAllSiteNodes(serverManager); IEnumerable<TreeNode> startedSiteNodes = allSiteNodes.Where(n => ((Node)n.Tag).Site.State == ObjectState.Started); TreeViewWebSite.Nodes.Clear(); TreeNode rootStartedSites = new TreeNode("已启动站点(" + startedSiteNodes.Count() + ")个"); rootStartedSites.ImageIndex = rootStartedSites.SelectedImageIndex = 9; rootStartedSites.Tag = new Node { NodeType = NodeType.Root }; TreeViewWebSite.Nodes.Add(rootStartedSites); rootStartedSites.Nodes.AddRange(startedSiteNodes.OrderBy(n => n.Text.Length).ToArray()); } } else if (filter == "根据物理路径查找站点") { filterAddressTextBox.Visible = true; filterAddressConfirm.Visible = true; } #endregion #region 已停止站点 else if (filter == "已停止站点") { using (ServerManager serverManager = new ServerManager()) { IEnumerable<TreeNode> allSiteNodes = treeHelper.GetAllSiteNodes(serverManager); IEnumerable<TreeNode> stopedSiteNodes = allSiteNodes.Where(n => ((Node)n.Tag).Site.State == ObjectState.Stopped); TreeViewWebSite.Nodes.Clear(); TreeNode rootStopedSites = new TreeNode("已停止站点(" + stopedSiteNodes.Count() + ")个"); rootStopedSites.ImageIndex = rootStopedSites.SelectedImageIndex = 9; rootStopedSites.Tag = new Node { NodeType = NodeType.Root }; TreeViewWebSite.Nodes.Add(rootStopedSites); rootStopedSites.Nodes.AddRange(stopedSiteNodes.OrderBy(n => n.Text.Length).ToArray()); } } #endregion #region 未配置Http重定向的站点 else if (filter == "未配置Http重定向的站点") { if ((MessageBox.Show("确定查找并勾选当前树形目录下所有未配置Http重定向的站点?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)) { backgroundFilter.RunWorkerAsync(); } } #endregion #region 绑定配置多于一条的网站 else if (filter == "绑定配置多于一条的网站") { using (ServerManager serverManager = new ServerManager()) { IEnumerable<TreeNode> allSiteNodes = treeHelper.GetAllSiteNodes(serverManager); IEnumerable<TreeNode> siteNodesWithMultiBindings = allSiteNodes.Where(n => ((Node)n.Tag).Site.Bindings.Count > 1); TreeViewWebSite.Nodes.Clear(); TreeNode rootNodeMultiBindings = new TreeNode("绑定配置多于一条的网站(" + siteNodesWithMultiBindings.Count() + ")个"); rootNodeMultiBindings.ImageIndex = rootNodeMultiBindings.SelectedImageIndex = 9; rootNodeMultiBindings.Tag = new Node { NodeType = NodeType.Root }; TreeViewWebSite.Nodes.Add(rootNodeMultiBindings); rootNodeMultiBindings.Nodes.AddRange(siteNodesWithMultiBindings.OrderBy(n => n.Text.Length).ToArray()); } } else if (filter == "绑定配置含有关联【非www站点】的【www站点】") { using (ServerManager serverManager = new ServerManager()) { try { IEnumerable<TreeNode> allSiteNodes = treeHelper.GetAllSiteNodes(serverManager); IEnumerable<TreeNode> wwwSiteNodes = allSiteNodes.Where(n => n.Text.StartsWith("www", true, null)); IEnumerable<TreeNode> wwwSiteNodesWithWrongBindings = wwwSiteNodes.Where(n => ((Node)n.Tag).Site.Bindings.Where(b => b.Host == n.Text.Substring(4)).Count() > 0); TreeNode[] stops1 = wwwSiteNodesWithWrongBindings.Where(n => ((Node)n.Tag).Site.State == ObjectState.Stopped).OrderBy(n => n.Text).ToArray(); TreeNode[] started1 = wwwSiteNodesWithWrongBindings.Where(n => ((Node)n.Tag).Site.State == ObjectState.Started).OrderBy(n => n.Text).ToArray(); IEnumerable<TreeNode> siteWithoutWWW = allSiteNodes.Where(n => n.Text.StartsWith("www.", true, null) == false && string.IsNullOrEmpty(n.Text) == false); UrlEqualityComparer comparer = new UrlEqualityComparer(); IEnumerable<TreeNode> intersectionResult = siteWithoutWWW.Intersect(wwwSiteNodesWithWrongBindings, comparer); TreeNode[] stops2 = intersectionResult.Where(n => ((Node)n.Tag).Site.State == ObjectState.Stopped).OrderBy(n => n.Text).ToArray(); TreeNode[] started2 = intersectionResult.Where(n => ((Node)n.Tag).Site.State == ObjectState.Started).OrderBy(n => n.Text).ToArray(); TreeViewWebSite.Nodes.Clear(); TreeNode subrootStart1 = new TreeNode("已启动"); TreeNode subrootStop1 = new TreeNode("已停止"); TreeNode subrootStart2 = new TreeNode("已启动"); TreeNode subrootStop2 = new TreeNode("已停止"); subrootStart1.Tag = new Node { NodeType = NodeType.Root }; subrootStop1.Tag = new Node { NodeType = NodeType.Root }; subrootStart2.Tag = new Node { NodeType = NodeType.Root }; subrootStop2.Tag = new Node { NodeType = NodeType.Root }; subrootStart1.Nodes.AddRange(started1); subrootStop1.Nodes.AddRange(stops1); subrootStart2.Nodes.AddRange(started2); subrootStop2.Nodes.AddRange(stops2); TreeNode rootNodeMultiBindings = new TreeNode("绑定配置含有关联【非www站点】的【www站点】(" + wwwSiteNodesWithWrongBindings.Count() + "个)"); rootNodeMultiBindings.ImageIndex = rootNodeMultiBindings.SelectedImageIndex = 9; rootNodeMultiBindings.Tag = new Node { NodeType = NodeType.Root }; rootNodeMultiBindings.Nodes.Add(subrootStart1); rootNodeMultiBindings.Nodes.Add(subrootStop1); TreeViewWebSite.Nodes.Add(rootNodeMultiBindings); TreeNode rootNoWWW = new TreeNode("对应已关联非www网站(" + intersectionResult.Count() + "个)"); rootNoWWW.Tag = new Node { NodeType = NodeType.Root }; rootNoWWW.Nodes.Add(subrootStart2); rootNoWWW.Nodes.Add(subrootStop2); rootNoWWW.ImageIndex = rootNoWWW.SelectedImageIndex = 9; TreeViewWebSite.Nodes.Add(rootNoWWW); } catch (Exception exception) { listBoxLogs.Items.Add(string.Format("获取数据失败,错误详情{0}", exception)); } } } #endregion #region 关联网站(如a.com和www.a.com) else if (filter == "关联网站(如a.com和www.a.com)") { GetAssociatedSites(); } #endregion isFiltering = false; }
private void GetAssociatedSites() { List<TreeNode> allTreeNodes = GetAllTreeNodes(); using (ServerManager serverManager = new ServerManager()) { IEnumerable<TreeNode> allNodes = treeHelper.GetAllNodes(serverManager); IEnumerable<TreeNode> siteWithoutWWW = allNodes.Where(n => n.Text.StartsWith("www.", true, null) == false && string.IsNullOrEmpty(n.Text) == false); IEnumerable<TreeNode> siteWithWWW = allNodes.Where(n => n.Text.StartsWith("www.", true, null)); UrlEqualityComparer comparer = new UrlEqualityComparer(); IEnumerable<TreeNode> intersectionResult = siteWithoutWWW.Intersect(siteWithWWW, comparer); List<TreeNode> intersectionResult2 = new List<TreeNode>(); foreach (TreeNode treenode in intersectionResult) { intersectionResult2.Add(siteWithWWW.Where(n => n.Text == "www." + treenode.Text || n.Text == "WWW." + treenode.Text).FirstOrDefault()); } IEnumerable<TreeNode> result3 = siteWithWWW.Except(intersectionResult2); IEnumerable<TreeNode> result4 = siteWithoutWWW.Except(intersectionResult); TreeViewWebSite.Nodes.Clear(); rootAssociatedSite.Nodes.Clear(); rootAssociatedSite.Tag = new Node { NodeType = NodeType.Root }; rootAssociatedSite.ImageIndex = rootAssociatedSite.SelectedImageIndex = 9; TreeNode rootNoWWW = new TreeNode("已关联非www网站(" + intersectionResult.Count() + "个)"); rootNoWWW.Tag = new Node { NodeType = NodeType.Root }; rootNoWWW.ImageIndex = rootNoWWW.SelectedImageIndex = 9; TreeNode rootWWW = new TreeNode("已关联www网站(" + intersectionResult2.Count + "个)"); rootWWW.Tag = new Node { NodeType = NodeType.Root }; rootWWW.ImageIndex = rootWWW.SelectedImageIndex = 9; TreeNode rootNoWWWNotAssociated = new TreeNode("未关联非www网站(" + result4.Count() + "个)"); rootNoWWWNotAssociated.Tag = new Node { NodeType = NodeType.Root }; rootNoWWWNotAssociated.ImageIndex = rootNoWWWNotAssociated.SelectedImageIndex = 9; TreeNode rootWWWNotAssociated = new TreeNode("未关联www网站(" + result3.Count() + "个)"); rootWWWNotAssociated.Tag = new Node { NodeType = NodeType.Root }; rootWWWNotAssociated.ImageIndex = rootWWWNotAssociated.SelectedImageIndex = 9; TreeViewWebSite.Nodes.Add(rootAssociatedSite); rootAssociatedSite.Nodes.Add(rootNoWWW); rootAssociatedSite.Nodes.Add(rootWWW); rootAssociatedSite.Nodes.Add(rootNoWWWNotAssociated); rootAssociatedSite.Nodes.Add(rootWWWNotAssociated); rootNoWWW.Nodes.AddRange(intersectionResult.OrderBy(n => n.Text.Length).ToArray()); rootWWW.Nodes.AddRange(intersectionResult2.OrderBy(n => n.Text.Length).ToArray()); rootWWWNotAssociated.Nodes.AddRange(result3.OrderBy(n => n.Text.Length).ToArray()); rootNoWWWNotAssociated.Nodes.AddRange(result4.OrderBy(n => n.Text.Length).ToArray()); } }