public MasterPage GetMasterPage(string Name)
        {
            MasterPage         _found  = MasterPage.CreateMasterPage();
            IList <MasterPage> masters = GetMasterPages();

            if (masters == null)
            {
                return(_found);
            }

            rrLock.EnterReadLock();

            try
            {
                foreach (MasterPage master in masters)
                {
                    if (master.Name.Equals(Name))
                    {
                        _found = master;
                        break;
                    }
                }

                return(_found);
            }
            finally
            {
                rrLock.ExitReadLock();
            }
        }
        private IList <MasterPage> GetMasters()
        {
            rrLock.EnterUpgradeableReadLock();

            try
            {
                //Attempt to reload if the settings store is null and a load hasn't been attempted, or if the last load interval is exceeded.
                //in the case of a refresh, then _settingStore will be null and missingSettings will be false.
                if ((masterPages == null) || (DateTime.Now.Subtract(lastLoad).TotalSeconds) > cacheInterval)
                {
                    rrLock.EnterWriteLock();
                    try
                    {
                        if (masterPages == null)
                        {
                            masterPages = new List <MasterPage>();
                            SPWeb currentWeb = SPContext.Current.Web;
                            SPWeb rootWeb    = currentWeb.Site.RootWeb;

                            SPList MasterPageLib = rootWeb.GetCatalog(SPListTemplateType.MasterPageCatalog);//.GetList("_catalogs/masterpage");

                            SPQuery oQuery = new SPQuery();
                            oQuery.Query = string.Format("<Where><Contains><FieldRef Name=\"FileLeafRef\" /><Value Type=\"File\">.master</Value></Contains></Where><OrderBy><FieldRef Name=\"FileLeafRef\" /></OrderBy>");
                            SPListItemCollection colListItems = MasterPageLib.GetItems(oQuery);

                            foreach (SPListItem masterPageItem in colListItems)
                            {
                                MasterPage masterpage = MasterPage.CreateMasterPage();
                                masterpage.UniqueId    = masterPageItem.UniqueId;
                                masterpage.Id          = masterPageItem.ID;
                                masterpage.Name        = masterPageItem.Name;
                                masterpage.Title       = masterpage.Name.Replace(".master", "").TrimEnd();
                                masterpage.Description = masterpage.Title + "description";
                                //TODO
                                //pageLayout.Description = pageLayoutItem["MasterPageDescription"].ToString();
                                masterpage.Url = masterPageItem.Url;

                                masterPages.Add(masterpage);
                            }
                        }
                    }
                    finally
                    {
                        rrLock.ExitWriteLock();
                    }
                }
                return(masterPages);
            }
            finally
            {
                rrLock.ExitUpgradeableReadLock();
            }
        }