Skip to content

Commit

Permalink
Merge pull request #198 from AY1920S2-CS2103T-F09-3/improve-course-mo…
Browse files Browse the repository at this point in the history
…dule-done-req-assign-2

Move logic for updating of requirement credits to parser
  • Loading branch information
Nathanael Seen Zhong Qi authored Apr 2, 2020
2 parents 31524f5 + fcb96b8 commit 59d1b06
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 63 deletions.
27 changes: 24 additions & 3 deletions src/main/java/igrad/logic/commands/module/ModuleDoneCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,32 @@ public CommandResult execute(Model model) throws CommandException {
* requirements containing that module. And the second is that we need to update the
* creditsFulfilled of all requirements (which consists of that module).
*
* The setRequirementModule(...) method does both of these, for each related Requirement.
* The code below does both of these, for each related Requirement.
*/
requirementsToUpdate.stream()
.forEach(requirementToEdit ->
model.setRequirementModule(requirementToEdit, moduleToEdit, editedModule));
.forEach(requirementToEdit -> {
// Copy over all the old values of requirementToEdit
igrad.model.requirement.RequirementCode requirementCode = requirementToEdit.getRequirementCode();
igrad.model.requirement.Title title = requirementToEdit.getTitle();

int creditsRequired = requirementToEdit.getCredits().getCreditsRequired();
int creditsFulfilled = requirementToEdit.getCredits().getCreditsFulfilled()
+ editedModule.getCredits().toInteger();
igrad.model.requirement.Credits updatedCredits =
new igrad.model.requirement.Credits(creditsRequired, creditsFulfilled);

// Updates the existing requirement; requirementToEdit with the new module
requirementToEdit.setModule(moduleToEdit, editedModule);

// Get the most update module list
List<Module> modules = requirementToEdit.getModuleList();

// Create a new Requirement with all the updated information (details).
Requirement editedRequirement = new Requirement(requirementCode, title, updatedCredits, modules);

// Create a new module based on that
model.setRequirement(requirementToEdit, editedRequirement);
});

return new CommandResult(String.format(MESSAGE_MODULE_DONE_SUCCESS, editedModule));
}
Expand Down
36 changes: 0 additions & 36 deletions src/main/java/igrad/model/CourseBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -168,42 +168,6 @@ public void setRequirement(Requirement target, Requirement editedRequirement) {
requirements.setRequirement(target, editedRequirement);
}

/**
* Replaces the module {@code moduleTarget} with {@code editedModule} in the given {@code Requirement}.
* {@code moduleTarget} must exist in the requirement and the module identity of {@code editedModule} must not
* must not be the same as another existing module in that requirement {@code requirementTarget}.
*
* Additionally, the creditsFulfilled for the requirement gets updated as well.
*
* Essentially, the difference between this method and,
* {@code setRequirement (Requirement target, editedRequirement)}, is that this method only
* sets (edits) a specific {@code Module} in the target requirement (modules list), (and of
* course the creditsFulfilled of that requirement as well), instead of
* updating the entire requirement in the course book requirement list.
*/
public void setRequirementModule(Requirement requirementTarget, Module moduleTarget, Module editedModule) {
// Copy over all the old values of requirementTarget
RequirementCode requirementCode = requirementTarget.getRequirementCode();
Title title = requirementTarget.getTitle();

int creditsRequired = requirementTarget.getCredits().getCreditsRequired();
int creditsFulfilled = requirementTarget.getCredits().getCreditsFulfilled()
+ editedModule.getCredits().toInteger();
Credits updatedCredits = new Credits(creditsRequired, creditsFulfilled);

// Updates the existing requirement; requirementTarget with the new module
requirementTarget.setModule(moduleTarget, editedModule);

// Get the most update module list
List<Module> modules = requirementTarget.getModuleList();

// Create a new Requirement with all the updated information (details).
Requirement editedRequirement = new Requirement(requirementCode, title, updatedCredits, modules);

// Create a new module based on that
requirements.setRequirement(requirementTarget, editedRequirement);
}

/**
* Removes {@code requirement} from this {@code CourseBook}.
* {@code requirement} must exist in the course book.
Expand Down
13 changes: 0 additions & 13 deletions src/main/java/igrad/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -201,19 +201,6 @@ public interface Model {
*/
void setRequirement(Requirement target, Requirement editedRequirement);

/**
* Replaces the module {@code moduleTarget} with {@code editedModule} in the given {@code Requirement}.
* {@code moduleTarget} must exist in the requirement and {@code editedModule} must not
* have the same title as another module in that requirement {@code requirementTarget}.
*
* Additionally, the creditsFulfilled for the requirement gets updated as well.
*
* Essentially, the difference between this method and,
* {@code setRequirement (Requirement target, editedRequirement)}, is that this method only
* sets (edits) a specific {@code Module} in the target requirement (modules list).
*/
void setRequirementModule(Requirement requirementTarget, Module moduleTarget, Module editedModule);

/**
* Deletes the given {@code requirement}.
*/
Expand Down
7 changes: 0 additions & 7 deletions src/main/java/igrad/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,6 @@ public void setRequirement(Requirement target, Requirement editedRequirement) {
courseBook.setRequirement(target, editedRequirement);
}

@Override
public void setRequirementModule(Requirement requirementTarget, Module moduleTarget, Module editedModule) {
requireAllNonNull(requirementTarget, moduleTarget, editedModule);

courseBook.setRequirementModule(requirementTarget, moduleTarget, editedModule);
}

@Override
public void deleteRequirement(Requirement requirement) {
courseBook.removeRequirement(requirement);
Expand Down
5 changes: 1 addition & 4 deletions src/test/java/igrad/logic/commands/AddCommandTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,7 @@ public int getTotalCreditsRequired() {
public Cap computeEstimatedCap(Cap capToAchieve, int semsLeft) {
throw new AssertionError("This method should not be called.");
}
@Override
public void setRequirementModule(Requirement requirementTarget, Module moduleTarget, Module editedModule) {
throw new AssertionError("This method should not be called.");
}

@Override
public List<Requirement> getRequirementsWithModule(Module module) {
throw new AssertionError("This method should not be called.");
Expand Down

0 comments on commit 59d1b06

Please sign in to comment.