using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text.RegularExpressions;
using System.Collections.Generic;
public partial class SearchComponent : System.Web.UI.Page
{
private ArrayList menu = new ArrayList();
string strFunction = String.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//strFunction = Request.QueryString["functionName"];
//Response.Write(Request.QueryString["ComponentName"]); //QueryStringǰѼƪk
GenTreeNodes("ASP"); //Default loading the ASP TreeView in the initial state
}
}
#region split path and rearrange
private void splitPathAndRearrange(string strFrameworkType)
{
//wqRoot Node
TreeNode RootNode = new TreeNode();
RootNode.Text = "CathayBk " + strFrameworkType +" Tree";
RootNode.Value = "Common Components Tree";
// RootNode.NavigateUrl = "~/SearchResult.aspx?pathName=%"; //ܩI露Ӹ`
TreeViewOfPath.Nodes.Add(RootNode);
//ھکҿ諸FrameworkAhƮwd߲Ĥ@h`IWAMjʺAa
string[] rtnArray = queryParentNodesByFramework(strFrameworkType); //^ǤF@ʵơAO䤤iŪ
//p@UXD
int intCountOfItemInRtnArray = 0;
foreach (string strItem in rtnArray)
{
if (strItem != null) { intCountOfItemInRtnArray++; }
}
//dzưY²Arrayʧ@
string[] strArrayToParse = new string[intCountOfItemInRtnArray];
int ix = 0;
foreach (string strItem in rtnArray)
{
if (strItem != null)
{
strArrayToParse[ix] = rtnArray[ix];
ix++;
}
}
int ixx = 0;
string[,] path = new string[strArrayToParse.Length, 3]; //]uThAG3
foreach (string strItem in strArrayToParse)
{
//wqTh𪬹
Regex exp = new Regex(
// @"(\w+|\W+)\:(\w+|\W+)\:(\w+|\W+)\:?(\w+|\W+)?"-
@"(\w+|\W+)\:(\w+|\W+)\:?(\w+|\W+)?"
);
MatchCollection MatchList = exp.Matches(strItem);
Match FirstMatch = MatchList[0];
//int temp = FirstMatch.Groups.Count
for (int jx = 1; jx < FirstMatch.Groups.Count; jx++)
{
path[ixx,jx-1] = FirstMatch.Groups[jx].Value; //|hRXӡApath}C
}
ixx++;
}
//Dz߰ʺAͦTree
//1. XҦڸ`I
string[] strPathRootArray = new string[ixx];
for(int jx=0 ; jx< ixx ; jx++){
strPathRootArray[jx]= path[jx,0];
}
//2. Xuniqueڸ`I
ArrayList UniqueList= new ArrayList();
int jxx = 0;
while ( jxx < strPathRootArray.Length )
{
if (!UniqueList.Contains(strPathRootArray[jxx]))
UniqueList.Add(strPathRootArray[jxx]);
jxx++;
}
foreach(string strItem in UniqueList){
// string strTemp =RootNode.Text+ ":"+ strItem;
// menu.Add(strTemp);
menu.Add(strItem);
}
ArrayList uniqueParentNodes= new ArrayList();
//Xثepath}CA UniqueUӪunique`I
foreach (string strItem in UniqueList)
{
int bx = 0;
while(bx < strArrayToParse.Length)
{
if (path[bx, 0] == strItem && !uniqueParentNodes.Contains(path[bx, 0] + ":" + path[bx, 1])) //not contains the string yet
{
uniqueParentNodes.Add(path[bx, 0] + ":" + path[bx, 1]);
}
bx++;
}
}
foreach (string strItem in uniqueParentNodes)
{
// string strTemp =RootNode.Text+ ":"+ strItem;
// menu.Add(strTemp);
menu.Add(strItem);
}
foreach (string strItem in strArrayToParse)
{
if (!uniqueParentNodes.Contains(strItem))
{
menu.Add(strItem);
}
}
//quniqueparent nodes^ڸ`I
//TreeViewOfPath.PathSeparator = ':'; //]wPath Separator
// ھڭRXrApGثeTreeViewSAhhsWδJ`I`IW]Node^
// ҥHo䪺𪬹ϡA٬On depth = 3 n,Xhثew
// menu.TrimToSize();
if (menu.Count > 0)
{
SetupMenu();
}
else {
showMsg("SؤALkͦI");
}
}
#endregion
#region إTreeView`I
private void GenTreeNodes(string strFrameworkType)
{
TreeViewOfPath.ShowLines = true;
splitPathAndRearrange(strFrameworkType);
}
#endregion
private void SetupMenu()
{
try
{
menu.Sort();
//ھڨϥΪ̪vŪ椤iX{
//Cإߤ@Ӹ`I, NߧYMO_٦lI
for (int i = 0; i < menu.Count; i++)
{
if (menu[i].ToString().Trim().IndexOf(':') < 0)
{
TreeNode theNode = new TreeNode(menu[i].ToString().Trim(),
menu[i].ToString().Trim());
BuildSubTree(ref theNode, i);
TreeViewOfPath.Nodes.Add(theNode);
theNode = null;
}
}
}
catch (Exception ex)
{
showMsg(ex.Message);
}
}
private void BuildSubTree(ref TreeNode node, int lastPos)
{
TreeNode theNode = node;
string thisMenu = string.Empty;
try
{
for (int i = lastPos + 1; i < menu.Count; i++)
{
thisMenu = menu[i].ToString().Trim();
if (thisMenu.IndexOf(theNode.Value) == 0 &&
thisMenu.Length > theNode.Value.Length &&
thisMenu.Substring(theNode.Value.Length + 1).IndexOf(':') < 0 &&
thisMenu.Substring(theNode.Value.Length)[0] == ':') //unh@CP_
//oӬOӲI
{
TreeNode tmp = new TreeNode(thisMenu.Substring(theNode.Value.Length + 1),
thisMenu);
theNode.ChildNodes.Add(tmp);
BuildSubTree(ref tmp, i);
}
}
}
catch (Exception ex)
{
showMsg(ex.Message);
}
}
private string[] queryParentNodesByFramework(string strFrameworkType)
{
string CCSConnectionString = ConfigurationManager.ConnectionStrings["CCSConnectionString"].ConnectionString;
string SelectCommand = "SELECT PATH FROM COMPONENT WHERE FRAMEWORK = '"+ strFrameworkType + "' AND STATUS ='P' ORDER BY PATH";
showMsg(SelectCommand);
SqlConnection Conn = new SqlConnection(CCSConnectionString);
try
{
Conn.Open();
}
catch (SqlException ex)
{
// Connection failed
showMsg(ex.Message);
}
string[] resultArray = new string[1000]; //h֡A1000
try
{
SqlCommand command = new SqlCommand(SelectCommand, Conn);
command.CommandType = System.Data.CommandType.Text;
SqlDataReader rdr = command.ExecuteReader();
int ix =0;
try
{
do
{
while (rdr.Read())
{
for ( System.Int32 iCol = 0; iCol < rdr.FieldCount; iCol ++ )
{
// System.Web.HttpContext.Current.Response.Write( "Column " + iCol.ToString() + ": " );
string strTmp = rdr.GetString(iCol).ToString();
resultArray[ix] = strTmp;
ix++;
}
}
} while (rdr.NextResult());
}
catch (SqlException ex)
{
showMsg(ex.Message);
}
finally
{
Conn.Close(); //remember to close the db connection
rdr.Close();
}
}
catch (Exception ex) {
showMsg(ex.Message.ToString());
}
return resultArray;
}
//protected void btnSearch_Click(object sender, EventArgs e)
//{
// string strSearchWord = tbxComponentInfo.Text + "%"; //
// string strQueryCommand = "";
// switch (ddlSearchType.SelectedValue)
// {
// case "Full-Text":
// // oӦanjMAinhSQL SERVER Studio ]w@U
// strQueryCommand = "SELECT * FROM COMPONENT WHERE FRAMEWORK ='" + ddlFrameworkType.Text +"'";
// executeSQLQueryAndDrawResultTable(strQueryCommand);
// break;
// case "Component Name":
// strQueryCommand = "SELECT * FROM COMPONENT WHERE NAME = '" + strSearchWord + "' AND FRAMEWORK ='" + ddlFrameworkType.Text + "'";
// // uaƮwd
// executeSQLQueryAndDrawResultTable(strQueryCommand);
// break;
// case "Contributor":
// strQueryCommand = "SELECT * FROM COMPONENT WHERE CONTRIBUTOR = '" + strSearchWord + "' AND FRAMEWORK ='" + ddlFrameworkType.Text + "'";
// executeSQLQueryAndDrawResultTable(strQueryCommand);
// break;
// case "Framework":
// strQueryCommand = "SELECT * FROM COMPONENT WHERE FRAMEWORK = '" + strSearchWord + "' AND FRAMEWORK ='" + ddlFrameworkType.Text + "'";
// executeSQLQueryAndDrawResultTable(strQueryCommand);
// break;
// case "Category":
// // ӻOAjMpathO_oӦr
// strQueryCommand = "SELECT * FROM COMPONENT WHERE PATH = '" + strSearchWord + "' AND FRAMEWORK ='" + ddlFrameworkType.Text + "'";
// executeSQLQueryAndDrawResultTable(strQueryCommand);
// break;
// }
//}
#region ھqueryrӧ@d߰ʧ@AøsG
private void executeSQLQueryAndDrawResultTable(string strQueryCommand)
{
string CCSConnectionString = ConfigurationManager.ConnectionStrings["CCSConnectionString"].ConnectionString;
showMsg(strQueryCommand);
SqlConnection Conn = new SqlConnection(CCSConnectionString);
try
{
Conn.Open();
}
catch (SqlException ex)
{
// Connection failed
showMsg(ex.Message);
}
// dߪGHDataSetӱH
string[] resultArray = new string[10000]; //h֡A10000
try
{
SqlCommand command = new SqlCommand(strQueryCommand, Conn);
command.CommandType = System.Data.CommandType.Text;
SqlDataReader rdr = command.ExecuteReader();
int ix = 0;
try
{
do
{
while (rdr.Read())
{
for ( System.Int32 iCol = 0; iCol < rdr.FieldCount; iCol ++ )
{
// System.Web.HttpContext.Current.Response.Write( "Column " + iCol.ToString() + ": " );
string strTmp = rdr.GetString(iCol).ToString();
// System.Web.HttpContext.Current.Response.Write(strTmp);
// System.Web.HttpContext.Current.Response.Write( "<br>" );
resultArray[ix] = strTmp;
ix++;
}
}
} while (rdr.NextResult());
}
catch (SqlException ex)
{
showMsg(ex.Message);
}
finally
{
Conn.Close(); //remember to close the db connection
rdr.Close();
}
}
catch (Exception ex) {
showMsg(ex.Message);
}
}
#endregion
#region ھڤUԿӿ۹Framework𪬹
protected void ddlFrameworkType_SelectedIndexChanged(object sender, EventArgs e)
{
// ھڤUԿӿ۹Framework𪬹
switch (ddlFrameworkType.SelectedValue.Trim())
{
case "ASP":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("ASP");
TreeViewOfPath.ExpandAll();
break;
case "ASP.NET":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString()+" I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("ASP.NET");
TreeViewOfPath.ExpandAll();
break;
case "C":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("C");
TreeViewOfPath.ExpandAll();
break;
case "C#":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("C#");
TreeViewOfPath.ExpandAll();
break;
case "CPlusPlus":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("CPlusPlus");
TreeViewOfPath.ExpandAll();
break;
case "Java":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("Java");
TreeViewOfPath.ExpandAll();
break;
case "JavaScript":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("JavaScript");
TreeViewOfPath.ExpandAll();
break;
case "MATLAB":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("MATLAB");
TreeViewOfPath.ExpandAll();
break;
case "Perl":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("Perl");
TreeViewOfPath.ExpandAll();
break;
case "PHP":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("PHP");
TreeViewOfPath.ExpandAll();
break;
case "Python":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("Python");
TreeViewOfPath.ExpandAll();
break;
case "Ruby":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("Ruby");
TreeViewOfPath.ExpandAll();
break;
case "VB":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("VB");
TreeViewOfPath.ExpandAll();
break;
case "VB.NET":
showMsg("ӥͦ " + ddlFrameworkType.SelectedValue.Trim().ToString() + " I");
TreeViewOfPath.Nodes.Clear();
menu = null;
menu = new ArrayList();
GenTreeNodes("VB.NET");
TreeViewOfPath.ExpandAll();
break;
}
// SiteMapDSFrameworkType.DataBind();
}
#endregion
protected void showMsg(string AlertMessage)
{
Literal txtMsg = new Literal();
txtMsg.Text = "<script>alert('" + AlertMessage + "')</script>" + "<br/>";
Page.Controls.Add(txtMsg);
}
//protected void ddlComponentInfoChanged(object sender, EventArgs e)
//{
// switch (ddlSearchType.SelectedValue.Trim())
// {
// case "Name":
// gvComponentDetails.DataSource = SqlDSComponentNameQuery;
// gvComponentDetails.DataBind();
// break;
// case "Contributor":
// gvComponentDetails.DataSource = SqlDSContributorQuery;
// gvComponentDetails.DataBind();
// break;
// case "Path":
// gvComponentDetails.DataSource = SqlDSPathQuery;
// gvComponentDetails.DataBind();
// break;
// case "Full-Text":
// gvComponentDetails.DataSource = SqlDSFullTextQuery;
// gvComponentDetails.DataBind();
// break;
// }
//}
protected void TreeViewOfPath_SelectedNodeChanged(object sender, EventArgs e)
{
Server.Transfer("~/SearchResult.aspx?pathName=" + TreeViewOfPath.SelectedNode.Text);
}
protected void gvComponentDetails_SelectedIndexChanged(object sender, EventArgs e)
{
Server.Transfer("~/SearchResult.aspx?pathName=" + gvComponentDetails.SelectedDataKey.Value);
}
protected void btnFilter_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(tbxComponentName.Text))
{
tbxComponentName.Text = "%";
}
if (String.IsNullOrEmpty(tbxPath .Text))
{
tbxPath.Text = "%";
}
if (String.IsNullOrEmpty(tbxContributor.Text))
{
tbxContributor.Text = "%";
}
}
}