// FileManagerPanel package org.javamoney.examples.ez.money.gui.dialog.preferences; import static org.javamoney.examples.ez.common.utility.BorderHelper.createTitledBorder; import static org.javamoney.examples.ez.common.utility.ButtonHelper.buildButton; import static org.javamoney.examples.ez.common.utility.I18NHelper.getSharedProperty; import static org.javamoney.examples.ez.money.ApplicationProperties.autoBackup; import static org.javamoney.examples.ez.money.ApplicationProperties.getBackupFile; import static org.javamoney.examples.ez.money.ApplicationProperties.getDataFile; import static org.javamoney.examples.ez.money.ApplicationProperties.passwordRequired; import static org.javamoney.examples.ez.money.ApplicationProperties.setAutoBackup; import static org.javamoney.examples.ez.money.ApplicationProperties.setBackupFile; import static org.javamoney.examples.ez.money.ApplicationProperties.setDataFile; import static org.javamoney.examples.ez.money.ApplicationProperties.setPasswordRequired; import static org.javamoney.examples.ez.money.ApplicationProperties.setUseDefaultDataFile; import static org.javamoney.examples.ez.money.ApplicationProperties.useDefaultDataFile; import static org.javamoney.examples.ez.money.model.DataManager.read; import static org.javamoney.examples.ez.money.model.DataManager.write; import static org.javamoney.examples.ez.money.utility.DialogHelper.decide; import static org.javamoney.examples.ez.money.utility.FileDialogHelper.showSaveDialog; import static org.javamoney.examples.ez.money.utility.PasswordHelper.writePassword; import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.JLabel; import javax.swing.JTextField; import org.javamoney.examples.ez.money.gui.dialog.PasswordDialog; import org.javamoney.examples.ez.common.gui.CheckBox; import org.javamoney.examples.ez.common.gui.Link; import org.javamoney.examples.ez.common.gui.Panel; import org.javamoney.examples.ez.common.utility.I18NHelper; /** * This class facilitates managing the programs's data file and backups. */ final class FileManagerPanel extends Panel { /** * Constructs a new preferences panel. */ public FileManagerPanel() { createCheckBoxes(); createFields(); createLinks(); buildPanel(); } ////////////////////////////////////////////////////////////////////////////// // Start of private methods. ////////////////////////////////////////////////////////////////////////////// private void buildPanel() { // Build panel. setFill(GridBagConstraints.BOTH); add(createBackupPanel(), 0, 0, 1, 1, 100, 50); addEmptyCellAt(0, 1); add(createDataFilePanel(), 0, 2, 1, 1, 0, 50); } private void changeBackupFile() { File file = showSaveDialog(getBackupFile().getName()); if(file != null) { setBackupFile(file); setText(BACKUP, file.toString()); } else if(getBackupFile().toString().length() == 0) { setAutoBackup(false); setText(BACKUP, ""); getCheckBoxes()[BACKUP].setSelected(false); getLinks()[BACKUP].setEnabled(false); } } private void changeDataFile() { File file = showSaveDialog(getDataFile().getName()); if(file != null) { setDataFile(file); setText(DATA, file.toString()); if(file.exists() == true) { if(decide(getProperty("load.title"), getProperty("load.description")) == true) { // Write data incase an error occurs. write(); if(read(file, true, passwordRequired()) == false) { // Restore data. read(); } } } } else if(getDataFile().toString().length() == 0) { setText(DATA, ""); setUseDefaultDataFile(true); getCheckBoxes()[DATA].setSelected(true); getLinks()[DATA].setEnabled(false); } } private Panel createBackupPanel() { Panel panel = new Panel(); // Build panel. panel.setFill(GridBagConstraints.HORIZONTAL); panel.add(getCheckBoxes()[BACKUP], 0, 0, 2, 1, 0, 50); panel.add(new JLabel(getProperty("location") + ": "), 0, 2, 1, 1, 0, 50); panel.add(getFields()[BACKUP], 1, 2, 1, 1, 100, 0); panel.setAnchor(GridBagConstraints.WEST); panel.setFill(GridBagConstraints.NONE); panel.add(getLinks()[BACKUP], 2, 2, 1, 1, 0, 0); panel.addEmptyCellAt(2, 0, 10); panel.setBorder(createTitledBorder(getProperty("title.backup"), false)); // Set defaults. setText(BACKUP, getBackupFile().toString()); getCheckBoxes()[BACKUP].setSelected(autoBackup()); getLinks()[BACKUP].setEnabled(getCheckBoxes()[BACKUP].isSelected()); return panel; } private void createCheckBoxes() { ActionHandler handler = new ActionHandler(); itsCheckBoxes = new CheckBox[3]; for(int len = 0; len < getCheckBoxes().length ;++len) { getCheckBoxes()[len] = new CheckBox(); } buildButton(getCheckBoxes()[BACKUP], getProperty("auto_backup"), handler); buildButton(getCheckBoxes()[DATA], getProperty("default"), handler); buildButton(getCheckBoxes()[PASSWORD], getProperty("password"), handler); } private Panel createDataFilePanel() { Panel panel = new Panel(); // Build panel. panel.setFill(GridBagConstraints.HORIZONTAL); panel.add(getCheckBoxes()[PASSWORD], 0, 1, 2, 1, 0, 33); panel.add(getCheckBoxes()[DATA], 0, 2, 2, 1, 0, 34); panel.add(new JLabel(getProperty("location") + ": "), 0, 3, 1, 1, 0, 33); panel.add(getFields()[DATA], 1, 3, 1, 1, 100, 0); panel.setAnchor(GridBagConstraints.WEST); panel.setFill(GridBagConstraints.NONE); panel.add(getLinks()[DATA], 2, 3, 1, 1, 0, 0); panel.addEmptyCellAt(2, 2, 10); panel.setBorder(createTitledBorder(getProperty("title.file"), false)); // Set defaults. setText(DATA, getDataFile().toString()); getCheckBoxes()[DATA].setSelected(useDefaultDataFile()); getCheckBoxes()[PASSWORD].setSelected(passwordRequired()); getLinks()[DATA].setEnabled(getCheckBoxes()[DATA].isSelected() == false); return panel; } private void createFields() { itsFields = new JTextField[2]; for(int len = 0; len < getFields().length ;++len) { getFields()[len] = new JTextField(); getFields()[len].setEditable(false); } } private void createLinks() { ActionHandler handler = new ActionHandler(); itsLinks = new Link[2]; for(int len = 0; len < getLinks().length ;++len) { getLinks()[len] = new Link(); } buildButton(getLinks()[BACKUP], getSharedProperty("change"), handler); buildButton(getLinks()[DATA], getSharedProperty("change"), handler); } private CheckBox[] getCheckBoxes() { return itsCheckBoxes; } private JTextField[] getFields() { return itsFields; } private Link[] getLinks() { return itsLinks; } private static String getProperty(String key) { return I18NHelper.getProperty("FileManagerPanel." + key); } private void promptForPassword() { String password = new PasswordDialog().showDialog(); if(password != null) { if(writePassword(password) == true) { setPasswordRequired(true); } } else { getCheckBoxes()[PASSWORD].setSelected(false); setPasswordRequired(false); } } private void setText(int field, String text) { getFields()[field].setText(text); getFields()[field].setCaretPosition(text.length()); } ///////////////////////////////////////////////////////////////////////////// // Start of inner classes. ////////////////////////////////////////////////////////////////////////////// private class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == getCheckBoxes()[BACKUP]) { setAutoBackup(!autoBackup()); getLinks()[BACKUP].setEnabled(getCheckBoxes()[BACKUP].isSelected()); if(getCheckBoxes()[BACKUP].isSelected() == true) { changeBackupFile(); } else { setText(BACKUP, ""); setBackupFile(new File("")); } } else if(source == getCheckBoxes()[DATA]) { setUseDefaultDataFile(!useDefaultDataFile()); getLinks()[DATA].setEnabled(getCheckBoxes()[DATA].isSelected() == false); if(getCheckBoxes()[DATA].isSelected() == true) { setDataFile(new File("")); setText(DATA, ""); } else { changeDataFile(); } } else if(source == getCheckBoxes()[PASSWORD]) { if(getCheckBoxes()[PASSWORD].isSelected() == true) { promptForPassword(); } else { setPasswordRequired(false); } } else if(source == getLinks()[BACKUP]) { changeBackupFile(); } else { changeDataFile(); } } } ////////////////////////////////////////////////////////////////////////////// // Start of class members. ////////////////////////////////////////////////////////////////////////////// private CheckBox[] itsCheckBoxes; private JTextField[] itsFields; private Link[] itsLinks; private static final int BACKUP = 0; private static final int DATA = 1; private static final int PASSWORD = 2; }