private void LoadSortedSet(SiteMapIntellisenseData data, Func <SiteMapIntellisenseData, SortedSet <string> > getSortedSet)
        {
            var thisSortedSet = getSortedSet(this);
            var dataSortedSet = getSortedSet(data);

            foreach (var value in thisSortedSet)
            {
                if (!thisSortedSet.Contains(value))
                {
                    thisSortedSet.Add(value);
                }
            }
        }
        private static SiteMapIntellisenseData Get(Guid connectionId)
        {
            var filePath = GetFilePath(connectionId);

            SiteMapIntellisenseData result = null;

            if (File.Exists(filePath))
            {
                DataContractSerializer ser = new DataContractSerializer(typeof(SiteMapIntellisenseData));

                using (Mutex mutex = new Mutex(false, FileOperations.GetMutexName(filePath)))
                {
                    try
                    {
                        mutex.WaitOne();

                        using (var sr = File.OpenRead(filePath))
                        {
                            result              = ser.ReadObject(sr) as SiteMapIntellisenseData;
                            result.FilePath     = filePath;
                            result.ConnectionId = connectionId;
                        }
                    }
                    catch (Exception ex)
                    {
                        DTEHelper.WriteExceptionToLog(ex);

                        FileOperations.CreateBackUpFile(filePath, ex);
                    }
                    finally
                    {
                        mutex.ReleaseMutex();
                    }
                }
            }

            return(result);
        }
        private void MergeDataFromDisk(SiteMapIntellisenseData data)
        {
            if (data == null)
            {
                return;
            }

            CreateCollectionIfNeaded();

            LoadSortedSet(data, d => d.Urls);

            LoadSortedSet(data, d => d.ResourceIds);
            LoadSortedSet(data, d => d.DescriptionResourceIds);
            LoadSortedSet(data, d => d.ToolTipResourseIds);

            LoadSortedSet(data, d => d.Icons);

            LoadSortedSet(data, d => d.GetStartedPanePaths);
            LoadSortedSet(data, d => d.GetStartedPanePathOutlooks);
            LoadSortedSet(data, d => d.GetStartedPanePathAdmins);
            LoadSortedSet(data, d => d.GetStartedPanePathAdminOutlooks);

            LoadSortedSet(data, d => d.CheckExtensionProperties);

            foreach (var dashboardData in data.Dashboards.Values)
            {
                if (!this.Dashboards.ContainsKey(dashboardData.FormId.Value))
                {
                    this.Dashboards.TryAdd(dashboardData.FormId.Value, dashboardData);
                }
                else
                {
                    this.Dashboards[dashboardData.FormId.Value].MergeDataFromDisk(dashboardData);
                }
            }
        }