/// <summary>
        /// Creates the new element.
        /// </summary>
        /// <param name="elementDefinition">The element definition.</param>
        /// <returns></returns>
        /// <exception cref="EngineException">
        /// Error creating new element. The parent task not exists.
        /// or
        /// Error creating new element. The element type not exists.
        /// </exception>
        public Guid CreateNewElement(IElementDefinitionCreate elementDefinition)
        {
            IElementEntry elementEntry = null;

            using (var transaction = uow.BeginTransaction())
            {
                // Load parent task
                var taskEntry = engineRepository.GetTaskById(elementDefinition.ParentTaskId);

                // Check if parent task exists
                if (taskEntry == null)
                {
                    throw new EngineException(logger, "Error creating new element. The parent task not exists.");
                }

                // get the engine element
                IEngineElement engineElement = GetEngineElement(elementDefinition.ElementTypeKey);

                // Get the right entry model for this engine element type
                elementEntry = (IElementEntry)engineElement.GetEmptyEntity();

                // Populate the entry element whit data provided by user
                elementEntry.ParentTask  = taskEntry;
                elementEntry.Name        = elementDefinition.Name;
                elementEntry.Description = elementDefinition.Description;
                elementEntry.IsEnabled   = true;

                // create the element in db
                engineRepository.CreateElement(elementEntry);
            }

            return(elementEntry.Id);
        }
        public Guid UpdateElement(IElementDefinitionCreate elementDefinition)
        {
            IElementEntry elementEntry = null;

            using (var transaction = uow.BeginTransaction())
            {
                elementEntry = engineRepository.GetElementById(elementDefinition.Id);
                // Populate the entry element whit data provided by user
                elementEntry.Name        = elementDefinition.Name;
                elementEntry.Description = elementDefinition.Description;
                elementEntry.IsEnabled   = true;

                // update the element in db
                engineRepository.UpdateElement(elementEntry);
            }

            return(elementEntry.Id);
        }