/// <summary>
        /// Returns true/false.True after successfully updation of xml text into database for the given element nid
        /// </summary>
        /// <param name="xmlText"></param>
        /// <param name="elementNid"></param>
        /// <returns></returns>
        public bool SaveMetadataTextIntoDB(string xmlText, int elementNid,MetaDataType elementType)
        {
            bool RetVal = false;
            MetaDataBuilder MetadataBuilderObj = new MetaDataBuilder(this.DBConnection, this.DBQueries);

            try
            {
                // update xml text into database
                MetadataBuilderObj.UpdateMetadataInfo(elementType, string.Empty, elementNid, xmlText);

                RetVal = true;
            }
            catch (Exception ex)
            {
                RetVal = false;
                ExceptionFacade.ThrowException(ex);
            }

            return RetVal;
        }
        ///// <summary>
        ///// Removes categories from collection.
        ///// </summary>
        //public void RemoveCategoriesFromCollection()
        //{
        //    this.UpdatedCategories.Clear();
        //}
        /// <summary>
        /// Update category in metadata in database.
        /// </summary>
        /// <param name="oldCategories"></param>
        public void UpdateCategoryInMetadataIntoDB(Dictionary<int, string> oldCategories, MetaDataType mdType)
        {
            DataTable Table = null;
            MetadataInfo MetadataInfoObject = null;
            MetadataElementType MDElementType = MetadataElementType.Indicator;
            string MetadataColumnName = string.Empty;
            string MetadataString = string.Empty;
            string ElementNidColumnName = string.Empty;
            int ElementNid = 0;
            string MetadataText = string.Empty;
            DataTable CategoryTable;

            MetaDataBuilder MDBuilder = new MetaDataBuilder(this.DBConnection, this.DBQueries);

            // 1. get category table order by category_order
            CategoryTable = this.GetCategoryDataTableFrmDB(mdType);

            // 2. Get indicators/Area/Source from database where metadata text is not null or empty
            switch (mdType)
            {

                case MetaDataType.Indicator:
                    MDElementType = MetadataElementType.Indicator;
                    MetadataColumnName = DIColumns.Indicator.IndicatorInfo;
                    ElementNidColumnName = DIColumns.Indicator.IndicatorNId;

                    Table = this.DBConnection.ExecuteDataTable(this.DBQueries.Indicators.GetIndicator(FilterFieldType.None, String.Empty, FieldSelection.Heavy));
                    break;

                case MetaDataType.Map:
                    MDElementType = MetadataElementType.Area;
                    MetadataColumnName = DIColumns.Area_Map_Metadata.MetadataText;
                    ElementNidColumnName = DIColumns.Area_Map_Metadata.MetadataNId;

                    Table = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetAreaMapMetadata(string.Empty));
                    break;

                case MetaDataType.Source:
                    MDElementType = MetadataElementType.Source;
                    MetadataColumnName = DIColumns.IndicatorClassifications.ICInfo;
                    ElementNidColumnName = DIColumns.IndicatorClassifications.ICNId;

                    Table = this.DBConnection.ExecuteDataTable(this.DBQueries.IndicatorClassification.GetIC(FilterFieldType.None, string.Empty, ICType.Source, FieldSelection.Heavy));
                    break;

                default:
                    break;
            }

            // update metedata into database
            foreach (DataRow IndicatorRow in Table.Rows)
            {
                // get metadata from row
                MetadataString = Convert.ToString(IndicatorRow[MetadataColumnName]);
                if (string.IsNullOrEmpty(MetadataString))
                {

                    XmlDocument XmlDoc = new XmlDocument();
                    DevInfo.Lib.DI_LibBAL.Metadata.MetadataConverter.InsertRootNode(XmlDoc);
                    MetadataString = XmlDoc.InnerXml;
                }
                //--check metadata string.
                if (!string.IsNullOrEmpty(MetadataString))
                {

                    // get metadataInfo object from metadata text
                    MetadataInfoObject = this.GetMetadataInfoFrmMetadataText(MetadataString, MDElementType);

                    if (MetadataInfoObject != null)
                    {

                        //-- update metadata categories into indicator metadataInfo object
                        MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, CategoryTable);

                        ElementNid = Convert.ToInt32(IndicatorRow[ElementNidColumnName]);

                        // get new metadata text and update it into database
                        MetadataText = this.GetNewMetadataText(MetadataInfoObject);

                        MDBuilder.UpdateMetadataInfo(mdType, string.Empty, ElementNid, MetadataText);

                        #region"-- to be deleted --"
                        //switch (mdType)
                        //{
                        //    //-if Indicator
                        //    case MetaDataType.Indicator:
                        //        MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Indicator]);
                        //        ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Indicator.IndicatorNId]);
                        //        MetadataText = this.GetNewMetadataText(MetadataInfoObject);
                        //        this.SaveMetadataIntoDatabase(MetaDataType.Indicator, ElementNid, MetadataText);
                        //        break;

                        //    //-If map
                        //    case MetaDataType.Map:
                        //        MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Area]);
                        //        ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Area_Map_Metadata .MetadataNId ]);
                        //        MetadataText = this.GetNewMetadataText(MetadataInfoObject);
                        //        this.SaveMetadataIntoDatabase(MetaDataType.Map, ElementNid, MetadataText);
                        //        break;

                        //    //-If source.
                        //    case MetaDataType.Source:
                        //        MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Source]);
                        //        ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.IndicatorClassifications.ICNId]);
                        //        MetadataText = this.GetNewMetadataText(MetadataInfoObject);
                        //        this.SaveMetadataIntoDatabase(MetaDataType.Source, ElementNid, MetadataText);
                        //        break;
                        //    default:
                        //        break;
                        //}
                        #endregion
                    }

                    //else

                    ////--save metadata into database.
                    //{
                    //    switch (mdType)
                    //    {
                    //        case MetaDataType.Indicator:
                    //            ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Indicator.IndicatorNId]);
                    //            MetadataText = "";
                    //            this.SaveMetadataIntoDatabase(MetaDataType.Indicator, ElementNid, MetadataText);
                    //            break;
                    //        case MetaDataType.Map:
                    //            ElementNid = Convert.ToInt32(IndicatorRow[DIColumns .Area_Map_Metadata.MetadataNId]);
                    //            MetadataText = "";
                    //            this.SaveMetadataIntoDatabase(MetaDataType.Map, ElementNid, MetadataText);
                    //            break;
                    //        case MetaDataType.Source:
                    //            ElementNid = Convert.ToInt32(IndicatorRow[DIColumns .IndicatorClassifications .ICNId ]);
                    //            MetadataText = "";
                    //            this.SaveMetadataIntoDatabase(MetaDataType.Source, ElementNid, MetadataText);
                    //            break;
                    //        default:
                    //            break;
                    //    }
                    //}
                }
            }
        }