diff --git a/src/seedu/addressbook/commands/AddCommand.java b/src/seedu/addressbook/commands/AddCommand.java index b0f202d42..87eeb5640 100644 --- a/src/seedu/addressbook/commands/AddCommand.java +++ b/src/seedu/addressbook/commands/AddCommand.java @@ -66,5 +66,9 @@ public CommandResult execute() { return new CommandResult(MESSAGE_DUPLICATE_PERSON); } } - + + @Override + public boolean isMutating() { + return true; + } } diff --git a/src/seedu/addressbook/commands/ClearCommand.java b/src/seedu/addressbook/commands/ClearCommand.java index 330146aaa..f03cc01a7 100644 --- a/src/seedu/addressbook/commands/ClearCommand.java +++ b/src/seedu/addressbook/commands/ClearCommand.java @@ -16,4 +16,9 @@ public CommandResult execute() { addressBook.clear(); return new CommandResult(MESSAGE_SUCCESS); } + + @Override + public boolean isMutating() { + return true; + } } diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java index a54cbcb5b..d3aa82a98 100644 --- a/src/seedu/addressbook/commands/Command.java +++ b/src/seedu/addressbook/commands/Command.java @@ -70,4 +70,11 @@ public int getTargetIndex() { public void setTargetIndex(int targetIndex) { this.targetIndex = targetIndex; } + + /** + * Checks if command is able to modify data by Command type. + */ + public boolean isMutating() { + return false; + } } diff --git a/src/seedu/addressbook/commands/DeleteCommand.java b/src/seedu/addressbook/commands/DeleteCommand.java index 1dd78f85e..00b8facf9 100644 --- a/src/seedu/addressbook/commands/DeleteCommand.java +++ b/src/seedu/addressbook/commands/DeleteCommand.java @@ -39,4 +39,8 @@ public CommandResult execute() { } } + @Override + public boolean isMutating() { + return true; + } } diff --git a/src/seedu/addressbook/logic/Logic.java b/src/seedu/addressbook/logic/Logic.java index 17afd61a0..f0eba93be 100644 --- a/src/seedu/addressbook/logic/Logic.java +++ b/src/seedu/addressbook/logic/Logic.java @@ -85,7 +85,9 @@ public CommandResult execute(String userCommandText) throws Exception { private CommandResult execute(Command command) throws Exception { command.setData(addressBook, lastShownList); CommandResult result = command.execute(); - storage.save(addressBook); + if(command.isMutating()) { + storage.save(addressBook); + } return result; } diff --git a/test/java/seedu/addressbook/logic/LogicTest.java b/test/java/seedu/addressbook/logic/LogicTest.java index 7efa921ca..4dd9e2aad 100644 --- a/test/java/seedu/addressbook/logic/LogicTest.java +++ b/test/java/seedu/addressbook/logic/LogicTest.java @@ -12,6 +12,7 @@ import seedu.addressbook.data.person.*; import seedu.addressbook.data.tag.Tag; import seedu.addressbook.data.tag.UniqueTagList; +import seedu.addressbook.parser.Parser; import seedu.addressbook.storage.StorageFile; import java.util.*; @@ -76,9 +77,14 @@ private void assertCommandBehavior(String inputCommand, AddressBook expectedAddressBook, boolean isRelevantPersonsExpected, List lastShownList) throws Exception { - + Command command = new Parser().parseCommand(inputCommand); //Execute the command CommandResult r = logic.execute(inputCommand); + + //Guarantees saveFile is saved for non-mutating methods + if (!command.isMutating()) { + saveFile.save(addressBook); + } //Confirm the result contains the right data assertEquals(expectedMessage, r.feedbackToUser);