📄 compareframe.java
字号:
/**
* 窗口关闭时必须调用的事件
*/
public void close() {
Logger.log(Logger.DEBUG_INT, "主窗口退出,调用退出方法,对某些进程作清理。");
for (int i = 0; i < this.jScrollPane.getViewport().getComponentCount(); i++) {
RightPanel view = (RightPanel) this.jScrollPane.getViewport().getComponent(
i);
view.close();
}
}
/**
* 调用的右面板的刷新事件
*/
public void refreshButtonCall() {
Logger.log(Logger.INFO, "refreshButtonCall");
if (this.selectedTreeView.getSelectedNode() != null)
this.selectedTreeView.selectedNodeRefresh();
}
/**
* @return Returns the jsp.
*/
public JScrollPane getJsp() {
return jScrollPane;
}
public static void main(String[] args) {
//设置字体
Font font = new Font("宋体", 0, 13);
String names[] = {"Label", "CheckBox", "PopupMenu", "TextPane",
"MenuItem", "CheckBoxMenuItem", "JRadioButtonMenuItem",
"ComboBox", "Button", "JButton", "Tree", "ScrollPane",
"TabbedPane", "EditorPane", "TitledBorder", "Menu", "TextArea",
"OptionPane", "JOptionPane", "MenuBar", "ToolBar",
"ToggleButton", "ToolTip", "ProgressBar", "TableHeader",
"Panel", "List", "ColorChooser", "PasswordField", "JTextField",
"Table", "JLabel", "Viewport", "RadioButtonMenuItem",
"JTextField", "JOptionPane", "RadioButton"};
for (int i = 0; i < names.length; i++)
UIManager.put(names[i] + ".font", font);
// compareFrame mainFrame = compareFrame.getInstance();
CompareFrame frame = new CompareFrame();
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.show();
}
/**
* read initial file and add databases to manager
*
*/
public void LoadDBFromInitfile() {
//从配置文件中读取数据库信息,删除XMLDatabase对象
//manager.clear();
//this.treeView.removeAll();
this.selectedTreeView.managerClear();
ConfigFile file =null;
if(this.selectedTreeView.getCompareStatus()==ComparedNode.NO_COMPARED){
file = new ConfigFile(GlobalParameters.ddlDBConfig);
}else{
file = new ConfigFile(GlobalParameters.compareDBConfig);
}
Object[] sections = file.getAllSection();
for (int i = 0; i < sections.length; i++) {
if (file.hasSection(sections[i].toString())) {
FileDb filedb = file.getFileDb(sections[i].toString());
//Logger.log(Logger.DEBUG,"在树添加数据库节点:"+filedb.getDbName());
//XMLDatabase db = null;
try {
XMLDatabase db = new XMLDatabase(filedb.getIP(), Integer
.parseInt(filedb.getPort()), filedb.getDbName(),
filedb.getUserName(), filedb.getPassword());
addDatabase(db);
} catch (Exception e) {
Logger.log(Logger.ERROR, e.getMessage());
//e.printStackTrace();
}
} else {
continue;
}
}
}
/**
* Returns the tree.
*
* @return JPVTree public JPVTree getTree() { return
* this.treeView.getTree(); }
*/
/**
* contruct JPVTree
*/
private void constructTree() {
//manager.addChild(db);
XMLManager manager= new XMLManager("源数据库");
treeSource = new MyTree(manager,manager.getTree(), this);
this.selectedTreeView=treeSource;
XMLManager managerB= new XMLManager("目标数据库");
treeDest = new MyTree(managerB,managerB.getTree(), this);
XMLManager managerC= new XMLManager("数据库比较结果");
treeCompared = new MyTree(managerC,managerC.getTree(), this,ComparedNode.COMPARED);
//treeView.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
//treeView.setViewportBorder(BorderFactory.createEtchedBorder());
}
/**
* contruct JPVTree
*/
public void addDatabase(XMLDatabase db) throws Exception {
//db.setPlatform();
//db.setVersion();
/**
manager.addChild(db);
this.selectedTreeView.getTree().addNode(db.getPVNode());
**/
this.selectedTreeView.addDatabase(db);
}
public void removeDatabase(PVNode db) {
/**
XMLDatabase xmldb = (XMLDatabase) db.getUserObject();
manager.removeChild(xmldb);
this.selectedTreeView.getTree().removeNode(db);
**/
this.selectedTreeView.removeDatabase(db);
}
/**
* Returns the treeView.
*
* @return JPVTreeView
*/
public MyTree getTreeSource() {
return treeSource;
}
/**
* Sets the statusInfo.
*
* @param statusInfo
* The statusInfo to set
*/
public void setStatusInfo(String statusInfo) {
this.statusInfo.setText(statusInfo);
}
//如果节点的信息改变,则把右侧面板上的内容移去
public void removeRightPanel() {
for (int i = 0; i < getJsp().getViewport().getComponentCount(); i++) {
RightPanel view = (RightPanel) getJsp().getViewport().getComponent(
i);
view.close();
}
}
//为Frame添加新的面板
public void addRightPanel(RightPanel RPchoice) {
getJsp().getViewport().removeAll();
//remove previous ui panel
//this just switches between 3 different Vectors
//and passes the one you select to the Builder pattern
Logger.log(Logger.INFO_INT, "selectedNode:"
+ this.selectedTreeView.getSelectedNode());
setStatusInfo("Current selected node is: "
+ ((XMLNode) this.selectedTreeView.getSelectedNode().getUserObject())
.getName());
//get one of the UIs
getJsp().getViewport().add(RPchoice.getJPanel());
//insert in right panel
getJsp().getViewport().validate(); //re-layout and display
getJsp().getViewport().repaint();
}
public void selectedNodeRefresh() {
this.selectedTreeView.selectedNodeRefresh();
}
public void selectedNodeExport() {
this.selectedTreeView.selectedNodeExport();
}
/**
* Returns the expFile.
*
* @return File
*/
public File getExpFile() {
return expFile;
}
/**
* Sets the expFile.
*
* @param expFile
* The expFile to set
*/
public void setExpFile(File expFile) {
this.expFile = expFile;
}
public void setSelectedTree(MyTree tree){
this.selectedTreeView=tree;
}
/**
* Returns the selectedTreeView.
* @return MyTree
*/
public MyTree getSelectedTree() {
return selectedTreeView;
}
/**
* Returns the treeDest.
* @return MyTree
*/
public MyTree getTreeDest() {
return treeDest;
}
/**
* Returns the treeCompared.
* @return MyTree
*/
public MyTree getTreeCompared() {
return treeCompared;
}
public XMLSchema getSelectedSrcXMLSchema() throws UIException{
if(srcXMLSchema!=null){
return srcXMLSchema;
}else{
//Logger.log(Logger.INFO,"RESULT XMLDB:"+this.resultXMLDB);
//Logger.log(Logger.INFO,"Source DB:"+this.resultXMLDB.getSrcUrl());
XMLDatabase srcDB=this.treeSource.getXMLDatabase(this.resultXMLDB.getSrcUrl());
//Logger.log(Logger.INFO,"Source DB:"+srcDB);
//srcDB.printChildren();
if(srcDB!=null){
XMLSchemas srcSchemas=(XMLSchemas)srcDB.getDirectChildren(XMLNode.XML_SCHEMAS,XMLSchemas.NAME);
//srcSchemas.printChildren();
//Logger.log(Logger.INFO,"Source XMLSchemas:"+srcSchemas);
if(srcSchemas!=null){
//Logger.log(Logger.INFO,"Source XMLSchema:"+this.resultXMLDB.getSrcUser());
srcXMLSchema=(XMLSchema)srcSchemas.getDirectChildren(XMLNode.XML_SCHEMA,this.resultXMLDB.getSrcUser());
}
}
}
if(srcXMLSchema==null) throw new UIException("没有选中源模式");
else return srcXMLSchema;
}
public XMLSchema getSelectedDstXMLSchema() throws UIException{
if(dstXMLSchema!=null){
return dstXMLSchema;
}else{
//Logger.log(Logger.INFO,"RESULT XMLDB:"+this.resultXMLDB);
//Logger.log(Logger.INFO,"Destination DB:"+this.resultXMLDB.getDstUrl());
XMLDatabase dstDB=this.treeDest.getXMLDatabase(this.resultXMLDB.getDstUrl());
//Logger.log(Logger.INFO,"Destination DB:"+dstDB);
//dstDB.printChildren();
if(dstDB!=null){
XMLSchemas dstSchemas=(XMLSchemas)dstDB.getDirectChildren(XMLNode.XML_SCHEMAS,XMLSchemas.NAME);
//dstSchemas.printChildren();
//Logger.log(Logger.INFO,"Destination XMLSchemas:"+dstSchemas);
if(dstSchemas!=null){
//Logger.log(Logger.INFO,"Destination XMLSchema:"+this.resultXMLDB.getDstUser());
dstXMLSchema=(XMLSchema)dstSchemas.getDirectChildren(XMLNode.XML_SCHEMA,this.resultXMLDB.getDstUser());
}
}
}
if(dstXMLSchema==null) throw new UIException("没有选中目标模式");
else return dstXMLSchema;
}
/**
* 进行数据库比较的方法
* @param source 记录源对象的位置
* @param dest 记录目标对象的位置
* @param dbResult 记录数据对象比较后的结果
* */
public void compareNode(XMLNode source,XMLNode dest,XMLDatabase dbResult) throws Exception{
XMLDatabase dbSource=source.getDatabase();
XMLDatabase dbDest=dest.getDatabase();
String OwnerA=null;
String OwnerB=null;
if(source.getType()==XMLNode.XML_SCHEMA&&dest.getType()==XMLNode.XML_SCHEMA){
OwnerA=source.getName();
OwnerB=dest.getName();
}
srcDao=new DAO(dbSource.getUrl(),dbSource.getDBUser(),dbSource.getDBPassword(),dbSource.getDriverClassName());
desDao=new DAO(dbDest.getUrl(),dbDest.getDBUser(),dbDest.getDBPassword(),dbDest.getDriverClassName());
storageDao=new DAO(dbResult.getUrl(),dbResult.getDBUser(),dbResult.getDBPassword(),dbResult.getDriverClassName());
recordComparedDBs(dbSource.getUrl(),OwnerA,dbDest.getUrl(),OwnerB,dbResult);
XMLReader.start();
DbCompare dbComp = new DbCompare(srcDao,desDao,storageDao);
String compScope = scope;
dbComp.prepareComp(compScope,0,Context.getRoot());
String owner = OwnerA+","+OwnerB;
dbComp.doCompare(owner);
Logger.log(Logger.DEBUG,"数据库比较已完成!");
//System.out.println(DbCompare.scanResult);
//System.out.println("已完成!");
//Vector v = new Vector();
}
/**
* 记录源数据库和目标数据库的位置
* */
public void recordComparedDBs(String srcUrl,String srcSchema,String dstUrl,String dstSchema,XMLDatabase dbResult){
JDBCPool cnn=null;
String sqlstr="insert into compare_db(SRC_DB_NAME,SRC_OWNER,DST_DB_NAME,DST_OWNER) values(?,?,?,?)";
if(dbResult!=null){
try {
cnn = dbResult.getConnPool();
PreparedStatement pstmt=cnn.prepareStatement(sqlstr);
pstmt.setString(1,srcUrl);
pstmt.setString(2,srcSchema);
pstmt.setString(3,dstUrl);
pstmt.setString(4,dstSchema);
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
else return;
}
/**
* 将存储数据库比较结果的表全部清空
* */
public void clearCompareDB() throws Exception{
XMLNode node=(XMLNode)treeCompared.getSelectedNode().getUserObject();
String truncateSql="BEGIN ? := FUNC_INITIAL(); END;";
JDBCPool cnn=null;
try {
//XMLManager.getInstance().
XMLDatabase db=node.getDatabase();
if(JDBCPoolManager.getInstance().isDebug())
System.out.println(this.getClass().toString());
if(db!=null) cnn = db.getConnPool();
else return;
CallableStatement cStmt = cnn.prepareCall(truncateSql);
cStmt.registerOutParameter(1,Types.VARCHAR);
cStmt.executeUpdate();
cStmt.close();
} catch (Exception e) {
e.printStackTrace();
Logger.log(Logger.ERROR,e.getMessage());
throw e;
}
}
/**
* 将比较后的结果的进行重新整理
* */
public void reviewCompareDB() throws Exception{
XMLNode node=(XMLNode)treeCompared.getSelectedNode().getUserObject();
String truncateSql="BEGIN ? := FUNC_CLEAN_TABLES(); END;";
JDBCPool cnn=null;
XMLDatabase db=node.getDatabase();
if(db!=null) cnn = db.getConnPool();
else return;
CallableStatement cStmt = cnn.prepareCall(truncateSql);
cStmt.registerOutParameter(1,Types.VARCHAR);
cStmt.executeUpdate();
}
public void compareDB(){
if(treeSource.getSelectedNode()==null){
MessageBox.showErr(CompareFrame.getInstance(),"请选择源数据对象");
return;
}
XMLNode source=(XMLNode)treeSource.getSelectedNode().getUserObject();
if(treeDest.getSelectedNode()==null){
MessageBox.showErr(CompareFrame.getInstance(),"请选择目标数据对象");
return;
}
XMLNode dest=(XMLNode)treeDest.getSelectedNode().getUserObject();
if(treeCompared.getSelectedNode()==null){
MessageBox.showErr(CompareFrame.getInstance(),"请选择保存比较结果的数据库");
return;
}
XMLDatabase result=((XMLNode)treeCompared.getSelectedNode().getUserObject()).getDatabase();
if((source.getType()!=XMLNode.XML_SCHEMA)||(dest.getType()!=XMLNode.XML_SCHEMA)){
MessageBox.showErr(CompareFrame.getInstance(),"目前只能进行SCHEMA间的比较");
return;
}else if(result==null){
MessageBox.showErr(CompareFrame.getInstance(),"没有选择结果数据库");
return;
}
srcXMLSchema=(XMLSchema)source;
dstXMLSchema=(XMLSchema)dest;
resultXMLDB=result;
final DeamonThread mainthread = new DeamonThread() {
public void run() {
try {
clearCompareDB();
compareNode(srcXMLSchema,dstXMLSchema,resultXMLDB);
Logger.log(Logger.INFO,"Finish compareNode");
ConstraintCompare cc=new ConstraintCompare(srcXMLSchema,dstXMLSchema,resultXMLDB);
cc.process();
ForeignKeyCompare fc=new ForeignKeyCompare(srcXMLSchema,dstXMLSchema,resultXMLDB);
fc.process();
Logger.log(Logger.INFO,"Finish ConstraintCompare");
reviewCompareDB();
Logger.log(Logger.INFO,"reviewCompareDB");
//treeCompared.selectedNodeRefresh();
running=false;
} catch (Exception e) {
MessageBox.showErr(CompareFrame.getInstance(),e.getMessage());
e.printStackTrace();
}finally{
running=false;
}
}
};
mainthread.start();
WaitingDlg dlg = new WaitingDlg(this, mainthread,"The selected schemas is being compared...");
dlg.showInParentMiddle();
}
/**
* Returns the dstXMLSchema.
* @return XMLSchema
*/
public XMLSchema getDstXMLSchema() {
return dstXMLSchema;
}
/**
* Returns the resultXMLDB.
* @return XMLDatabase
*/
public XMLDatabase getResultXMLDB() {
return resultXMLDB;
}
/**
* Returns the srcXMLSchema.
* @return XMLSchema
*/
public XMLSchema getSrcXMLSchema() {
return srcXMLSchema;
}
/**
* Sets the dstXMLSchema.
* @param dstXMLSchema The dstXMLSchema to set
*/
public void setDstXMLSchema() {
XMLNode dest=(XMLNode)treeDest.getSelectedNode().getUserObject();
this.dstXMLSchema = (XMLSchema)dest;
}
/**
* Sets the resultXMLDB.
* @param resultXMLDB The resultXMLDB to set
*/
public void setResultXMLDB() {
XMLDatabase result=((XMLNode)treeCompared.getSelectedNode().getUserObject()).getDatabase();
this.resultXMLDB = result;
}
/**
* Sets the srcXMLSchema.
* @param srcXMLSchema The srcXMLSchema to set
*/
public void setSrcXMLSchema() {
XMLNode source=(XMLNode)treeSource.getSelectedNode().getUserObject();
this.srcXMLSchema = (XMLSchema)source;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -