// don't be scared by the absolute numbers for the pieces of the document // they can be changed, they ONLY refer to the structure that we // use in the DEFAULT_DOC. // On reading the XML document, we use element names public override XmlDocument GetXml(SerializableUniverse serializablePiece) { XmlDocument doc = new XmlDocument(); doc.LoadXml(DEFAULT_DOC); // READ IN THE TEXT BELOW WHICH IS THE // STRUCTURE OF THE DOCUMENT XmlElement kbaseNode = (XmlElement)doc.FirstChild; XmlElement versionNode = (XmlElement)kbaseNode.FirstChild; XmlText text = doc.CreateTextNode(serialize(serializablePiece.Version)); versionNode.AppendChild(text); XmlElement propertiesNode = (XmlElement)kbaseNode.ChildNodes[1]; foreach (int id in serializablePiece.propertyIds) { makeChildXmlAndAppend(doc, propertiesNode, id); } XmlElement propertySetsNode = (XmlElement)kbaseNode.ChildNodes[2]; foreach (int id in serializablePiece.propertySetIds) { makeChildXmlAndAppend(doc, propertySetsNode, id); } if (serializablePiece.UnknownPieceToReserialize != null) { XmlNodeList unknowns = serializablePiece.UnknownPieceToReserialize as XmlNodeList; foreach (XmlNode child in unknowns) { XmlNode childClone = doc.ImportNode(child, true); kbaseNode.AppendChild(childClone); } } XmlElement topLevelIdsNode = (XmlElement)kbaseNode.ChildNodes[3]; foreach (int id in serializablePiece.topLevelIds) { makeChildXmlAndAppend(doc, topLevelIdsNode, id); } XmlElement snippetsNode = (XmlElement)kbaseNode.ChildNodes[4]; // explanation of nums above foreach (SerializableSnippet snippet in serializablePiece.snippets.Values) { makeSnippetXmlAndAppend(doc, snippetsNode, snippet); } Encryption encryption = Universe.Instance.encryption; if (encryption.On) { XmlEncryption.EncryptElement(doc.FirstChild, encryption.Password, true); } return doc; }
public void Save(SerializableUniverse serializablePiece, string path) { System.IO.TextWriter writer = null; try { writer = new System.IO.StreamWriter(path); Save(serializablePiece,writer); } finally { if (writer != null) writer.Close(); } }
public void Save(SerializableUniverse serializablePiece, string path) { System.IO.TextWriter writer = null; bool undoable = false; FileInfo backupFile = new FileInfo(path + ".bak"); FileInfo file = new FileInfo(path); try { // make a backup of the old file first // backup the old backup file if it exists if (backupFile.Exists) backupFile.Delete(); if (file.Exists) file.MoveTo(backupFile.FullName); undoable = true; writer = new System.IO.StreamWriter(path); Save(serializablePiece,writer); undoable = false; } catch (Exception e) { if (undoable) { if (file.Exists) { // the writer could lock up the file, so we close it // just in case if (writer != null) writer.Close(); file.Delete(); } if (backupFile.Exists) backupFile.MoveTo(file.FullName); } throw e; } finally { if (writer != null) writer.Close(); } }
public override XmlDocument GetXml(SerializableUniverse serializablePiece) { XmlDocument doc = new XmlDocument(); doc.LoadXml(DEFAULT_DOC); // READ IN THE TEXT BELOW WHICH IS THE // STRUCTURE OF THE DOCUMENT XmlElement kbaseNode = (XmlElement)doc.FirstChild; XmlElement versionNode = (XmlElement)kbaseNode.FirstChild; XmlText text = doc.CreateTextNode(serialize(serializablePiece.Version)); versionNode.AppendChild(text); XmlElement propertiesNode = (XmlElement)kbaseNode.ChildNodes[1]; foreach (Snippet snippet in Universe.Instance.propertiesPane.getProperties()) { makeChildXmlAndAppend(doc, propertiesNode, snippet.Id); } XmlElement topLevelIdsNode = (XmlElement)kbaseNode.ChildNodes[2]; foreach (int id in serializablePiece.topLevelIds) { makeChildXmlAndAppend(doc, topLevelIdsNode, id); } XmlElement snippetsNode = (XmlElement)kbaseNode.ChildNodes[3]; foreach (SerializableSnippet snippet in serializablePiece.snippets.Values) { makeSnippetXmlAndAppend(doc, snippetsNode, snippet); } Encryption encryption = Universe.Instance.encryption; if (encryption.On) { XmlEncryption.EncryptElement(doc.FirstChild, encryption.Password, true); } return doc; }
public SerializableUniverse GetSerializablePiece() { ArrayList snippets = new ArrayList(this.Count); foreach (SnippetTNode node in this) { snippets.Add(node.Snippet); } SerializableUniverse serializable = new SerializableUniverse(snippets); serializable.Version = Version; return serializable; }
public override object OnSelectedNodesDrag() { try { // if we're client server, this is actually just a shell... // see OnDragDrop which will, if we're not pasting to another // running TheKbase.exe, use a locally cached version that // has not been serialized at all SerializableUniverse serializable = new SerializableUniverse(GetSelectedNodesAsSnippets()); // cache our serializable so we can figure out if the drag is local hashCodeOfNodesBeingDragged = serializable.GetHashCode(); return serializable; } catch (Exception e2) { MainForm.ShowError(e2); return null; } }
void Paste(SerializableUniverse serializable, Snippet to) { List<Snippet> newSnippets = serializable.Restore(to, true); foreach (Snippet snippet in newSnippets) { snippet.UI.GetInstanceUnder(to).Select(); } }
public void Save(SerializableUniverse serializablePiece, System.IO.TextWriter writer) { XmlDocument doc = GetXml(serializablePiece); doc.Save(writer); }
public abstract XmlDocument GetXml(SerializableUniverse serializablePiece);
/// <summary> /// returns true if save suceeds, will NOT call saveas! /// </summary> /// <returns></returns> public bool Save() { bool success = false; detailPane.Save(); SerializableUniverse universe = new SerializableUniverse(ModelGateway.TopLevelSnippet.Children); try { Logger.Log("Saving TheKBase File to " + Path); DateTime marker = DateTime.Now; universe.Save(Path); mainForm.SetStatus("Sucessfully saved to " + Path + ""); success = true; ModelGateway.Dirty = false; Logger.LogTimer(marker, "Saving file"); } catch (Exception ex) { MainForm.ShowError(ex, "Error saving"); } return success; }
/// <summary> /// </summary> /// <returns></returns> public void Export(string xsl, string outputFile) { detailPane.Save(); SerializableUniverse universe = new SerializableUniverse(ModelGateway.TopLevelSnippet.Children); universe.Export(xsl, outputFile); }
public override SerializableUniverse Restore(string path) { XmlReader reader = null; try { SerializableUniverse retVal = new SerializableUniverse(); XmlDocument doc = new XmlDocument(); reader = new XmlTextReader(path); doc.Load(reader); XmlElement kbaseNode = (XmlElement)doc.GetElementsByTagName("Kbase")[0]; if (kbaseNode.FirstChild.Name.Equals(XmlEncryption.ENCRYPTED_NODE_NAME)) { string password = null; bool success = false; XmlNode encryptedNode = kbaseNode.FirstChild; while (!success) { password = Universe.Instance.encryption.SolicitPasswordOnLoad(password); if (password == null) throw new Exception("User cancelled."); try { XmlEncryption.DecryptElement(encryptedNode, password); Universe.Instance.encryption.Password = password; success = true; } catch (Exception ex) { Logger.Log("Failed decryption " + ex.Message); } } } // version node XmlElement versionNode = (XmlElement)kbaseNode.GetElementsByTagName("Version")[0]; XmlText text = (XmlText)versionNode.FirstChild; retVal.Version = deserializeDateTime(text.Value); XmlElement topLevelIdNode = (XmlElement)kbaseNode.GetElementsByTagName("TopLevelIds")[0]; foreach (XmlElement idXml in topLevelIdNode.ChildNodes) { int id = HandleId(idXml); retVal.topLevelIds.Add(id); } XmlElement snippetsNode = (XmlElement)kbaseNode.GetElementsByTagName("Snippets")[0]; foreach (XmlElement snippetXml in snippetsNode.ChildNodes) { SerializableSnippet sSnippet = HandleSnippet(snippetXml); retVal.snippets.Add(sSnippet.Id,sSnippet); } XmlElement propertiesNode = (XmlElement)kbaseNode.GetElementsByTagName("Properties")[0]; if (propertiesNode != null) // for backwards compatability { foreach (XmlElement idXml in propertiesNode.ChildNodes) { int id = HandleId(idXml); retVal.propertyIds.Add(id); } } return retVal; } finally { if (reader!=null) reader.Close(); } }
public SerializableUniverse GetSerializablePiece() { List<Kbase.Model.Snippet> snippets = new List<Kbase.Model.Snippet>(this.Count); foreach (SnippetTNode node in this) { snippets.Add(node.Snippet); } SerializableUniverse serializable = new SerializableUniverse(snippets); serializable.Version = Version; return serializable; }