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

📄 worker.java

📁 联合国农粮署牵头开发的geonetwork源代码最新版
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//==============================================================================//===	Copyright (C) 2001-2007 Food and Agriculture Organization of the//===	United Nations (FAO-UN), United Nations World Food Programme (WFP)//===	and United Nations Environment Programme (UNEP)//===//===	This program is free software; you can redistribute it and/or modify//===	it under the terms of the GNU General Public License as published by//===	the Free Software Foundation; either version 2 of the License, or (at//===	your option) any later version.//===//===	This program is distributed in the hope that it will be useful, but//===	WITHOUT ANY WARRANTY; without even the implied warranty of//===	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU//===	General Public License for more details.//===//===	You should have received a copy of the GNU General Public License//===	along with this program; if not, write to the Free Software//===	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA//===//===	Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,//===	Rome - Italy. email: geonetwork@osgeo.org//==============================================================================package org.fao.gast.gui.panels.migration.oldinst;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import jeeves.resources.dbms.Dbms;import jeeves.utils.Util;import jeeves.utils.Xml;import org.dlib.gui.ProgressDialog;import org.fao.gast.app.App;import org.fao.gast.lib.DatabaseLib;import org.fao.gast.lib.Lib;import org.fao.gast.lib.Resource;import org.fao.gast.lib.druid.Codec;import org.fao.gast.lib.druid.DdfLoader;import org.fao.gast.lib.druid.ImportField;import org.fao.geonet.kernel.XmlSerializer;import org.jdom.Element;//==============================================================================public class Worker implements Runnable{	//---------------------------------------------------------------------------	//---	//--- Constructor	//---	//---------------------------------------------------------------------------	public Worker(ProgressDialog d)	{		dlg = d;	}	//---------------------------------------------------------------------------	//---	//--- API methods	//---	//---------------------------------------------------------------------------	public void setOldDir(String dir)	{		appPath = dir;	}	//---------------------------------------------------------------------------	//---	//--- Migration process	//---	//---------------------------------------------------------------------------	public void run()	{		if (!openSource())			return;		Resource oldRes = null;		Resource newRes = null;		try		{			oldRes = source.config.createResource();			newRes = Lib.config.createResource();			executeJob((Dbms) oldRes.open(), (Dbms) newRes.open());		}		catch(Throwable t)		{			Lib.gui.showError(dlg, t);		}		finally		{			if (oldRes != null)				oldRes.close();			if (newRes != null)				newRes.close();			dlg.stop();		}	}	//---------------------------------------------------------------------------	private boolean openSource()	{		try		{			source = new GNSource(appPath);			return true;		}		catch (Exception e)		{			Lib.gui.showError(dlg, 	"It seems that the specified folder does not \n"+											"contain an old GeoNetwork installation");			return false;		}	}	//---------------------------------------------------------------------------	private void executeJob(Dbms oldDbms, Dbms newDbms) throws Exception	{		dlg.reset(9);		dlg.advance("Removing data in new installation");		removeAll(newDbms);		Set<String> langs = getLanguages(newDbms);		dlg.advance("Migrating users");		migrateUsers(oldDbms, newDbms);		dlg.advance("Migrating groups");		migrateGroups(oldDbms, newDbms, langs);		dlg.advance("Migrating categories");		migrateCategories(oldDbms, newDbms, langs);		dlg.advance("Migrating metadata");		migrateMetadata(oldDbms, newDbms);		dlg.advance("Migrating privileges");		migrateOperationAllowed(oldDbms, newDbms);		dlg.advance("Migrating metadata categories");		migrateMetadataCateg(oldDbms, newDbms);		dlg.advance("Migrating settings");		migrateSettings(newDbms);		dlg.advance("Restoring localized labels");		restoreLocalizedRecords(newDbms);		Lib.metadata.clearIndexes();	}	//---------------------------------------------------------------------------	private void removeAll(Dbms newDbms) throws SQLException	{		//--- we commit at each step because an old migration could have failed and		//--- we could have plenty of records		newDbms.execute("DELETE FROM OperationAllowed");		newDbms.commit();		newDbms.execute("DELETE FROM UserGroups");		newDbms.commit();		newDbms.execute("DELETE FROM MetadataCateg");		newDbms.commit();		newDbms.execute("DELETE FROM Users");		newDbms.commit();		newDbms.execute("DELETE FROM Metadata");		newDbms.commit();		newDbms.execute("DELETE FROM GroupsDes");		newDbms.execute("DELETE FROM Groups");		newDbms.commit();		newDbms.execute("DELETE FROM CategoriesDes");		newDbms.execute("DELETE FROM Categories");		newDbms.commit();	}	//---------------------------------------------------------------------------	private Set<String> getLanguages(Dbms newDbms) throws SQLException	{		List langs = newDbms.select("SELECT * FROM Languages").getChildren();		Set<String> set = new HashSet<String>();		for (Object l : langs)		{			Element lang = (Element) l;			set.add(lang.getChildText("id"));		}		newDbms.commit();		return set;	}	//---------------------------------------------------------------------------	private void migrateUsers(Dbms oldDbms, Dbms newDbms) throws SQLException	{		String query = "SELECT * FROM Users";		List oldUsers = oldDbms.select(query).getChildren();		//--- copy users		for (Object user : oldUsers)			Lib.database.insert(newDbms, "Users", (Element) user, userMapper);		oldDbms.commit();		newDbms.commit();	}	//---------------------------------------------------------------------------	/** Migrates Groups, UserGroups */	private void migrateGroups(Dbms oldDbms, Dbms newDbms, Set<String> langs) throws SQLException	{		String query1 = "SELECT * FROM Groups";		String query2 = "SELECT * FROM UserGroups";		List oldGroups = oldDbms.select(query1).getChildren();		//--- copy groups		for (Object g : oldGroups)		{			Element group = (Element) g;			String  id    = group.getChildText("id");			String  label = group.getChildText("name");			Lib.database.insert(newDbms, "Groups", group, groupsMapper);			Lib.database.insert(newDbms, "GroupsDes", langs, id, label);		}		//--- copy user groups		List oldUsrGrp = oldDbms.select(query2).getChildren();		for (Object usrGrp : oldUsrGrp)			Lib.database.insert(newDbms, "UserGroups", (Element) usrGrp, relationMapper);		oldDbms.commit();		newDbms.commit();	}	//---------------------------------------------------------------------------	/** Migrates Categories */	private void migrateCategories(Dbms oldDbms, Dbms newDbms, Set<String> langs) throws SQLException	{		String query = "SELECT * FROM Categories";		List categs = oldDbms.select(query).getChildren();		//--- copy categories		for (Object c : categs)		{			Element categ = (Element) c;			String  id    = categ.getChildText("id");			String  label = categ.getChildText("name");			Lib.database.insert(newDbms, "Categories", categ, idMapper);			Lib.database.insert(newDbms, "CategoriesDes", langs, id, label);		}		oldDbms.commit();		newDbms.commit();	}	//---------------------------------------------------------------------------	private void migrateMetadata(Dbms oldDbms, Dbms newDbms) throws Exception	{		String query = "SELECT id, uuid, schemaId, isTemplate, createDate, "+							"       lastChangeDate as changeDate, source "+							"FROM   Metadata";		List metadata = oldDbms.select(query).getChildren();		String oldSiteId = source.getSiteId();		String newSiteId = Lib.site.getSiteId(newDbms);		oldDbms.commit();		newDbms.commit();		mdIds.clear();		//--- copy metadata		for (Object m : metadata)		{			Element md     = (Element) m;			String  id     = md.getChildText("id");			String  source = md.getChildText("source");			//--- has the old metadata been harvested ?			if (!oldSiteId.equals(source))				continue;			//--- calculate owner and group owner			query = "SELECT groupId FROM OperationAllowed WHERE metadataId=? AND operationId=4";			List privil = oldDbms.select(query, new Integer(id)).getChildren();			oldDbms.commit();			if (privil.size() == 0)				throw new Exception("Metadata has no admin privilege --> id:"+id);			String groupOwner = ((Element) privil.get(0)).getChildText("groupid");			query = "SELECT DISTINCT id FROM Users, UserGroups WHERE id=userId AND profile='Editor' AND groupId=?";			List usrGrps = oldDbms.select(query, new Integer(groupOwner)).getChildren();			oldDbms.commit();

⌨️ 快捷键说明

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