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

📄 compareframe.java

📁 导出ORACLE数据库对象DDL语句的程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

	/**
	 * 窗口关闭时必须调用的事件
	 */
	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 + -