protected ParsedCommand parse(String[] input) { if (isMissingArguments(input)) { return createParsedCommandError(ERROR_MISSING_ARGS); } else { String inputArgs = input[INDEX_FOR_ARGS]; try { String parsedTitle = getTitleWithDateKeywords(inputArgs); Calendar[] parsedTimes = getStandardDatesTimes(inputArgs); if (mustRemoveDateKeywordSection(parsedTimes, inputArgs)) { parsedTitle = removeDateKeywordSection(parsedTitle); } String parsedDescription = getDescriptionFromString(inputArgs); ArrayList<String> parsedTags = getTagsFromString(inputArgs); ParsedCommand pc = new ParsedCommand.ParsedCommandBuilder(MyParser.CommandType.ADD) .title(parsedTitle) .times(parsedTimes) .description(parsedDescription) .tags(parsedTags) .build(); return pc; } catch (InvalidArgumentsForParsedCommandException e) { return InputParser.createParsedCommandError(e.getMessage()); } } }