Tomboy.Note.LoadForeignNoteXml C# (CSharp) Method

LoadForeignNoteXml() public method

public LoadForeignNoteXml ( string foreignNoteXml, ChangeType changeType ) : void
foreignNoteXml string
changeType ChangeType
return void
		public void LoadForeignNoteXml (string foreignNoteXml, ChangeType changeType)
		{
			if (foreignNoteXml == null)
				throw new ArgumentNullException ("foreignNoteXml");

			// Arguments to this method cannot be trusted.  If this method
			// were to throw an XmlException in the middle of processing,
			// a note could be damaged.  Therefore, we check for parseability
			// ahead of time, and throw early.
			XmlDocument xmlDoc = new XmlDocument ();
			// This will throw an XmlException if foreignNoteXml is not parseable
			xmlDoc.LoadXml (foreignNoteXml);
			xmlDoc = null;

			// Remove tags now, since a note with no tags has
			// no "tags" element in the XML
			List<Tag> newTags = new List<Tag> ();

			using (var xml = new XmlTextReader (new StringReader (foreignNoteXml)) {Namespaces = false}) {
				DateTime date;
	
				while (xml.Read ()) {
					switch (xml.NodeType) {
					case XmlNodeType.Element:
						switch (xml.Name) {
						case "title":
							Title = xml.ReadString ();
							break;
						case "text":
							XmlContent = xml.ReadInnerXml ();
							break;
						case "last-change-date":
							if (DateTime.TryParse (xml.ReadString (), out date))
								data.Data.ChangeDate = date;
							else
								data.Data.ChangeDate = DateTime.Now;
							break;
						case "last-metadata-change-date":
							if (DateTime.TryParse (xml.ReadString (), out date))
								data.Data.MetadataChangeDate = date;
							else
								data.Data.MetadataChangeDate = DateTime.Now;
							break;
						case "create-date":
							if (DateTime.TryParse (xml.ReadString (), out date))
								data.Data.CreateDate = date;
							else
								data.Data.CreateDate = DateTime.Now;
							break;
						case "tags":
							XmlDocument doc = new XmlDocument ();
							List<string> tag_strings = ParseTags (doc.ReadNode (xml.ReadSubtree ()));
							foreach (string tag_str in tag_strings) {
								Tag tag = TagManager.GetOrCreateTag (tag_str);
								newTags.Add (tag);
							}
							break;
						case "open-on-startup":
							bool isStartup;
							if (bool.TryParse (xml.ReadString (), out isStartup))
								IsOpenOnStartup = isStartup;
							break;
						}
						break;
					}
				}
			}

			foreach (Tag oldTag in Tags)
				if (!newTags.Contains (oldTag))
				    RemoveTag (oldTag);
			foreach (Tag newTag in newTags)
				AddTag (newTag);

			// Allow method caller to specify ChangeType (mostly needed by sync)
			QueueSave (changeType);
		}