diff --git a/src/main/java/seedu/address/model/game/Game.java b/src/main/java/seedu/address/model/game/Game.java index 3f236eb5f1b..e7c1fd5dc8b 100644 --- a/src/main/java/seedu/address/model/game/Game.java +++ b/src/main/java/seedu/address/model/game/Game.java @@ -21,44 +21,37 @@ public class Game { public final String gameName; public final Username username; public final SkillLevel skillLevel; + public final Role role; + /** - * Constructs a {@code Game} without a username. + * Constructs a {@code Game}. * * @param gameName A valid Game name. + * @param username (Optional) A username. + * @param skillLevel (Optional) A skill level. + * @param role (Optional) A role. */ - public Game(String gameName) { + public Game(String gameName, String username, String skillLevel, String role) { requireNonNull(gameName); checkArgument(isValidGameName(gameName), MESSAGE_CONSTRAINTS); this.gameName = gameName; - this.username = null; - this.skillLevel = null; + this.username = username != null ? new Username(username) : null; + this.skillLevel = skillLevel != null ? new SkillLevel(skillLevel) : null; + this.role = role != null ? new Role(role) : null; + } + + // Overloaded constructors for convenience + public Game(String gameName) { + this(gameName, null, null, null); } - /** - * Constructs a {@code Game} with a username. - * - * @param gameName A valid Game name. - */ public Game(String gameName, String username) { - requireNonNull(gameName); - checkArgument(isValidGameName(gameName), MESSAGE_CONSTRAINTS); - this.gameName = gameName; - this.username = new Username(username); - this.skillLevel = null; + this(gameName, username, null, null); } - /** - * Constructs a {@code Game} with a username. - * - * @param gameName A valid Game name. - */ public Game(String gameName, String username, String skillLevel) { - requireNonNull(gameName); - checkArgument(isValidGameName(gameName), MESSAGE_CONSTRAINTS); - this.gameName = gameName; - this.username = new Username(username); - this.skillLevel = new SkillLevel(skillLevel); + this(gameName, username, skillLevel, null); } /** diff --git a/src/main/java/seedu/address/model/game/Role.java b/src/main/java/seedu/address/model/game/Role.java new file mode 100644 index 00000000000..c2513cbc099 --- /dev/null +++ b/src/main/java/seedu/address/model/game/Role.java @@ -0,0 +1,73 @@ +package seedu.address.model.game; + +import static java.util.Objects.requireNonNull; +import static seedu.address.commons.util.AppUtil.checkArgument; + +/** + * Describes the Person's skill level in a Game. + */ +public class Role { + + private static final String MESSAGE_CONSTRAINTS = + "Role should not be blank"; + + /* + * Regex expression matches Strings that contain at least one non-whitespace character. + */ + private static final String VALIDATION_REGEX = "^(?!\\s*$).+"; + + private final String role; + + /** + * Constructs a {@code Role}. + * + * @param role a valid skill level or rank. + */ + public Role(String role) { + requireNonNull(role); + checkArgument(isValidRole(role), MESSAGE_CONSTRAINTS); + this.role = role; + } + + /** + * Returns true if a given string is a valid Role. + */ + public static boolean isValidRole(String test) { + return test.matches(VALIDATION_REGEX); + } + + /** + * Getter for role field. + */ + public String getRole() { + return role; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof Role)) { + return false; + } + + Role otherRole = (Role) other; + return role.equals(otherRole.role); + } + + @Override + public int hashCode() { + return role.hashCode(); + } + + /** + * Format state as text for viewing. + */ + public String toString() { + return role; + } + +}