Skip to content

Commit

Permalink
Merge pull request nus-cs2103-AY2223S1#79 from CFSY/startTime
Browse files Browse the repository at this point in the history
Add StartTime class
  • Loading branch information
CFSY committed Oct 22, 2022
2 parents 1c2eec5 + a3b70e8 commit 515dfa2
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 2 deletions.
15 changes: 14 additions & 1 deletion src/main/java/seedu/waddle/logic/commands/EditItemCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DESCRIPTION;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DURATION;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_PRIORITY;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_START_TIME;

import java.util.Optional;

Expand All @@ -18,6 +19,7 @@
import seedu.waddle.model.item.Duration;
import seedu.waddle.model.item.Item;
import seedu.waddle.model.item.Priority;
import seedu.waddle.model.item.StartTime;
import seedu.waddle.model.itinerary.Itinerary;

/**
Expand All @@ -34,7 +36,8 @@ public class EditItemCommand extends Command {
+ "[" + PREFIX_DESCRIPTION + "DESCRIPTION]"
+ "[" + PREFIX_PRIORITY + "PRIORITY]"
+ "[" + PREFIX_COST + "COST]"
+ "[" + PREFIX_DURATION + "DURATION]...\n"
+ "[" + PREFIX_DURATION + "DURATION]"
+ "[" + PREFIX_START_TIME + "START TIME]...\n"
+ "Example: " + COMMAND_WORD + " 1 "
+ PREFIX_DESCRIPTION + "Visit the Eiffel Tower ";

Expand Down Expand Up @@ -119,6 +122,7 @@ public static class EditItemDescriptor {
private Priority priority;
private Cost cost;
private Duration duration;
private StartTime startTime;

public EditItemDescriptor() {
}
Expand All @@ -132,6 +136,7 @@ public EditItemDescriptor(EditItemDescriptor toCopy) {
setPriority(toCopy.priority);
setCost(toCopy.cost);
setDuration(toCopy.duration);
setStartTime(toCopy.startTime);
}

/**
Expand Down Expand Up @@ -173,6 +178,14 @@ public void setDuration(Duration duration) {
this.duration = duration;
}

public Optional<StartTime> getStartTime() {
return Optional.ofNullable(startTime);
}

public void setStartTime(StartTime startTime) {
this.startTime = startTime;
}

@Override
public boolean equals(Object other) {
// short circuit if same object
Expand Down
1 change: 1 addition & 0 deletions src/main/java/seedu/waddle/logic/parser/CliSyntax.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class CliSyntax {
public static final Prefix PREFIX_NAME = new Prefix("n/");
public static final Prefix PREFIX_COUNTRY = new Prefix("c/");
public static final Prefix PREFIX_START_DATE = new Prefix("sd/");
public static final Prefix PREFIX_START_TIME = new Prefix("t/");
public static final Prefix PREFIX_ITINERARY_DURATION = new Prefix("dur/");
public static final Prefix PREFIX_PEOPLE = new Prefix("p/");
public static final Prefix PREFIX_BUDGET = new Prefix("b/");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DESCRIPTION;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_DURATION;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_PRIORITY;
import static seedu.waddle.logic.parser.CliSyntax.PREFIX_START_TIME;

import seedu.waddle.commons.core.index.Index;
import seedu.waddle.logic.commands.EditItemCommand;
Expand All @@ -25,7 +26,7 @@ public EditItemCommand parse(String args) throws ParseException {
requireNonNull(args);
ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_DESCRIPTION, PREFIX_PRIORITY,
PREFIX_COST, PREFIX_DURATION);
PREFIX_COST, PREFIX_DURATION, PREFIX_START_TIME);

Index index;

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

if (argMultimap.getValue(PREFIX_START_TIME).isPresent()) {
editItemDescriptor.setStartTime(
ParserUtil.parseStartTime(argMultimap.getValue(PREFIX_START_TIME).get()));
}

if (!editItemDescriptor.isAnyFieldEdited()) {
throw new ParseException(EditItemCommand.MESSAGE_NOT_EDITED);
}
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/seedu/waddle/logic/parser/ParserUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import seedu.waddle.model.item.Cost;
import seedu.waddle.model.item.Duration;
import seedu.waddle.model.item.Priority;
import seedu.waddle.model.item.StartTime;
import seedu.waddle.model.itinerary.Budget;
import seedu.waddle.model.itinerary.Country;
import seedu.waddle.model.itinerary.Date;
Expand Down Expand Up @@ -189,4 +190,19 @@ public static Duration parseDuration(String duration) throws ParseException {
return new Duration(trimmedDuration);
}

/**
* Parses a {@code String startTime} into a {@code StartTime}.
* Leading and trailing whitespaces will be trimmed.
*
* @throws ParseException if the given {@code startTime} is invalid.
*/
public static StartTime parseStartTime(String startTime) throws ParseException {
requireNonNull(startTime);
String trimmedStartTime = startTime.trim();
if (!StartTime.isValidStartTime(trimmedStartTime)) {
throw new ParseException(StartTime.MESSAGE_CONSTRAINTS);
}
return new StartTime(startTime);
}

}
52 changes: 52 additions & 0 deletions src/main/java/seedu/waddle/model/item/StartTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package seedu.waddle.model.item;

import static java.util.Objects.requireNonNull;
import static seedu.waddle.commons.util.AppUtil.checkArgument;

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

/**
* Represents the start time of the item.
*/
public class StartTime {
public static final String MESSAGE_CONSTRAINTS =
"Cost should be written as HHmm in 24H format. For example, 3:25pm is 1525.";
private static final String timePattern = "HHmm";
private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(timePattern);
private final LocalTime startTime;

/**
* Constructs a {@code StartTime}.
*
* @param startTime A valid start time.
*/
public StartTime(String startTime) {
requireNonNull(startTime);
checkArgument(isValidStartTime(startTime), MESSAGE_CONSTRAINTS);
this.startTime = LocalTime.parse(startTime, timeFormatter);
}

/**
* Returns true if a given string is a valid Cost
*/
public static boolean isValidStartTime(String test) {
LocalTime time;
try {
time = LocalTime.parse(test, timeFormatter);
} catch (DateTimeParseException e) {
return false;
}
return true;
}

public LocalTime getStartTime() {
return this.startTime;
}

@Override
public String toString() {
return this.startTime.toString();
}
}

0 comments on commit 515dfa2

Please sign in to comment.