package com.fr.plugin.db.redis.ui; import com.fanruan.api.conf.ConfigurationKit; import com.fanruan.api.design.DesignKit; import com.fanruan.api.design.ui.component.UIActionLabel; import com.fanruan.api.design.ui.component.UIButton; import com.fanruan.api.design.ui.component.UICheckBox; import com.fanruan.api.design.ui.component.UILabel; import com.fanruan.api.design.ui.component.UIPasswordField; import com.fanruan.api.design.ui.component.UITextField; import com.fanruan.api.design.ui.component.UITitledBorder; import com.fanruan.api.design.ui.container.BasicDialog; import com.fanruan.api.design.ui.layout.TableLayoutKit; import com.fanruan.api.design.util.GUICoreKit; import com.fanruan.api.design.work.DatabaseConnectionPane; import com.fanruan.api.generic.Runner; import com.fanruan.api.util.IOKit; import com.fr.design.dialog.DialogActionAdapter; import com.fr.plugin.db.redis.core.RedisDatabaseConnection; import com.fr.plugin.db.redis.core.pool.RedisConnectionPoolConfig; import com.fr.plugin.db.redis.core.pool.RedisConnectionProxyConfig; import com.fr.plugin.db.redis.ui.pool.RedisConnectionPoolConfigPane; import com.fr.plugin.db.redis.ui.proxy.RedisConnectionProxyConfigPane; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class RedisConnectionPane extends DatabaseConnectionPane { private UITextField hostTextField; private UITextField portNumberField; private UIPasswordField passwordTextField; private UICheckBox clusterModeCheckBox; @Override protected JPanel mainPanel() { JPanel pane = new JPanel(); pane.setLayout(new BorderLayout()); hostTextField = new UITextField(); portNumberField = new UITextField(); passwordTextField = new UIPasswordField(); clusterModeCheckBox = new UICheckBox(DesignKit.i18nText("Plugin-Redis_Cluster_Mode"), false); JPanel globalConfigPane = new JPanel(); GridLayout gridLayout = new GridLayout(1, 2); globalConfigPane.setLayout(gridLayout); UIButton helpButton = new UIButton(); helpButton.setIcon(IOKit.readIcon("/com/fr/plugin/db/redis/images/help.png")); helpButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog( SwingUtilities.getWindowAncestor(RedisConnectionPane.this), DesignKit.i18nText("Plugin-Redis_Cluster_Config_Description"), DesignKit.i18nText("Plugin-Redis_Connect_Cluster_Description"), JOptionPane.INFORMATION_MESSAGE ); } }); Component[][] components = new Component[][]{ {new UILabel(DesignKit.i18nText("Plugin-Redis_Host") + ":"), GUICoreKit.createBorderLayoutPane(hostTextField, BorderLayout.CENTER, GUICoreKit.createBorderLayoutPane( clusterModeCheckBox, BorderLayout.CENTER, helpButton, BorderLayout.EAST ), BorderLayout.EAST)}, {new UILabel(DesignKit.i18nText("Plugin-Redis_Port") + ":"), portNumberField}, {new UILabel(DesignKit.i18nText("Plugin-Redis_Password") + ":"), passwordTextField}, {null, globalConfigPane} }; UIActionLabel poolConfigLabel = new UIActionLabel(DesignKit.i18nText("Plugin-Redis_Pool_Config")); UIActionLabel proxyConfigLabel = new UIActionLabel(DesignKit.i18nText("Plugin-Redis_Proxy_Config")); poolConfigLabel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final RedisConnectionPoolConfig poolConfig = RedisConnectionPoolConfig.getInstance(); final RedisConnectionPoolConfigPane poolConfigPane = new RedisConnectionPoolConfigPane(); poolConfigPane.populate(poolConfig); BasicDialog dialog = poolConfigPane.showWindow(SwingUtilities.getWindowAncestor(RedisConnectionPane.this), new DialogActionAdapter() { @Override public void doOk() { ConfigurationKit.modify(RedisConnectionPoolConfig.class, new Runner() { @Override public void run() { poolConfigPane.update(poolConfig); } }); } }); dialog.setVisible(true); } }); proxyConfigLabel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final RedisConnectionProxyConfig proxyConfig = RedisConnectionProxyConfig.getInstance(); final RedisConnectionProxyConfigPane proxyConfigPane = new RedisConnectionProxyConfigPane(); proxyConfigPane.populate(proxyConfig); BasicDialog dialog = proxyConfigPane.showWindow(SwingUtilities.getWindowAncestor(RedisConnectionPane.this), new DialogActionAdapter() { @Override public void doOk() { ConfigurationKit.modify(RedisConnectionProxyConfig.class, new Runner() { @Override public void run() { proxyConfigPane.update(proxyConfig); } }); } }); dialog.setVisible(true); } }); globalConfigPane.add(GUICoreKit.createFlowPane(poolConfigLabel, FlowLayout.LEFT)); globalConfigPane.add(GUICoreKit.createFlowPane(proxyConfigLabel, FlowLayout.LEFT)); double p = TableLayoutKit.PREFERRED; double[] rowSize = new double[]{p, p, p, p, p}; double[] columnSize = new double[]{p, 400}; JPanel settingsUI = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize); settingsUI.setBorder(UITitledBorder.createBorderWithTitle("Redis")); JPanel centerPane = GUICoreKit.createNormalFlowInnerContainerPane(); centerPane.add(settingsUI); pane.add(centerPane, BorderLayout.CENTER); return pane; } @Override protected void populateSubDatabaseConnectionBean(RedisDatabaseConnection ob) { hostTextField.setText(ob.getHost()); portNumberField.setText(ob.getPort()); passwordTextField.setText(ob.getPassword()); clusterModeCheckBox.setSelected(ob.isCluster()); } @Override protected com.fr.plugin.db.redis.core.RedisDatabaseConnection updateSubDatabaseConnectionBean() { RedisDatabaseConnection connection = new RedisDatabaseConnection(); connection.setHost(hostTextField.getText()); connection.setPort(portNumberField.getText()); connection.setPassword(passwordTextField.getText()); connection.setCluster(clusterModeCheckBox.isSelected()); return connection; } @Override protected String title4PopupWindow() { return "Redis"; } }