/// <summary>
        /// This method checks if the command line has a valid length and a valid editor command in the first place.
        /// </summary>
        /// <param name="commandLine">The command line the user has written.</param>
        /// <returns>
        /// A full instanced command if the command line is valid or null if the command line is not valid.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// If commandLine is null or whitespace.
        /// </exception>
        public IEditorCommand Parse(string commandLine)
        {
            if (string.IsNullOrWhiteSpace(commandLine))
            {
                throw new ArgumentNullException();
            }

            string[] possibleCommands = commandLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            string   editorCommand    = possibleCommands[0].ToLower();

            if (possibleCommands.Length > 4)
            {
                return(null);
            }
            else
            {
                switch (editorCommand)
                {
                case "add":
                    return(AddCommand.Parse(commandLine));

                case "clear":
                    return(ClearCommand.Parse(commandLine));

                case "insert":
                    return(InsertCommand.Parse(commandLine));

                case "remove":
                    return(RemoveCommand.Parse(commandLine));

                case "new":
                    return(NewCommand.Parse(commandLine));

                case "run":
                    return(RunCommand.Parse(commandLine));

                default:
                    return(null);
                }
            }
        }