📄 xmlnode.java
字号:
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 + -