private DI7MetadataCategoryInfo GetMedataCategoryInfo(DataTable table)
        {
            DI7MetadataCategoryInfo RetVal = new DI7MetadataCategoryInfo();

            foreach (DataRow Row in table.Rows)
            {
                RetVal = DI7MetadataCategoryBuilder.GetMetadataCategoryInfo(Row, this.DBConnection, this.DBQueries);
                break;
            }

            return(RetVal);
        }
        /// <summary>
        /// Imports all metadata categories from given source database to current database
        /// </summary>
        /// <param name="srcDBConnection"></param>
        /// <param name="srcDBQueries"></param>
        /// <param name="categoryType"></param>
        public void ImportAllMetadataCategories(DIConnection srcDBConnection, DIQueries srcDBQueries, MetadataElementType categoryType)
        {
            // import by GID. If GID exists then update existing category otherwise insert it into current database            // update process will update in current langauge but insert process will insert in all langauges

            DataTable SrcCategoryTable = null;
            DI7MetadataCategoryInfo SrcCategoryInfo = null;
            DataTable TrgCategoryTable     = null;
            int       TrgCategoryNid       = 0;
            int       TrgCategoryParentNid = -1;

            try
            {
                // get source category table
                SrcCategoryTable = srcDBConnection.ExecuteDataTable(srcDBQueries.Metadata_Category.GetMetadataCategories(FilterFieldType.Type, DIQueries.MetadataElementTypeText[categoryType]));

                // get target(current database) category table
                TrgCategoryTable = this.DBConnection.ExecuteDataTable(this.DBQueries.Metadata_Category.GetMetadataCategories(FilterFieldType.Type, DIQueries.MetadataElementTypeText[categoryType]));

                // import categories & sub categories from source database into current database
                foreach (DataRow SrcRow in SrcCategoryTable.Select(Metadata_Category.ParentCategoryNId + "=-1"))
                {
                    // get category from source database
                    SrcCategoryInfo = DI7MetadataCategoryBuilder.GetMetadataCategoryInfo(SrcRow, srcDBConnection, srcDBQueries);
                    // check src category gid exists in current(target) database of not
                    TrgCategoryNid       = 0;
                    TrgCategoryParentNid = -1;

                    foreach (DataRow TrgRow in TrgCategoryTable.Select(Metadata_Category.CategoryGId + "='" + DIQueries.RemoveQuotesForSqlQuery(SrcCategoryInfo.CategoryGID) + "' OR " + Metadata_Category.CategoryName + "='" + DIQueries.RemoveQuotesForSqlQuery(SrcCategoryInfo.CategoryName) + "'"))
                    {
                        // if exists then get nid and parent nid
                        TrgCategoryNid       = Convert.ToInt32(TrgRow[Metadata_Category.CategoryNId]);
                        TrgCategoryParentNid = Convert.ToInt32(TrgRow[Metadata_Category.ParentCategoryNId]);
                    }
                    // update nid & parent nid in  src category info
                    SrcCategoryInfo.CategoryNId = TrgCategoryNid;
                    SrcCategoryInfo.ParentNid   = TrgCategoryParentNid;

                    if (TrgCategoryNid > 0)
                    {
                        // update category info
                        this.UpdateMetadataCategory(SrcCategoryInfo);
                    }
                    else
                    {
                        // insert category into current database
                        TrgCategoryNid = this.InsertIntoDatabase(SrcCategoryInfo);
                    }

                    #region -- insert/update sub categories into current database --

                    // insert/update only if target category parent nid is equal to -1 (means at level1)
                    if (TrgCategoryParentNid == -1)
                    {
                        foreach (DI7MetadataCategoryInfo SrcSubCategory in SrcCategoryInfo.SubCategories.Values)
                        {
                            SrcSubCategory.CategoryNId = 0;
                            SrcSubCategory.ParentNid   = TrgCategoryNid;

                            // check sub category exists ( where gid=<src gid> and parent nid=<trg nid>
                            foreach (DataRow TrgSubCategoryRow in TrgCategoryTable.Select(Metadata_Category.CategoryGId + "='" + DIQueries.RemoveQuotesForSqlQuery(SrcSubCategory.CategoryGID) + "' AND " + Metadata_Category.ParentCategoryNId + "=" + TrgCategoryNid))
                            {
                                // if exists then get nid
                                SrcSubCategory.CategoryNId = Convert.ToInt32(TrgSubCategoryRow[Metadata_Category.CategoryNId]);
                            }

                            if (SrcSubCategory.CategoryNId > 0)
                            {
                                // update sub category into current database
                                this.UpdateMetadataCategory(SrcSubCategory);
                            }
                            else
                            {
                                // insert sub category into current database
                                this.InsertIntoDatabase(SrcSubCategory);
                            }
                        }
                    }

                    #endregion
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler.ExceptionFacade.ThrowException(ex);
            }
        }