Example #1
0
        public void TestLoad()
        {
            var actualClassification = _classificator.Load();

            var firstLevelClass1 = new FoodClass("FirstLevelClass1");
            var spAttr1          = new StoragePeriodInfo()
            {
                FromTime         = TimeSpan.FromHours(48),
                ToTime           = TimeSpan.FromDays(6 * 30),
                FromTemperature  = 6,
                ToTemperature    = 10,
                DerivedFromClass = "FirstLevelClass1"
            };
            var spAttr2 = new StoragePeriodInfo()
            {
                FromTime         = TimeSpan.FromDays(2),
                ToTime           = TimeSpan.FromDays(3),
                FromTemperature  = 1,
                ToTemperature    = 3,
                DerivedFromClass = "FirstLevelClass1"
            };

            firstLevelClass1.StoragePeriods = new List <StoragePeriodInfo>()
            {
                spAttr1, spAttr2
            };
            var secondLevelClass11 = new FoodClass("SecondLevelClass11");

            secondLevelClass11.Parent = firstLevelClass1;
            var secondLevelClass12 = new FoodClass("SecondLevelClass12");

            secondLevelClass12.Parent = firstLevelClass1;
            firstLevelClass1.Childs.Add(secondLevelClass11.Title, secondLevelClass11);
            firstLevelClass1.Childs.Add(secondLevelClass12.Title, secondLevelClass12);

            var firstLevelClass2   = new FoodClass("FirstLevelClass2");
            var secondLevelClass21 = new FoodClass("SecondLevelClass21");

            secondLevelClass21.Parent = firstLevelClass2;
            firstLevelClass2.Childs.Add(secondLevelClass21.Title, secondLevelClass21);

            var expected = new FoodClassification.Model.FoodClassification();

            expected.FoodClasses.Add(firstLevelClass1.Title, firstLevelClass1);
            expected.FoodClasses.Add(firstLevelClass2.Title, firstLevelClass2);

            Assert.AreEqual(expected, actualClassification);
        }
        private IDictionary <string, FoodClass> _DeserializeFoodClassification(IEnumerable <XmlNode> nodes, FoodClass parent, Model.FoodClassification classification)
        {
            var foodClasses = new Dictionary <string, FoodClass>();

            foreach (var node in nodes)
            {
                var xmlNode      = (XmlNode)node;
                var className    = xmlNode.Attributes["name"].Value;
                var newFoodClass = new FoodClass(className);
                if (parent != null)
                {
                    newFoodClass.Parent = parent;
                }

                foodClasses.Add(className, newFoodClass);

                // storage attribute
                var storagePeriodAttributes = xmlNode.ChildNodes.Cast <XmlNode>()
                                              .Where(n => n.Name == "attribute" && n.Attributes["type"].Value == "storagePeriod");

                foreach (var storPeriodAttr in storagePeriodAttributes)
                {
                    // period
                    var childPeriodNodesEnumerable = storPeriodAttr.ChildNodes.Cast <XmlNode>()
                                                     .Single(n => n.Name == "period").ChildNodes.Cast <XmlNode>();

                    // from
                    var fromNode = childPeriodNodesEnumerable
                                   .Single(n => n.Name == "from");
                    var fromQuantityNode = fromNode.ChildNodes.Cast <XmlNode>()
                                           .Single(n => n.Name == "quantity");
                    var fromQuantityValue = fromQuantityNode.LastChild.Value;
                    var fromUnitNode      = fromNode.ChildNodes.Cast <XmlNode>()
                                            .Single(n => n.Name == "unit");
                    var fromUnitValue = fromUnitNode.LastChild.Value;

                    //to
                    var toNode = childPeriodNodesEnumerable
                                 .Single(n => n.Name == "to");
                    var toQuantityNode = toNode.ChildNodes.Cast <XmlNode>()
                                         .Single(n => n.Name == "quantity");
                    var toQuantityValue = toQuantityNode.LastChild.Value;
                    var toUnitNode      = toNode.ChildNodes.Cast <XmlNode>()
                                          .Single(n => n.Name == "unit");
                    var toUnitValue = toUnitNode.LastChild.Value;

                    // temperature
                    var childTemperatureNodesEnumerable = storPeriodAttr.ChildNodes.Cast <XmlNode>()
                                                          .Single(n => n.Name == "temperature").ChildNodes.Cast <XmlNode>();

                    // from
                    var fromTemperatureNode = childTemperatureNodesEnumerable
                                              .Single(n => n.Name == "from");
                    var fromTemperatureValue = fromTemperatureNode.LastChild.Value;

                    //to
                    var toemperatureNode = childTemperatureNodesEnumerable
                                           .Single(n => n.Name == "to");
                    var toTemperatureValue = toemperatureNode.LastChild.Value;

                    var storagePeriodInfo = new StoragePeriodInfo();
                    storagePeriodInfo.FromTime         = UnitQuantityConverter.Convert(fromUnitValue, fromQuantityValue);
                    storagePeriodInfo.ToTime           = UnitQuantityConverter.Convert(toUnitValue, toQuantityValue);
                    storagePeriodInfo.FromTemperature  = int.Parse(fromTemperatureValue);
                    storagePeriodInfo.ToTemperature    = int.Parse(toTemperatureValue);
                    storagePeriodInfo.DerivedFromClass = newFoodClass.Title;

                    newFoodClass.StoragePeriods.Add(storagePeriodInfo);
                }

                // storage advise
                var storageAdviseAttribute = xmlNode.ChildNodes.Cast <XmlNode>()
                                             .SingleOrDefault(n => n.Name == "attribute" && n.Attributes["type"].Value == "storageAdvise");
                if (storageAdviseAttribute != null)
                {
                    var advice = storageAdviseAttribute.LastChild.Value;
                    newFoodClass.StorageAdvice = advice;
                }

                var childClasses = _DeserializeFoodClassification(xmlNode.ChildNodes.Cast <XmlNode>().Where(n => n.Name == "class"),
                                                                  newFoodClass, classification);
                newFoodClass.Childs = childClasses;
            }

            return(foodClasses);
        }