public TrainingPlan FromXml(IStatelessSession session, string xmlContent)
        {
            try
            {
                TrainingPlan plan = new TrainingPlan();
                XDocument    xml  = XDocument.Parse(xmlContent);

                var trainingPlanElement = xml.Element("TrainingPlan");
                plan.Author   = readValue(trainingPlanElement, "Author");
                plan.Language = readValue(trainingPlanElement, "Language");
                //plan.BasedOnId = readGuid(trainingPlanElement, "BasedOnId");
                plan.Comment      = readValue(trainingPlanElement, "Comment");
                plan.CreationDate = readDateTime(trainingPlanElement, "CreationDate").Value;
                plan.Difficult    = readEnum <TrainingPlanDifficult>(trainingPlanElement, "Difficult");
                plan.Purpose      = readEnum <WorkoutPlanPurpose>(trainingPlanElement, "Purpose");
                plan.GlobalId     = readGuid(trainingPlanElement, "GlobalId").Value;
                //plan.ProfileId = readGuid(trainingPlanElement, "ProfileId").Value;
                plan.Name         = readValue(trainingPlanElement, "Name");
                plan.Url          = readValue(trainingPlanElement, "Url");
                plan.RestSeconds  = readInt(trainingPlanElement, "RestSeconds").Value;
                plan.TrainingType = readEnum <TrainingType>(trainingPlanElement, "TrainingType");
                int position = 0;
                foreach (var dayNode in trainingPlanElement.Element("Days").Descendants("Day"))
                {
                    TrainingPlanDay day = new TrainingPlanDay();
                    plan.Days.Add(day);
                    day.TrainingPlan = plan;
                    day.Position     = position;
                    day.GlobalId     = readGuid(dayNode, "GlobalId").Value;
                    day.Name         = readValue(dayNode, "Name");

                    readTrainingEntries(session, day, dayNode);

                    readSuperSets(day, dayNode);
                    position++;
                }

                return(plan);
            }
            catch (VerificationException)
            {
                throw;
            }
            catch (Exception)
            {
                throw new FormatException("Selected xml doesn't contain training plan or it is damaged");
            }
        }
        private void readTrainingEntries(IStatelessSession session, TrainingPlanDay day, XElement dayNode)
        {
            int position = 0;

            foreach (var entryNode in dayNode.Element("Entries").Descendants("Entry"))
            {
                TrainingPlanEntry entry = new TrainingPlanEntry();
                day.Entries.Add(entry);
                entry.Position = position;
                entry.Day      = day;
                entry.GlobalId = readGuid(entryNode, "GlobalId").Value;
                entriesMap.Add(readGuid(entryNode, "GlobalId").Value, entry);
                entry.Comment  = readValue(entryNode, "Comment");
                entry.Exercise = session.Get <Exercise>(readGuid(entryNode, "ExerciseId").Value);
                if (entry.Exercise == null)
                {
                    entry.Exercise = deletedExercise;
                }
                entry.RestSeconds = readInt(entryNode, "RestSeconds").Value;
                position++;

                foreach (var setNode in entryNode.Element("Sets").Descendants("Set"))
                {
                    TrainingPlanSerie set = new TrainingPlanSerie();
                    entry.Sets.Add(set);
                    set.Entry               = entry;
                    set.Comment             = readValue(setNode, "Comment");
                    set.GlobalId            = readGuid(setNode, "GlobalId").Value;
                    set.RepetitionNumberMax = readInt(setNode, "RepetitionNumberMax");
                    set.RepetitionNumberMin = readInt(setNode, "RepetitionNumberMin");
                    if (readValue(setNode, "RepetitionsType") == "NotSet")
                    {
                        set.RepetitionsType = SetType.Normalna;
                    }
                    else
                    {
                        set.RepetitionsType = readEnum <SetType>(setNode, "RepetitionsType");
                    }

                    set.DropSet = readEnum <DropSetType>(setNode, "DropSet");
                }
            }
        }
 private void readSuperSets(TrainingPlanDay day, XElement dayNode)
 {
     foreach (var superSetNode in dayNode.Element("SuperSets").Descendants("SuperSet"))
     {
         var superSetId = readGuid(superSetNode, "SuperSetId").Value;
         foreach (var entryIdNode in superSetNode.Element("Entries").Descendants("EntryId"))
         {
             var oldEntryId = new Guid(entryIdNode.Value);
             if (entriesMap.ContainsKey(oldEntryId))
             {
                 var entry = entriesMap[oldEntryId];
                 if (entry != null)
                 {
                     entry.GroupName = superSetId.ToString();
                 }
             }
             else
             {
                 Debug.Fail("Here should be an entry!");
             }
         }
     }
 }