public GeneralizedSetting RetrieveGeneralizationLevel()
        {
            GeneralizedSetting generalizedSetting = new GeneralizedSetting();

            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.CommandText = @"SELECT marital_status, gender, sex, postal, age FROM generalization_level;";

                using (cmd.Connection = connection)
                {
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();

                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            generalizedSetting.maritalStatus = Convert.ToInt32(reader["marital_status"]);
                            generalizedSetting.gender        = Convert.ToInt32(reader["gender"]);
                            generalizedSetting.sex           = Convert.ToInt32(reader["sex"]);
                            generalizedSetting.age           = Convert.ToInt32(reader["age"]);
                            generalizedSetting.postal        = Convert.ToInt32(reader["postal"]);
                        }
                    }
                }
            }
            return(generalizedSetting);
        }
        public bool IsGeneralizedSettingInvalid()
        {
            GeneralizedSetting generalizedSetting = dataDAL.RetrieveGeneralizationLevel();
            int marital_status = generalizedSetting.maritalStatus;
            int gender         = generalizedSetting.gender;
            int sex            = generalizedSetting.sex;
            int postal         = generalizedSetting.postal;
            int age            = generalizedSetting.age;

            return(marital_status == -1 || gender == -1 || sex == -1 || postal == -1 || age == -1);
        }
        protected void ButtonDownload_Click(object sender, EventArgs e)
        {
            try
            {
                // Retrieve gen settings
                GeneralizedSetting generalizedSetting = dataBLL.GetGeneralizedSettingFromDb();

                #region Validation: Match and Get only valid inputs
                FilteredValues filteredValues = new FilteredValues();

                // Marital Status
                foreach (ListItem item in inputMaritalStatusLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.maritalStatusOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.maritalStatus.Add(item.Value.Trim());
                        }
                    }
                }

                // Sex
                foreach (ListItem item in inputSexLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.sexOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.sex.Add(item.Value.Trim());
                        }
                    }
                }

                // Gender
                foreach (ListItem item in inputGenderLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.genderOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.gender.Add(item.Value.Trim());
                        }
                    }
                }

                // Age
                foreach (ListItem item in inputAgeLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.ageOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.age.Add(item.Value.Trim());
                        }
                    }
                }

                // Postal
                DataTable postalTable = dataBLL.GetPostal();
                foreach (ListItem item in inputPostal.Items)
                {
                    if (item.Selected)
                    {
                        if (postalTable.AsEnumerable().Any(row => row.Field <string>("postal").Equals(item.Value.Trim())))
                        {
                            filteredValues.postal.Add(item.Value.Trim());
                        }
                    }
                }

                // Diagnosis
                DataTable diagnosesTable = dataBLL.GetDiagnoses();
                foreach (ListItem item in inputDiagnosis.Items)
                {
                    if (item.Selected)
                    {
                        if (diagnosesTable.AsEnumerable().Any(row => row.Field <string>("diagnosis_code").Equals(item.Value.Trim())))
                        {
                            filteredValues.diagnoses.Add(item.Value.Trim());
                        }
                    }
                }


                // Record Type
                foreach (ListItem item in inputRecordType.Items)
                {
                    if (item.Selected)
                    {
                        filteredValues.recordType.Add(item.Value.Trim());
                    }
                }

                // Record Diagnosis
                DataTable recordDiagnosesTable = dataBLL.GetRecordDiagnoses();
                foreach (ListItem item in inputRecordDiagnosis.Items)
                {
                    if (item.Selected)
                    {
                        if (recordDiagnosesTable.AsEnumerable().Any(row => row.Field <string>("diagnosis_code").Equals(item.Value.Trim())))
                        {
                            filteredValues.recordDiagnoses.Add(item.Value.Trim());
                        }
                    }
                }

                #endregion

                DataTable anonPatientsTable = dataBLL.GetPatientsForDownload(filteredValues);

                string delimiter = ",";

                using (MemoryStream memoryStream = new MemoryStream())
                {
                    using (StreamWriter streamWriter = new StreamWriter(memoryStream))
                    {
                        for (int i = 0; i < anonPatientsTable.Columns.Count; i++)
                        {
                            streamWriter.Write(anonPatientsTable.Columns[i].ColumnName);
                            streamWriter.Write((i < anonPatientsTable.Columns.Count - 1) ? delimiter : Environment.NewLine);
                        }

                        foreach (DataRow row in anonPatientsTable.Rows)
                        {
                            for (int i = 0; i < anonPatientsTable.Columns.Count; i++)
                            {
                                if (row[i].ToString().IndexOf(",") > -1)
                                {
                                    streamWriter.Write("\"" + row[i].ToString() + "\"");
                                }
                                else
                                {
                                    streamWriter.Write(row[i].ToString());
                                }
                                streamWriter.Write((i < anonPatientsTable.Columns.Count - 1) ? delimiter : Environment.NewLine);
                            }
                        }
                    }

                    Response.Clear();
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.ContentType = "text/csv";
                    Response.Charset     = string.Empty;
                    Response.Cache.SetCacheability(HttpCacheability.Public);
                    Response.AddHeader("Content-Disposition", "attachment; filename=\"anon_data.csv\"");
                    Response.BinaryWrite(memoryStream.ToArray());
                }

                ViewState["GridViewPatientAnonymised"] = null;
                GridViewPatientAnonymised.DataSource   = null;
                GridViewPatientAnonymised.DataBind();
                PanelViewHeader.Visible = false;
                PanelView.Visible       = false;
                UpdatePanelPatientAnonymised.Update();
                Response.Flush();
                Response.Close();
            }
            catch
            {
            }
        }
        protected void ButtonFilter_ServerClick(object sender, EventArgs e)
        {
            try
            {
                // Retrieve gen settings
                GeneralizedSetting generalizedSetting = dataBLL.GetGeneralizedSettingFromDb();

                #region Validation: Match and Get only valid inputs
                FilteredValues filteredValues = new FilteredValues();

                // Marital Status
                foreach (ListItem item in inputMaritalStatusLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.maritalStatusOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.maritalStatus.Add(item.Value.Trim());
                        }
                    }
                }

                // Sex
                foreach (ListItem item in inputSexLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.sexOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.sex.Add(item.Value.Trim());
                        }
                    }
                }

                // Gender
                foreach (ListItem item in inputGenderLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.genderOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.gender.Add(item.Value.Trim());
                        }
                    }
                }

                // Age
                foreach (ListItem item in inputAgeLevel.Items)
                {
                    if (item.Selected)
                    {
                        if (generalizedSetting.ageOptions.Any(t => t.Item1.Equals(item.Value.Trim())))
                        {
                            filteredValues.age.Add(item.Value.Trim());
                        }
                    }
                }

                // Postal
                DataTable postalTable = dataBLL.GetPostal();
                foreach (ListItem item in inputPostal.Items)
                {
                    if (item.Selected)
                    {
                        if (postalTable.AsEnumerable().Any(row => row.Field <string>("postal").Equals(item.Value.Trim())))
                        {
                            filteredValues.postal.Add(item.Value.Trim());
                        }
                    }
                }

                // Diagnosis
                DataTable diagnosesTable = dataBLL.GetDiagnoses();
                foreach (ListItem item in inputDiagnosis.Items)
                {
                    if (item.Selected)
                    {
                        if (diagnosesTable.AsEnumerable().Any(row => row.Field <string>("diagnosis_code").Equals(item.Value.Trim())))
                        {
                            filteredValues.diagnoses.Add(item.Value.Trim());
                        }
                    }
                }


                // Record Type
                foreach (ListItem item in inputRecordType.Items)
                {
                    if (item.Selected)
                    {
                        filteredValues.recordType.Add(item.Value.Trim());
                    }
                }

                // Record Diagnosis
                DataTable recordDiagnosesTable = dataBLL.GetRecordDiagnoses();
                foreach (ListItem item in inputRecordDiagnosis.Items)
                {
                    if (item.Selected)
                    {
                        if (recordDiagnosesTable.AsEnumerable().Any(row => row.Field <string>("diagnosis_code").Equals(item.Value.Trim())))
                        {
                            filteredValues.recordDiagnoses.Add(item.Value.Trim());
                        }
                    }
                }
                #endregion

                List <PatientAnonymised> recordAnonymised = dataBLL.GetPatients(filteredValues);
                ViewState["GridViewPatientAnonymised"] = recordAnonymised;
                GridViewPatientAnonymised.DataSource   = recordAnonymised;
                GridViewPatientAnonymised.DataBind();
                PanelViewHeader.Visible = true;
                PanelView.Visible       = true;
                UpdatePanelPatientAnonymised.Update();

                ScriptManager.RegisterStartupScript(this, GetType(), "alert", "toastr['success']('Data successfully displayed.');", true);
            }
            catch
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "alert", "toastr['error']('Error occured when displaying data.');", true);
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            Master.LiActiveResearcherSearchData();

            if (!IsPostBack)
            {
                GeneralizedSetting generalizedSetting = dataBLL.GetGeneralizedSettingFromDb();

                #region Initialize Controls
                // Age
                labelTitleAge.Attributes.Add("title", "This quasi-identifier has been generalized to Level " + generalizedSetting.age);
                if (generalizedSetting.ageOptions != null)
                {
                    foreach (Tuple <string, string> option in generalizedSetting.ageOptions)
                    {
                        inputAgeLevel.Items.Add(new ListItem(option.Item2, option.Item1));
                    }
                }
                else
                {
                    inputAgeLevel.Attributes.Add("disabled", "true");
                }

                // Marital Status
                labelTitleMaritalStatus.Attributes.Add("title", "This quasi-identifier has been generalized to Level " + generalizedSetting.maritalStatus);
                if (generalizedSetting.maritalStatusOptions != null)
                {
                    foreach (Tuple <string, string> option in generalizedSetting.maritalStatusOptions)
                    {
                        inputMaritalStatusLevel.Items.Add(new ListItem(option.Item2, option.Item1));
                    }
                }
                else
                {
                    inputMaritalStatusLevel.Attributes.Add("disabled", "true");
                }

                // Gender
                labelTitleGender.Attributes.Add("title", "This quasi-identifier has been generalized to Level " + generalizedSetting.gender);
                if (generalizedSetting.genderOptions != null)
                {
                    foreach (Tuple <string, string> option in generalizedSetting.genderOptions)
                    {
                        inputGenderLevel.Items.Add(new ListItem(option.Item2, option.Item1));
                    }
                }
                else
                {
                    inputGenderLevel.Attributes.Add("disabled", "true");
                }

                // Sex
                labelTitleSex.Attributes.Add("title", "This quasi-identifier has been generalized to Level " + generalizedSetting.sex);
                if (generalizedSetting.sexOptions != null)
                {
                    foreach (Tuple <string, string> option in generalizedSetting.sexOptions)
                    {
                        inputSexLevel.Items.Add(new ListItem(option.Item2, option.Item1));
                    }
                }
                else
                {
                    inputSexLevel.Attributes.Add("disabled", "true");
                }

                // Postal
                labelTitlePostalCode.Attributes.Add("title", "This quasi-identifier has been generalized to Level " + generalizedSetting.postal);
                DataTable postalCodeTable = dataBLL.GetPostal();
                if (postalCodeTable.Rows.Contains("*"))
                {
                    inputPostal.Attributes.Add("disabled", "true");
                }
                else
                {
                    foreach (DataRow postalCode in postalCodeTable.Rows)
                    {
                        inputPostal.Items.Add(new ListItem(postalCode["postal"].ToString(), postalCode["postal"].ToString()));
                    }
                }

                // Diagnoses
                DataTable diagnosesTable = dataBLL.GetDiagnoses();
                foreach (DataRow diagnosis in diagnosesTable.Rows)
                {
                    string buffer = diagnosis["diagnosis_code"].ToString();
                    inputDiagnosis.Items.Add(new ListItem(buffer + ": " + diagnosis["diagnosis_description_short"].ToString(), buffer));
                }

                // Record Type
                inputRecordType.Items.Add(new ListItem("Blood Pressure Reading", "Blood Pressure Reading"));
                inputRecordType.Items.Add(new ListItem("ECG Reading", "ECG Reading"));
                inputRecordType.Items.Add(new ListItem("Gait", "Gait"));
                inputRecordType.Items.Add(new ListItem("Height Measurement", "Height Measurement"));
                inputRecordType.Items.Add(new ListItem("MRI", "MRI"));
                inputRecordType.Items.Add(new ListItem("Weight Measurement", "Weight Measurement"));
                inputRecordType.Items.Add(new ListItem("X-ray", "X-ray"));

                // Record Diagnoses
                DataTable recordDiagnosesTable = dataBLL.GetRecordDiagnoses();
                foreach (DataRow diagnosis in recordDiagnosesTable.Rows)
                {
                    string buffer = diagnosis["diagnosis_code"].ToString();
                    inputRecordDiagnosis.Items.Add(new ListItem(buffer + ": " + diagnosis["diagnosis_description_short"].ToString(), buffer));
                }

                GridViewPatientAnonymised.DataBind();
                #endregion
            }
        }