Skip to content

Commit 3c5aef8

Browse files
authored
Merge pull request #184 from RadieonAjax/branch-BugFixes
Fix archive and loading bug for undo and redo
2 parents 3eb8fca + 5ff8ac7 commit 3c5aef8

File tree

7 files changed

+46
-7
lines changed

7 files changed

+46
-7
lines changed

src/main/java/seedu/address/logic/LogicManager.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ public void setGuiSettings(GuiSettings guiSettings) {
9797
private void updateModelWithStorage(Command command, Storage storage, Model model) throws CommandException {
9898
try {
9999
if (command instanceof LoadCommand) {
100-
model.setAddressBook(storage.readAddressBook(((LoadCommand) command).getLoadPath()).get());
100+
ReadOnlyAddressBook readOnlyAddressBook = storage.readAddressBook(((LoadCommand) command)
101+
.getLoadPath()).get();
102+
model.setAddressBook(readOnlyAddressBook);
103+
model.updateAddressBook(readOnlyAddressBook);
101104
}
102105
} catch (DataLoadingException e) {
103106
throw new CommandException(String.format(LOAD_ERROR_FORMAT, e.getMessage()), e);

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

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import java.nio.file.Path;
77

8-
import seedu.address.model.AddressBook;
98
import seedu.address.model.Model;
109
/**
1110
* Archives the address book.
@@ -33,7 +32,6 @@ public Path getArchivePath() {
3332
@Override
3433
public CommandResult execute(Model model) {
3534
requireNonNull(model);
36-
model.setAddressBook(new AddressBook());
3735
model.clearAddressBook();
3836
return new CommandResult(String.format(MESSAGE_SUCCESS, archivePath));
3937
}

src/main/java/seedu/address/model/Model.java

+6
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ public interface Model {
114114
*/
115115
void redoAddressBook();
116116

117+
/**
118+
* Update and initializes the address book with a given address book.
119+
* This clears and updates the entire undo/redo stack.
120+
*/
121+
void updateAddressBook(ReadOnlyAddressBook addressBook);
122+
117123
/**
118124
* Returns {@code true} if there are states to undo in the address book.
119125
*

src/main/java/seedu/address/model/ModelManager.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ public void undoAddressBook() {
142142
logger.info("Undid last action in address book.");
143143
}
144144

145+
@Override
146+
public void updateAddressBook(ReadOnlyAddressBook addressBook) {
147+
versionedAddressBook.resetData(addressBook);
148+
versionedAddressBook.update(addressBook);
149+
}
150+
145151
@Override
146152
public void redoAddressBook() {
147153
versionedAddressBook.redo();
@@ -157,7 +163,8 @@ public void saveAddressBook() {
157163

158164
@Override
159165
public void clearAddressBook() {
160-
this.setAddressBook(versionedAddressBook.clear());
166+
versionedAddressBook.clear();
167+
this.setAddressBook(new AddressBook());
161168
logger.info("Cleared the address book.");
162169
}
163170

src/main/java/seedu/address/model/VersionedAddressBook.java

+17-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*/
1010
public class VersionedAddressBook extends AddressBook {
1111

12-
private final List<ReadOnlyAddressBook> addressBookStateList;
12+
private List<ReadOnlyAddressBook> addressBookStateList;
1313
private int currentStatePointer;
1414

1515
/**
@@ -78,8 +78,22 @@ public void redo() {
7878
/**
7979
* Clears all states from the Versioned Address Book.
8080
*/
81-
public VersionedAddressBook clear() {
82-
return new VersionedAddressBook(new AddressBook());
81+
public void clear() {
82+
this.addressBookStateList = new ArrayList<>();
83+
this.currentStatePointer = 0;
84+
AddressBook newState = new AddressBook();
85+
addressBookStateList.add(newState);
86+
}
87+
88+
/**
89+
* Updates the addressBookStateList with a new state - used exclusively by LoadCommand
90+
* @param readOnlyAddressBook new state to be saved
91+
*/
92+
public void update(ReadOnlyAddressBook readOnlyAddressBook) {
93+
this.addressBookStateList = new ArrayList<>();
94+
this.currentStatePointer = 0;
95+
AddressBook newState = new AddressBook(readOnlyAddressBook);
96+
addressBookStateList.add(newState);
8397
}
8498

8599
/**

src/test/java/seedu/address/logic/commands/AddCommandTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ public void redoAddressBook() {
168168
throw new AssertionError("This method should not be called.");
169169
}
170170

171+
@Override
172+
public void updateAddressBook(ReadOnlyAddressBook addressBook) {
173+
throw new AssertionError("This method should not be called.");
174+
}
175+
171176
@Override
172177
public void saveAddressBook() {
173178
throw new AssertionError("This method should not be called.");

src/test/java/seedu/address/logic/commands/GradeCommandTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ public boolean canUndoAddressBook() {
211211
public void redoAddressBook() {
212212
throw new AssertionError("This method should not be called.");
213213
}
214+
215+
@Override
216+
public void updateAddressBook(ReadOnlyAddressBook addressBook) {
217+
throw new AssertionError("This method should not be called.");
218+
}
219+
214220
@Override
215221
public void undoAddressBook() {
216222
throw new AssertionError("This method should not be called.");

0 commit comments

Comments
 (0)