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

📄 xmlnode.java

📁 导出ORACLE数据库对象DDL语句的程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.icbcsdc.ddlexp.pub.xml.nodeinfo;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.CallableStatement;
import java.sql.Types;
import java.util.Enumeration;
import java.util.Hashtable;

import pv.jfcx.PVNode;

import com.icbcsdc.ddlexp.pub.connectionpool.JDBCPool;
import com.icbcsdc.ddlexp.pub.connectionpool.JDBCPoolManager;
import com.icbcsdc.ddlexp.pub.staticLog.Logger;
import com.icbcsdc.ddlexp.pub.util.PVNodeFactory;
import com.icbcsdc.ddlexp.ui.CompareFrame;
import com.icbcsdc.ddlexp.ui.UIException;

/**
 * @author zhangyc
 *	树结点的扩展类,保存额外的信息
 */

public abstract class XMLNode implements Comparable,ComparedNode{
	public static final int XML_MANAGER=0;
	public static final int XML_DATABASE=1;
	public static final int XML_SCHEMA=2;
	public static final int XML_TABLE=3;
	public static final int XML_INDEX=4;
	public static final int XML_TRIGGER=5;
	public static final int XML_STORAGE=6;
	public static final int XML_SECURITY=7;
	public static final int XML_USER=8;
	public static final int XML_ROLE=9;
	public static final int XML_TABLESPACE=10;
	public static final int XML_VIEW=11;
	public static final int XML_SEQUENCE=12;
	public static final int XML_SYNONYM=13;
	public static final int XML_CLUSTER=14;
	public static final int XML_SOURCES=15;
	public static final int XML_USERTYPE=16;
	public static final int XML_SCHEMAS=17;
	public static final int XML_TABLESPACES=18;
	public static final int XML_USERS=19;
	public static final int XML_ROLES=20;
	public static final int XML_UNDO_SEG=21;
	public static final int XML_UNDO_SEGS=22;
	public static final int XML_TABLES=23;
	public static final int XML_INDEXES=24;
	public static final int XML_VIEWS=25;
	public static final int XML_SYNONYMS=26;
	public static final int XML_SEQUENCES=27;
	public static final int XML_USER_GRANTED_ROLE=28;
	public static final int XML_USER_GRANTED_SYS_PRIVS=29;
	public static final int XML_USER_GRANTED_OBJ_PRIVS=30;
	public static final int XML_TRIGGERS=31;
	public static final int XML_ROLE_GRANTED_ROLE=32;
	public static final int XML_ROLE_GRANTED_SYS_PRIVS=33;
	public static final int XML_ROLE_GRANTED_OBJ_PRIVS=34;
	public static final int XML_FUNCTION=35;
	public static final int XML_FUNCTIONS=36;
	public static final int XML_PACKAGE=37;
	public static final int XML_PACKAGES=38;
	public static final int XML_PACKAGEBODY=39;
	public static final int XML_PACKAGEBODIES=40;
	public static final int XML_PROCEDURE=41;
	public static final int XML_PROCEDURES=42;
	public static final int XML_TYPES=43;
	public static final int XML_ARRAYTYPE=44;
	public static final int XML_ARRAYTYPES=45;
	public static final int XML_OBJECTTYPE=46;
	public static final int XML_OBJECTTYPES=47;
	public static final int XML_TABLETYPE=48;
	public static final int XML_TABLETYPES=49;
	public static final int XML_TABCOLUMN=50;
	public static final int XML_TABCOLUMNS=51;
	public static final int XML_CONSTRAINT=52;
	public static final int XML_CONSTRAINTS=53;
	public static final int XML_CONSCOLUMN=54;
	public static final int XML_CONSCOLUMNS=55;
	public static final int XML_INDCOLUMN=56;
	public static final int XML_INDCOLUMNS=57;
	public static final int XML_TYPE=58;
	public static final int XML_TABCOMMENT=59;
	public static final int XML_TABCOLCOMMENT=60;
								
