private string GetDescription() { if (this.NodeNature == Nature.Deprecated) { if (string.IsNullOrEmpty(this.LegacyAssembly)) { var format = "Node of type '{0}' is now deprecated"; return(string.Format(format, this.LegacyNodeName)); } else { var format = "Node of type '{0}' ({1}) is now deprecated"; return(string.Format(format, this.LegacyNodeName, this.LegacyAssembly)); } } else if (this.NodeNature == Nature.Unresolved) { if (string.IsNullOrEmpty(this.LegacyAssembly)) { var format = "Node of type '{0}' cannot be resolved"; return(string.Format(format, this.LegacyNodeName)); } else { var format = "Node of type '{0}' ({1}) cannot be resolved"; return(string.Format(format, this.LegacyNodeName, this.LegacyAssembly)); } } var message = "Unhandled 'DummyNode.NodeNature' value: {0}"; throw new InvalidOperationException(string.Format(message, NodeNature.ToString())); }
private void SaveNode(XmlDocument xmlDoc, XmlElement nodeElement, SaveContext context) { if (context == SaveContext.Copy || context == SaveContext.Undo) { //Dump all the information into memory nodeElement.SetAttribute("inputCount", InputCount.ToString()); nodeElement.SetAttribute("outputCount", OutputCount.ToString()); nodeElement.SetAttribute("legacyNodeName", LegacyNodeName); nodeElement.SetAttribute("legacyAssembly", LegacyAssembly); nodeElement.SetAttribute("nodeNature", NodeNature.ToString()); if (OriginalNodeContent != null) { XmlElement originalNode = xmlDoc.CreateElement("OriginalNodeContent"); XmlElement nodeContent = nodeElement.OwnerDocument.CreateElement(OriginalNodeContent.Name); foreach (XmlAttribute attribute in OriginalNodeContent.Attributes) { nodeContent.SetAttribute(attribute.Name, attribute.Value); } for (int i = 0; i < OriginalNodeContent.ChildNodes.Count; i++) { XmlNode child = nodeContent.OwnerDocument.ImportNode(OriginalNodeContent.ChildNodes[i], true); nodeContent.AppendChild(child.CloneNode(true)); } originalNode.AppendChild(nodeContent); nodeElement.AppendChild(originalNode); } } if (context == SaveContext.File) { //When save files, only save the original node's content, //instead of saving the dummy node. if (OriginalNodeContent != null) { nodeElement.RemoveAll(); foreach (XmlAttribute attribute in OriginalNodeContent.Attributes) { nodeElement.SetAttribute(attribute.Name, attribute.Value); } //overwrite the guid/x/y value of the original node. nodeElement.SetAttribute("guid", nodeElement.GetAttribute("guid")); nodeElement.SetAttribute("x", nodeElement.GetAttribute("x")); nodeElement.SetAttribute("y", nodeElement.GetAttribute("y")); for (int i = 0; i < OriginalNodeContent.ChildNodes.Count; i++) { XmlNode child = nodeElement.OwnerDocument.ImportNode(OriginalNodeContent.ChildNodes[i], true); nodeElement.AppendChild(child.CloneNode(true)); } } else { nodeElement.SetAttribute("inputCount", InputCount.ToString()); nodeElement.SetAttribute("outputCount", OutputCount.ToString()); nodeElement.SetAttribute("legacyNodeName", LegacyNodeName); nodeElement.SetAttribute("legacyAssembly", LegacyAssembly); nodeElement.SetAttribute("nodeNature", NodeNature.ToString()); } } }