Skip to content

Commit 29f2585

Browse files
authored
Merge pull request nus-cs2103-AY2021S2#81 from danielonges/feature-weightage
Implement Weightage attribute into Task
2 parents 8d52e92 + 01f53c5 commit 29f2585

15 files changed

Lines changed: 178 additions & 54 deletions

File tree

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import seedu.address.model.person.Phone;
2626
import seedu.address.model.person.Remark;
2727
import seedu.address.model.person.Task;
28+
import seedu.address.model.person.Weightage;
2829
import seedu.address.model.tag.Tag;
2930

3031
/**
@@ -96,12 +97,14 @@ private static Task createEditedTask(Task taskToEdit, EditTaskDescriptor editTas
9697

9798
ModuleName updatedModuleName = editTaskDescriptor.getModuleName().orElse(taskToEdit.getModuleName());
9899
ModuleCode updatedModuleCode = editTaskDescriptor.getModuleCode().orElse(taskToEdit.getModuleCode());
100+
Weightage updatedWeightage = taskToEdit.getWeightage(); // edit command does not allow editing weightage
99101
Phone updatedPhone = editTaskDescriptor.getPhone().orElse(taskToEdit.getPhone());
100102
Email updatedEmail = editTaskDescriptor.getEmail().orElse(taskToEdit.getEmail());
101103
Remark updatedRemark = taskToEdit.getRemark(); // edit command does not allow editing remarks
102104
Set<Tag> updatedTags = editTaskDescriptor.getTags().orElse(taskToEdit.getTags());
103105

104-
return new Task(updatedModuleName, updatedModuleCode , updatedPhone, updatedEmail, updatedRemark, updatedTags);
106+
return new Task(updatedModuleName, updatedModuleCode, updatedWeightage,
107+
updatedPhone, updatedEmail, updatedRemark, updatedTags);
105108
}
106109

107110
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public CommandResult execute(Model model) throws CommandException {
5454
}
5555

5656
Task taskToEdit = lastShownList.get(index.getZeroBased());
57-
Task editedTask = new Task(taskToEdit.getModuleName(), taskToEdit.getModuleCode(), taskToEdit.getPhone(),
58-
taskToEdit.getEmail(), remark, taskToEdit.getTags());
57+
Task editedTask = new Task(taskToEdit.getModuleName(), taskToEdit.getModuleCode(), taskToEdit.getWeightage(),
58+
taskToEdit.getPhone(), taskToEdit.getEmail(), remark, taskToEdit.getTags());
5959

6060
model.setTask(taskToEdit, editedTask);
6161
model.updateFilteredTaskList(PREDICATE_SHOW_ALL_TASKS);

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import seedu.address.model.person.Phone;
1919
import seedu.address.model.person.Remark;
2020
import seedu.address.model.person.Task;
21+
import seedu.address.model.person.Weightage;
2122
import seedu.address.model.tag.Tag;
2223

2324
/**
@@ -41,12 +42,15 @@ public AddCommand parse(String args) throws ParseException {
4142

4243
ModuleName moduleName = ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());
4344
ModuleCode moduleCode = ParserUtil.parseCode(argMultimap.getValue(PREFIX_CODE).get());
45+
// add command does not allow adding remarks for now, initialise with
46+
// a default value of 0
47+
Weightage weightage = new Weightage(0);
4448
Phone phone = ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());
4549
Email email = ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());
4650
Remark remark = new Remark(""); // add command does not allow adding remarks straightaway
4751
Set<Tag> tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));
4852

49-
Task task = new Task(moduleName, moduleCode , phone, email, remark, tagList);
53+
Task task = new Task(moduleName, moduleCode, weightage, phone, email, remark, tagList);
5054
return new AddCommand(task);
5155
}
5256

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class Task {
1818
// Identity fields
1919
private final ModuleName moduleName;
2020
private final ModuleCode moduleCode;
21+
private final Weightage weightage;
2122
private final Phone phone;
2223
private final Email email;
2324

@@ -28,10 +29,12 @@ public class Task {
2829
/**
2930
* Every field must be present and not null.
3031
*/
31-
public Task(ModuleName moduleName, ModuleCode moduleCode, Phone phone, Email email, Remark remark, Set<Tag> tags) {
32+
public Task(ModuleName moduleName, ModuleCode moduleCode, Weightage weightage,
33+
Phone phone, Email email, Remark remark, Set<Tag> tags) {
3234
requireAllNonNull(moduleName, moduleCode, phone, email, tags);
3335
this.moduleName = moduleName;
3436
this.moduleCode = moduleCode;
37+
this.weightage = weightage;
3538
this.phone = phone;
3639
this.email = email;
3740
this.remark = remark;
@@ -46,6 +49,10 @@ public ModuleCode getModuleCode() {
4649
return moduleCode;
4750
}
4851

52+
public Weightage getWeightage() {
53+
return weightage;
54+
}
55+
4956
public Phone getPhone() {
5057
return phone;
5158
}
@@ -96,6 +103,7 @@ public boolean equals(Object other) {
96103
Task otherTask = (Task) other;
97104
return otherTask.getModuleName().equals(getModuleName())
98105
&& otherTask.getModuleCode().equals(getModuleCode())
106+
&& otherTask.getWeightage().equals(getWeightage())
99107
&& otherTask.getPhone().equals(getPhone())
100108
&& otherTask.getEmail().equals(getEmail())
101109
&& otherTask.getRemark().equals(getRemark())
@@ -114,6 +122,8 @@ public String toString() {
114122
builder.append(getModuleName())
115123
.append("; Module Code: ")
116124
.append(getModuleCode())
125+
.append("; Weightage: ")
126+
.append(getWeightage())
117127
.append("; Phone: ")
118128
.append(getPhone())
119129
.append("; Email: ")
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package seedu.address.model.person;
2+
3+
import static java.util.Objects.requireNonNull;
4+
import static seedu.address.commons.util.AppUtil.checkArgument;
5+
6+
/**
7+
* Represents a Task's weightage (as a percentage) in the task tracker.
8+
*/
9+
public class Weightage {
10+
11+
public static final String MESSAGE_CONSTRAINTS = "Weightage should be a percentage value greater or equal to 0%,"
12+
+ " and lesser or equal to 100%.";
13+
14+
public final Integer weightage;
15+
16+
/**
17+
* Constructs a {@code Weightage}.
18+
*
19+
* @param weightage a valid integer representing the weightage of a task.
20+
*/
21+
public Weightage(Integer weightage) {
22+
requireNonNull(weightage);
23+
checkArgument(isValidWeightage(weightage), MESSAGE_CONSTRAINTS);
24+
this.weightage = weightage;
25+
}
26+
27+
/**
28+
* Returns true if the weightage is a value greater or equal to 0, and less or equal to 100.
29+
*/
30+
public static boolean isValidWeightage(Integer weightage) {
31+
return weightage >= 0 && weightage <= 100;
32+
}
33+
34+
@Override
35+
public String toString() {
36+
return String.format("%d%%", weightage);
37+
}
38+
39+
@Override
40+
public boolean equals(Object other) {
41+
return other == this // short circuit if same object
42+
|| (other instanceof Weightage) // instanceof handles null
43+
&& weightage.equals(((Weightage) other).weightage);
44+
}
45+
46+
@Override
47+
public int hashCode() {
48+
return weightage.hashCode();
49+
}
50+
}

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

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import seedu.address.model.person.Phone;
1313
import seedu.address.model.person.Remark;
1414
import seedu.address.model.person.Task;
15+
import seedu.address.model.person.Weightage;
1516
import seedu.address.model.tag.Tag;
1617

1718
/**
@@ -23,24 +24,24 @@ public class SampleDataUtil {
2324

2425
public static Task[] getSampleTasks() {
2526
return new Task[]{
26-
new Task(new ModuleName("Alex Yeoh"), new ModuleCode("CS2103"), new Phone("87438807"),
27-
new Email("alexyeoh@example.com"),
28-
EMPTY_REMARK, getTagSet("friends")),
29-
new Task(new ModuleName("Bernice Yu"), new ModuleCode("CS2040"), new Phone("99272758"),
30-
new Email("berniceyu@example.com"),
31-
EMPTY_REMARK, getTagSet("colleagues", "friends")),
32-
new Task(new ModuleName("Charlotte Oliveiro"), new ModuleCode("CS1010"), new Phone("93210283"),
33-
new Email("charlotte@example" + ".com"),
34-
EMPTY_REMARK, getTagSet("neighbours")),
35-
new Task(new ModuleName("David Li"), new ModuleCode("CS2030"), new Phone("91031282"),
36-
new Email("lidavid@example.com"),
37-
EMPTY_REMARK, getTagSet("family")),
38-
new Task(new ModuleName("Irfan Ibrahim"), new ModuleCode("CS3240"), new Phone("92492021"),
39-
new Email("irfan@example.com"),
40-
EMPTY_REMARK, getTagSet("classmates")),
41-
new Task(new ModuleName("Roy Balakrishnan"), new ModuleCode("CS2103"), new Phone("92624417"),
42-
new Email("royb@example.com"),
43-
EMPTY_REMARK, getTagSet("colleagues"))
27+
new Task(new ModuleName("Alex Yeoh"), new ModuleCode("CS2103"), new Weightage(0),
28+
new Phone("87438807"),
29+
new Email("alexyeoh@example.com"), EMPTY_REMARK, getTagSet("friends")),
30+
new Task(new ModuleName("Bernice Yu"), new ModuleCode("CS2040"), new Weightage(0),
31+
new Phone("99272758"),
32+
new Email("berniceyu@example.com"), EMPTY_REMARK, getTagSet("colleagues", "friends")),
33+
new Task(new ModuleName("Charlotte Oliveiro"), new ModuleCode("CS1010"), new Weightage(0),
34+
new Phone("93210283"),
35+
new Email("charlotte@example" + ".com"), EMPTY_REMARK, getTagSet("neighbours")),
36+
new Task(new ModuleName("David Li"), new ModuleCode("CS2030"), new Weightage(0),
37+
new Phone("91031282"),
38+
new Email("lidavid@example.com"), EMPTY_REMARK, getTagSet("family")),
39+
new Task(new ModuleName("Irfan Ibrahim"), new ModuleCode("CS3240"), new Weightage(0),
40+
new Phone("92492021"),
41+
new Email("irfan@example.com"), EMPTY_REMARK, getTagSet("classmates")),
42+
new Task(new ModuleName("Roy Balakrishnan"), new ModuleCode("CS2103"), new Weightage(0),
43+
new Phone("92624417"),
44+
new Email("royb@example.com"), EMPTY_REMARK, getTagSet("colleagues"))
4445
};
4546
}
4647

src/main/java/seedu/address/storage/JsonAdaptedTask.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import seedu.address.model.person.Phone;
1717
import seedu.address.model.person.Remark;
1818
import seedu.address.model.person.Task;
19+
import seedu.address.model.person.Weightage;
1920
import seedu.address.model.tag.Tag;
2021

2122
/**
@@ -27,6 +28,7 @@ class JsonAdaptedTask {
2728

2829
private final String moduleName;
2930
private final String moduleCode;
31+
private final Integer weightage;
3032
private final String phone;
3133
private final String email;
3234
private final String remark;
@@ -38,12 +40,14 @@ class JsonAdaptedTask {
3840
@JsonCreator
3941
public JsonAdaptedTask(@JsonProperty("moduleName") String moduleName,
4042
@JsonProperty("moduleCode") String moduleCode,
43+
@JsonProperty("weightage") Integer weightage,
4144
@JsonProperty("phone") String phone,
4245
@JsonProperty("email") String email,
4346
@JsonProperty("remark") String remark,
4447
@JsonProperty("tagged") List<JsonAdaptedTag> tagged) {
4548
this.moduleName = moduleName;
4649
this.moduleCode = moduleCode;
50+
this.weightage = weightage;
4751
this.phone = phone;
4852
this.email = email;
4953
this.remark = remark;
@@ -58,6 +62,7 @@ public JsonAdaptedTask(@JsonProperty("moduleName") String moduleName,
5862
public JsonAdaptedTask(Task source) {
5963
moduleName = source.getModuleName().fullName;
6064
moduleCode = source.getModuleCode().moduleCode;
65+
weightage = source.getWeightage().weightage;
6166
phone = source.getPhone().value;
6267
email = source.getEmail().value;
6368
remark = source.getRemark().value;
@@ -95,6 +100,15 @@ public Task toModelType() throws IllegalValueException {
95100
}
96101
final ModuleCode modelModuleCode = new ModuleCode(moduleCode);
97102

103+
if (weightage == null) {
104+
throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT,
105+
Weightage.class.getSimpleName()));
106+
}
107+
if (!Weightage.isValidWeightage(weightage)) {
108+
throw new IllegalValueException(Weightage.MESSAGE_CONSTRAINTS);
109+
}
110+
final Weightage modelWeightage = new Weightage(weightage);
111+
98112
if (phone == null) {
99113
throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));
100114
}
@@ -117,7 +131,8 @@ public Task toModelType() throws IllegalValueException {
117131
final Remark modelRemark = new Remark(remark);
118132

119133
final Set<Tag> modelTags = new HashSet<>(personTags);
120-
return new Task(modelModuleName, modelModuleCode, modelPhone, modelEmail, modelRemark, modelTags);
134+
return new Task(modelModuleName, modelModuleCode, modelWeightage,
135+
modelPhone, modelEmail, modelRemark, modelTags);
121136
}
122137

123138
}

src/main/java/seedu/address/ui/TaskCard.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public class TaskCard extends UiPart<Region> {
3333
@FXML
3434
private Label moduleCode;
3535
@FXML
36+
private Label weightage;
37+
@FXML
3638
private Label id;
3739
@FXML
3840
private Label remark;
@@ -48,6 +50,7 @@ public TaskCard(Task task, int displayedIndex) {
4850
id.setText(displayedIndex + ". ");
4951
moduleName.setText(task.getModuleName().fullName);
5052
moduleCode.setText(task.getModuleCode().moduleCode);
53+
weightage.setText(task.getWeightage().toString());
5154
remark.setText(task.getRemark().value);
5255
task.getTags().stream()
5356
.sorted(Comparator.comparing(tag -> tag.tagName))

src/main/resources/view/TaskListCard.fxml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<Label fx:id="moduleName" text="\$first" styleClass="cell_big_label" />
2929
</HBox>
3030
<FlowPane fx:id="tags" />
31+
<Label fx:id="weightage" styleClass="cell_small_label" text="\$weightage" />
3132
<Label fx:id="remark" styleClass="cell_small_label" text="\$remark" />
3233
<Label fx:id="deadlineDate" styleClass="cell_small_label" text="\$date" />
3334
<Label fx:id="deadlineTime" styleClass="cell_small_label" text="\$time" />

src/test/data/JsonSerializableTaskTrackerTest/duplicateTaskTaskTracker.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
"tasks": [ {
33
"moduleName": "Software Engineering",
44
"moduleCode": "CS2103",
5+
"weightage" : 0,
56
"phone": "94351253",
67
"email": "alice@example.com",
78
"remark" : "Aardvarks"
89
}, {
910
"moduleName": "Software Engineering",
1011
"moduleCode": "CS2103",
12+
"weightage" : 0,
1113
"phone": "94351253",
1214
"email": "alice@example.com",
1315
"remark" : "Aardvarks"

0 commit comments

Comments
 (0)