📄 treeapplet.java
字号:
|| (toNode instanceof Group || toNode instanceof Dummy)) {
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
JOptionPane.showMessageDialog(null, "选择的源或目标错误", TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
return null;
}
String strSrcNodeId = fromNode.getID().toString();
String strDestNodeId = toNode.getID().toString();
/** 取得链路的源与目标对应的资源与拓扑表信息 **/
ActionResponseObject actionRespObject = topoActionMngr.loadResourceAndTopoTableInfos(strViewID, strSrcNodeId, strDestNodeId);
if (actionRespObject == null) {
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
JOptionPane.showMessageDialog(null, "取得链路的源与目标对应的资源与拓扑表信息为空", TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
return null;
}
hmNodeResources = actionRespObject.getHmNodeResources();
hmNodeInfsInfos = actionRespObject.getHmNodeInfsInfos();
String[] sourceIntfs = TopoClientUtil.getNodeInfs(strSrcNodeId, hmNodeInfsInfos); // new String[]{"1024","768","8080"};
String[] targetIntfs = TopoClientUtil.getNodeInfs(strDestNodeId, hmNodeInfsInfos); // new String[]{"988","3456"};
if (sourceIntfs == null || sourceIntfs.length == 0 || targetIntfs == null || targetIntfs.length == 0) {
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
JOptionPane.showMessageDialog(null, "无空闲的源或目标接口", TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
return null;
}
return new LinkDialogPanel(sourceIntfs, targetIntfs);
}
private LinkDialogPanel(String[] sourceIntfs, String[] targetIntfs) {
nameField=new JTextField(20);
nameLabel=new JLabel("请输入链路名称:");
sourceLabel=new JLabel("源端口:");
targetLabel=new JLabel("目标端口:");
sourceComboBox = new JComboBox(sourceIntfs);
sourceComboBox.setSelectedIndex(0);
targetComboBox = new JComboBox(targetIntfs);
targetComboBox.setSelectedIndex(0);
JPanel topPanel = new JPanel();
topPanel.add(nameLabel);
topPanel.add(nameField);
JPanel leftPanel = new JPanel();
leftPanel.add(sourceLabel);
leftPanel.add(sourceComboBox);
JPanel rightPanel = new JPanel();
rightPanel.add(targetLabel);
rightPanel.add(targetComboBox);
JPanel middlePanel = new JPanel();
middlePanel.add(leftPanel);
middlePanel.add(rightPanel);
JButton okButton = new JButton("确定");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ok = true;
dialog.setVisible(false);
// 设定TDataBox未解析过服务端来的XML文件
blnIsParsedXmlAddedLink = false;
}
});
JButton cancelButton = new JButton("取消");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
dialog.setVisible(false);
}
});
JPanel bottomPanel = new JPanel();
bottomPanel.add(okButton);
bottomPanel.add(cancelButton);
JPanel panel = new JPanel(new GridLayout(3, 1));
panel.add(topPanel);
panel.add(middlePanel);
panel.add(bottomPanel);
add(panel);
}
public String[] getResults() {
return new String[] { nameField.getText(),
sourceComboBox.getSelectedItem().toString(),
targetComboBox.getSelectedItem().toString()
};
}
public boolean showDialog(Component parent, String title) {
ok = false;
Frame owner = null;
if (parent instanceof Frame) {
owner = (Frame) parent;
} else {
owner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);
}
if (dialog == null || dialog.getOwner() != owner) {
dialog = new JDialog(owner, true);
dialog.setResizable(false);
dialog.add(this);
dialog.pack();
}
dialog.setTitle(title);
TWaverUtil.centerWindow(dialog);
dialog.setVisible(true);
return ok;
}
}
/**
* 加载拓扑树的数据。
* @throws IOException
*/
private void loadTreeData(TopoActionManager topoActionMngr) throws IOException {
if (topoActionMngr != null) {
// 加载拓扑树时返回的数据信息
ActionResponseObject actionRespObject = topoActionMngr.loadTree(strViewID);
if (actionRespObject == null) {
System.out.println("[加载拓扑树时得到的应答内容错误]");
return;
}
// 取得拓扑树数据
String strXmlData = actionRespObject.getStrResponseXml();
// 当前视图对应的背景图片
strCurrViewBackImage = actionRespObject.getStrCurrentViewBackImage();
// 当前视图是否手动布局过
if (actionRespObject.isBlnIsLayouted()) { // 手动布局过
strCurrViewIsLayouted = TopoServerConstants._HAND_LAYOUTED_YES;
} else { // 未手动布局过
strCurrViewIsLayouted = TopoServerConstants._HAND_LAYOUTED_NO;
}
// 可选背景图片列表
hmAllViewBackImageList = actionRespObject.getHmAllViewBackImageList();
// 解析应答XML文件内容到TDataBox中
parseXmlDataToDataBox(strXmlData);
}
}
/**
* 解析应答XML文件内容到TDataBox中。
* @param strXmlData
* @throws IOException
*/
private void parseXmlDataToDataBox(String strXmlData) throws IOException {
if (strXmlData != null) {
try {
PersistenceManager.readByXML(dataBox, strXmlData, null);
} catch (IOException ex) {
throw ex;
}
}
}
/**
* 增加节点排序事件监听器。
* @param dataBox
*/
private void addSortNodeListener(final TDataBox dataBox) {
dataBox.addElementPropertyChangeListener(new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent evt) {
if("parent".equals(evt.getPropertyName())){
final Element element = (Element) evt.getSource();
if(element instanceof Dummy||element instanceof Group){
dataBox.moveToTop(element);
return;
}
else if(element instanceof Node||element instanceof Link)
{
dataBox.moveToBottom(element);
}
}
}
});
dataBox.addDataBoxListener(new DataBoxAdapter(){
public void elementAdded(DataBoxEvent e){
Element element = e.getElement();
if (element instanceof Dummy || element instanceof Group) {
dataBox.moveToTop(element);
return;
}
if (element instanceof Link ||element instanceof Node) {
dataBox.moveToBottom(element);
}
}
});
}
private void setAddElementListener(final TopoActionManager topoActionMngr, final TDataBox dataBox) {
dataBox.addDataBoxListener(new DataBoxAdapter() {
public void elementAdded(final DataBoxEvent e) {
Element element = e.getElement();
if (element instanceof Link) {
// TDataBox已经解析过服务端来的XML文件
if (blnIsParsedXmlAddedLink) {
blnIsParsedXmlAddedLink = false;
return;
}
final Link link = (Link) element;
link.putClientProperty("link.style", TWaverConst.LINK_STYLE_DASH);
link.putLinkWidth(TopoClientConstants._LINK_DEFAULT_WIDTH);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
LinkDialogPanel linkDialogPanel = LinkDialogPanel.getInstance(dataBox, strViewID, topoActionMngr, link); //new LinkDialogPanel(topoActionMngr, link);
if (linkDialogPanel == null) {
return;
}
if (linkDialogPanel.showDialog(TreeApplet.this, "添加链路")) {
String[] results = linkDialogPanel.getResults();
if (results == null || results[0] == null || results[0].equals("")) {
JOptionPane.showMessageDialog(null, "您输入的名称为空!", TopoClientConstants._MESSAGE_WARNING, JOptionPane.WARNING_MESSAGE);
dataBox.removeElement(link);
return;
} else {
// 父ID
String strParentID = link.getFrom().getParent().getID().toString();
// 源节点ID
String strSrcNodeId = link.getFrom().getID().toString();
// 目标节点ID
String strDestNodeId = link.getTo().getID().toString();
// 源节点选中的接口资源ID
String strFromNodeOneInfResId = TopoClientUtil.getInterfaceResId(strSrcNodeId, hmNodeInfsInfos, results[1]);
// 目标节点选中的接口资源ID
String strToNodeOneInfResId = TopoClientUtil.getInterfaceResId(strDestNodeId, hmNodeInfsInfos, results[2]);
if (strFromNodeOneInfResId == null || strToNodeOneInfResId == null
|| strFromNodeOneInfResId.equals("")
|| strToNodeOneInfResId.equals("")) {
JOptionPane.showMessageDialog(null, "选中的源节点接口资源ID或目标节点接口资源ID为空", TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
return;
}
String strResponseXml = topoActionMngr.addLinkElement(strViewID,
TopoClientConstants._LINK,
strParentID, results[0],
strSrcNodeId,
strDestNodeId,
strFromNodeOneInfResId,
strToNodeOneInfResId);
if (strResponseXml == null) {
JOptionPane.showMessageDialog(null, TopoClientConstants._SERVER_ERROR_OR_INTERFACE_UNUSED, TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
} else {
try {
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
// 设定TDataBox已解析过服务端来的XML文件
blnIsParsedXmlAddedLink = true;
parseXmlDataToDataBox(strResponseXml);
JOptionPane.showMessageDialog(null, TopoClientConstants._ADD_ELEMENT_SUCESSFUL, TopoClientConstants._MESSAGE_INFO, JOptionPane.INFORMATION_MESSAGE);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, TopoClientConstants._PARSE_RESPONSE_DATA_FAIL, TopoClientConstants._MESSAGE_ERROR, JOptionPane.ERROR_MESSAGE);
// 删除由手动拖放出来的链路
dataBox.removeElement(link);
ex.printStackTrace();
blnIsParsedXmlAddedLink = false;
}
}
}
} else {//用户点击取消对话框
dataBox.removeElement(link);
}
}//run function
});//runnable
}
}
});
};
/**
* 增加多选控制事件监听器。
*
* @param dataBox
*/
private void addMultiSelectedListener(final TDataBox dataBox) {
DataBoxSelectionListener listener = new DataBoxSelectionListener() {
public void selectionChanged(final DataBoxSelectionEvent evt) {
if (evt.getBoxSelectionModel().getAllSelectedElement().size() == 1) {
currentSelection = evt.getBoxSelectionModel().lastElement();
} else if (evt.getBoxSelectionModel().getAllSelectedElement().size() > 1) {
if (currentSelection.getClass().equals(evt.getBoxSelectionModel().lastElement().getClass())) {
currentSelection = evt.getBoxSelectionModel().lastElement();
} else {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
evt.getBoxSelectionModel().removeSelection(evt.getBoxSelectionModel().lastElement());
}
});
}
}
}
private Element currentSelection=null;
};
dataBox.getSelectionModel().addDataBoxSelectionListener(listener);
}
/**
* 取得弹出式菜单对象。
* @return
*/
private PopupMenuGenerator getPopupMenuGenerator(final Font font, final TopoActionManager topoActionMngr) {
popupMenuGenerator = new PopupMenuGenerator() {
public JPopupMenu generate(TView tview, MouseEvent event) {
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem createItem = null;
JMenuItem createNodeItem=null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -