⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treeapplet.java

📁 是一个Tcp和Udp网络通信的小程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
					|| (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 + -