package org.infosec.ismp.applet.manager.application;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import org.infosec.ismp.applet.manager.component.TopoNetwork;
import org.infosec.ismp.applet.manager.component.TopoPopupMenuGenerator;
import org.infosec.ismp.applet.manager.component.TopoTree;
import org.infosec.ismp.applet.manager.component.tree.TreeToolBar;
import org.infosec.ismp.applet.manager.model.DomainModel;
import org.infosec.ismp.applet.manager.model.LinkModel;
import org.infosec.ismp.applet.manager.model.NodeModel;
import org.infosec.ismp.applet.manager.utilities.AppUtil;
import org.infosec.ismp.applet.manager.utilities.TopoConst;
import twaver.DataBoxSelectionEvent;
import twaver.DataBoxSelectionListener;
import twaver.Element;
import twaver.ElementAttribute;
import twaver.Node;
import twaver.VisibleFilter;
import twaver.network.NetworkToolBarFactory;
import twaver.network.TNetwork;
import twaver.swing.TExpandPane;
import twaver.swing.TableLayout;
import twaver.table.TPropertySheet;
import twaver.table.TPropertySheetPane;
import twaver.tree.TTree;
public class MainPane extends JPanel{
private TTree tree;
private JSplitPane rootSplit = new JSplitPane();
private JTextField txtSearch = new JTextField();
// private TPropertySheet sheet = new TPropertySheet(TopoConst.BOX);
private Element attribute = new Node();
private TPropertySheet sheet = new TPropertySheet();
private TNetwork network;
public MainPane() {
tree = new TopoTree(TopoConst.BOX);
network = new TopoNetwork(TopoConst.BOX);
JToolBar toolbar = NetworkToolBarFactory.getToolBar(TopoConst.TOOLBAR, network);
network.setToolbar(toolbar);
tree.setEnsureVisibleOnSelected(true);
tree.setPopupMenuGenerator(new TopoPopupMenuGenerator(network));
tree.expandRow(0);
JLabel lbSearch = new JLabel();
lbSearch.setText(" 快速搜索:");
JPanel searchPane = new JPanel(new BorderLayout());
searchPane.add(lbSearch, BorderLayout.NORTH);
searchPane.add(AppUtil.createDropDownSelector(this, txtSearch), BorderLayout.CENTER);
TExpandPane searchPopup = new TExpandPane(searchPane, TExpandPane.NORTH, true, false);
double[] rows = new double[] {
TableLayout.PREFERRED,
TableLayout.PREFERRED,
//TableLayout.FILL,
TableLayout.PREFERRED,
TableLayout.PREFERRED,
};
double[] columns = new double[] {
TableLayout.FILL
};
JPanel leftPanel = new JPanel(new TableLayout(columns, rows));
leftPanel.add(searchPopup, "0,0");
leftPanel.add(new TreeToolBar(tree), "0,1");
leftPanel.add(new JScrollPane(tree), "0,2");
leftPanel.add(getProrpertyPane(), "0,3");
rootSplit.setContinuousLayout(true);
rootSplit.setOneTouchExpandable(true);
rootSplit.setLeftComponent(leftPanel);
rootSplit.setRightComponent(network);
// this.navigateManager = new NavigateManager(tree, rootSplit, scrollReadMe);
rows = new double[] {
TableLayout.FILL
};
columns = new double[] {
TableLayout.FILL,
};
this.setLayout(new TableLayout(columns, rows));
this.add(rootSplit,"0,0");
txtSearch.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_ESCAPE){
txtSearch.setText(null);
}
tree.updateTViewUI();
tree.expandAll();
selectNode();
}
});
tree.addVisibleFilter(new VisibleFilter(){
public boolean isVisible(Element element) {
String text = txtSearch.getText();
if (!(element instanceof Node) || text == null || text.trim().equals("")) {
return true;
}
if(element.getName() == null) {
return false;
}
if(element instanceof DomainModel) {
List<Element> childrens = element.getChildren();
for(Element children:childrens) {
if(children.getName()!=null && children.getName().toLowerCase().indexOf(text.toLowerCase()) >= 0) {
return true;
}
}
}
return element.getName().toLowerCase().indexOf(text.toLowerCase()) >= 0;
}
});
SwingUtilities.invokeLater(new Runnable(){
public void run() {
txtSearch.requestFocus();
}
});
}
private TPropertySheetPane getProrpertyPane() {
initSheet();
return new TPropertySheetPane(sheet);
}
private void initSheet() {
sheet.setElement(attribute);
List list = new ArrayList();
list.add(getElementaAttribute("ID", "topoID"));
list.add(getElementaAttribute("名称", "topoName"));
list.add(getElementaAttribute("IP地址","topoIP"));
list.add(getElementaAttribute("类型", "topoType"));
list.add(getElementaAttribute("品牌","topoMark"));
list.add(getElementaAttribute("型号","topoModel"));
list.add(getElementaAttribute("状态","topoStatu"));
list.add(getElementaAttribute("所属域","topoDomain"));
list.add(getElementaAttribute("Mac地址","topoMac"));
sheet.registerElementClassAttributes(Node.class, list);
attribute.putClientProperty("topoID", "");
TopoConst.BOX.getSelectionModel().addDataBoxSelectionListener(
new DataBoxSelectionListener() {
public void selectionChanged(DataBoxSelectionEvent e) {
Element source = TopoConst.BOX.getLastSelectedElement();
if(source instanceof DomainModel) {
DomainModel domain = (DomainModel)source;
attribute.putClientProperty("topoID", domain.getId()+"");
attribute.putClientProperty("topoName", domain.getDomainName());
attribute.putClientProperty("topoIP", "");
attribute.putClientProperty("topoType", "云图");
attribute.putClientProperty("topoMark", "");
attribute.putClientProperty("topoModel", "");
attribute.putClientProperty("topoStatu", "");
if(domain.getParentDomain() != null) {
attribute.putClientProperty("topoDomain", domain.getParentDomain().getDomainName());
} else {
attribute.putClientProperty("topoDomain", "");
}
attribute.putClientProperty("topoMac", "");
} else if(source instanceof NodeModel){
NodeModel node = (NodeModel)source;
attribute.putClientProperty("topoID", node.getNodeId());
attribute.putClientProperty("topoName", node.getName());
attribute.putClientProperty("topoIP", node.getIpAddress());
attribute.putClientProperty("topoType", node.getType() == null ? "":node.getType().getName());
attribute.putClientProperty("topoMark", node.getBrand() == null ? "":node.getBrand().getMarkName());
attribute.putClientProperty("topoModel", node.getModel() == null ? "":node.getModel().getName());
if(node.getStatus() != null && node.getStatus() == 1) {
attribute.putClientProperty("topoStatu", "已激活");
} else {
attribute.putClientProperty("topoStatu", "未激活");
}
if(node.getParentDomain() != null) {
attribute.putClientProperty("topoDomain", node.getParentDomain().getDomainName());
} else {
attribute.putClientProperty("topoDomain", "");
}
attribute.putClientProperty("topoMac", node.getMac()== null ? "":node.getMac());
} else if(source instanceof LinkModel) {
LinkModel link = (LinkModel)source;
attribute.putClientProperty("topoID",link.getLinkId()+"");
attribute.putClientProperty("topoName", "");
attribute.putClientProperty("topoIP", "");
attribute.putClientProperty("topoType", "");
attribute.putClientProperty("topoMark", "");
attribute.putClientProperty("topoModel", "");
if(link.getLinkState() != null && link.getLinkState() == 1) {
attribute.putClientProperty("topoStatu", "已激活");
} else {
attribute.putClientProperty("topoStatu", "未激活");
}
attribute.putClientProperty("topoDomain", "");
attribute.putClientProperty("topoMac", "");
} else {
attribute.putClientProperty("topoID", "");
attribute.putClientProperty("topoName", "");
attribute.putClientProperty("topoIP", "");
attribute.putClientProperty("topoType", "");
attribute.putClientProperty("topoMark", "");
attribute.putClientProperty("topoModel", "");
attribute.putClientProperty("topoStatu", "");
attribute.putClientProperty("topoDomain", "");
attribute.putClientProperty("topoMac", "");
}
}
});
}
private ElementAttribute getElementaAttribute(String name, String key) {
ElementAttribute attribute = new ElementAttribute();
attribute.setDisplayName(name);
attribute.setClientPropertyKey(key);
return attribute;
}
public void clearSearch(){
txtSearch.setText("");
tree.updateTViewUI();
tree.expandAll();
Element element = tree.getDataBox().getLastSelectedElement();
if(element != null){
tree.ensureVisible(element);
}
}
public void selectNode() {
String text = txtSearch.getText();
if (text == null || text.trim().equals("")) {
return;
} else {
text = text.trim().toLowerCase();
List list = new ArrayList();
//TODO change NodeMode.class
Iterator it = TopoConst.BOX.iterator(Node.class);
while (it.hasNext()) {
Element element = (Element) it.next();
if(tree.isVisible(element)){
list.add(element);
if(element.getParent() != null && !list.contains(element.getParent())) {
list.add(element.getParent());
}
}
}
TopoConst.BOX.getSelectionModel().setSelection(list);
}
}
// private JButton createExportImageButton(){
// JButton button = new JButton(TWaverUtil.getIcon("/demo/resource/images/exportImage.png"));
// button.setFocusPainted(false);
// button.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e) {
// TWaverUtil.exportImage(rootSplit.getRightComponent());
// }
// });
// return button;
// }
}