package org.infosec.ismp.applet.manager.component.dialog; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import org.infosec.ismp.applet.manager.component.AbstractViewPanel; import org.infosec.ismp.applet.manager.component.JIpAddressField; import org.infosec.ismp.applet.manager.component.JNumberField; import org.infosec.ismp.applet.manager.model.DomainModel; import org.infosec.ismp.applet.manager.model.NodeModel; import org.infosec.ismp.applet.manager.utilities.TypeUtil; import org.infosec.ismp.manager.rmi.tm.manager.comm.DatabaseConst; import org.infosec.ismp.manager.rmi.tm.manager.model.DatabaseEntity; import org.infosec.ismp.manager.rmi.tm.manager.model.TopoManageConstant; import twaver.network.TNetwork; import twaver.swing.TableLayout; /** * 数据库面板 * @author 肖高峰 * */ @SuppressWarnings("serial") public class DatabaseDialog extends JDialog { private static final long INTERVAL= 30L; //轮询最低的时间 private JTextField txtName = new JTextField(); private JIpAddressField txtIpAddress = new JIpAddressField(); private JComboBox cmbType = new JComboBox(); private JTextField txtUserName = new JTextField(); private JTextField txtPassword = new JTextField(); private JNumberField txtInterval = new JNumberField(); protected JButton buttonEnter = new JButton("确定"); protected JButton buttonCancel = new JButton("取消"); private JComboBox cmbVersion = new JComboBox(); /** * 数据模型 */ private NodeModel model; /** * 拓扑面板 */ private TNetwork network; private DatabasePanel panel; public DatabaseDialog(NodeModel node,TNetwork network) { this.network = network; if(this.network == null) { JOptionPane.showMessageDialog(null,"当前拓扑面板不存在!","系统异常" , JOptionPane.ERROR_MESSAGE); DatabaseDialog.this.dispose(); return; } model = node; if(model == null) { this.model = new NodeModel(); } else if(model.getNodeId() == null || model.getNodeId().equals("")) { this.setTitle("添加数据库"); }else { this.setTitle("修改数据库"); } initGUI(); } /** * 初始化界面 */ private void initGUI() { this.setLocationRelativeTo(null); panel = new DatabasePanel(); panel.setModel(model); this.getContentPane().add(panel); pack(); setVisible(true); buttonEnter.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { if(doCheck()) { if(network.getCurrentSubNetwork() instanceof DomainModel) { model.setParentDomain((DomainModel)network.getCurrentSubNetwork()); } fillData(); model.setIsVisible(1); model.save(model); DialogBuilder.disposeDatabaseDialog(); DatabaseDialog.this.dispose(); } } }); buttonCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { DialogBuilder.disposeDatabaseDialog(); DatabaseDialog.this.dispose(); } }); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { DialogBuilder.disposeDatabaseDialog(); } }); } //填充数据 protected void fillData() { DatabaseEntity database = model.getDatabase(); if(database == null) { database = new DatabaseEntity(); } model.setName(txtName.getText()); model.setManagerStyle(TopoManageConstant.DATABASE); model.setType(TypeUtil.getNodeTypeBySimpleClassName(model.getClass().getSimpleName())); database.setDatabaseName(txtName.getText()); database.setUrl(txtIpAddress.getText()); database.setIp(txtName.getText()); database.setUpInterval(Long.valueOf(txtInterval.getText())); database.setPassword(txtPassword.getText()); database.setUsername(txtUserName.getText()); database.setVersion(cmbVersion.getSelectedItem() == null ? "" : cmbVersion.getSelectedItem().toString()); database.setType(cmbType.getSelectedItem() == null ? "" : cmbType.getSelectedItem().toString()); model.setDatabase(database); } //检查数据 protected boolean doCheck() { String info = ""; if(txtName.getText().equals("") || txtName.getText().trim().equals("")) { info = "请输入数据库名称!"; txtName.requestFocus(); } else if(txtIpAddress.getText().equals("0.0.0.0")) { info = "请输入数据库IP地址!"; txtIpAddress.ip1.requestFocus(); } else if(txtUserName.getText().equals("") || txtUserName.getText().trim().equals("")) { info = "请输入数据库用户名!"; txtUserName.requestFocus(); } else if(txtInterval.getText().equals("")) { info = "请输入监控轮询间隔!"; txtInterval.requestFocus(); } else if(Long.parseLong(txtInterval.getText()) < INTERVAL) { info = "监控轮询间隔不能低于 "+INTERVAL+" 秒!"; txtInterval.requestFocus(); } else if(txtName.getText().length() > 20) { info = "数据库名称长度不能超过20!"; txtName.requestFocus(); }else if(txtUserName.getText().length() > 20) { info = "用户名称长度不能超过20!"; txtUserName.requestFocus(); }else if(txtPassword.getText().length() > 20) { info = "密码长度不能超过20!"; txtPassword.requestFocus(); } if(!info.equals("")) { JOptionPane.showMessageDialog(DatabaseDialog.this,info,"提示" , JOptionPane.INFORMATION_MESSAGE); return false; } return true; } private String[] getIp(String ip) { if(ip != null && !ip.equals("")) { return ip.split("[.]"); } return null; } public NodeModel getModel() { return model; } public void setModel(NodeModel model) { this.model = model; panel.setModel(model); } public static void main(String[] args) { new DatabaseDialog(null,new TNetwork()); } private class DatabasePanel extends AbstractViewPanel { public DatabasePanel() { initGUI(); } private void initGUI() { double b = 10; double f = TableLayout.FILL; double p = TableLayout.PREFERRED; double vs = 5; double vg = 10; double hg = 10; // b - border yes or no // f - FILL // p - 优选 eclipse Platfor // vs - 标签和文本字段的垂直间距 // vg - 表单元素之间的垂直 // hg - 表单元素之间的水平差距 double size[][] = { { b, f, hg, p, b }, { b, p, vs, p, vg, p, vs, p, vg, p, vs, p, vg,p,vs, p,vg,p, b } }; JLabel labelName = new JLabel("数据库名称"); JLabel labelIpAddress = new JLabel("数据库IP地址"); JLabel labelType = new JLabel("数据库类型"); JLabel labelUserName = new JLabel("数据库用户名"); JLabel labelPassword = new JLabel("数据库密码"); JLabel labelInterval = new JLabel("监控轮询间隔(>=30秒)"); JLabel lblVersion = new JLabel("版本"); cmbType.setPreferredSize(new Dimension(200, 25)); txtUserName.setPreferredSize(new Dimension(200,25)); txtInterval.setPreferredSize(new Dimension(200, 25)); txtInterval.setHorizontalAlignment(JTextField.LEFT); txtIpAddress.setPreferredSize(new Dimension(200, 25)); txtInterval.setText(INTERVAL+""); JPanel panelButton = new JPanel(); panelButton.add(buttonEnter); panelButton.add(buttonCancel); JPanel pane = this; TableLayout layout = new TableLayout(size); pane.setLayout(layout); pane.add(labelName, "1, 1"); pane.add(txtName, "1, 3"); pane.add(labelIpAddress, "3, 1"); pane.add(txtIpAddress, "3, 3"); pane.add(labelUserName, "1 , 5"); pane.add(txtUserName, "1 , 7"); pane.add(labelPassword, "3 , 5"); pane.add(txtPassword, "3 , 7"); pane.add(labelType, "1, 9"); pane.add(cmbType, "1, 11"); pane.add(labelInterval, "3 , 9"); pane.add(txtInterval, "3 , 11"); pane.add(lblVersion,"1 , 13"); pane.add(cmbVersion,"1 , 15"); pane.add(panelButton, "1,17,3,17"); cmbType.setModel(new DefaultComboBoxModel(DatabaseConst.DATABASE_TYPE)); cmbVersion.setModel(new DefaultComboBoxModel(DatabaseConst.DATABASE_VERSION_ORACLE)); cmbType.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { cmbVersion.setModel(new DefaultComboBoxModel (DatabaseConst.DATABASE_TYPE_VERSION.get(cmbType.getSelectedItem()))); } }); } @Override protected void updateFileds() { String[] ips = getIp(model.getIpAddress()); if(ips != null && ips.length == 4) { txtIpAddress.ip1.setText(ips[0]); txtIpAddress.ip2.setText(ips[1]); txtIpAddress.ip3.setText(ips[2]); txtIpAddress.ip4.setText(ips[3]); } txtName.setName(model.getName()); DatabaseEntity database = model.getDatabase(); if(database == null) return; txtName.setText(database.getDatabaseName()== null ? "" : database.getDatabaseName()); txtUserName.setText(database.getUsername()== null ? "" : database.getUsername()); txtPassword.setText(database.getPassword()== null ? "" : database.getPassword()); txtInterval.setText(database.getUpInterval() > 30L ? INTERVAL+"" : database.getUpInterval()+""); txtUserName.setText(database.getUsername()== null ? "" : database.getUsername()); String type = database.getType(); if( type!= null && !type.equals("")) { cmbType.setSelectedItem(type); } String version = database.getVersion(); if( version!= null && !version.equals("")) { cmbVersion.setSelectedItem(version); } } } }