예제 #1
0
 public TinaValidator(ValidateLogic logic = null)
 {
     Logic = logic;
 }
예제 #2
0
        public void Load(string filePath)
        {
            string jsonString;

            using (FileStream fs = new FileStream(filePath, FileMode.Open))
            {
                using (StreamReader sr = new StreamReader(fs))
                {
                    jsonString = sr.ReadToEnd();
                }
            }

            JsonSerializerOptions jso = new JsonSerializerOptions
            {
                WriteIndented = true
            };

            jso.Converters.Add(new TNodeJsonConverter());
            jso.Converters.Add(new AreaJsonConverter());
            jso.Converters.Add(new ChoiceJsonConverter());
            jso.Converters.Add(new StatementJsonConverter());
            jso.Converters.Add(new UnitConverter());
            jso.Converters.Add(new OtherJsonConverter());
            ValidateLogic vl = JsonSerializer.Deserialize <ValidateLogic>(jsonString, jso);

            TNodes    = vl.TNodes;
            Areas     = vl.Areas;
            Name      = vl.Name;
            StartNode = TNodes[vl.StartNode.ID];
            for (int i = 0; i < Areas.Count; i++)
            {
                if (Areas[i].StartNode != null)
                {
                    Areas[i].StartNode = TNodes[(Areas[i].StartNode as IDNode).ID];
                }
                if (Areas[i].Parent != null)
                {
                    if (Name == (Areas[i].Parent as IDArea).Name)
                    {
                        Areas[i].Parent = this;
                    }
                    else
                    {
                        Areas[i].Parent = Areas.Find(m => m.Name == (Areas[i].Parent as IDArea).Name);
                    }
                }
            }

            foreach (KeyValuePair <string, TNode> kv in TNodes)
            {
                if (kv.Value.NextNode != null)
                {
                    kv.Value.NextNode = TNodes[(kv.Value.NextNode as IDNode).ID];
                }
                if (kv.Value.Parent != null)
                {
                    if (Name == (kv.Value.Parent as IDArea).Name)
                    {
                        kv.Value.Parent = this;
                    }
                    else
                    {
                        kv.Value.Parent = Areas.Find(m => m.Name == (kv.Value.Parent as IDArea).Name);
                    }
                }
                if (kv.Value is Status st)
                {
                    for (int i = 0; i < st.Choices.Count; i++)
                    {
                        st.Choices[i].Node = st.Choices[i].Node != null ?
                                             TNodes[(st.Choices[i].Node as IDNode).ID] : null;
                    }
                }
            }
        }