/** * Copyright (c) 2012, Lindsay Bradford and other Contributors. * All rights reserved. * * This program and the accompanying materials are made available * under the terms of the BSD 3-Clause licence which accompanies * this distribution, and is available at * http://opensource.org/licenses/BSD-3-Clause */ package blacksmyth.general.file; import java.util.Observer; import blacksmyth.personalfinancier.control.IApplicationMessagePresenter; import blacksmyth.personalfinancier.model.IPreferenceItem; /** * Default implementation of the IFileHandler interface. * @author linds * * @param <T> */ public final class FileHandler<T> implements IFileHandler<T> { private IFileHandlerView view; private IFileHandlerModel<T> model; private IObjectFileConverter<T> converter; private IPreferenceItem<String> filePathPreference; private IApplicationMessagePresenter appMessagePresenter; public void setAppMessagePresenter(IApplicationMessagePresenter presenter){ this.appMessagePresenter = presenter; } @Override public void setFilePathPreferenceItem(IPreferenceItem<String> preference) { this.filePathPreference = preference; } @Override public void setObjectFileConverter(IObjectFileConverter<T> converter) { this.converter = converter; } @Override public void setView(IFileHandlerView view) { this.view = view; } @Override public void setModel(IFileHandlerModel<T> model) { this.model = model; } private boolean hasValidConfig() { if (view == null || model == null || converter == null || filePathPreference == null) return false; return true; } @Override public void save() { assert hasValidConfig(); if (view.getFilename() == null) { if (view.promptForSaveFilename()) { save(view.getFilename()); filePathPreference.setPreference( view.getFilename() ); } } else { save(view.getFilename()); filePathPreference.setPreference( view.getFilename() ); } } @Override public void saveAs() { assert hasValidConfig(); if (view.promptForSaveFilename()) { save(view.getFilename()); filePathPreference.setPreference( view.getFilename() ); } } private void save(String fileName) { assert hasValidConfig(); appMessagePresenter.setMessage( "Saving file " + view.getFilename() ); converter.toFileFromObject( fileName, model.toSerializable() ); appMessagePresenter.setMessage( "File " + view.getFilename() + " saved." ); } @Override public void load() { assert hasValidConfig(); view.setPromptDirectory( filePathPreference.getPreference() ); if (view.promptForLoadFilename()) { load(view.getFilename()); filePathPreference.setPreference( view.getFilename() ); } } private void load(String filename) { assert hasValidConfig(); appMessagePresenter.setMessage( "Loading file " + view.getFilename() ); T objectFromFile = converter.toObjectFromFile(filename); if (objectFromFile == null) { appMessagePresenter.setMessage( "File " + view.getFilename() + " failed to load." ); return; } model.fromSerializable( objectFromFile ); appMessagePresenter.setMessage( "File " + view.getFilename() + " loaded." ); } @Override public void addObserver(Observer o) { appMessagePresenter.addObserver(o); } }