public override void SavePersonalizationState(PersonalizationState state) { if (this.IsEnabled) { DictionaryPersonalizationState dictionaryState = state as DictionaryPersonalizationState; if (null == dictionaryState) { throw new ArgumentException("state is not a DictionaryPersonalizationState"); } if (!dictionaryState.ReadOnly) { StringBuilder personalizationBuilder = new StringBuilder(); using (StringWriter stringWriter = new StringWriter(personalizationBuilder)) { using (XmlTextWriter writer = new XmlTextWriter(stringWriter)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("personalization"); writer.WriteAttributeString("version", ReflectionServices.Version()); foreach (string id in dictionaryState.States.Keys) { if (dictionaryState.IsPartPresent(id)) { writer.WriteStartElement("part"); writer.WriteAttributeString("id", id); foreach (string propertyName in dictionaryState.States[id].Keys) { writer.WriteStartElement("property"); writer.WriteAttributeString("name", propertyName); writer.WriteStartAttribute("sensitive"); writer.WriteValue(dictionaryState.States[id][propertyName].IsSensitive); writer.WriteEndAttribute(); writer.WriteStartAttribute("scope"); writer.WriteValue((int)dictionaryState.States[id][propertyName].Scope); writer.WriteEndAttribute(); object value = dictionaryState.States[id][propertyName].Value; if (null != value) { writer.WriteStartElement("value"); writer.WriteStartAttribute("type"); writer.WriteValue(SerializationServices.ShortAssemblyQualifiedName(value.GetType().AssemblyQualifiedName)); writer.WriteEndAttribute(); SerializationServices.Serialize(value, writer); writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); } } writer.WriteEndElement(); writer.WriteEndDocument(); } } PersonalizationStorage.Instance.Write(XmlPersonalizationProvider.StorageKey, personalizationBuilder.ToString()); } } }
public override PersonalizationState LoadPersonalizationState(WebPartManager webPartManager, bool ignoreCurrentUser) { if (null == webPartManager) throw new ArgumentNullException("webPartManager is null"); DictionaryPersonalizationState state = new DictionaryPersonalizationState(webPartManager); string suid = this.GetScreenUniqueIdentifier(); Cache cache = HttpRuntime.Cache; lock (SyncRoot) { Dictionary<string, PersonalizationDictionary> cachedstates = cache[suid] as Dictionary<string, PersonalizationDictionary>; if ((this.IsEnabled && !state.ReadOnly) || null == cachedstates) { string storage = PersonalizationStorage.Instance.Read(XmlPersonalizationProvider.StorageKey, XmlPersonalizationProvider.StorageTemplate); if (!string.IsNullOrEmpty(storage)) { using (XmlTextReader reader = new XmlTextReader(new StringReader(storage))) { reader.MoveToContent(); if (reader.MoveToAttribute("readOnly")) { bool isReadOnly = false; bool.TryParse(reader.Value, out isReadOnly); state.ReadOnly = isReadOnly; reader.MoveToElement(); } if (reader.ReadToDescendant("part")) { int partDepth = reader.Depth; do { reader.MoveToElement(); reader.MoveToAttribute("id"); string id = reader.Value; PersonalizationDictionary dictionary = new PersonalizationDictionary(); reader.MoveToContent(); if (reader.ReadToDescendant("property")) { int propertyDepth = reader.Depth; do { reader.MoveToElement(); reader.MoveToAttribute("name"); string name = reader.Value; reader.MoveToAttribute("sensitive"); bool sensitive = bool.Parse(reader.Value); reader.MoveToAttribute("scope"); PersonalizationScope scope = (PersonalizationScope)int.Parse(reader.Value); object value = null; reader.MoveToContent(); if (reader.ReadToDescendant("value")) { reader.MoveToAttribute("type"); if (reader.HasValue) { Type type = Type.GetType(reader.Value); if (type == null && name == "Configuration") { type = Type.GetType("LWAS.Infrastructure.Configuration.Configuration, LWAS"); } reader.MoveToContent(); value = SerializationServices.Deserialize(type, reader); } } dictionary.Add(name, new PersonalizationEntry(value, scope, sensitive)); reader.MoveToElement(); while (propertyDepth < reader.Depth && reader.Read()) { } } while (reader.ReadToNextSibling("property")); } state.States.Add(id, dictionary); reader.MoveToElement(); while (partDepth < reader.Depth && reader.Read()) { } } while (reader.ReadToNextSibling("part")); } } } string fileToMonitor = PersonalizationStorage.Instance.BuildPath(StorageKey); if (!PersonalizationStorage.Instance.Agent.HasKey(fileToMonitor)) fileToMonitor = PersonalizationStorage.Instance.BuildPath(StorageTemplate); cache.Insert(suid, state.States, new CacheDependency(HttpContext.Current.Server.MapPath(fileToMonitor))); } else state.States = cachedstates; } return state; }
public override PersonalizationState LoadPersonalizationState(WebPartManager webPartManager, bool ignoreCurrentUser) { if (null == webPartManager) { throw new ArgumentNullException("webPartManager is null"); } DictionaryPersonalizationState state = new DictionaryPersonalizationState(webPartManager); string suid = this.GetScreenUniqueIdentifier(); Cache cache = HttpRuntime.Cache; lock (SyncRoot) { Dictionary <string, PersonalizationDictionary> cachedstates = cache[suid] as Dictionary <string, PersonalizationDictionary>; if ((this.IsEnabled && !state.ReadOnly) || null == cachedstates) { string storage = PersonalizationStorage.Instance.Read(XmlPersonalizationProvider.StorageKey, XmlPersonalizationProvider.StorageTemplate); if (!string.IsNullOrEmpty(storage)) { using (XmlTextReader reader = new XmlTextReader(new StringReader(storage))) { reader.MoveToContent(); if (reader.MoveToAttribute("readOnly")) { bool isReadOnly = false; bool.TryParse(reader.Value, out isReadOnly); state.ReadOnly = isReadOnly; reader.MoveToElement(); } if (reader.ReadToDescendant("part")) { int partDepth = reader.Depth; do { reader.MoveToElement(); reader.MoveToAttribute("id"); string id = reader.Value; PersonalizationDictionary dictionary = new PersonalizationDictionary(); reader.MoveToContent(); if (reader.ReadToDescendant("property")) { int propertyDepth = reader.Depth; do { reader.MoveToElement(); reader.MoveToAttribute("name"); string name = reader.Value; reader.MoveToAttribute("sensitive"); bool sensitive = bool.Parse(reader.Value); reader.MoveToAttribute("scope"); PersonalizationScope scope = (PersonalizationScope)int.Parse(reader.Value); object value = null; reader.MoveToContent(); if (reader.ReadToDescendant("value")) { reader.MoveToAttribute("type"); if (reader.HasValue) { Type type = Type.GetType(reader.Value); if (type == null && name == "Configuration") { type = Type.GetType("LWAS.Infrastructure.Configuration.Configuration, LWAS"); } reader.MoveToContent(); value = SerializationServices.Deserialize(type, reader); } } dictionary.Add(name, new PersonalizationEntry(value, scope, sensitive)); reader.MoveToElement(); while (propertyDepth < reader.Depth && reader.Read()) { } }while (reader.ReadToNextSibling("property")); } state.States.Add(id, dictionary); reader.MoveToElement(); while (partDepth < reader.Depth && reader.Read()) { } }while (reader.ReadToNextSibling("part")); } } } string fileToMonitor = PersonalizationStorage.Instance.BuildPath(StorageKey); if (!PersonalizationStorage.Instance.Agent.HasKey(fileToMonitor)) { fileToMonitor = PersonalizationStorage.Instance.BuildPath(StorageTemplate); } cache.Insert(suid, state.States, new CacheDependency(HttpContext.Current.Server.MapPath(fileToMonitor))); } else { state.States = cachedstates; } } return(state); }