private Either <GraphAndUI <TUIRawData>, LoadError> ReadEditable(XElement node, IDataSource datasource, object documentID) { Id <NodeTemp> id = Id <NodeTemp> .Parse(node.Attribute("Id").Value); Id <NodeTypeTemp> guid = ReadType(node); INodeDataGenerator editableGenerator = datasource.GetNode(guid); Either <GraphAndUI <TUIRawData>, LoadError> result; var parameterNodes = node.Elements("Parameter"); var parameterData = parameterNodes.Select(p => new NodeDataGeneratorParameterData(Id <Parameter> .Parse(p.Attribute("guid").Value), p.Attribute("value").Value)).ToList(); if (editableGenerator != null) { IConversationNodeData editable = editableGenerator.Generate(id, parameterData, documentID); result = new GraphAndUI <TUIRawData>(editable, m_nodeUIDeserializer.Read(node)); } else { var parameters = parameterData.Select(p => new UnknownParameter(p.Guid, p.Value)); UnknownEditable editable = new UnknownEditable(id, guid, parameters); result = new GraphAndUI <TUIRawData>(editable, m_nodeUIDeserializer.Read(node)); } return(result); }
//private void WriteOutputs(IEditable ng, XElement node) //{ // foreach (var n in ng.Outputs()) // { // var guid = new XAttribute("guid", n.ID.Serialized()); // var outputNode = new XElement("Output", guid); // foreach (var link in n.Connections) // { // var to = new XAttribute("To", link.Parent.NodeID.Serialized()); // var linkNode = new XElement("Link", to); // outputNode.Add(linkNode); // } // node.Add(outputNode); // } //} //private void WriteConnectors(IEditable a, XElement node) //{ // foreach (var n in a.Connectors) // { // var guid = new XAttribute("guid", n.ID.Serialized()); // var outputNode = new XElement("Connector", guid); // node.Add(outputNode); // } //} private void Write(GraphAndUI <TUIRawData> con, XElement root) { var id = new XAttribute("Id", con.GraphData.NodeId.Serialized()); var guid = new XAttribute("Guid", con.GraphData.NodeTypeId.Serialized()); var node = new XElement("Node", id, guid); m_nodeUISerializer.Write(con.UIData, node); //WriteOutputs(con.GraphData, node); //WriteConnectors(con.GraphData, node); foreach (var parameter in con.GraphData.Parameters) { var value = parameter.ValueAsString(); if (value != null) { var p = new XElement("Parameter", new XAttribute("guid", parameter.Id.Serialized()), new XAttribute("value", value)); node.Add(p); } } root.Add(node); }