    public static int NodeHeight = 20; //设置节点的高度
    public static int MAX_SOURCE_LINES=1000;
	byte compareStatus=ComparedNode.NO_COMPARED;
	
	XMLNode parent=null;
	String name=null;
	NodeContainer container=new NodeContainer();
	PropertyContainer changedProperties=new PropertyContainer();
	
	 

	public static final String overMaxLines="Source object is over max lines.";
	boolean overflow=false;
	boolean selected=true;
	boolean wrapped=false;	
	private static Hashtable type2StrContainer=new Hashtable();
	private static Hashtable type2DDLTypeContainer=new Hashtable();
	private static Hashtable str2CompareStatus=new Hashtable();
	
	//String sqlDDL=null;
	static{
		type2StrContainer.put(new Integer(XML_MANAGER),"MANAGER");
		type2StrContainer.put(new Integer(XML_DATABASE),"DATABASE");
		type2StrContainer.put(new Integer(XML_SCHEMA),"SCHEMA");
		type2StrContainer.put(new Integer(XML_TABLE),"TABLE");
		type2StrContainer.put(new Integer(XML_INDEX),"INDEX");
		type2StrContainer.put(new Integer(XML_TRIGGER),"TRIGGER");
		type2StrContainer.put(new Integer(XML_STORAGE),"STORAGE");
		type2StrContainer.put(new Integer(XML_SECURITY),"SECURITY");
		type2StrContainer.put(new Integer(XML_USER),"USER");
		type2StrContainer.put(new Integer(XML_ROLE),"ROLE");
		type2StrContainer.put(new Integer(XML_TABLESPACE),"TABLESPACE");
		type2StrContainer.put(new Integer(XML_VIEW),"VIEW");
		type2StrContainer.put(new Integer(XML_SEQUENCE),"SEQUENCE");
		type2StrContainer.put(new Integer(XML_SYNONYM),"SYNONYM");
		type2StrContainer.put(new Integer(XML_CLUSTER),"CLUSTER");
		type2StrContainer.put(new Integer(XML_SOURCES),"SOURCE");
		type2StrContainer.put(new Integer(XML_USERTYPE),"USERTYPE");
		type2StrContainer.put(new Integer(XML_SCHEMAS),"SCHEMAS");
		type2StrContainer.put(new Integer(XML_TABLESPACES),"TABLESPACES");
		type2StrContainer.put(new Integer(XML_USERS),"USERS");
		type2StrContainer.put(new Integer(XML_ROLES),"ROLES");
		type2StrContainer.put(new Integer(XML_UNDO_SEG),"UNDO_SEGMENT");
		type2StrContainer.put(new Integer(XML_UNDO_SEGS),"UNDO_SEGMENTS");
		type2StrContainer.put(new Integer(XML_TABLES),"TABLES");
		type2StrContainer.put(new Integer(XML_INDEXES),"INDEXS");
		type2StrContainer.put(new Integer(XML_VIEWS),"VIEWS");
		type2StrContainer.put(new Integer(XML_SYNONYMS),"SYNONYMS");
		type2StrContainer.put(new Integer(XML_SEQUENCES),"SEQUENCES");	
		type2StrContainer.put(new Integer(XML_USER_GRANTED_ROLE),"GRANTED_ROLE");
		type2StrContainer.put(new Integer(XML_USER_GRANTED_SYS_PRIVS),"GRANTED_SYS_PRIVS");
		type2StrContainer.put(new Integer(XML_USER_GRANTED_OBJ_PRIVS),"GRANTED_OBJ_PRIVS");
		type2StrContainer.put(new Integer(XML_TRIGGERS),"TRIGGERS");
		type2StrContainer.put(new Integer(XML_ROLE_GRANTED_ROLE),"ROLE_GRANTED_ROLE");
		type2StrContainer.put(new Integer(XML_ROLE_GRANTED_SYS_PRIVS),"ROLE_GRANTED_SYS_PRIVS");
		type2StrContainer.put(new Integer(XML_ROLE_GRANTED_OBJ_PRIVS),"ROLE_GRANTED_OBJ_PRIVS");
		type2StrContainer.put(new Integer(XML_FUNCTION),"FUNCTION");
		type2StrContainer.put(new Integer(XML_FUNCTIONS),"FUNCTIONS");
		type2StrContainer.put(new Integer(XML_PACKAGE),"PACKAGE");
		type2StrContainer.put(new Integer(XML_PACKAGES),"PACKAGES");
		type2StrContainer.put(new Integer(XML_PACKAGEBODY),"PACKAGEBODY");
		type2StrContainer.put(new Integer(XML_PACKAGEBODIES),"PACKAGEBODIES");
		type2StrContainer.put(new Integer(XML_PROCEDURE),"PROCEDURE");
		type2StrContainer.put(new Integer(XML_PROCEDURES),"PROCEDURES");
		type2StrContainer.put(new Integer(XML_TYPES),"TYPES");
		type2StrContainer.put(new Integer(XML_ARRAYTYPE),"ARRAY_TYPE");
		type2StrContainer.put(new Integer(XML_ARRAYTYPES),"ARRAY_TYPES");
		type2StrContainer.put(new Integer(XML_TABLETYPE),"TABLE_TYPE");
		type2StrContainer.put(new Integer(XML_TABLETYPES),"TABLE_TYPES");
		type2StrContainer.put(new Integer(XML_OBJECTTYPE),"OBJECT_TYPE");
		type2StrContainer.put(new Integer(XML_OBJECTTYPES),"OBJECT_TYPES");
		type2StrContainer.put(new Integer(XML_CONSTRAINT),"CONSTRAINT");
		type2StrContainer.put(new Integer(XML_CONSTRAINTS),"CONSTRAINTS");
		type2StrContainer.put(new Integer(XML_TABCOLUMNS),"TABLE_COLUMNS");
		type2StrContainer.put(new Integer(XML_TABCOLUMN),"TABLE_COLUMN");
		type2StrContainer.put(new Integer(XML_INDCOLUMNS),"TINDEX_COLUMNS");
		type2StrContainer.put(new Integer(XML_INDCOLUMN),"INDEX_COLUMN");
		type2StrContainer.put(new Integer(XML_TYPE),"TYPE");
		type2StrContainer.put(new Integer(XML_TABCOMMENT),"COMMENT");
		type2StrContainer.put(new Integer(XML_TABCOLCOMMENT),"COMMENT");
		


		//type2DDLTypeContainer.put(new Integer(XML_MANAGER),"MANAGER");
		//type2DDLTypeContainer.put(new Integer(XML_DATABASE),"DATABASE");
		//type2DDLTypeContainer.put(new Integer(XML_SCHEMA),"SCHEMA");
		type2DDLTypeContainer.put(new Integer(XML_TABLE),"TABLE");
		type2DDLTypeContainer.put(new Integer(XML_INDEX),"INDEX");
		type2DDLTypeContainer.put(new Integer(XML_TRIGGER),"TRIGGER");
		//type2DDLTypeContainer.put(new Integer(XML_STORAGE),"STORAGE");
		//type2DDLTypeContainer.put(new Integer(XML_SECURITY),"SECURITY");
		type2DDLTypeContainer.put(new Integer(XML_USER),"USER");
		type2DDLTypeContainer.put(new Integer(XML_ROLE),"ROLE");
		type2DDLTypeContainer.put(new Integer(XML_TABLESPACE),"TABLESPACE");
		type2DDLTypeContainer.put(new Integer(XML_VIEW),"VIEW");
		type2DDLTypeContainer.put(new Integer(XML_SEQUENCE),"SEQUENCE");
		type2DDLTypeContainer.put(new Integer(XML_SYNONYM),"SYNONYM");
		//type2DDLTypeContainer.put(new Integer(XML_CLUSTER),"CLUSTER");
		//type2DDLTypeContainer.put(new Integer(XML_SOURCES),"SOURCE");
		type2DDLTypeContainer.put(new Integer(XML_USERTYPE),"TYPE");
		//type2DDLTypeContainer.put(new Integer(XML_SCHEMAS),"SCHEMAS");
		//type2DDLTypeContainer.put(new Integer(XML_TABLESPACES),"TABLESPACES");
		//type2DDLTypeContainer.put(new Integer(XML_USERS),"USERS");
		//type2DDLTypeContainer.put(new Integer(XML_ROLES),"ROLES");
		type2DDLTypeContainer.put(new Integer(XML_UNDO_SEG),"ROLLBACK_SEGMENT");
		//type2DDLTypeContainer.put(new Integer(XML_UNDO_SEGS),"UNDO_SEGMENTS");
		//type2DDLTypeContainer.put(new Integer(XML_TABLES),"TABLES");
		//type2DDLTypeContainer.put(new Integer(XML_INDEXES),"INDEXS");
		//type2DDLTypeContainer.put(new Integer(XML_VIEWS),"VIEWS");
		//type2DDLTypeContainer.put(new Integer(XML_SYNONYMS),"SYNONYMS");
		//type2DDLTypeContainer.put(new Integer(XML_SEQUENCES),"SEQUENCES");	
		type2DDLTypeContainer.put(new Integer(XML_USER_GRANTED_ROLE),"ROLE_GRANT");
		type2DDLTypeContainer.put(new Integer(XML_USER_GRANTED_SYS_PRIVS),"SYSTEM_GRANT");
		type2DDLTypeContainer.put(new Integer(XML_USER_GRANTED_OBJ_PRIVS),"OBJECT_GRANT");
		//type2DDLTypeContainer.put(new Integer(XML_TRIGGERS),"TRIGGERS");
		type2DDLTypeContainer.put(new Integer(XML_ROLE_GRANTED_ROLE),"ROLE_GRANT");
		type2DDLTypeContainer.put(new Integer(XML_ROLE_GRANTED_SYS_PRIVS),"SYSTEM_GRANT");
		type2DDLTypeContainer.put(new Integer(XML_ROLE_GRANTED_OBJ_PRIVS),"OBJECT_GRANT");
		type2DDLTypeContainer.put(new Integer(XML_FUNCTION),"FUNCTION");
		//type2DDLTypeContainer.put(new Integer(XML_FUNCTIONS),"FUNCTIONS");
		type2DDLTypeContainer.put(new Integer(XML_PACKAGE),"PACKAGE_SPEC");
		//type2DDLTypeContainer.put(new Integer(XML_PACKAGES),"PACKAGES");
		type2DDLTypeContainer.put(new Integer(XML_PACKAGEBODY),"PACKAGE_BODY");
		//type2DDLTypeContainer.put(new Integer(XML_PACKAGEBODIES),"PACKAGEBODIES");
		type2DDLTypeContainer.put(new Integer(XML_PROCEDURE),"PROCEDURE");
		//type2DDLTypeContainer.put(new Integer(XML_PROCEDURES),"PROCEDURES");
		type2DDLTypeContainer.put(new Integer(XML_ARRAYTYPE),"TYPE");
		type2DDLTypeContainer.put(new Integer(XML_TABLETYPE),"TYPE");
		type2DDLTypeContainer.put(new Integer(XML_OBJECTTYPE),"TYPE");
		type2DDLTypeContainer.put(new Integer(XML_CONSTRAINT),"CONSTRAINT");
		
		str2CompareStatus.put("DIFF",new Byte(SRC_DST_DIFF));
		str2CompareStatus.put("SAME",new Byte(SRC_DST_SAME));
		str2CompareStatus.put("HAVE",new Byte(SRC_EXIST_DST_NULL));
		str2CompareStatus.put("NONE",new Byte(SRC_NULL_DST_EXIST));
	}
	
