using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Administration; using System.Collections.ObjectModel; namespace BlobCacheManager { class BCManager { private bool enabledCheckBox; private int maxSize, maxAge; private string location, owner; private Guid webAppId; private const string ownerPrefix = "bramnuyts_blobcache"; public BCManager(bool enabledCheckBox, int maxSize, string location, int maxAge, string webAppId) { this.enabledCheckBox = enabledCheckBox; this.maxSize = maxSize; this.location = location; this.maxAge = maxAge; this.webAppId = new Guid(webAppId); this.owner = String.Format("{0}_{1}", ownerPrefix, webAppId.ToString()); } public BCManager(string webAppId) { this.webAppId = new Guid(webAppId); this.owner = String.Format("{0}_{1}", ownerPrefix, webAppId.ToString()); } public void UpdateChanges() { SPWebApplication webApplication = SPFarm.Local.GetObject(webAppId) as SPWebApplication; CleanUp(ref webApplication); // enabled or not SPWebConfigModification enabledMod = new SPWebConfigModification(); enabledMod = generateModification("configuration/SharePoint/BlobCache", "enabled", enabledCheckBox.ToString()); // put the max size SPWebConfigModification maxSizeMod = new SPWebConfigModification(); maxSizeMod = generateModification("configuration/SharePoint/BlobCache", "maxSize", maxSize.ToString()); // set the cache location SPWebConfigModification locationMod = new SPWebConfigModification(); locationMod = generateModification("configuration/SharePoint/BlobCache", "location", location); // set the max age SPWebConfigModification maxAgeMod = new SPWebConfigModification(); maxAgeMod = generateModification("configuration/SharePoint/BlobCache", "max-age", maxAge.ToString()); // Apply the modification webApplication.WebConfigModifications.Add(enabledMod); webApplication.WebConfigModifications.Add(maxSizeMod); webApplication.WebConfigModifications.Add(locationMod); webApplication.WebConfigModifications.Add(maxAgeMod); webApplication.Update(); webApplication.Farm.Services.GetValue().ApplyWebConfigModifications(); } private SPWebConfigModification generateModification(string path, string name, string value) { SPWebConfigModification webMod = new SPWebConfigModification(); webMod.Path = path; webMod.Name = name; webMod.Value = value; webMod.Sequence = 0; webMod.Owner = owner; webMod.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureAttribute; return webMod; } public Dictionary GetCurrentMods() { SPWebApplication webApplication = SPFarm.Local.GetObject(webAppId) as SPWebApplication; Collection modsCollection = webApplication.WebConfigModifications; // Clean up the previous mods Dictionary modsDictionary = new Dictionary(); foreach (SPWebConfigModification mod in modsCollection) { if (mod.Owner.Equals(this.owner)) { modsDictionary.Add(mod.Name, mod.Value); } } return modsDictionary; } private void CleanUp(ref SPWebApplication webApplication) { Collection modsCollection = webApplication.WebConfigModifications; // Clean up the previous mods int size = modsCollection.Count; for (int i = 0; i < size; i++) { modsCollection.Remove(modsCollection[0]); } // Save webApplication.Update(); } } }