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

📄 mytree.java

📁 导出ORACLE数据库对象DDL语句的程序
💻 JAVA
字号:
package com.icbcsdc.ddlexp.ui;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreePath;

import pv.jfcx.JPVTree;
import pv.jfcx.JPVTreeView;
import pv.jfcx.PVNode;

import com.icbcsdc.ddlexp.pub.staticLog.Logger;
import com.icbcsdc.ddlexp.pub.util.MessageBox;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.ComparedNode;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLDatabase;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLManager;
import com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLNode;
import com.icbcsdc.ddlexp.ui.dialog.DeamonThread;
import com.icbcsdc.ddlexp.ui.dialog.SetExpFileDlg;
import com.icbcsdc.ddlexp.ui.dialog.WaitingDlg;
import com.icbcsdc.ddlexp.ui.popMenu.PopupMenu;
import com.icbcsdc.ddlexp.ui.rightPanel.RightPanel;

/**
 * @author zhangyc
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class MyTree extends JPVTreeView {
	/**
	 * 构造生成器模式所需的对象 树节点右键弹出菜单的生成工厂
	 */
	PopupMenuFactory PMfact = new PopupMenuFactory();

	/**
	 * 构造生成器模式所需的对象 右边面板的生成工厂
	 */
	RightFactory RPfact = new RightFactory();
	
	/**
	 * 构造生成器模式所需的对象 右边面板的抽象类
	 */
	RightPanel RPchoice=null;

    /**
     * 选中的树节点
     */
    PVNode selectedPVNode=null;

    /**
     * 右键选中的树节点
     */
    PVNode selectedPopPVNode=null;

	TreeFrame parent=null;
	
	XMLManager manager=null;

	//byte compareStatus=0;
	/**
	 * Constructor for MyTree1.
	 */
	public MyTree(TreeFrame parent) {
		super();
		this.parent=parent;
		init();
	}

	/**
	 * Constructor for MyTree1.
	 * @param arg0
	 */
	public MyTree(PVNode arg0,TreeFrame parent) {
		super(arg0);
		this.parent=parent;
		init();
	}


	/**
	 * Constructor for MyTree1.
	 * @param arg0
	 */
	public MyTree(XMLManager manager,JPVTree arg0,TreeFrame parent) {
		super(arg0);
		this.parent=parent;
		this.manager=manager;

		init();
	}

	/**
	 * Constructor for MyTree1.
	 * @param arg0
	 */
	public MyTree(XMLManager manager,JPVTree arg0,TreeFrame parent,byte compareStatus) {
		super(arg0);
		this.parent=parent;
		this.manager=manager;
		this.manager.setCompareStatus(compareStatus);
		init();
	}


	protected void init(){
		this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		this.setViewportBorder(BorderFactory.createEtchedBorder());	
		this.setBorderStyle(pv.util.PVBorder.OUTDENT + 4);

		this.getTree().addMouseListener(buildMouseListener());
		this.addAllListeners(buildListener());
		//pv.jfcx.PVTreeListener ls = buildListener();
	}


	protected pv.jfcx.PVTreeListener buildListener() {
		return new pv.jfcx.PVTreeListener() {

			public void afterDrop(pv.jfcx.PVTreeEvent e) {
			}

			public int beforeDeleteKey(pv.jfcx.PVTreeEvent e) {
				return super.beforeDeleteKey(e);
			}

			public int beforeDrop(pv.jfcx.PVTreeEvent e) {
				return super.beforeDrop(e); 
			}

			public int beforeInsertKey(pv.jfcx.PVTreeEvent e) {
				Logger.log(Logger.INFO_INT, "beforeInsert");
				return super.beforeInsertKey(e);
			}

			public int dragOver(pv.jfcx.PVTreeEvent e) {
				return super.dragOver(e); 
				// pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
			}

			public int startDrag(pv.jfcx.PVTreeEvent e) {
				return super.startDrag(e); // pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
			}

			public void treeCollapsed(TreeExpansionEvent e) {
				Logger.log(Logger.INFO_INT, "collapsed: "
						+ getSelectedNode());
				setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());		
			}

			//--------------------------
			// implementation of the tree expansion listener
			public void treeExpanded(TreeExpansionEvent e) {
				Logger.log(Logger.INFO_INT, "collapsed: "
						+ getSelectedNode());
				//selectedPVNode = (pv.jfcx.PVNode) e.getPath().getLastPathComponent();
				setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());		

			}

			//--------------------------
			// implementation of the tree model listener
			public void treeNodesChanged(TreeModelEvent e) {
				Logger.log(Logger.INFO_INT, "Nodes Changed");
			}

			public void treeNodesInserted(TreeModelEvent e) {
				Logger.log(Logger.INFO_INT, "Nodes Inserted");
			}

			public void treeNodesRemoved(TreeModelEvent e) {
				Logger.log(Logger.INFO_INT, "Nodes Removed");
			}

			public void treeStructureChanged(TreeModelEvent e) {
				Logger.log(Logger.INFO_INT, "StructureChanged " + e);
			}

			//--------------------------
			// implementation of the tree selection listener
			public void valueChanged(TreeSelectionEvent e) {
				Logger.log(Logger.INFO_INT, "valueChanged: "+ getSelectedNode());

				//如果节点的信息改变,则把右侧面板上的内容移去
				setSelectedNode((pv.jfcx.PVNode) e.getPath().getLastPathComponent());		
				tree_change();

				//parent.removeRightPanel();								

			}

		};
	}

	/**
	 * @return 树节点的右键的监听器
	 */
	protected MouseListener buildMouseListener() {
		return new MouseListener() {
			public void mouseClicked(MouseEvent e) {
				TreePath selPath = getTree().getPathForLocation(
						e.getX(), e.getY());

				if(selPath==null) return;
				
				//selectedPopPVNode = (pv.jfcx.PVNode) selPath.getLastPathComponent();
				setSelectedPopPVNode((pv.jfcx.PVNode) selPath.getLastPathComponent());

				//right button鼠标右键
				if (e.getButton() == 3) {
					
					if ((selPath != null)
							&& (selPath.getLastPathComponent() == 
							getTree().getLastSelectedPathComponent())) {
						JPopupMenu popup = rigltClickNode();
						if(popup != null)
							popup.show(e.getComponent(), e.getX(), e.getY());
					}
				}

				//双击节点
				if (e.getClickCount() == 2) {
					selectedNodeRefresh();
				}
			}

			public void mouseEntered(MouseEvent e) {
			}

			public void mouseExited(MouseEvent e) {
			}

			public void mousePressed(MouseEvent e) {
			}

			public void mouseReleased(MouseEvent e) {
			}
		};
	}

		/**
	 * 每次节点上右键的响应事件
	 * @return JPopupMenu对象
	 */
	protected JPopupMenu rigltClickNode() {
		PopupMenu PMchoice= PMfact.getChoiceUI(parent,selectedPopPVNode);
		if(PMchoice==null) return null;
		return PMchoice.getJPopupMenu();

	}

	public void selectedNodeRefresh(){
		final DeamonThread mainthread = new DeamonThread() {
			public void run() {
				try {
					doubleClickNode();
					running=false;				
				} catch (Exception e) {
					MessageBox.showErr(getTreeFrame(),e.getMessage());
				}finally{
					running=false;				
				}		
			}
		};
		
		mainthread.start();
		WaitingDlg dlg = new WaitingDlg(this.parent, mainthread,"The selected node is being refreshed...");
		dlg.showInParentMiddle();
	
	}

	public void selectedNodeExport(){
		RPchoice.setSelect();
		
		if(this.getCompareStatus()!=ComparedNode.NO_COMPARED){
			MessageBox.showErr(getTreeFrame(),"比较节点不能做DDL导出");
			return;			
		}
				
		SetExpFileDlg frame = new SetExpFileDlg(this.parent,true);
		frame.show();
		
		String fileName = null;
		if(frame.result == 1){
			fileName = frame.fileName;
			if((fileName != null)&&(fileName.length() != 0)){
				this.parent.setExpFile(new File(fileName));
				Logger.log(Logger.DEBUG,"导出脚本文件为:"+fileName);
			}else{
				MessageBox.showErr(getTreeFrame(),"输入文件名不能为空");
				return;
			}
		}else{
			Logger.log(Logger.DEBUG,"用户取消输入导出文件名!");
			return;
		}


		//开始导出DDL
		final DeamonThread mainthread = new DeamonThread() {
			public void run() {
				try {
					XMLNode node=(XMLNode)selectedPVNode.getUserObject();
					node.writeDDLToFil(parent.getExpFile());
					running=false;				
				} catch (Exception e) {
					e.printStackTrace();
					Logger.log(Logger.INFO,e.getMessage());
					MessageBox.showErr(getTreeFrame(),"导出失败,失败原因:"+e.getMessage());
				}finally{
					running=false;				
				}	
			}
		};
		mainthread.start();
		WaitingDlg dlg = new WaitingDlg(this.parent, mainthread,"Exporting the selected node....");

		//dlg.show(300,300);
		dlg.showInParentMiddle();

	
	}

	/**
	 * 相应节点上的双击事件
	 * **/
	protected void doubleClickNode() throws Exception{
		//Logger.log(Logger.INFO,"1 selectedNode in doubleClickNode:"+selectedPVNode);
		XMLNode node=(XMLNode)selectedPVNode.getUserObject();
		node.refresh();
		
		//Logger.log(Logger.INFO,"2 selectedNode in doubleClickNode:"+selectedPVNode);
		selectedPVNode.removeAllChildren();
		//Logger.log(Logger.INFO,"3 selectedNode in doubleClickNode:"+selectedPVNode);
		node.appendChildren2Node(selectedPVNode);
		//Logger.log(Logger.INFO,"4 selectedNode in doubleClickNode:"+selectedPVNode);
		if(selectedPVNode!=null) {
			tree_change();
			this.reload(selectedPVNode);
		}

		//Logger.log(Logger.INFO,"5 selectedNode in doubleClickNode:"+selectedPVNode);
		//Logger.log(Logger.INFO,"6 selectedNode in doubleClickNode:"+selectedPVNode);
	}
	
	/**
	 * 每次树刷新时调用的方法,主要是作用是根据节点调出相应的界面
	 */
	protected void tree_change() {
		if(selectedPVNode==null) return;
		RPchoice = RPfact.getChoiceUI(parent,selectedPVNode); 
		parent.removeRightPanel();		
		parent.addRightPanel(RPchoice);

	}
	
	
	public void printSelectPVNode(){
		int size=selectedPVNode.getChildCount();
		for(int i=0;i<size;i++){
			XMLNode node=(XMLNode)((PVNode)selectedPVNode.getChildAt(i)).getUserObject();
			System.out.println(node.toString());
		}
	}


	public static void main(String[] args) {
	}
	/**
	 * Returns the selectPopPVNode.
	 * @return PVNode
	 */
	public PVNode getSelectedPopPVNode() {
		return selectedPopPVNode;
	}

	/**
	 * Returns the selectPVNode.
	 * @return PVNode
	 */
	public PVNode getSelectedNode() {
		return selectedPVNode;
	}

	/**
	 * Sets the selectedPopPVNode.
	 * @param selectedPopPVNode The selectedPopPVNode to set
	 */
	protected void setSelectedPopPVNode(PVNode selectedPopPVNode) {
		this.selectedPopPVNode = selectedPopPVNode;
		parent.setSelectedTree(this);
		
	}

	/**
	 * Sets the selectedPVNode.
	 * @param selectedPVNode The selectedPVNode to set
	 */
	public  void setSelectedNode(PVNode selectedPVNode) {
		this.selectedPVNode = selectedPVNode;
		parent.setSelectedTree(this);

	}

	/**
	 * contruct JPVTree
	 * */
	public void addDatabase(XMLDatabase db) throws  Exception{
		//db.setPlatform();
		//db.setVersion();
		if(manager.getCompareStatus()==ComparedNode.COMPARED)
			db.setCompareStatus(ComparedNode.COMPARED);
				
		manager.addChild(db);

		this.getTree().addNode(db.getPVNode());

	}
	
	public void removeDatabase(PVNode db){
		//XMLManager manager= XMLManager.getInstance();
		XMLDatabase xmldb=(XMLDatabase)db.getUserObject();
		manager.removeChild(xmldb);
		this.getTree().removeNode(db);
	}

	public XMLDatabase getXMLDatabase(String url){
		return this.manager.getXMLDatabase(url);
	}
	
	public void managerClear(){
		this.manager.clear();
	}
	/**
	 * Returns the compareStatus.
	 * @return byte
	 */
	public byte getCompareStatus() {
		return manager.getCompareStatus();
	}

	/**
	 * Sets the compareStatus.
	 * @param compareStatus The compareStatus to set
	 */
	public void setCompareStatus(byte compareStatus) {
		manager.setCompareStatus(compareStatus);
	}
	
	/**
	 * Returns the parent.
	 * @return TreeFrame
	 */
	public TreeFrame getTreeFrame() {
		return parent;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -