Skip to content

Commit 6cf4dd3

Browse files
authored
Merge pull request nus-cs2103-AY2324S1#109 from jx124/fix-datetime-parsing-bug
Fix datetime parsing bug
2 parents 69d9c4f + 5d94bf5 commit 6cf4dd3

22 files changed

+116
-91
lines changed

src/main/java/seedu/address/logic/commands/AddLeadCommand.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static java.util.Objects.requireNonNull;
44
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
55
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
6-
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEYMILESTONE;
6+
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEY_MILESTONE;
77
import static seedu.address.logic.parser.CliSyntax.PREFIX_MEETING_TIME;
88
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
99
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
@@ -28,14 +28,15 @@ public class AddLeadCommand extends Command {
2828
+ PREFIX_PHONE + "PHONE "
2929
+ PREFIX_EMAIL + "EMAIL "
3030
+ PREFIX_ADDRESS + "ADDRESS "
31+
+ PREFIX_KEY_MILESTONE + "KEY_MILESTONE "
3132
+ PREFIX_MEETING_TIME + "MEETING_TIME "
3233
+ "[" + PREFIX_TAG + "TAG]...\n"
3334
+ "Example: " + COMMAND_WORD + " "
3435
+ PREFIX_NAME + "John Doe "
3536
+ PREFIX_PHONE + "98765432 "
3637
+ PREFIX_EMAIL + "johnd@example.com "
3738
+ PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 "
38-
+ PREFIX_KEYMILESTONE + "2023-10-20 "
39+
+ PREFIX_KEY_MILESTONE + "01/12/2023 "
3940
+ PREFIX_MEETING_TIME + "10/10/2023 14:30 "
4041
+ PREFIX_TAG + "classmate";
4142

src/main/java/seedu/address/logic/commands/EditLeadCommand.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static java.util.Objects.requireNonNull;
44
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
55
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
6-
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEYMILESTONE;
6+
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEY_MILESTONE;
77
import static seedu.address.logic.parser.CliSyntax.PREFIX_MEETING_TIME;
88
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
99
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
@@ -43,8 +43,8 @@ public class EditLeadCommand extends EditCommand {
4343
+ "[" + PREFIX_PHONE + "PHONE] "
4444
+ "[" + PREFIX_EMAIL + "EMAIL] "
4545
+ "[" + PREFIX_ADDRESS + "ADDRESS] "
46-
+ "[" + PREFIX_KEYMILESTONE + "KEY MILESTONE] "
47-
+ "[" + PREFIX_MEETING_TIME + "MEETING TIME] "
46+
+ "[" + PREFIX_KEY_MILESTONE + "KEY_MILESTONE] "
47+
+ "[" + PREFIX_MEETING_TIME + "MEETING_TIME] "
4848
+ "[" + PREFIX_TAG + "TAG]...\n"
4949
+ "Example: " + COMMAND_WORD + " 1 "
5050
+ PREFIX_PHONE + "91234567 "

src/main/java/seedu/address/logic/parser/AddLeadCommandParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
44
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
55
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
6-
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEYMILESTONE;
6+
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEY_MILESTONE;
77
import static seedu.address.logic.parser.CliSyntax.PREFIX_MEETING_TIME;
88
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
99
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
@@ -37,21 +37,21 @@ public class AddLeadCommandParser implements Parser<AddLeadCommand> {
3737
public AddLeadCommand parse(String args) throws ParseException {
3838
ArgumentMultimap argMultimap =
3939
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL,
40-
PREFIX_ADDRESS, PREFIX_KEYMILESTONE, PREFIX_MEETING_TIME, PREFIX_TAG);
40+
PREFIX_ADDRESS, PREFIX_KEY_MILESTONE, PREFIX_MEETING_TIME, PREFIX_TAG);
4141

42-
if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_KEYMILESTONE,
42+
if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_KEY_MILESTONE,
4343
PREFIX_EMAIL)
4444
|| !argMultimap.getPreamble().isEmpty()) {
4545
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddLeadCommand.MESSAGE_USAGE));
4646
}
4747

