/// <summary>
        /// This function is used to Cleanup WWT layers from layer drop down when WWT is not running.
        /// This function performs the following operations:
        ///     1. Remove all WWT only layers.
        ///     2. Mark all Local IN WWT layer as not in sync with WWT.
        ///     3. Set the Selected layer map to null if the Selected WWT layer was deleted in WWT.
        /// </summary>
        /// <param name="workbookMap">
        /// Parent container.
        /// </param>
        internal static void CleanUpWWTLayers(this WorkbookMap workbookMap)
        {
            if (workbookMap != null)
            {
                // 1. Create en empty collection, since this method is called only when WWT is not running. Empty collection is needed
                //    to be passed for UpdateGroupStatus method.
                ICollection <Group> groups           = new List <Group>();
                LayerMap            selectedLayerMap = workbookMap.SelectedLayerMap;

                // 2. Remove all WWT only layers.
                workbookMap.RemoveWWTLayers();

                // 3. On Cleanup, no WWT layers are connected with WWT.
                workbookMap.LocalLayerMaps.ForEach(
                    layer =>
                {
                    // 3.a. Set IsNotInSync.
                    layer.IsNotInSync = true;

                    // 3.b. If the group (reference frame/ Layer Group) is deleted in WWT, then set the IsDeleted flag in Group to true.
                    UpdateGroupStatus(layer.LayerDetails.Group, groups);
                });

                // 4. Set the Selected layer map to null if the Selected WWT layer was deleted in WWT.
                //  If the selected layer is WWT layer/is localInWWT which is not deleted, this will be selected while
                if (selectedLayerMap != null && selectedLayerMap.MapType == LayerMapType.WWT && !workbookMap.Exists(selectedLayerMap.LayerDetails.ID))
                {
                    workbookMap.SelectedLayerMap = null;
                }
            }
        }
        /// <summary>
        /// This function is used to Load all WWT layers on the load of a workbook.
        /// This function performs the following operations:
        ///     1. Remove all WWT only layers.
        ///     2. On load of a workbook, no layers are connected with WWT.
        ///     3. Insert and update deleted WWT Layers.
        /// </summary>
        /// <param name="workbookMap">
        /// Parent container.
        /// </param>
        internal static void LoadWWTLayers(this WorkbookMap workbookMap)
        {
            if (workbookMap != null)
            {
                LayerMap selectedLayerMap = workbookMap.SelectedLayerMap;

                // 1. Remove all WWT only layers.
                workbookMap.RemoveWWTLayers();

                ICollection <Group> groups = WWTManager.GetAllWWTGroups(true);

                // 2. On load of a workbook, no layers are connected with WWT.
                workbookMap.LocalInWWTLayerMaps.ForEach(
                    layer =>
                {
                    // 2.a. Set IsNotInSync.
                    layer.IsNotInSync = true;

                    // 2.b. Update all group references.
                    Group group = SearchGroup(layer.LayerDetails.Group.Name, layer.LayerDetails.Group.Path, groups);
                    if (group != null)
                    {
                        layer.LayerDetails.Group = group;
                    }
                    else
                    {
                        layer.LayerDetails.Group.IsDeleted = true;
                    }
                });

                // 3. Synchronize WWT Layers
                workbookMap.SyncWWTLayers(groups);

                // 4. Set the Selected layer map to null if the Selected WWT layer was deleted in WWT.
                //  If the selected layer is WWT layer/is localInWWT which is not deleted, this will be selected while
                if (selectedLayerMap != null && selectedLayerMap.MapType == LayerMapType.WWT && !workbookMap.Exists(selectedLayerMap.LayerDetails.ID))
                {
                    workbookMap.SelectedLayerMap = null;
                }
            }
        }
        /// <summary>
        /// This function is used to refresh the layer drop down with the latest layers from WWT.
        /// This function performs the following operations:
        ///     1. Remove all WWT only layers.
        ///     2. Insert and update deleted WWT Layers.
        ///     3. Set the Selected layer map to null if the Selected WWT layer was deleted in WWT.
        /// </summary>
        /// <param name="workbookMap">
        /// Parent container.
        /// </param>
        internal static void RefreshLayers(this WorkbookMap workbookMap)
        {
            if (workbookMap != null)
            {
                LayerMap            selectedLayerMap = workbookMap.SelectedLayerMap;
                ICollection <Group> groups           = WWTManager.GetAllWWTGroups(true);

                // 1. Remove all WWT only layers.
                workbookMap.RemoveWWTLayers();

                // 2. Insert and update deleted WWT Layers
                workbookMap.SyncWWTLayers(groups);

                // 3. Set the Selected layer map to null if the Selected WWT layer was deleted in WWT.
                //  If the selected layer is WWT layer/is localInWWT which is not deleted, this will be selected while
                if (selectedLayerMap != null && selectedLayerMap.MapType == LayerMapType.WWT && !workbookMap.Exists(selectedLayerMap.LayerDetails.ID))
                {
                    workbookMap.SelectedLayerMap = null;
                }
            }
        }