	protected void setParent(XMLNode node){
		parent=node;
	}
	
	public XMLNode getParent(){
		return parent;
	}
	
	/**返回对象类型*/
	public abstract int getType();
	
	/**进行对象刷新处理*/
	public void refresh() throws Exception{
		Enumeration enum=this.getDirectChildren();
		while(enum.hasMoreElements()){
			Hashtable list=(Hashtable)enum.nextElement();
			Enumeration enum1=list.elements();
			while(enum1.hasMoreElements()){
				XMLNode childNode=(XMLNode)enum1.nextElement();
				childNode.refresh();
			}
		}			
	}

	/**
	 * @see com.icbcsdc.ddlexp.pub.xml.nodeinfo.XMLNode#refresh()
	 */
	protected void refreshNodeNeedAccessDB()  throws Exception{
		this.clear();
		try {
			if(this.getCompareStatus()==ComparedNode.NO_COMPARED) 
				refreshDDLInfo();
			else 
				refreshChangedProperties();
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	
	/**从数据库中获取数据对象比较后的结果*/
	abstract public void refreshChangedProperties() throws Exception;
	
	/**从数据库中获取数据对象定义*/
	abstract public void refreshDDLInfo() throws Exception;
	
	/**检查该对象的子节点的对象类型是否正确*/
	public abstract boolean chkChildType(XMLNode node);

	//public abstract InputStream getXmlStream();
	
	//public abstract PVNode getPVNode();

	public PVNode getPVNode(){
		PVNode node=new PVNode(this);

		/**添加子节点*/
		Enumeration enum=this.getDirectChildren();
		while(enum.hasMoreElements()){
			Hashtable list=(Hashtable)enum.nextElement();
			Enumeration enum1=list.elements();
			while(enum1.hasMoreElements()){
				XMLNode childNode=(XMLNode)enum1.nextElement();
				node.add(childNode.getPVNode());			
			}
		}
		
		/**设置图标*/
        //TreeEventProcess.displayNodeImg();
		
		return node;
	}
	
		
	public Enumeration getDirectChildren(){
		return container.getNodes();
	}

	/**
	 * 获取孩子节点
	 * */	
	public Hashtable getDirectChildren(int type){
		return container.getNodes(type);
	}
	
	/**
	 * 获取孩子节点
	 * */	
	public XMLNode getDirectChildren(int type,String name){
		//Logger.log(Logger.DEBUG,"getDirectChildren:"+type+":"+name);
		return container.getNodes(type,name);
	}
	
	/**
	 * 添加孩子节点
	 * */	
	public void addChild(XMLNode node) throws NodeException{
		//System.out.println(XMLNode.type2String(node.getType())+":"+node.getType()+":"+node.getName()+":"+node);
		if(chkChildType(node)){
			//System.out.println(XMLNode.type2String(node.getType())+":"+node.getType()+":"+node.getName()+":"+node);
			node.setParent(this);
			container.addNode(node);		
			//System.out.println(XMLNode.type2String(node.getType())+":"+node.getType()+":"+node.getName()+":"+node);
		}else throw new NodeException("Childnode type invalid."+type2String(this.getType())+":"+type2String(node.getType()));
	}
	
	/**
	 * 删除孩子节点
	 * */
	public void removeChild(XMLNode node){
		container.removeNode(node);
	}
		
	public String getName(){
		return name;
	}
	
	public XMLDatabase getDatabase(){		
		XMLNode node=this;
		while(node!=null&&node.getType()!=XMLNode.XML_DATABASE){
			node=node.getParent();
		}
		
		if(node!=null) return (XMLDatabase)node;
		return null;
	}
	
	public XMLSchema getSchema(){
		XMLNode node=this;
		while(node!=null&&node.getType()!=XMLNode.XML_SCHEMA){
			node=node.getParent();
		}
		
		if(node!=null) return (XMLSchema)node;
		return null;	
	}
	
	public XMLTable getTable(){

⌨️ 快捷键说明

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