4848
argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,
49-
PREFIX_MEETING_TIME, PREFIX_KEYMILESTONE);
49+
PREFIX_MEETING_TIME, PREFIX_KEY_MILESTONE);
5050
Name name = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());
5151
Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());
5252
Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());
5353
Address address = ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());
54-
KeyMilestone keyMilestone = ParserUtil.parseKeyMilestone(argMultimap.getValue(PREFIX_KEYMILESTONE).get());
54+
KeyMilestone keyMilestone = ParserUtil.parseKeyMilestone(argMultimap.getValue(PREFIX_KEY_MILESTONE).get());
5555
Optional<MeetingTime> meetingTime = argMultimap.getValue(PREFIX_MEETING_TIME).isPresent()
5656
? Optional.of(ParserUtil.parseMeetingTime(argMultimap.getValue(PREFIX_MEETING_TIME).get()))
5757
: Optional.empty();

src/main/java/seedu/address/logic/parser/CliSyntax.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class CliSyntax {
1212
public static final Prefix PREFIX_ADDRESS = new Prefix("a/");
1313
public static final Prefix PREFIX_MEETING_TIME = new Prefix("m/");
1414
public static final Prefix PREFIX_TAG = new Prefix("t/");
15-
public static final Prefix PREFIX_KEYMILESTONE = new Prefix("k/");
15+
public static final Prefix PREFIX_KEY_MILESTONE = new Prefix("k/");
1616

1717
public static final Prefix PREFIX_NAME_TP = new Prefix("--name");
1818
public static final Prefix PREFIX_PHONE_TP = new Prefix("--phone");

src/main/java/seedu/address/logic/parser/EditCommandParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
55
import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;
66
import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;
7-
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEYMILESTONE;
7+
import static seedu.address.logic.parser.CliSyntax.PREFIX_KEY_MILESTONE;
88
import static seedu.address.logic.parser.CliSyntax.PREFIX_MEETING_TIME;
99
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
1010
import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;
@@ -38,7 +38,7 @@ public EditCommand parse(String args) throws ParseException {
3838
boolean isLead = false;
3939
ArgumentMultimap argMultimap =
4040
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,
41-
PREFIX_KEYMILESTONE, PREFIX_MEETING_TIME, PREFIX_TAG);
41+
PREFIX_KEY_MILESTONE, PREFIX_MEETING_TIME, PREFIX_TAG);
4242

4343
Index index;
4444

@@ -48,14 +48,14 @@ public EditCommand parse(String args) throws ParseException {
4848
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);
4949
}
5050

51-
argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_KEYMILESTONE,
51+
argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_KEY_MILESTONE,
5252
PREFIX_MEETING_TIME, PREFIX_ADDRESS);
5353
EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor();
5454
EditLeadDescriptor editLeadDescriptor = new EditLeadDescriptor();
55-
if (argMultimap.getValue(PREFIX_KEYMILESTONE).isPresent()) {
55+
if (argMultimap.getValue(PREFIX_KEY_MILESTONE).isPresent()) {
5656
isLead = true;
5757
editLeadDescriptor.setKeyMilestone(ParserUtil.parseKeyMilestone(
58-
argMultimap.getValue(PREFIX_KEYMILESTONE).get()));
58+
argMultimap.getValue(PREFIX_KEY_MILESTONE).get()));
5959
}
6060

