public void SaveNewQuery(CloseableTabItem tabItem, SelectQueryBuilder QueryBulder)
        {
            string messageBoxText = "Do you want to save current query?";
            string caption = "Current Query";
            MessageBoxButton button = MessageBoxButton.YesNoCancel;
            MessageBoxImage icon = MessageBoxImage.Question;
            MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon);
            switch (result)
            {
                case MessageBoxResult.Yes:
                    // User pressed Yes button
                    //save save query
                    ResultViewModel rv = (ResultViewModel)this.result;
                    string FileName1 = System.String.Empty;
                    if (rv.isNew == false)
                    {
                        FileName1 = rv.directoryPath + tabItem.Header.ToString() + ".xml";
                    }
                    else
                    {
                        MainWindow mw = new MainWindow();
                        FileName1 = mw.OpenSaveDialog(tabItem.Name);
                    }
                    if (FileName1 != System.String.Empty)
                    {
                        XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                        StreamWriter swriter = new StreamWriter(FileName1);
                        SerializerObj.Serialize(swriter, QueryBulder);

                        swriter.Flush();
                        swriter.Close();
                        string[] splitedArray = FileName1.Split('\\');
                        string tabItemHeader = splitedArray[splitedArray.Length - 1].Remove((splitedArray[splitedArray.Length - 1]).Length - 4, 4);
                        tabItem.Header = tabItemHeader;
                        //we saved the query change isModified to false
                        rv.isModified = false;
                        tabItem.labelStar.Content = "";
                        MessageBox.Show("query saved successfully");
                        /**************************/
                        this.result.directoryPath = FileName1.Replace(splitedArray[splitedArray.Length - 1], "");
                        /**************************/
                    }

                    break;
                case MessageBoxResult.No:
                    // User pressed No button
                    TabControl tabControl = tabItem.Parent as TabControl;
                    if (tabControl != null)
                        tabControl.Items.Remove(tabItem);
                    break;
                case MessageBoxResult.Cancel:
                    // User pressed Cancel button
                    break;
            }
        }
        public void CheckQueryNeededToBeSaved(CloseableTabItem tabItem, String caller)
        {
            /*****************To Save Modified Query***********/

            string directoryPath = this.result.directoryPath;

            MainWindow mainWindow = (MainWindow)GetTopLevelControl(this.ShortCutsToolBar);
            mainWindow.ValidateAllTabCntrls(this);
            SelectQueryBuilder queryBuilder = mainWindow.LoadSelectQueryBuilderNew(this);

            MainGirdViewControl mainGridView1 = new MainGirdViewControl(queryBuilder, mainWindow.CurrentDatabaseName);
            this.result = mainGridView1.result;
            if (directoryPath != null)
            {
                this.result.isModified = true;
                this.result.isNew = false;
                this.result.directoryPath = directoryPath;
            }
            else
            {
                this.result.isModified = true;
                this.result.isNew = true;
            }

            /********************************************/

            ResultViewModel rv = (ResultViewModel)this.result;   

            if (this.Content != null)
            {
                if (rv.isModified)
                {
                    if (rv.isNew == false)
                    {
                        switch (caller)
                        {
                            case "Save":

                                string FileName = rv.directoryPath + tabItem.Header.ToString() + ".xml";
                                if (FileName != System.String.Empty)
                                {
                                    XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                                    StreamWriter swriter = new StreamWriter(FileName);
                                    SerializerObj.Serialize(swriter, rv.QueryBulder);

                                    swriter.Flush();
                                    swriter.Close();
                                    tabItem.Header = tabItem.Header.ToString();
                                    //we saved the query change isModified to false
                                    rv.isModified = false;
                                    tabItem.labelStar.Content = "";
                                    MessageBox.Show("query saved successfully");
                                }
                                break;

                            case "SaveAs":

                                MainWindow mw = new MainWindow();
                                string FileName1 = mw.OpenSaveDialog(tabItem.Name);

                                if (FileName1 != System.String.Empty)
                                {
                                    XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                                    StreamWriter swriter = new StreamWriter(FileName1);
                                    SerializerObj.Serialize(swriter, rv.QueryBulder);

                                    swriter.Flush();
                                    swriter.Close();
                                    string[] splitedArray = FileName1.Split('\\');
                                    string tabItemHeader = splitedArray[splitedArray.Length - 1].Remove((splitedArray[splitedArray.Length - 1]).Length - 4, 4);
                                    tabItem.Header = tabItemHeader;
                                    //we saved the query change isModified to false
                                    rv.isModified = false;
                                    tabItem.labelStar.Content = "";
                                    MessageBox.Show("query saved successfully");
                                }
                                break;

                            case "SaveXML":

                                FileName = ConfigurationManager.AppSettings["DerivedTablesPath"].ToString() + flName + ".xml";
                                if (File.Exists(FileName))
                                {
                                    MessageBox.Show("File already exists....");
                                }
                                else
                                {
                                    if (FileName != System.String.Empty)
                                    {
                                        XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                                        StreamWriter swriter = new StreamWriter(FileName);
                                        SerializerObj.Serialize(swriter, rv.QueryBulder);

                                        swriter.Flush();
                                        swriter.Close();
                                        tabItem.Header = tabItem.Header.ToString();

                                        rv.isModified = false;
                                        tabItem.labelStar.Content = "";
                                        MessageBox.Show("query saved successfully");

                                        connectionString = ConfigurationManager.AppSettings["DefaultDBConn"];
                                        CurrentDatabaseName = ConfigurationManager.AppSettings["DefaultDatabase"];

                                        connectionString = connectionString + "Database=" + CurrentDatabaseName + ";";
                                        DependencyObject parent = this.GetTopLevelControl(this);

                                        try
                                        {
                                            List<MySQLData.Schema> schemas = MySQLData.DataAccess.ADODataBridge.getSchemaTree(connectionString, CurrentDatabaseName, ConfigurationManager.AppSettings["DerivedTablesPath"]);//DataAccess.GetDatabases();
                                            MainViewModel viewModel = new MainViewModel(schemas);

                                            if (parent != null)
                                            {
                                                MainWindow m = (MainWindow)parent;
                                                m.MainTreeView.DataContext = viewModel;
                                                listOfTable = new List<MySQLData.Table>();
                                                foreach (MySQLData.Schema schema in schemas)
                                                {
                                                    listOfTable.AddRange(schema.tables);
                                                }
                                                if (listOfTable != null)
                                                {

                                                }
                                            }

                                        }
                                        catch (MySql.Data.MySqlClient.MySqlException ex)
                                        {
                                            if (isErrorLoggingOn)
                                            {
                                                LogError.Log_Err("MainWindow Constructor", ex);
                                                DisplayErrorMessage();
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            if (isErrorLoggingOn)
                                            {
                                                LogError.Log_Err("MainWindow Constructor", ex);
                                                DisplayErrorMessage();
                                            }
                                        }
                                        if (parent != null)
                                        {
                                            MainWindow m = (MainWindow)parent;
                                            var collView = CollectionViewSource.GetDefaultView(m.tabControlCustomQuery.Items);
                                            collView.CurrentChanging += this.OnTabItemSelecting;
                                        }
                                    }
                                }
                                break;
                        }
                    }
                    else
                    {
                        switch (caller)
                        {
                            case "Save":
                                if (rv.TotalIRows != 0)
                                {
                                    SaveNewQuery(tabItem, rv.QueryBulder);
                                }
                                break;

                            case "SaveAs":

                                if (rv.TotalIRows != 0)
                                {
                                    //save save as the query
                                    MainWindow mw = new MainWindow();
                                    string FileName = mw.OpenSaveDialog(tabItem.Name);

                                    if (FileName != System.String.Empty)
                                    {
                                        XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                                        StreamWriter swriter = new StreamWriter(FileName);
                                        SerializerObj.Serialize(swriter, rv.QueryBulder);

                                        swriter.Flush();
                                        swriter.Close();
                                        string[] splitedArray = FileName.Split('\\');
                                        string tabItemHeader = splitedArray[splitedArray.Length - 1].Remove((splitedArray[splitedArray.Length - 1]).Length - 4, 4);
                                        tabItem.Header = tabItemHeader;
                                        //we saved the query change isModified to false
                                        rv.isModified = false;
                                        tabItem.labelStar.Content = "";
                                        MessageBox.Show("query saved successfully");
                                    }
                                }
                                break;

                            case "SaveXML":
                                string FileNameXML = ConfigurationManager.AppSettings["DerivedTablesPath"].ToString() + flName + ".xml";
                                if (File.Exists(FileNameXML))
                                {
                                    MessageBox.Show("File already exists....");
                                }
                                else
                                {
                                    if (FileNameXML != System.String.Empty)
                                    {
                                        XmlSerializer SerializerObj = new XmlSerializer(typeof(SelectQueryBuilder));
                                        StreamWriter swriter = new StreamWriter(FileNameXML);
                                        SerializerObj.Serialize(swriter, rv.QueryBulder);

                                        swriter.Flush();
                                        swriter.Close();
                                        tabItem.Header = tabItem.Header.ToString();

                                        rv.isModified = false;
                                        tabItem.labelStar.Content = "";
                                        MessageBox.Show("query saved successfully");


                                        connectionString = ConfigurationManager.AppSettings["DefaultDBConn"];
                                        CurrentDatabaseName = ConfigurationManager.AppSettings["DefaultDatabase"];

                                        connectionString = connectionString + "Database=" + CurrentDatabaseName + ";";
                                        DependencyObject parent = this.GetTopLevelControl(this);

                                        try
                                        {
                                            List<MySQLData.Schema> schemas = MySQLData.DataAccess.ADODataBridge.getSchemaTree(connectionString, CurrentDatabaseName, ConfigurationManager.AppSettings["DerivedTablesPath"]);
                                            MainViewModel viewModel = new MainViewModel(schemas);

                                            if (parent != null)
                                            {
                                                MainWindow m = (MainWindow)parent;
                                                m.MainTreeView.DataContext = viewModel;
                                                listOfTable = new List<MySQLData.Table>();
                                                foreach (MySQLData.Schema schema in schemas)
                                                {
                                                    listOfTable.AddRange(schema.tables);
                                                }
                                                if (listOfTable != null)
                                                {
                                                    
                                                }
                                            }

                                        }
                                        catch (MySql.Data.MySqlClient.MySqlException ex)
                                        {
                                            if (isErrorLoggingOn)
                                            {
                                                LogError.Log_Err("MainWindow Constructor", ex);
                                                DisplayErrorMessage();
                                            }
                                        }
                                        catch (Exception ex)
                                        {
                                            if (isErrorLoggingOn)
                                            {
                                                LogError.Log_Err("MainWindow Constructor", ex);
                                                DisplayErrorMessage();
                                            }
                                        }
                                        if (parent != null)
                                        {
                                            MainWindow m = (MainWindow)parent;
                                            var collView = CollectionViewSource.GetDefaultView(m.tabControlCustomQuery.Items);
                                            collView.CurrentChanging += this.OnTabItemSelecting;
                                        }
                                    }
                                }
                                break;
                        }
                    }
                }
                else
                {
                    switch (caller)
                    {
                        case "Save":
                            break;
                        case "SaveAs":
                            break;
                        case "SaveXML":
                            break;
                        case "CloseTab":
                            TabControl tabControl = tabItem.Parent as TabControl;
                            if (tabControl != null)
                                tabControl.Items.Remove(tabItem);
                            break;
                    }
                }
            }
            else
            {
                if (caller == "CloseTab")
                {
                    TabControl tabControl = tabItem.Parent as TabControl;
                    if (tabControl != null)
                        tabControl.Items.Remove(tabItem);
                }
            }
        }