package com.swingsane.gui.dialog; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Set; import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.WindowConstants; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import com.swingsane.business.discovery.DiscoveryJob; import com.swingsane.i18n.Localizer; import com.swingsane.preferences.model.Login; /** * @author Roland Quast (roland@formreturn.com) * */ @SuppressWarnings("serial") public class GlobalSettingsDialog extends JDialog { private static final int BOUNDS_WIDTH = 550; private static final int BOUNDS_HEIGHT = 450; private final Dimension bounds = new Dimension(BOUNDS_WIDTH, BOUNDS_HEIGHT); private final JPanel contentPanel = new JPanel(); private JTextField mDNSNameTextField; private String saneServiceName; private HashMap<String, Login> logins; private DefaultListModel<String> loginListModel = new DefaultListModel<String>(); private JList<String> loginList; private int dialogResult = JOptionPane.CANCEL_OPTION; public GlobalSettingsDialog(Component parent) { initComponents(); pack(); setLocationRelativeTo(parent); } private void addLoginActionPerformed(ActionEvent e) { LoginDialog loginDialog = new LoginDialog(this); Login login = new Login(); loginDialog.setUsername(login.getUsername()); loginDialog.setPassword(login.getPassword()); loginDialog.setModal(true); loginDialog.setVisible(true); if (loginDialog.getDialogResult() == JOptionPane.OK_OPTION) { login.setUsername(loginDialog.getUsername().trim()); login.setPassword(loginDialog.getPassword().trim()); String resource = loginDialog.getResource().trim(); if (!(logins.containsKey(resource))) { logins.put(resource, login); loginListModel.addElement(resource); } loginList.revalidate(); } } private void cancelActionPerformed(ActionEvent e) { dispose(); } private void editLoginActionPerformed(ActionEvent e) { String resource = loginList.getSelectedValue(); if (resource == null) { return; } LoginDialog loginDialog = new LoginDialog(this); Login login = logins.get(resource); loginDialog.setResource(resource); loginDialog.setUsername(login.getUsername()); loginDialog.setPassword(login.getPassword()); loginDialog.setModal(true); loginDialog.setVisible(true); if (loginDialog.getDialogResult() == JOptionPane.OK_OPTION) { login.setUsername(loginDialog.getUsername().trim()); login.setPassword(loginDialog.getPassword().trim()); loginList.revalidate(); } } public final int getDialogResult() { return dialogResult; } public final HashMap<String, Login> getLogins() { return logins; } public final HashMap<String, Login> getSaneLogins() { return logins; } public final String getSaneServiceName() { return saneServiceName; } public final String getServiceName() { return mDNSNameTextField.getText(); } private void initComponents() { setTitle(Localizer.localize("GlobalSettingsDialogTitle")); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setResizable(false); setBounds(0, 0, bounds.width, bounds.height); setMinimumSize(bounds); setPreferredSize(bounds); setSize(bounds); getContentPane().setLayout(new BorderLayout()); contentPanel.setBorder(new EmptyBorder(12, 12, 12, 12)); getContentPane().add(contentPanel, BorderLayout.CENTER); GridBagLayout gbl_contentPanel = new GridBagLayout(); gbl_contentPanel.columnWidths = new int[] { 222, 0 }; gbl_contentPanel.rowHeights = new int[] { 0, 0, 0 }; gbl_contentPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_contentPanel.rowWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE }; contentPanel.setLayout(gbl_contentPanel); { JPanel loginPanel = new JPanel(); loginPanel.setBorder(new CompoundBorder(new TitledBorder(Localizer .localize("ScannerBackendLoginsTitle")), new EmptyBorder(5, 5, 5, 5))); GridBagConstraints gbc_loginPanel = new GridBagConstraints(); gbc_loginPanel.insets = new Insets(0, 0, 5, 0); gbc_loginPanel.fill = GridBagConstraints.BOTH; gbc_loginPanel.gridx = 0; gbc_loginPanel.gridy = 0; contentPanel.add(loginPanel, gbc_loginPanel); GridBagLayout gbl_loginPanel = new GridBagLayout(); gbl_loginPanel.columnWidths = new int[] { 333, 0 }; gbl_loginPanel.rowHeights = new int[] { 3, 0, 0 }; gbl_loginPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_loginPanel.rowWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE }; loginPanel.setLayout(gbl_loginPanel); { JScrollPane loginScrollPane = new JScrollPane(); GridBagConstraints gbc_loginScrollPane = new GridBagConstraints(); gbc_loginScrollPane.insets = new Insets(0, 0, 5, 0); gbc_loginScrollPane.fill = GridBagConstraints.BOTH; gbc_loginScrollPane.gridx = 0; gbc_loginScrollPane.gridy = 0; loginPanel.add(loginScrollPane, gbc_loginScrollPane); { loginList = new JList<String>(); loginList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); loginList.setFont(UIManager.getFont("List.font")); loginScrollPane.setViewportView(loginList); } } { JPanel loginActionsPanel = new JPanel(); GridBagConstraints gbc_loginActionsPanel = new GridBagConstraints(); gbc_loginActionsPanel.fill = GridBagConstraints.BOTH; gbc_loginActionsPanel.gridx = 0; gbc_loginActionsPanel.gridy = 1; loginPanel.add(loginActionsPanel, gbc_loginActionsPanel); GridBagLayout gbl_loginActionsPanel = new GridBagLayout(); gbl_loginActionsPanel.columnWidths = new int[] { 0, 0, 0, 0, 0 }; gbl_loginActionsPanel.rowHeights = new int[] { 0, 0 }; gbl_loginActionsPanel.columnWeights = new double[] { 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE }; gbl_loginActionsPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; loginActionsPanel.setLayout(gbl_loginActionsPanel); { JButton addLoginButton = new JButton(Localizer.localize("Add")); addLoginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { addLoginActionPerformed(e); } }); addLoginButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/add.png"))); addLoginButton.setFont(UIManager.getFont("Button.font")); addLoginButton.setMargin(new Insets(1, 5, 1, 5)); GridBagConstraints gbc_addLoginButton = new GridBagConstraints(); gbc_addLoginButton.insets = new Insets(0, 0, 0, 5); gbc_addLoginButton.gridx = 1; gbc_addLoginButton.gridy = 0; loginActionsPanel.add(addLoginButton, gbc_addLoginButton); } { JButton removeLoginButton = new JButton(Localizer.localize("Remove")); removeLoginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { removeLoginActionPerformed(e); } }); removeLoginButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/delete.png"))); removeLoginButton.setFont(UIManager.getFont("Button.font")); removeLoginButton.setMargin(new Insets(1, 5, 1, 5)); GridBagConstraints gbc_removeLoginButton = new GridBagConstraints(); gbc_removeLoginButton.insets = new Insets(0, 0, 0, 5); gbc_removeLoginButton.gridx = 2; gbc_removeLoginButton.gridy = 0; loginActionsPanel.add(removeLoginButton, gbc_removeLoginButton); } { JButton editLoginButton = new JButton(Localizer.localize("Edit")); editLoginButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/pencil.png"))); editLoginButton.setFont(UIManager.getFont("Button.font")); editLoginButton.setMargin(new Insets(1, 5, 1, 5)); editLoginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { editLoginActionPerformed(e); } }); GridBagConstraints gbc_editLoginButton = new GridBagConstraints(); gbc_editLoginButton.gridx = 3; gbc_editLoginButton.gridy = 0; loginActionsPanel.add(editLoginButton, gbc_editLoginButton); } } } { JPanel mDNSPanel = new JPanel(); mDNSPanel.setBorder(new CompoundBorder(new TitledBorder(Localizer .localize("MulticastDNSServiceNameTitle")), new EmptyBorder(5, 5, 5, 5))); GridBagConstraints gbc_mDNSPanel = new GridBagConstraints(); gbc_mDNSPanel.fill = GridBagConstraints.BOTH; gbc_mDNSPanel.gridx = 0; gbc_mDNSPanel.gridy = 1; contentPanel.add(mDNSPanel, gbc_mDNSPanel); GridBagLayout gbl_mDNSPanel = new GridBagLayout(); gbl_mDNSPanel.columnWidths = new int[] { 0, 0 }; gbl_mDNSPanel.rowHeights = new int[] { 0, 0, 0 }; gbl_mDNSPanel.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; gbl_mDNSPanel.rowWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; mDNSPanel.setLayout(gbl_mDNSPanel); { JLabel mDNSDescriptionLabel = new JLabel( Localizer.localize("MulticastDNSServiceNameDescription")); mDNSDescriptionLabel.setFont(UIManager.getFont("Label.font")); GridBagConstraints gbc_mDNSDescriptionLabel = new GridBagConstraints(); gbc_mDNSDescriptionLabel.fill = GridBagConstraints.HORIZONTAL; gbc_mDNSDescriptionLabel.insets = new Insets(0, 0, 5, 0); gbc_mDNSDescriptionLabel.gridx = 0; gbc_mDNSDescriptionLabel.gridy = 0; mDNSPanel.add(mDNSDescriptionLabel, gbc_mDNSDescriptionLabel); } { JPanel mDNSServiceNamePanel = new JPanel(); GridBagConstraints gbc_mDNSServiceNamePanel = new GridBagConstraints(); gbc_mDNSServiceNamePanel.fill = GridBagConstraints.BOTH; gbc_mDNSServiceNamePanel.gridx = 0; gbc_mDNSServiceNamePanel.gridy = 1; mDNSPanel.add(mDNSServiceNamePanel, gbc_mDNSServiceNamePanel); GridBagLayout gbl_mDNSServiceNamePanel = new GridBagLayout(); gbl_mDNSServiceNamePanel.columnWidths = new int[] { 266, 0, 0 }; gbl_mDNSServiceNamePanel.rowHeights = new int[] { 25, 0 }; gbl_mDNSServiceNamePanel.columnWeights = new double[] { 1.0, 0.0, Double.MIN_VALUE }; gbl_mDNSServiceNamePanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE }; mDNSServiceNamePanel.setLayout(gbl_mDNSServiceNamePanel); { mDNSNameTextField = new JTextField(); GridBagConstraints gbc_mDNSNameTextField = new GridBagConstraints(); gbc_mDNSNameTextField.fill = GridBagConstraints.BOTH; gbc_mDNSNameTextField.insets = new Insets(0, 0, 0, 5); gbc_mDNSNameTextField.gridx = 0; gbc_mDNSNameTextField.gridy = 0; mDNSServiceNamePanel.add(mDNSNameTextField, gbc_mDNSNameTextField); mDNSNameTextField.setColumns(10); } { JButton mDNSRestoreButton = new JButton(Localizer.localize("RestoreDefaultButtonText")); mDNSRestoreButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { mDNSRestoreActionPerformed(e); } }); mDNSRestoreButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/arrow_rotate_anticlockwise.png"))); mDNSRestoreButton.setFont(UIManager.getFont("Button.font")); mDNSRestoreButton.setMargin(new Insets(1, 5, 1, 5)); GridBagConstraints gbc_mDNSRestoreButton = new GridBagConstraints(); gbc_mDNSRestoreButton.gridx = 1; gbc_mDNSRestoreButton.gridy = 0; mDNSServiceNamePanel.add(mDNSRestoreButton, gbc_mDNSRestoreButton); } } } { JPanel buttonPane = new JPanel(); buttonPane.setBorder(new EmptyBorder(0, 12, 12, 12)); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton cancelButton = new JButton(Localizer.localize("Cancel")); cancelButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/cross.png"))); cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { cancelActionPerformed(e); } }); { JButton saveButton = new JButton("Save"); buttonPane.add(saveButton); saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveActionPerformed(e); } }); saveButton.setIcon(new ImageIcon(GlobalSettingsDialog.class .getResource("/com/famfamfam/silk/disk.png"))); saveButton.setFont(UIManager.getFont("Button.font")); saveButton.setMargin(new Insets(1, 5, 1, 5)); } cancelButton.setFont(UIManager.getFont("Button.font")); cancelButton.setMargin(new Insets(1, 5, 1, 5)); buttonPane.add(cancelButton); } } } public final void initialize() { popuplateLoginList(); restoreServiceName(); } private void mDNSRestoreActionPerformed(ActionEvent e) { mDNSNameTextField.setText(DiscoveryJob.SANE_SERVICE_NAME); } private void popuplateLoginList() { Set<String> resources = logins.keySet(); for (String resource : resources) { loginListModel.addElement(resource); } loginList.setModel(loginListModel); } private void removeLoginActionPerformed(ActionEvent e) { String resource = loginList.getSelectedValue(); if (resource == null) { return; } loginListModel.removeElement(resource); logins.remove(resource); loginList.revalidate(); } private void restoreServiceName() { mDNSNameTextField.setText(saneServiceName); } private void saveActionPerformed(ActionEvent e) { dialogResult = JOptionPane.OK_OPTION; dispose(); } public final void setLogins(HashMap<String, Login> logins) { this.logins = logins; } public final void setSaneServiceName(String saneServiceName) { this.saneServiceName = saneServiceName; } }