diff --git a/src/seedu/addressbook/logic/Logic.java b/src/seedu/addressbook/logic/Logic.java index 17afd61a0..12ce9a833 100644 --- a/src/seedu/addressbook/logic/Logic.java +++ b/src/seedu/addressbook/logic/Logic.java @@ -6,6 +6,7 @@ import seedu.addressbook.data.person.ReadOnlyPerson; import seedu.addressbook.parser.Parser; import seedu.addressbook.storage.StorageFile; +import seedu.addressbook.storage.StorageStub; import java.util.Collections; import java.util.List; @@ -16,10 +17,8 @@ */ public class Logic { - - private StorageFile storage; private AddressBook addressBook; - + public StorageStub storage; /** The list of person shown to the user most recently. */ private List lastShownList = Collections.emptyList(); @@ -28,12 +27,12 @@ public Logic() throws Exception{ setAddressBook(storage.load()); } - Logic(StorageFile storageFile, AddressBook addressBook){ + Logic(StorageStub storageFile, AddressBook addressBook)throws Exception{ setStorage(storageFile); setAddressBook(addressBook); } - void setStorage(StorageFile storage){ + void setStorage(StorageStub storage){ this.storage = storage; } @@ -41,17 +40,11 @@ void setAddressBook(AddressBook addressBook){ this.addressBook = addressBook; } - /** - * Creates the StorageFile object based on the user specified path (if any) or the default storage path. - * @throws StorageFile.InvalidStorageFilePathException if the target file path is incorrect. - */ - private StorageFile initializeStorage() throws StorageFile.InvalidStorageFilePathException { - return new StorageFile(); - } - - public String getStorageFilePath() { - return storage.getPath(); - } + + private StorageStub initializeStorage() throws StorageFile.InvalidStorageFilePathException{ + return new StorageStub("addressbook.txt"); + } + /** * Unmodifiable view of the current last shown list. diff --git a/src/seedu/addressbook/storage/Storage.java b/src/seedu/addressbook/storage/Storage.java new file mode 100644 index 000000000..dd96531e6 --- /dev/null +++ b/src/seedu/addressbook/storage/Storage.java @@ -0,0 +1,45 @@ +package seedu.addressbook.storage; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import seedu.addressbook.data.AddressBook; +import seedu.addressbook.data.exception.IllegalValueException; +import seedu.addressbook.storage.Storage.InvalidStorageFilePathException; +import seedu.addressbook.storage.Storage.StorageOperationException; + +public abstract class Storage { + /** Default file path used if the user doesn't provide the file name. */ + public static final String DEFAULT_STORAGE_FILEPATH = "addressbook.txt"; + + public Path path; + + /** + * Signals that the given file path does not fulfill the storage filepath constraints. + */ + public static class InvalidStorageFilePathException extends IllegalValueException { + public InvalidStorageFilePathException(String message) { + super(message); + } + } + + /** + * Signals that some error has occured while trying to convert and read/write data between the application + * and the storage file. + */ + public static class StorageOperationException extends Exception { + public StorageOperationException(String message) { + super(message); + } + } + /** + * @throws InvalidStorageFilePathException if the default path is invalid + */ + public Storage() throws InvalidStorageFilePathException { + path=Paths.get(DEFAULT_STORAGE_FILEPATH); + } + public abstract String getPath() ; + public abstract AddressBook load() throws StorageOperationException; + public void save(AddressBook addressBook) throws StorageOperationException {} + +} diff --git a/src/seedu/addressbook/storage/StorageFile.java b/src/seedu/addressbook/storage/StorageFile.java index 693097a86..d1bbc8fe4 100644 --- a/src/seedu/addressbook/storage/StorageFile.java +++ b/src/seedu/addressbook/storage/StorageFile.java @@ -15,45 +15,17 @@ /** * Represents the file used to store address book data. */ -public class StorageFile { - - /** Default file path used if the user doesn't provide the file name. */ - public static final String DEFAULT_STORAGE_FILEPATH = "addressbook.txt"; +public class StorageFile extends Storage { + /* Note: Note the use of nested classes below. * More info https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html */ - /** - * Signals that the given file path does not fulfill the storage filepath constraints. - */ - public static class InvalidStorageFilePathException extends IllegalValueException { - public InvalidStorageFilePathException(String message) { - super(message); - } - } - - /** - * Signals that some error has occured while trying to convert and read/write data between the application - * and the storage file. - */ - public static class StorageOperationException extends Exception { - public StorageOperationException(String message) { - super(message); - } - } private final JAXBContext jaxbContext; - public final Path path; - - /** - * @throws InvalidStorageFilePathException if the default path is invalid - */ - public StorageFile() throws InvalidStorageFilePathException { - this(DEFAULT_STORAGE_FILEPATH); - } - + /** * @throws InvalidStorageFilePathException if the given file path is invalid */ @@ -141,8 +113,13 @@ public AddressBook load() throws StorageOperationException { } } - public String getPath() { - return path.toString(); - } + @Override + public String getPath() { + // TODO Auto-generated method stub + return path.toString(); + } + + + } diff --git a/src/seedu/addressbook/storage/StorageStub.java b/src/seedu/addressbook/storage/StorageStub.java new file mode 100644 index 000000000..291ae2d21 --- /dev/null +++ b/src/seedu/addressbook/storage/StorageStub.java @@ -0,0 +1,75 @@ +package seedu.addressbook.storage; + +import seedu.addressbook.data.AddressBook; +import seedu.addressbook.storage.jaxb.AdaptedAddressBook; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * Represents the file used to store address book data. + */ +public class StorageStub extends Storage { + + + /* Note: Note the use of nested classes below. + * More info https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html + */ + + + /** + * @throws InvalidStorageFilePathException if the given file path is invalid + */ + public StorageStub(String filePath) throws InvalidStorageFilePathException { + try { + JAXBContext.newInstance(AdaptedAddressBook.class); + } catch (JAXBException jaxbe) { + throw new RuntimeException("jaxb initialisation error"); + } + + path = Paths.get(filePath); + if (!isValidPath(path)) { + throw new InvalidStorageFilePathException("Storage file should end with '.txt'"); + } + } + + /** + * Returns true if the given path is acceptable as a storage file. + * The file path is considered acceptable if it ends with '.txt' + */ + private static boolean isValidPath(Path filePath) { + return filePath.toString().endsWith(".txt"); + } + + /** + * Saves all data to this storage file. + * + * @throws StorageOperationException if there were errors converting and/or storing data to file. + */ + public void save(AddressBook addressBook) throws StorageOperationException { + + + } + + /** + * Loads data from this storage file. + * + * @throws StorageOperationException if there were errors reading and/or converting data from file. + */ + public AddressBook load() throws StorageOperationException { + return new AddressBook(); + } + + @Override + public String getPath() { + // TODO Auto-generated method stub + return path.toString(); + } + + + + +} + diff --git a/src/seedu/addressbook/ui/Gui.java b/src/seedu/addressbook/ui/Gui.java index 20a7833c1..e01f223b7 100644 --- a/src/seedu/addressbook/ui/Gui.java +++ b/src/seedu/addressbook/ui/Gui.java @@ -31,7 +31,7 @@ public Gui(Logic logic, String version) { public void start(Stage stage, Stoppable mainApp) throws IOException { mainWindow = createMainWindow(stage, mainApp); - mainWindow.displayWelcomeMessage(version, logic.getStorageFilePath()); + mainWindow.displayWelcomeMessage(version, logic.storage.getPath()); } private MainWindow createMainWindow(Stage stage, Stoppable mainApp) throws IOException{ diff --git a/test/java/seedu/addressbook/logic/LogicTest.java b/test/java/seedu/addressbook/logic/LogicTest.java index 7efa921ca..9127251f3 100644 --- a/test/java/seedu/addressbook/logic/LogicTest.java +++ b/test/java/seedu/addressbook/logic/LogicTest.java @@ -12,7 +12,7 @@ import seedu.addressbook.data.person.*; import seedu.addressbook.data.tag.Tag; import seedu.addressbook.data.tag.UniqueTagList; -import seedu.addressbook.storage.StorageFile; +import seedu.addressbook.storage.StorageStub; import java.util.*; @@ -28,13 +28,13 @@ public class LogicTest { @Rule public TemporaryFolder saveFolder = new TemporaryFolder(); - private StorageFile saveFile; + private StorageStub saveFile; private AddressBook addressBook; private Logic logic; @Before public void setup() throws Exception { - saveFile = new StorageFile(saveFolder.newFile("testSaveFile.txt").getPath()); + saveFile = new StorageStub(saveFolder.newFile("testSaveFile.txt").getPath()); addressBook = new AddressBook(); saveFile.save(addressBook); logic = new Logic(saveFile, addressBook);