/** * 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.personalfinancier.control; import java.util.HashMap; import javax.swing.JFrame; import blacksmyth.general.ApplicationMessagePresenter; import blacksmyth.general.file.FileHandler; import blacksmyth.general.file.FileSystemBridge; import blacksmyth.general.file.IFileHandler; import blacksmyth.general.file.IFileHandlerModel; import blacksmyth.general.file.IFileHandlerView; import blacksmyth.general.file.IObjectFileConverter; import blacksmyth.general.file.StrategicFileConverter; import blacksmyth.personalfinancier.dependencies.encryption.EncryptionBridge; import blacksmyth.personalfinancier.dependencies.json.EncryptedJSonFileConverter; import blacksmyth.personalfinancier.dependencies.json.JSonBridge; import blacksmyth.personalfinancier.dependencies.json.JSonObjectFileConverter; import blacksmyth.personalfinancier.model.IPreferenceItem; import blacksmyth.personalfinancier.model.PreferenceItemBuilder; import blacksmyth.personalfinancier.model.budget.BudgetFileContent; import blacksmyth.personalfinancier.model.inflation.InflationFileContent; import blacksmyth.personalfinancier.view.FileHandlerView; import blacksmyth.personalfinancier.view.PasswordPromptView; import blacksmyth.personalfinancier.view.PersonalFinancierView; public final class FileHandlerBuilder { private static final ApplicationMessagePresenter MSG_PRESENTER = new ApplicationMessagePresenter(); public static IFileHandler<BudgetFileContent> buildBudgetHandler( PersonalFinancierView parentFrame, IFileHandlerModel<BudgetFileContent> model) { HashMap<String, IObjectFileConverter<BudgetFileContent>> availableConverters = buildAvailableAdapters(parentFrame); IFileHandler<BudgetFileContent> handler = new FileHandler<BudgetFileContent>(); handler.setModel(model); handler.setView( buildBudgetView(parentFrame, availableConverters) ); handler.setObjectFileConverter( buildBudgetFileConverter(availableConverters) ); handler.setAppMessagePresenter(MSG_PRESENTER); handler.setFilePathPreferenceItem( buildBudgetPreferenceItem() ); return handler; } private static HashMap<String, IObjectFileConverter<BudgetFileContent>> buildAvailableAdapters(PersonalFinancierView parentView) { HashMap<String, IObjectFileConverter<BudgetFileContent>> availableConverters = new HashMap<String, IObjectFileConverter<BudgetFileContent>> (); JSonObjectFileConverter<BudgetFileContent> jsonConverter = new JSonObjectFileConverter<BudgetFileContent>(); jsonConverter.setJSonBridge( new JSonBridge<BudgetFileContent>() ); jsonConverter.setFileSystemBridge( new FileSystemBridge() ); availableConverters.put("pf", jsonConverter); EncryptionBridge bridge = new EncryptionBridge(); if (bridge.encryptionAvailable()) { EncryptedJSonFileConverter<BudgetFileContent> encryptedConverter = new EncryptedJSonFileConverter<BudgetFileContent>(); encryptedConverter.setView( new PasswordPromptView(parentView) ); encryptedConverter.setEncryptionBridge(bridge); encryptedConverter.setJSonBridge( new JSonBridge<BudgetFileContent>() ); encryptedConverter.setFileSystemBridge( new FileSystemBridge() ); availableConverters.put("epf", encryptedConverter); } return availableConverters; } private static IFileHandlerView buildBudgetView( PersonalFinancierView parentView, HashMap<String, IObjectFileConverter<BudgetFileContent>> converters) { return new FileHandlerView( parentView.getWindowFrame(), "Personal Financier Files", converters.keySet().toArray(new String[0]) // new String[0] needed for valid typecast. ); } private static IPreferenceItem<String> buildBudgetPreferenceItem() { return PreferenceItemBuilder.buildBudgetDirectoryPreferenceItem(); } private static IObjectFileConverter<BudgetFileContent> buildBudgetFileConverter( HashMap<String, IObjectFileConverter<BudgetFileContent>> converters) { StrategicFileConverter<BudgetFileContent> strategicConverter = new StrategicFileConverter<BudgetFileContent>(); strategicConverter.setAdapterMap(converters); return strategicConverter; } public static IFileHandler<InflationFileContent> buildInflationHandler( JFrame parentFrame, IFileHandlerModel<InflationFileContent> model) { IFileHandler<InflationFileContent> handler = new FileHandler<InflationFileContent>(); handler.setModel(model); handler.setView( buildInflationView(parentFrame) ); handler.setObjectFileConverter( buildInflationFileAdapter() ); handler.setAppMessagePresenter(MSG_PRESENTER); handler.setFilePathPreferenceItem( buildInflationPreferenceItem() ); return handler; } private static FileHandlerView buildInflationView(JFrame parentFrame) { return new FileHandlerView( parentFrame, "JSon Files", "json" ); } private static IObjectFileConverter<InflationFileContent> buildInflationFileAdapter() { JSonObjectFileConverter<InflationFileContent> jsonConverter = new JSonObjectFileConverter<InflationFileContent>(); jsonConverter.setJSonBridge( new JSonBridge<InflationFileContent>() ); jsonConverter.setFileSystemBridge( new FileSystemBridge() ); return jsonConverter; } private static IPreferenceItem<String> buildInflationPreferenceItem() { return PreferenceItemBuilder.buildInflationDirectoryPreferenceItem(); } }