public void TransferEntry(Topic source, Topic dest, Entry entry)
 {
     dest.AddEntry(entry);
     source.RemoveEntry(entry);
 }
        public static Content.Content LoadContent(string path)
        {
            XDocument doc = XDocument.Load(path);

            XElement content = doc.Element("content");

            XElement meta     = content.Element("meta");
            XElement idCount  = meta.Element("idCount");
            int      _idCount = int.Parse(idCount.Value);

            Content.Content _content = new Content.Content(_idCount);

            foreach (XElement section in content.Elements("section"))
            {
                int    _sectionId     = int.Parse(section.Element("id").Value);
                string _sectionTitle  = section.Element("title").Value;
                bool   _sectionIsOpen = false;

                if (section.Element("isOpen") != null)
                {
                    _sectionIsOpen = bool.Parse(section.Element("isOpen").Value);
                }

                Content.Section _section = new Content.Section(_sectionId, _sectionTitle, _sectionIsOpen);

                foreach (XElement topic in section.Elements("topic"))
                {
                    int    _topicId     = int.Parse(topic.Element("id").Value);
                    string _topicTitle  = topic.Element("title").Value;
                    bool   _topicIsOpen = false;

                    if (topic.Element("isOpen") != null)
                    {
                        _topicIsOpen = bool.Parse(topic.Element("isOpen").Value);
                    }

                    Content.Topic _topic = new Content.Topic(_topicId, _topicTitle, _topicIsOpen);

                    foreach (XElement entry in topic.Elements())
                    {
                        if (entry.Name == "theory" || entry.Name == "challenge")
                        {
                            int    _entryId     = int.Parse(entry.Element("id").Value);
                            string _entryText   = entry.Element("text").Value;
                            bool   _entryIsOpen = false;

                            if (entry.Element("isOpen") != null)
                            {
                                _entryIsOpen = bool.Parse(entry.Element("isOpen").Value);
                            }

                            if (entry.Name == "theory")
                            {
                                Content.Theory _theory = new Content.Theory(_entryId, _entryText, _entryIsOpen);

                                _topic.AddEntry(_theory);
                            }
                            else
                            {
                                Content.Challenge.Type _challengeType =
                                    (Content.Challenge.Type)Enum.Parse(typeof(Content.Challenge.Type), entry.Element("type").Value);

                                List <string> _answers = new List <string>();

                                foreach (XElement answer in entry.Element("answers").Elements())
                                {
                                    _answers.Add(answer.Value);
                                }

                                Content.Challenge _challenge = new Content.Challenge(_entryId, _entryText, _entryIsOpen, _challengeType, _answers);

                                _topic.AddEntry(_challenge);
                            }
                        }
                    }

                    _section.AddTopic(_topic);
                }

                _content.AddSection(_section);
            }

            return(_content);
        }
 public void AddEntry(Topic topic, Theory theory)
 {
     topic.AddEntry(theory);
 }