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); }