private static IExerciseDefinition GetExercise(XElement exerciseXml, IDictionary<string, IConstraint> allConstraints)
        {
            var exercise = new ExerciseDefinition(exerciseXml.Attribute("name").Value,
                                                  new ExerciseTemplate(exerciseXml.Attribute("template").Value));

            var numbersXml = from n in exerciseXml.Descendants("numbers").First().Descendants("number")
                             select n;

            foreach (var number in numbersXml)
            {
                var minValue = int.Parse(number.Attribute("minvalue").Value);
                var maxValue = int.Parse(number.Attribute("maxvalue").Value);
                var decimals = int.Parse(number.Attribute("decimals").Value);
                exercise.AddNumberDefinition(new NumberDefinition("", minValue, maxValue, decimals));
            }

            var constraintsRoot = exerciseXml.Descendants("constraints").FirstOrDefault();
            if (constraintsRoot != null)
            {
                var constraintsXml = from c in constraintsRoot.Descendants("constraint")
                                     select c;

                foreach (var constraint in constraintsXml)
                {
                    var constraintName = constraint.Attribute("type").Value;

                    exercise.AddConstraint(allConstraints[constraintName]);
                }
            }

            return exercise;
        }
        private void SaveButtonClicked()
        {
            if (!IsValid())
                return;

            var exercise = new ExerciseDefinition(_exerciseName, new ExerciseTemplate(_exerciseTemplate));

            foreach (var number in _numbers)
            {
                exercise.AddNumberDefinition(number);
            }

            foreach (var constraint in _constraints)
            {
                exercise.AddConstraint(constraint);
            }

            try
            {
                _saveExerciseHandler.SaveExercise(exercise);
            }
            catch (Exception e)
            {
                _window.Message(e.Message);
                return;
            }

            CloseWindow();
        }