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.UIIntNumberField; 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.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 UIIntNumberField portNumberField; private UIPasswordField passwordTextField; @Override protected JPanel mainPanel() { JPanel pane = new JPanel(); pane.setLayout(new BorderLayout()); hostTextField = new UITextField(); portNumberField = new UIIntNumberField(); passwordTextField = new UIPasswordField(); JPanel globalConfigPane = new JPanel(); GridLayout gridLayout = new GridLayout(1, 2); globalConfigPane.setLayout(gridLayout); Component[][] components = new Component[][]{ {new UILabel(DesignKit.i18nText("Plugin-Redis_Host") + ":"), hostTextField}, {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.setValue(ob.getPort()); passwordTextField.setText(ob.getPassword()); } @Override protected com.fr.plugin.db.redis.core.RedisDatabaseConnection updateSubDatabaseConnectionBean() { RedisDatabaseConnection connection = new RedisDatabaseConnection(); connection.setHost(hostTextField.getText()); connection.setPort((int) portNumberField.getValue()); connection.setPassword(passwordTextField.getText()); return connection; } @Override protected String title4PopupWindow() { return "Redis"; } }