Exemplo n.º 1
0
        protected void btnSearchButton_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                bool          directionFlag = true;
                bool          customFlag    = false;
                string        searchTerm    = txtSearchBox.Text;
                List <String> selected      = new List <String>();
                foreach (ListItem item in cblFilters.Items)
                {
                    if (item.Selected)
                    {
                        selected.Add(item.Value);
                        if ((item.Value).All(char.IsDigit))
                        {
                            customFlag = true;
                        }
                    }
                }
                //Sql Connection info
                MySql.Data.MySqlClient.MySqlConnection mysqlConnection = new MySql.Data.MySqlClient.MySqlConnection();
                mysqlConnection.ConnectionString = "server=127.0.0.1;uid=root;pwd=Defense;database=Dietation";
                try
                {
                    mysqlConnection.Open();
                    string selectedProduct = "select FoodName, ";
                    //Gets all the predefined filters
                    for (int i = 0; i < selected.Count; i++)
                    {
                        if (!customFlag)
                        {
                            if (i == selected.Count - 1)
                            {
                                selectedProduct += selected[i] + " ";
                            }
                            else
                            {
                                selectedProduct += selected[i] + ", ";
                            }
                        }
                        else
                        {
                            //Get predefined and detects custom filters
                            if ((selected[i]).All(char.IsDigit))
                            {
                                selectedProduct.Substring(0, selectedProduct.Length - 2);
                                break;
                            }
                            else if (i == selected.Count - 1)
                            {
                                selectedProduct += selected[i] + " ";
                            }
                            else
                            {
                                selectedProduct += selected[i] + ", ";
                            }
                        }
                    }
                    //API call to FDA database
                    List <FDAFoodInfo> info     = new SimpleAPIClass(searchTerm).getFoodInfo();
                    FDAFoodInfo        topValue = info.ElementAt(0);
                    if (info == null)
                    {
                        Response.Redirect("UnknownResult.aspx");
                    }
                    selectedProduct += "from foodfilter where FoodName = \'" + topValue.foodName + "\'";
                    MySqlCommand    cmd1 = new MySqlCommand(selectedProduct, mysqlConnection);
                    MySqlDataReader rdr  = cmd1.ExecuteReader();
                    //Executes the database search
                    //No Custom Filter
                    if (!customFlag)
                    {
                        //Nothing in database
                        if (!rdr.HasRows)
                        {
                            //Load in classes, cls -> is a compare list on list
                            //Load prefilters holds the predefined filter values
                            CompareListsSearching cls        = new CompareListsSearching();
                            PredefinedFilters     preFilters = new PredefinedFilters();
                            //sqla commands that fill the database
                            SQLAccess sqla = new SQLAccess();
                            sqla.FillIngredients(topValue.foodName, topValue.foodIngredients);
                            sqla.FillPrefilters(topValue.foodName, topValue.foodBrand, topValue.foodIngredients);
                            //Sets session cookie to loginId
                            Session["ProductName"] = topValue.foodName;
                            //Compare predefined filters against ingredients of the product
                            foreach (string s in selected)
                            {
                                if (!cls.Compare(preFilters.getFilters(s), topValue.foodIngredients))
                                {
                                    directionFlag = false;
                                    break;
                                }
                            }
                            //If direction is false then its a negative value
                            if (directionFlag)
                            {
                                Response.Redirect("PositiveResult.aspx");
                            }
                            else
                            {
                                Response.Redirect("NegativeResult.aspx");
                            }
                        }

                        //Item detected in database
                        else if (rdr.HasRows)
                        {
                            //Reads
                            rdr.Read();
                            Session["ProductName"] = topValue.foodName;
                            //Looks through the database to see the if predefined filters values
                            //Equal 0 in any place, if so then return a false
                            foreach (string s in selected)
                            {
                                int flag = (int)rdr[s];
                                if (flag == 0)
                                {
                                    directionFlag = false;
                                    break;
                                }
                            }
                            if (directionFlag)
                            {
                                Response.Redirect("PositiveResult.aspx");
                            }
                            else
                            {
                                Response.Redirect("NegativeResult.aspx");
                            }
                        }
                    }
                    //Custom Filters
                    else
                    {
                        if (!rdr.HasRows)
                        {
                            //Future Feature have a list of items for the customer to choose from when searching
                            SQLAccess sqla = new SQLAccess();
                            sqla.FillIngredients(topValue.foodName, topValue.foodIngredients);
                            sqla.FillPrefilters(topValue.foodName, topValue.foodBrand, topValue.foodIngredients);
                            CompareListsSearching cls        = new CompareListsSearching();
                            PredefinedFilters     preFilters = new PredefinedFilters();
                            Session["ProductName"] = topValue.foodName;
                            foreach (string s in selected)
                            {
                                if (!cls.Compare(preFilters.getFilters(s), topValue.foodIngredients))
                                {
                                    directionFlag = false;
                                    break;
                                }
                            }
                            if (directionFlag)
                            {
                                List <List <String> > customFilters = new List <List <String> >();
                                foreach (ListItem item in cblFilters.Items)
                                {
                                    switch (item.Value)
                                    {
                                    case "0":
                                        CustomFilter cf1 = (CustomFilter)Session["CustomFilter1"];
                                        customFilters.Add(cf1.Ingredients);
                                        break;

                                    case "1":
                                        CustomFilter cf2 = (CustomFilter)Session["CustomFilter2"];
                                        customFilters.Add(cf2.Ingredients);
                                        break;

                                    case "2":
                                        CustomFilter cf3 = (CustomFilter)Session["CustomFilter3"];
                                        customFilters.Add(cf3.Ingredients);
                                        break;
                                    }
                                }
                                foreach (List <String> ls in customFilters)
                                {
                                    if (!cls.Compare(ls, topValue.foodIngredients))
                                    {
                                        directionFlag = false;
                                        break;
                                    }
                                }
                            }
                            if (directionFlag)
                            {
                                Response.Redirect("PositiveResult.aspx");
                            }
                            else
                            {
                                Response.Redirect("NegativeResult.aspx");
                            }
                        }
                        else if (rdr.HasRows)
                        {
                            rdr.Read();
                            Session["ProductName"] = topValue.foodName;
                            foreach (string s in selected)
                            {
                                int flag = (int)rdr[s];
                                if (flag == 0)
                                {
                                    directionFlag = false;
                                    break;
                                }
                            }
                            //If predefined filters through back false, why should the program
                            //search the custom filters?
                            if (directionFlag)
                            {
                                //Searchs the custom filters
                                List <List <String> > customFilters = new List <List <String> >();
                                foreach (ListItem item in cblFilters.Items)
                                {
                                    switch (item.Value)
                                    {
                                    case "0":
                                        CustomFilter cf1 = (CustomFilter)Session["CustomFilter1"];
                                        customFilters.Add(cf1.Ingredients);
                                        break;

                                    case "1":
                                        CustomFilter cf2 = (CustomFilter)Session["CustomFilter2"];
                                        customFilters.Add(cf2.Ingredients);
                                        break;

                                    case "2":
                                        CustomFilter cf3 = (CustomFilter)Session["CustomFilter3"];
                                        customFilters.Add(cf3.Ingredients);
                                        break;
                                    }
                                }
                                SQLAccess     sqla        = new SQLAccess();
                                List <String> ingredients = new List <String>();
                                sqla.GetIngredients(rdr[selected[0]].ToString(), ingredients);
                                CompareListsSearching cls = new CompareListsSearching();
                                foreach (List <String> ls in customFilters)
                                {
                                    if (!cls.Compare(ls, ingredients))
                                    {
                                        directionFlag = false;
                                        break;
                                    }
                                }
                            }
                            if (directionFlag)
                            {
                                Response.Redirect("PositiveResult.aspx");
                            }
                            else
                            {
                                Response.Redirect("NegativeResult.aspx");
                            }
                        }
                    }
                }
                catch (ThreadAbortException except)
                {
                    Console.WriteLine("Exception ThreadAborted: {0}", except.Message);
                }
                catch
                {
                    Response.Redirect("UnknownResult.aspx");
                }
                finally
                {
                    mysqlConnection.Close();
                }
            }
        }