protected override IDocumentNode Execute(DocumentNodeModel model)
    {
        if (model.RootNode == null)
        {
            DocumentNode.UpdateContextData();
            model.RootNode = DocumentNode;
        }
        else
        {
            var existingDocumentNode = model.RootNode.DocumentNodeByGuid(DocumentNode.Id);

            if (existingDocumentNode == null)
            {
                if (ParentNode == null)
                {
                    ParentNode = model.RootNode;
                }
                else
                {
                    ParentNode = model.RootNode.DocumentNodeByGuid(ParentNode.Id);
                    DocumentNode.UpdateContextData(ParentNode);
                    ParentNode.Children.Add(DocumentNode);
                }
            }
            else
            {
                DocumentNode.UpdateContextData(existingDocumentNode.Parent);
                if (model.RootNode.Id == DocumentNode.Id)
                {
                    model.RootNode = DocumentNode;
                }
                else
                {
                    updateDocumentNodeRecursive(model, DocumentNode);
                }
            }
        }
        return(DocumentNode);
    }