/*
* Copyright 2012 jMethods, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.myjavaworld.jftp;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ResourceBundle;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import com.myjavaworld.gui.GUIUtil;
import com.myjavaworld.gui.IDTreeNode;
import com.myjavaworld.gui.ImageCellRenderer;
import com.myjavaworld.gui.MButton;
import com.myjavaworld.gui.MDialog;
import com.myjavaworld.gui.MLabel;
import com.myjavaworld.gui.MScrollPane;
import com.myjavaworld.gui.MTree;
import com.myjavaworld.util.CommonResources;
import com.myjavaworld.util.ResourceLoader;
/**
* A dialog box that allows the user to view/edit the user preferences.
*
* @author Sai Pullabhotla, psai [at] jMethods [dot] com
* @version 2.0
*
*/
public class PreferencesDlg extends MDialog implements ActionListener,
TreeSelectionListener {
private static ResourceBundle resources = ResourceLoader
.getBundle("com.myjavaworld.jftp.PreferencesDlg");
private static final String HELP_ID = "preferences";
private static final int ID_ROOT = 0;
private static final int ID_CONNECTION = 0;
private static final int ID_CONNECTION_GENERAL = 2;
private static final int ID_CONNECTION_ADVANCED = 3;
private static final int ID_CONNECTION_PROXY = 4;
private static final int ID_CONNECTION_SECURITY = 5;
private static final int ID_TRANSFER_MODES = 6;
private static final int ID_REGIONAL_SETTINGS = 7;
private static final int ID_UI = 8;
private static final int ID_SOFTWARE_UPDATES = 9;
JPanel centerPanel = null;
private CardLayout cardLayout = null;
private GeneralConnectionPrefsPanel generalConnectionPrefsPanel = null;
private UIPrefsPanel uiPrefsPanel = null;
private LocalePrefsPanel localePrefsPanel = null;
private TransferModesPrefsPanel transferModesPrefsPanel = null;
private AdvancedConnectionPrefsPanel advancedConnectionPrefsPanel = null;
private ProxyPrefsPanel proxyPrefsPanel = null;
private SecurityPrefsPanel securityPrefsPanel = null;
private SoftwareUpdatePrefsPanel softwareUpdatePrefsPanel = null;
private MTree tree = null;
private MButton butSave = null;
private MButton butCancel = null;
private MButton butHelp = null;
private MButton butRestoreDefaults = null;
public PreferencesDlg(JFTP jftp) {
super(jftp, resources.getString("title.dialog"), true);
getContentPane().setLayout(new GridBagLayout());
JFTPHelp2.getInstance().enableHelpKey(getRootPane(), HELP_ID);
initComponents();
pack();
}
public void actionPerformed(ActionEvent evt) {
if (evt.getSource() == butSave) {
saveButtonPressed();
} else if (evt.getSource() == butCancel) {
setVisible(false);
} else if (evt.getSource() == butRestoreDefaults) {
JFTPPreferences defaultPreferences = new JFTPPreferences();
generalConnectionPrefsPanel.populateScreen(defaultPreferences);
advancedConnectionPrefsPanel.populateScreen(defaultPreferences);
proxyPrefsPanel.populateScreen(defaultPreferences);
securityPrefsPanel.populateScreen(defaultPreferences);
transferModesPrefsPanel.populateScreen(defaultPreferences);
localePrefsPanel.populateScreen(defaultPreferences);
uiPrefsPanel.populateScreen(defaultPreferences);
softwareUpdatePrefsPanel.populateScreen(defaultPreferences);
}
}
public void valueChanged(TreeSelectionEvent evt) {
TreePath selectedPath = evt.getPath();
if (selectedPath == null) {
return;
}
IDTreeNode selectedNode = (IDTreeNode) selectedPath
.getLastPathComponent();
String cardName = String.valueOf(selectedNode.getID());
cardLayout.show(centerPanel, cardName);
}
@Override
protected void escape() {
butCancel.doClick();
}
private MTree createTree() {
IDTreeNode nodeRoot = new IDTreeNode(ID_ROOT,
resources.getString("text.preferences"), true);
IDTreeNode nodeRegionalSettings = new IDTreeNode(ID_REGIONAL_SETTINGS,
resources.getString("text.regionalSettings"), false);
IDTreeNode nodeUISettings = new IDTreeNode(ID_UI,
resources.getString("text.userInterface"), false);
IDTreeNode nodeTransferModes = new IDTreeNode(ID_TRANSFER_MODES,
resources.getString("text.transferModes"), false);
IDTreeNode nodeSoftwareUpdates = new IDTreeNode(ID_SOFTWARE_UPDATES,
resources.getString("text.softwareUpdates"), false);
IDTreeNode nodeConnectionSettings = new IDTreeNode(ID_CONNECTION,
resources.getString("text.connectionSettings"), true);
IDTreeNode nodeGeneral = new IDTreeNode(ID_CONNECTION_GENERAL,
resources.getString("text.general"), false);
IDTreeNode nodeAdvanced = new IDTreeNode(ID_CONNECTION_ADVANCED,
resources.getString("text.advanced"), false);
IDTreeNode nodeProxy = new IDTreeNode(ID_CONNECTION_PROXY,
resources.getString("text.proxy"), false);
IDTreeNode nodeSecurity = new IDTreeNode(ID_CONNECTION_SECURITY,
resources.getString("text.security"), false);
nodeConnectionSettings.add(nodeGeneral);
nodeConnectionSettings.add(nodeAdvanced);
nodeConnectionSettings.add(nodeProxy);
nodeConnectionSettings.add(nodeSecurity);
nodeRoot.add(nodeConnectionSettings);
nodeRoot.add(nodeTransferModes);
nodeRoot.add(nodeRegionalSettings);
nodeRoot.add(nodeUISettings);
nodeRoot.add(nodeSoftwareUpdates);
MTree tree = new MTree(nodeRoot);
tree.setCellRenderer(new ImageCellRenderer());
tree.setShowsRootHandles(true);
tree.setRootVisible(true);
tree.expandRow(0);
tree.expandRow(1);
tree.expandRow(2);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
int rowCount = tree.getRowCount();
for (int i = 0; i < rowCount; i++) {
tree.expandRow(i);
}
tree.setSelectionInterval(3, 3);
return tree;
}
private void initComponents() {
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.WEST;
tree = createTree();
MScrollPane treeScroller = new MScrollPane(tree);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 2;
c.weightx = 1.0;
c.weighty = 1.0;
c.fill = GridBagConstraints.BOTH;
getContentPane().add(treeScroller, c);
cardLayout = new CardLayout();
centerPanel = new JPanel(cardLayout);
localePrefsPanel = new LocalePrefsPanel();
uiPrefsPanel = new UIPrefsPanel();
transferModesPrefsPanel = new TransferModesPrefsPanel();
generalConnectionPrefsPanel = new GeneralConnectionPrefsPanel();
advancedConnectionPrefsPanel = new AdvancedConnectionPrefsPanel();
proxyPrefsPanel = new ProxyPrefsPanel();
securityPrefsPanel = new SecurityPrefsPanel();
softwareUpdatePrefsPanel = new SoftwareUpdatePrefsPanel();
MLabel labMessage = new MLabel(
resources.getString("text.selectSubSection"));
centerPanel.add("0", labMessage);
centerPanel.add(String.valueOf(ID_REGIONAL_SETTINGS), localePrefsPanel);
centerPanel.add(String.valueOf(ID_UI), uiPrefsPanel);
centerPanel.add(String.valueOf(ID_TRANSFER_MODES),
transferModesPrefsPanel);
centerPanel.add(String.valueOf(ID_CONNECTION_GENERAL),
generalConnectionPrefsPanel);
centerPanel.add(String.valueOf(ID_CONNECTION_ADVANCED),
advancedConnectionPrefsPanel);
centerPanel.add(String.valueOf(ID_CONNECTION_PROXY), proxyPrefsPanel);
centerPanel.add(String.valueOf(ID_CONNECTION_SECURITY),
securityPrefsPanel);
centerPanel.add(String.valueOf(ID_SOFTWARE_UPDATES),
softwareUpdatePrefsPanel);
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 2;
c.gridheight = 1;
c.weightx = 0.5;
c.weighty = 0.5;
c.fill = GridBagConstraints.BOTH;
getContentPane().add(centerPanel, c);
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 2;
c.gridheight = 1;
c.weightx = 0.0;
c.weighty = 0.0;
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
c.insets = new Insets(12, 12, 12, 12);
getContentPane().add(getCommandButtons(), c);
tree.setSelectionInterval(2, 2);
}
private Component getCommandButtons() {
Box panel = new Box(BoxLayout.X_AXIS);
butRestoreDefaults = new MButton(
resources.getString("text.restoreDefaults"));
butRestoreDefaults.addActionListener(this);
butSave = new MButton(CommonResources.getString("text.save"));
getRootPane().setDefaultButton(butSave);
butSave.addActionListener(this);
butCancel = new MButton(CommonResources.getString("text.cancel"));
butCancel.addActionListener(this);
butHelp = new MButton(CommonResources.getString("text.help"));
JFTPHelp2.getInstance().enableHelp(butHelp, HELP_ID);
panel.add(butRestoreDefaults);
panel.add(Box.createRigidArea(new Dimension(5, 0)));
panel.add(butSave);
panel.add(Box.createRigidArea(new Dimension(5, 0)));
panel.add(butCancel);
panel.add(Box.createRigidArea(new Dimension(5, 0)));
panel.add(butHelp);
tree.getSelectionModel().addTreeSelectionListener(this);
return panel;
}
private void saveButtonPressed() {
if (!generalConnectionPrefsPanel.validateFields()) {
tree.setSelectionInterval(2, 2);
return;
}
if (!advancedConnectionPrefsPanel.validateFields()) {
tree.setSelectionInterval(3, 3);
return;
}
if (!proxyPrefsPanel.validateFields()) {
tree.setSelectionInterval(4, 4);
return;
}
if (!securityPrefsPanel.validateFields()) {
tree.setSelectionInterval(5, 5);
return;
}
if (!transferModesPrefsPanel.validateFields()) {
tree.setSelectionInterval(6, 6);
return;
}
if (!localePrefsPanel.validateFields()) {
tree.setSelectionInterval(7, 7);
return;
}
if (!uiPrefsPanel.validateFields()) {
tree.setSelectionInterval(8, 8);
return;
}
generalConnectionPrefsPanel.saveChanges();
advancedConnectionPrefsPanel.saveChanges();
proxyPrefsPanel.saveChanges();
securityPrefsPanel.saveChanges();
transferModesPrefsPanel.saveChanges();
localePrefsPanel.saveChanges();
uiPrefsPanel.saveChanges();
softwareUpdatePrefsPanel.saveChanges();
try {
JFTP.savePreferences(JFTP.prefs);
GUIUtil.showInformation(this,
resources.getString("info.preferencesSaved"));
Thread.sleep(200);
} catch (IOException exp) {
GUIUtil.showError(this, exp);
} catch (InterruptedException exp) {
}
setVisible(false);
}
}