package net.sourceforge.squirrel_sql.client.gui.db.aliasproperties; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import javax.swing.AbstractAction; import javax.swing.JComponent; import javax.swing.KeyStroke; import net.sourceforge.squirrel_sql.client.IApplication; import net.sourceforge.squirrel_sql.client.gui.db.SQLAlias; import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget; import net.sourceforge.squirrel_sql.fw.id.IIdentifier; public class AliasPropertiesController { private static HashMap<IIdentifier, AliasPropertiesController> _currentlyOpenInstancesByAliasID = new HashMap<IIdentifier, AliasPropertiesController>(); private AliasPropertiesInternalFrame _frame; private ArrayList<IAliasPropertiesPanelController> _iAliasPropertiesPanelControllers = new ArrayList<IAliasPropertiesPanelController>(); private IApplication _app; private SQLAlias _alias; public static void showAliasProperties(IApplication app, SQLAlias selectedAlias) { AliasPropertiesController openProps = _currentlyOpenInstancesByAliasID.get(selectedAlias.getIdentifier()); if(null == openProps) { _currentlyOpenInstancesByAliasID.put(selectedAlias.getIdentifier(), new AliasPropertiesController(app, selectedAlias)); } else { openProps._frame.moveToFront(); } } private AliasPropertiesController(IApplication app, SQLAlias selectedAlias) { _app = app; _alias = selectedAlias; _frame = new AliasPropertiesInternalFrame(_alias.getName(), app); _app.getMainFrame().addWidget(_frame); DialogWidget.centerWithinDesktop(_frame); _frame.setVisible(true); _frame.btnOk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onOK(); } }); _frame.btnClose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onClose(); } }); AbstractAction closeAction = new AbstractAction() { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent actionEvent) { performClose(); } }; KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); _frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(escapeStroke, "CloseAction"); _frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, "CloseAction"); _frame.getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escapeStroke, "CloseAction"); _frame.getRootPane().getActionMap().put("CloseAction", closeAction); loadTabs(); } private void loadTabs() { _iAliasPropertiesPanelControllers.add(new SchemaPropertiesController(_alias, _app)); _iAliasPropertiesPanelControllers.add(new DriverPropertiesController(_alias, _app)); _iAliasPropertiesPanelControllers.add(new ColorPropertiesController(_alias, _app)); _iAliasPropertiesPanelControllers.add(new ConnectionPropertiesController(_alias, _app)); IAliasPropertiesPanelController[] pluginAliasPropertiesPanelControllers = _app.getPluginManager().getAliasPropertiesPanelControllers(_alias); _iAliasPropertiesPanelControllers.addAll(Arrays.asList(pluginAliasPropertiesPanelControllers)); for (int i = 0; i < _iAliasPropertiesPanelControllers.size(); i++) { IAliasPropertiesPanelController aliasPropertiesController = _iAliasPropertiesPanelControllers.get(i); int index = _frame.tabPane.getTabCount(); _frame.tabPane.add(aliasPropertiesController.getTitle(), aliasPropertiesController.getPanelComponent()); _frame.tabPane.setToolTipTextAt(index, aliasPropertiesController.getHint()); } } private void performClose() { _currentlyOpenInstancesByAliasID.remove(_alias.getIdentifier()); _frame.dispose(); } private void onOK() { for (int i = 0; i < _iAliasPropertiesPanelControllers.size(); i++) { IAliasPropertiesPanelController aliasPropertiesController = _iAliasPropertiesPanelControllers.get(i); aliasPropertiesController.applyChanges(); } performClose(); } private void onClose() { performClose(); } }