public void SaveAllVariables(XmlTextWriter writer, ProfileItemPrivacyType profileItemPrivacyType) { if (profileItemPrivacyType == ProfileItemPrivacyType.Private && ApplicationSettings.DisablePersonalProfile) { return; } foreach (var v in _variables) { if ((v.Value as VariableBase).GetPrivacyType() == profileItemPrivacyType || ApplicationSettings.DisablePersonalProfile) { writer.WriteStartElement("Variable"); v.Value.Save(writer); writer.WriteEndElement(); writer.WriteString("\n"); } } }
public void Load(XPathNavigator nav, string profileMainNodeName, ProfileItemPrivacyType profileItemPrivacyType) { var navPointer = nav.Select("/" + profileMainNodeName + "/AccessDescriptors/AccessDescriptor"); while (navPointer.MoveNext()) { var type = navPointer.Current.GetAttribute("Type", navPointer.Current.NamespaceURI); var ad = Utils.FindAndCreate <DescriptorBase>(type); if (ad != null) { ad.Load(navPointer.Current); ad.SetPrivacyType(profileItemPrivacyType); RegisterAccessDescriptor(ad); } } }
/// <summary> /// Загрузка профиля /// </summary> /// <param name="profilePath">Путь к профилю</param> /// <param name="profileItemPrivacyType"></param> /// <returns>Успешно ли прошла загрузка</returns> public static bool Load(string profilePath, ProfileItemPrivacyType profileItemPrivacyType) { if (profileItemPrivacyType == ProfileItemPrivacyType.Public) { Clear(); } // костыль для FS9 var xp = new XPathDocument(profilePath); var nav = xp.CreateNavigator(); var navPointer = nav.Select("/" + ProfileHeader); navPointer.MoveNext(); if (profileItemPrivacyType == ProfileItemPrivacyType.Public) { _currentProfileName = navPointer.Current.GetAttribute("Name", navPointer.Current.NamespaceURI); } if (!Guid.TryParse(navPointer.Current.GetAttribute("Id", navPointer.Current.NamespaceURI), out _currentProfileId)) { _currentProfileId = GlobalId.GetNew(); } if (profileItemPrivacyType == ProfileItemPrivacyType.Public) { _currentProfilePath = profilePath; } else { _currentPersonalProfilePath = profilePath; } navPointer = nav.Select("/" + ProfileHeader + "/Panels/Panel"); while (navPointer.MoveNext()) { var panel = Panel.Load(navPointer.Current); panel.SetPrivacyType(profileItemPrivacyType); PanelStorage.StorePanel(panel); } navPointer = nav.Select("/" + ProfileHeader + "/Variables"); navPointer.MoveNext(); _mainSimulatorProcess = navPointer.Current.GetAttribute("ProcessToManage", navPointer.Current.NamespaceURI); VariableStorage.Load(nav, ProfileHeader, profileItemPrivacyType); AccessDescriptor.Load(nav, ProfileHeader, profileItemPrivacyType); return(true); }
public void SetPrivacyType(ProfileItemPrivacyType profileItemPrivacyType) { _profileItemPrivacyType = profileItemPrivacyType; }
private static void Save(string profileName, string profilePath, ProfileItemPrivacyType profileItemPrivacyType, bool disablePrivateProfile) { if (disablePrivateProfile && profileItemPrivacyType == ProfileItemPrivacyType.Private) { return; } var privateProfilePath = Utils.GetFullSubfolderPath(ProfileAssignmentsFolder); if (!File.Exists(privateProfilePath)) { Directory.CreateDirectory(privateProfilePath); } using (var sw = new StringWriter()) { using (var writer = new XmlTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.Indentation = 4; writer.WriteStartDocument(); // Заголовок writer.WriteStartElement(ProfileHeader); writer.WriteAttributeString("Type", profileItemPrivacyType.ToString()); if (profileItemPrivacyType == ProfileItemPrivacyType.Public) { writer.WriteAttributeString("Name", profileName); } writer.WriteAttributeString("Id", _currentProfileId.ToString()); // Панели writer.WriteStartElement("Panels"); var panels = PanelStorage.GetAllPanels(); foreach (var panel in panels) { if (panel.GetPrivacyType() == profileItemPrivacyType || disablePrivateProfile) { panel.Save(writer); } } writer.WriteEndElement(); // Переменные writer.WriteStartElement("Variables"); writer.WriteAttributeString("ProcessToManage", _mainSimulatorProcess); VariableStorage.SaveAllVariables(writer, profileItemPrivacyType); writer.WriteEndElement(); // AccessDescriptors AccessDescriptor.Save(writer, profileItemPrivacyType, disablePrivateProfile); // Закрываем заголовок writer.WriteEndElement(); writer.WriteEndDocument(); } if (File.Exists(profilePath)) { File.Copy(profilePath, profilePath + ".bak", true); } using (var swToDisk = new StreamWriter(profilePath, false, Encoding.Unicode)) { var parsedXml = XDocument.Parse(sw.ToString()); swToDisk.Write(parsedXml.ToString()); } } if (profileItemPrivacyType == ProfileItemPrivacyType.Public) { var assignmentsPath = GetAssignmentPathForProfile(profilePath); ControlProcessor.Save(assignmentsPath, ProfileHeader, _currentProfileId); } }