/*
             * DoDrop
             */

            /// <summary>
            /// Invokes service specific nodes merge operation.
            /// </summary>
            /// <exception cref="T:System.ArgumentNullException"><paramref name="selectedNodes"/> is <see langword="null"/>.</exception>
            public override void DoDrop(TreeNode targetTreeNode, IList <TreeNode> selectedNodes, NuGenDropPosition dropPosition)
            {
                if (selectedNodes == null)
                {
                    throw new ArgumentNullException("selectedNodes");
                }

                if (
                    targetTreeNode == null ||
                    DragDropService.CheckSelectedContainTarget(targetTreeNode, selectedNodes) ||
                    !DragDropService.CheckParent(targetTreeNode, selectedNodes)
                    )
                {
                    return;
                }

                switch (dropPosition)
                {
                case NuGenDropPosition.After:
                case NuGenDropPosition.Before:
                {
                    DragDropService.MoveNodes(targetTreeNode, selectedNodes, dropPosition);
                    break;
                }

                case NuGenDropPosition.Inside:
                {
                    DragDropService.InsertNodes(targetTreeNode, selectedNodes);
                    break;
                }
                }
            }