6161
if (argMultimap.getValue(PREFIX_NAME).isPresent()) {

src/main/java/seedu/address/model/person/KeyMilestone.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,22 @@
66
import java.time.LocalDate;
77
import java.time.format.DateTimeFormatter;
88
import java.time.format.DateTimeParseException;
9+
import java.time.format.ResolverStyle;
910

1011
/**
1112
* Represents a lead's key milestone in the address book.
1213
* Guarantees: immutable; is valid as declared in {@link #isValidKeyMilestone(String)}
1314
*/
1415
public class KeyMilestone {
16+
public static final String DATE_FORMAT = "dd/MM/uuuu";
17+
18+
// Replace uuuu in format to yyyy to not confuse users
1519
public static final String MESSAGE_CONSTRAINTS =
16-
"Key milestone is the date of Lead's milestone moment, should be in the format of yyyy-MM-dd";
20+
"Key milestone is the date of Lead's milestone moment, should be in the format of "
21+
+ DATE_FORMAT.replace("u", "y");
22+
1723
public final String value;
24+
1825
/**
1926
* Constructs an {@code KeyMilestone}.
2027
*
@@ -31,7 +38,10 @@ public KeyMilestone(String keyMilestone) {
3138
*/
3239
public static boolean isValidKeyMilestone(String test) {
3340
try {
34-
LocalDate.parse(test, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
41+
LocalDate.parse(test,
42+
DateTimeFormatter
43+
.ofPattern(DATE_FORMAT)
44+
.withResolverStyle(ResolverStyle.STRICT));
3545
return true;
3646
} catch (DateTimeParseException e) {
3747
return false;

src/main/java/seedu/address/model/person/MeetingTime.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
*/
1212
public class MeetingTime {
1313

14-
public static final String MESSAGE_CONSTRAINTS = "Meeting time should be in the format of " + DATE_TIME_FORMAT;
14+
// Replace uuuu in format to yyyy to not confuse users
15+
public static final String MESSAGE_CONSTRAINTS = "Meeting time should be in the format of "
16+
+ DATE_TIME_FORMAT.replace("u", "y");
1517

1618
public final LocalDateTime value;
1719

src/main/java/seedu/address/model/person/MeetingTimeFormatter.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
import java.time.LocalDateTime;
44
import java.time.format.DateTimeFormatter;
55
import java.time.format.DateTimeParseException;
6+
import java.time.format.ResolverStyle;
67

78
/**
89
* Helper class for handling meeting time formatting and parsing.
910
*/
1011
public class MeetingTimeFormatter {
1112

12-
public static final String DATE_TIME_FORMAT = "dd/MM/yyyy HH:mm";
13+
public static final String DATE_TIME_FORMAT = "dd/MM/uuuu HH:mm";
1314
private static DateTimeFormatter getFormatter() {
14-
return DateTimeFormatter.ofPattern(DATE_TIME_FORMAT);
15+
return DateTimeFormatter
16+
.ofPattern(DATE_TIME_FORMAT)
17+
.withResolverStyle(ResolverStyle.STRICT);
1518
}
1619

1720
public static LocalDateTime parse(String meetingTime) {

src/main/java/seedu/address/model/util/SampleDataUtil.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@ public static Person[] getSamplePersons() {
3737
getTagSet("neighbours")),
3838
new Lead(new Name("David Li"), new Phone("91031282"), new Email("lidavid@example.com"),
3939
new Address("Blk 436 Serangoon Gardens Street 26, #16-43"),
40-
new KeyMilestone("2022-12-01"), Optional.of(new MeetingTime("10/10/2023 14:30")),
40+
new KeyMilestone("01/12/2023"), Optional.of(new MeetingTime("10/10/2023 14:30")),
4141
getTagSet("family")),
4242
new Lead(new Name("Irfan Ibrahim"), new Phone("92492021"), new Email("irfan@example.com"),
4343
new Address("Blk 47 Tampines Street 20, #17-35"),
44-
new KeyMilestone("2022-12-01"),
44+
new KeyMilestone("01/12/2023"),
4545
Optional.of(new MeetingTime("10/10/2023 14:30")),
4646
getTagSet("classmates")),
4747
new Lead(new Name("Roy Balakrishnan"), new Phone("92624417"), new Email("royb@example.com"),
4848
new Address("Blk 45 Aljunied Street 85, #11-31"),
49-
new KeyMilestone("2022-12-01"), Optional.of(new MeetingTime("10/10/2023 14:30")),
49+
new KeyMilestone("01/12/2023"), Optional.of(new MeetingTime("10/10/2023 14:30")),
5050
getTagSet("colleagues"))
5151
};
5252
}

src/test/data/JsonSerializableAddressBookTest/duplicatePersonAddressBook.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"email": "alice@example.com",
66
"type": "lead",
77
"address": "123, Jurong West Ave 6, #08-111",
8-
"keyMilestone": "2022-12-01",
8+
"keyMilestone": "01/12/2023",
99
"meetingTime" : "25/10/2023 11:21",
1010
"tags": [ "Client", "friends" ]
1111
}, {
@@ -14,7 +14,7 @@
1414
"email": "pauline@example.com",
1515
"type": "lead",
1616
"address": "4th street",
17-
"keyMilestone": "2022-12-01",
17+
"keyMilestone": "01/12/2023",
1818
"meetingTime" : "25/10/2023 11:21",
1919
"tags": [ "Client" ]
2020
} ]

0 commit comments

Comments
 (0)