public void DesignRoot(NodeDataArray root) { //if (root.isWhile) //{ // XmlWhileGenerator(root, null); //} if (root.IsSwitch) { XmlSwitchGenerator(root, null); } else if (root.IsIf) { XmlIfGenerator(root, null); } else { XmlTaskGenerator(root, null); } }
public void XmlSwitchGenerator(NodeDataArray node = null, NodeDataArray parent = null) { if (parent == null) { parent = new NodeDataArray(); } if (parent.IsIf) { if (parent.DoNodeId == node.Key) { var xRoot = new XElement(xn + "Switch", new XAttribute("id", switchId++), new XAttribute("parent", "-1"), new XAttribute("switch", node.TaskId), new XAttribute("index", node.Key)); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .Element(xn + "Do") .Add(xRoot); } else if (parent.ElseNodeId == node.Key) { var xRoot = new XElement(xn + "Switch", new XAttribute("id", switchId++), new XAttribute("parent", "-1"), new XAttribute("switch", node.TaskId), new XAttribute("index", node.Key)); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .Element(xn + "Else") .Add(xRoot); } else { var xRoot = new XElement(xn + "Switch", new XAttribute("id", switchId++), new XAttribute("parent", ifId - 1), new XAttribute("switch", node.TaskId), new XAttribute("index", node.Key)); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddAfterSelf(xRoot); } } //else if (parent.isWhile && node.isInWhile) //{ // var xRoot = new XElement(xn + "Switch", // new XAttribute("id", switchId++), // new XAttribute("parent", "-1"), // new XAttribute("switch", node.taskId), // new XAttribute("index", node.key)); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .Add(xRoot); //} //else if (parent.isWhile && !node.isInWhile) //{ // var xRoot = new XElement(xn + "Switch", // new XAttribute("id", switchId++), // new XAttribute("parent", whileId - 1), // new XAttribute("switch", node.taskId), // new XAttribute("index", node.key)); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .Add(xRoot); //} else { if (parent.Key != 0) { var xRoot = new XElement(xn + "Switch", new XAttribute("id", switchId++), new XAttribute("parent", parent.TaskId.ToString()), new XAttribute("switch", node.TaskId), new XAttribute("index", node.Key)); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddAfterSelf(xRoot); } else { var xRoot = new XElement(xn + "Switch", new XAttribute("id", switchId++), new XAttribute("parent", "-1"), new XAttribute("switch", node.TaskId), new XAttribute("index", node.Key)); xGraph.Add(xRoot); } } }
//public void XmlWhileGenerator(NodeDataArray node = null, NodeDataArray parent = null) //{ // if (parent == null) parent = new NodeDataArray(); // if (parent.isIf) // { // if (parent.doNodeId == node.key) // { // var xRoot = new XElement(xn + "While", // new XAttribute("id", whileId++), // new XAttribute("parent", "-1"), // new XAttribute("while", node.taskId), // new XAttribute("index", node.key)); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .Element(xn + "Do") // .Add(xRoot); // } // if (parent.elseNodeId == node.key) // { // var xRoot = new XElement(xn + "While", // new XAttribute("id", whileId++), // new XAttribute("parent", "-1"), // new XAttribute("while", node.taskId), // new XAttribute("index", node.key)); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .Element(xn + "Else") // .Add(xRoot); // } // } // else if (parent.isWhile) // { // } // else // { // if (parent.key != 0) // { // var xRoot = new XElement(xn + "While", // new XAttribute("id", whileId++), // new XAttribute("parent", parent.key == 0 ? "-1" : parent.taskId.ToString()), // new XAttribute("while", node.taskId), // new XAttribute("index", node.key)); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .AddAfterSelf(xRoot); // } // else // { // var xRoot = new XElement(xn + "While", // new XAttribute("id", whileId++), // new XAttribute("parent", parent.key == 0 ? "-1" : parent.taskId.ToString()), // new XAttribute("while", node.taskId), // new XAttribute("index", node.key)); // xGraph.Add(xRoot); // } // } //} public void XmlTaskGenerator(NodeDataArray node = null, NodeDataArray parent = null) { if (parent == null) { parent = new NodeDataArray(); } if (parent.IsIf) { if (parent.DoNodeId == node.Key) { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", "-1")); xRoot.Add(xParent); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .Element(xn + "Do") .Add(xRoot); } else if (parent.ElseNodeId == node.Key) { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", "-1")); xRoot.Add(xParent); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .Element(xn + "Else") .Add(xRoot); } else { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", ifId - 1)); xRoot.Add(xParent); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddAfterSelf(xRoot); } } else if (parent.IsSwitch && node.IsInSwitch) { if (node.IsDefault == true) { var xDefault = new XElement(xn + "Default"); var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", "-1")); xRoot.Add(xParent); xDefault.Add(xRoot); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .Add(xDefault); } else { var xCase = new XElement(xn + "Case", new XAttribute("value", node.CaseValue)); var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", "-1")); xRoot.Add(xParent); xCase.Add(xRoot); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddFirst(xCase); } } else if (parent.IsSwitch && !node.IsInSwitch) { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", switchId - 1)); xRoot.Add(xParent); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddAfterSelf(xRoot); } //else if (parent.isWhile && !node.isInWhile) //{ // var xRoot = new XElement(xn + "Task", // new XAttribute("id", node.taskId), // new XAttribute("index", node.key)); // var xParent = new XElement(xn + "Parent", // new XAttribute("id", whileId - 1)); // xRoot.Add(xParent); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .AddAfterSelf(xRoot); //} //else if (parent.isWhile && node.isInWhile) //{ // var xRoot = new XElement(xn + "Task", // new XAttribute("id", node.taskId), // new XAttribute("index", node.key)); // var xParent = new XElement(xn + "Parent", new XAttribute("id", "-1")); // xRoot.Add(xParent); // xGraph.Descendants() // .Where(x => (string)x.Attribute("index") == parent.key.ToString()) // .FirstOrDefault() // .Add(xRoot); //} else { if (parent.Key != 0) { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", parent.Key == 0 ? "-1" : parent.TaskId.ToString())); xRoot.Add(xParent); xGraph.Descendants() .Where(x => (string)x.Attribute("index") == parent.Key.ToString()) .FirstOrDefault() .AddAfterSelf(xRoot); } else { var xRoot = new XElement(xn + "Task", new XAttribute("id", node.TaskId), new XAttribute("index", node.Key)); var xParent = new XElement(xn + "Parent", new XAttribute("id", parent.Key == 0 ? "-1" : parent.TaskId.ToString())); xRoot.Add(xParent); xGraph.Add(xRoot); } } }