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.model.TopoServerModel;
import org.infosec.ismp.applet.manager.model.TopoWeblogicModel;
import org.infosec.ismp.applet.manager.utilities.InitUtil;
import org.infosec.ismp.applet.manager.utilities.TopoConst;
import org.infosec.ismp.applet.manager.utilities.TypeUtil;
import org.infosec.ismp.manager.rmi.tm.manager.model.DeviceModelEntity;
import org.infosec.ismp.manager.rmi.tm.manager.model.SNMPEntity;
import org.infosec.ismp.manager.rmi.tm.manager.model.TopoManageConstant;
import org.infosec.ismp.manager.rmi.tm.manager.model.TradeMarkEntity;
import twaver.network.TNetwork;
import twaver.swing.TableLayout;
/**
* 数据库面板
* @author 肖高峰
*
*/
@SuppressWarnings("serial")
public class DeviceDialog extends JDialog {
private JTextField txtName = new JTextField();
private JIpAddressField txtIpAddress = new JIpAddressField();
private JNumberField txtPort = new JNumberField();
private JTextField txtCommunity = new JTextField();
private JComboBox cmbVersion = new JComboBox();
private JComboBox cmbBrand = new JComboBox();
private JComboBox cmbModel = new JComboBox();
private JComboBox cmbSystem = new JComboBox();
private JLabel lblBrand = new JLabel("设备品牌");
private JLabel lblModel = new JLabel("设备型号");
private JLabel lblSystem = new JLabel("操作系统");
protected JButton buttonEnter = new JButton("确定");
protected JButton buttonCancel = new JButton("取消");
private DevicePanel pane;
/**
* 数据模型
*/
private NodeModel model;
/**
* 拓扑面板
*/
private TNetwork network;
public DeviceDialog(NodeModel node,TNetwork network) {
this.network = network;
if(this.network == null) {
JOptionPane.showMessageDialog(null,"当前拓扑面板不存在!","系统异常" , JOptionPane.ERROR_MESSAGE);
DeviceDialog.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);
pane = new DevicePanel();
pane.setModel(model);
this.getContentPane().add(pane);
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.disposeDeviceDialog();
DeviceDialog.this.dispose();
}
}
});
buttonCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.disposeDeviceDialog();
DeviceDialog.this.dispose();
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
DialogBuilder.disposeDeviceDialog();
}
});
}
//填充数据
public void fillData() {
model.setName(txtName.getText());
model.setIpAddress(txtIpAddress.getText());
model.setManagerStyle(TopoManageConstant.SNMP);
model.setType(TypeUtil.getNodeTypeBySimpleClassName(model.getClass().getSimpleName()));
if(cmbSystem.getSelectedItem() != null) {
model.setSystem(cmbSystem.getSelectedItem().toString());
}
if(cmbBrand.getSelectedItem() != null) {
model.setBrand((TradeMarkEntity)cmbBrand.getSelectedItem());
}
if(cmbModel.getSelectedItem() != null) {
model.setModel((DeviceModelEntity)cmbModel.getSelectedItem());
}
SNMPEntity snmp = model.getSnmp();
if(snmp == null) {
snmp = new SNMPEntity();
}
snmp.setVersion(cmbVersion.getSelectedItem().toString());
snmp.setCommunity(txtCommunity.getText());
snmp.setPort(txtPort.getText());
model.setSnmp(snmp);
}
//检查数据
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(txtCommunity.getText().equals("") || txtCommunity.getText().trim().equals("")) {
info = "请输入团体名!";
txtCommunity.requestFocus();
} else if(txtPort.getText().equals("") || txtPort.getText().trim().equals("")) {
info = "请输入端口!";
txtPort.requestFocus();
}
if(!info.equals("")) {
JOptionPane.showMessageDialog(DeviceDialog.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;
pane.setModel(model);
}
public static void main(String[] args) {
new DeviceDialog(null,new TNetwork());
}
private class DevicePanel extends AbstractViewPanel {
public DevicePanel() {
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 lblName = new JLabel("设备名称");
JLabel lblIpAddress = new JLabel("IP地址");
JLabel lblPort = new JLabel("端口");
JLabel lblCommunity = new JLabel("团体名");
JLabel lblVersion = new JLabel("版本");
txtIpAddress.setPreferredSize(new Dimension(200, 25));
txtName.setPreferredSize(new Dimension(200, 25));
txtPort.setText("161");
txtCommunity.setText("public");
JPanel panelButton = new JPanel();
panelButton.add(buttonEnter);
panelButton.add(buttonCancel);
JPanel pane = this;
TableLayout layout = new TableLayout(size);
pane.setLayout(layout);
pane.add(lblName, "1, 1");
pane.add(txtName, "1, 3");
pane.add(lblIpAddress, "3, 1");
pane.add(txtIpAddress, "3, 3");
pane.add(lblCommunity, "1 , 5");
pane.add(txtCommunity, "1 , 7");
pane.add(lblPort, "3 , 5");
pane.add(txtPort, "3 , 7");
pane.add(lblBrand, "1, 9");
pane.add(cmbBrand, "1, 11");
pane.add(lblModel, "3 , 9");
pane.add(cmbModel, "3 , 11");
pane.add(lblVersion,"1 , 13");
pane.add(cmbVersion,"1 , 15");
pane.add(lblSystem,"3 , 13");
pane.add(cmbSystem,"3 , 15");
pane.add(panelButton, "1,17,3,17");
cmbVersion.setModel(new DefaultComboBoxModel(new String[]{"1","2"}));
}
@Override
protected void updateFileds() {
//为了节省代码---这里偷懒没有再写server面板。只在这里做了一下判断
if(super.model instanceof TopoServerModel) {
lblSystem.setEnabled(true);
cmbSystem.setEnabled(true);
cmbSystem.setModel(new DefaultComboBoxModel(new String[]{"windows","AIX"}));
} else {
lblSystem.setEnabled(false);
cmbSystem.setEnabled(false);
}
//为了节省代码---这里偷懒没有再写weblogic面板。只在这里做了一下判断
if(super.model instanceof TopoWeblogicModel) {
lblBrand.setEnabled(false);
cmbBrand.setEnabled(false);
lblModel.setEnabled(false);
cmbModel.setEnabled(false);
} else {
lblBrand.setEnabled(true);
cmbBrand.setEnabled(true);
lblModel.setEnabled(true);
cmbModel.setEnabled(true);
TradeMarkEntity[] brands = TopoConst.TRADE_MARKS;
if(brands != null ) {
cmbBrand.setModel(new DefaultComboBoxModel(brands));
if(brands.length > 0) {
cmbModel.setModel(new DefaultComboBoxModel(TopoConst.MODELS_WITH_BRAND.get(brands[0])));
}
}
cmbBrand.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
cmbModel.setModel(new DefaultComboBoxModel
(TopoConst.MODELS_WITH_BRAND.get((TradeMarkEntity)cmbBrand.getSelectedItem())));
}
});
}
txtName.setText(super.model.getName()== null ? "" : super.model.getName());
String[] ips = getIp(super.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]);
}
SNMPEntity snmp = super.model.getSnmp();
if(snmp == null) return;
txtCommunity.setText(snmp.getCommunity()== null ? "" : snmp.getCommunity());
txtPort.setText(snmp.getPort()== null ? "" : snmp.getPort());
TradeMarkEntity brand = super.model.getBrand();
if( brand!= null && !brand.equals("")) {
cmbBrand.setSelectedItem(brand);
}
DeviceModelEntity deviceModel = super.model.getModel();
if( deviceModel!= null && !deviceModel.equals("")) {
cmbModel.setSelectedItem(deviceModel);
}
String version = snmp.getVersion();
if( version!= null && !version.equals("")) {
cmbVersion.setSelectedItem(version);
}
String system = super.model.getSystem();
if( version!= null && !version.equals("")) {
cmbSystem.setSelectedItem(system);
}
}
}
}