Skip to content

Commit 515dfa2

Browse files
authored
Merge pull request nus-cs2103-AY2223S1#79 from CFSY/startTime
Add StartTime class
2 parents 1c2eec5 + a3b70e8 commit 515dfa2

File tree

5 files changed

+90
-2
lines changed

5 files changed

+90
-2
lines changed

src/main/java/seedu/waddle/logic/commands/EditItemCommand.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DESCRIPTION;
66
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DURATION;
77
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_PRIORITY;
8+
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_START_TIME;
89

910
import java.util.Optional;
1011

@@ -18,6 +19,7 @@
1819
import seedu.waddle.model.item.Duration;
1920
import seedu.waddle.model.item.Item;
2021
import seedu.waddle.model.item.Priority;
22+
import seedu.waddle.model.item.StartTime;
2123
import seedu.waddle.model.itinerary.Itinerary;
2224

2325
/**
@@ -34,7 +36,8 @@ public class EditItemCommand extends Command {
3436
+ "[" + PREFIX_DESCRIPTION + "DESCRIPTION]"
3537
+ "[" + PREFIX_PRIORITY + "PRIORITY]"
3638
+ "[" + PREFIX_COST + "COST]"
37-
+ "[" + PREFIX_DURATION + "DURATION]...\n"
39+
+ "[" + PREFIX_DURATION + "DURATION]"
40+
+ "[" + PREFIX_START_TIME + "START TIME]...\n"
3841
+ "Example: " + COMMAND_WORD + " 1 "
3942
+ PREFIX_DESCRIPTION + "Visit the Eiffel Tower ";
4043

@@ -119,6 +122,7 @@ public static class EditItemDescriptor {
119122
private Priority priority;
120123
private Cost cost;
121124
private Duration duration;
125+
private StartTime startTime;
122126

123127
public EditItemDescriptor() {
124128
}
@@ -132,6 +136,7 @@ public EditItemDescriptor(EditItemDescriptor toCopy) {
132136
setPriority(toCopy.priority);
133137
setCost(toCopy.cost);
134138
setDuration(toCopy.duration);
139+
setStartTime(toCopy.startTime);
135140
}
136141

137142
/**
@@ -173,6 +178,14 @@ public void setDuration(Duration duration) {
173178
this.duration = duration;
174179
}
175180

181+
public Optional<StartTime> getStartTime() {
182+
return Optional.ofNullable(startTime);
183+
}
184+
185+
public void setStartTime(StartTime startTime) {
186+
this.startTime = startTime;
187+
}
188+
176189
@Override
177190
public boolean equals(Object other) {
178191
// short circuit if same object

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class CliSyntax {
99
public static final Prefix PREFIX_NAME = new Prefix("n/");
1010
public static final Prefix PREFIX_COUNTRY = new Prefix("c/");
1111
public static final Prefix PREFIX_START_DATE = new Prefix("sd/");
12+
public static final Prefix PREFIX_START_TIME = new Prefix("t/");
1213
public static final Prefix PREFIX_ITINERARY_DURATION = new Prefix("dur/");
1314
public static final Prefix PREFIX_PEOPLE = new Prefix("p/");
1415
public static final Prefix PREFIX_BUDGET = new Prefix("b/");

src/main/java/seedu/waddle/logic/parser/EditItemCommandParser.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DESCRIPTION;
77
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DURATION;
88
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_PRIORITY;
9+
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_START_TIME;
910

1011
import seedu.waddle.commons.core.index.Index;
1112
import seedu.waddle.logic.commands.EditItemCommand;
@@ -25,7 +26,7 @@ public EditItemCommand parse(String args) throws ParseException {
2526
requireNonNull(args);
2627
ArgumentMultimap argMultimap =
2728
ArgumentTokenizer.tokenize(args, PREFIX_DESCRIPTION, PREFIX_PRIORITY,
28-
PREFIX_COST, PREFIX_DURATION);
29+
PREFIX_COST, PREFIX_DURATION, PREFIX_START_TIME);
2930

3031
Index index;
3132

@@ -57,6 +58,11 @@ public EditItemCommand parse(String args) throws ParseException {
5758
ParserUtil.parseDuration(argMultimap.getValue(PREFIX_DURATION).get()));
5859
}
5960

61+
if (argMultimap.getValue(PREFIX_START_TIME).isPresent()) {
62+
editItemDescriptor.setStartTime(
63+
ParserUtil.parseStartTime(argMultimap.getValue(PREFIX_START_TIME).get()));
64+
}
65+
6066
if (!editItemDescriptor.isAnyFieldEdited()) {
6167
throw new ParseException(EditItemCommand.MESSAGE_NOT_EDITED);
6268
}

src/main/java/seedu/waddle/logic/parser/ParserUtil.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import seedu.waddle.model.item.Cost;
99
import seedu.waddle.model.item.Duration;
1010
import seedu.waddle.model.item.Priority;
11+
import seedu.waddle.model.item.StartTime;
1112
import seedu.waddle.model.itinerary.Budget;
1213
import seedu.waddle.model.itinerary.Country;
1314
import seedu.waddle.model.itinerary.Date;
@@ -189,4 +190,19 @@ public static Duration parseDuration(String duration) throws ParseException {
189190
return new Duration(trimmedDuration);
190191
}
191192

193+
/**
194+
* Parses a {@code String startTime} into a {@code StartTime}.
195+
* Leading and trailing whitespaces will be trimmed.
196+
*
197+
* @throws ParseException if the given {@code startTime} is invalid.
198+
*/
199+
public static StartTime parseStartTime(String startTime) throws ParseException {
200+
requireNonNull(startTime);
201+
String trimmedStartTime = startTime.trim();
202+
if (!StartTime.isValidStartTime(trimmedStartTime)) {
203+
throw new ParseException(StartTime.MESSAGE_CONSTRAINTS);
204+
}
205+
return new StartTime(startTime);
206+
}
207+
192208
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package seedu.waddle.model.item;
2+
3+
import static java.util.Objects.requireNonNull;
4+
import static seedu.waddle.commons.util.AppUtil.checkArgument;
5+
6+
import java.time.LocalTime;
7+
import java.time.format.DateTimeFormatter;
8+
import java.time.format.DateTimeParseException;
9+
10+
/**
11+
* Represents the start time of the item.
12+
*/
13+
public class StartTime {
14+
public static final String MESSAGE_CONSTRAINTS =
15+
"Cost should be written as HHmm in 24H format. For example, 3:25pm is 1525.";
16+
private static final String timePattern = "HHmm";
17+
private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(timePattern);
18+
private final LocalTime startTime;
19+
20+
/**
21+
* Constructs a {@code StartTime}.
22+
*
23+
* @param startTime A valid start time.
24+
*/
25+
public StartTime(String startTime) {
26+
requireNonNull(startTime);
27+
checkArgument(isValidStartTime(startTime), MESSAGE_CONSTRAINTS);
28+
this.startTime = LocalTime.parse(startTime, timeFormatter);
29+
}
30+
31+
/**
32+
* Returns true if a given string is a valid Cost
33+
*/
34+
public static boolean isValidStartTime(String test) {
35+
LocalTime time;
36+
try {
37+
time = LocalTime.parse(test, timeFormatter);
38+
} catch (DateTimeParseException e) {
39+
return false;
40+
}
41+
return true;
42+
}
43+
44+
public LocalTime getStartTime() {
45+
return this.startTime;
46+
}
47+
48+
@Override
49+
public String toString() {
50+
return this.startTime.toString();
51+
}
52+
}

0 commit comments

Comments
 (0)