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

📄 worker.java

📁 联合国农粮署牵头开发的geonetwork源代码最新版
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			if (usrGrps.size() == 0)				throw new Exception("No editor for metadata --> id:"+id);			String owner = ((Element) privil.get(0)).getChildText("id");			//--- no, ok we can store it			md.getChild("source").setText(newSiteId);			Element xml = XmlSerializer.select(oldDbms, "Metadata", id);			oldDbms.commit();			md.addContent(new Element("root")       .setText(xml.getName()));			md.addContent(new Element("isHarvested").setText("n"));			md.addContent(new Element("data")       .setText(Xml.getString(xml)));			md.addContent(new Element("owner")      .setText(owner));			md.addContent(new Element("groupOwner") .setText(groupOwner));			Lib.database.insert(newDbms, "Metadata", md, idMapper);			//--- we can have even milions of records so it is convenient to commit			//--- at each insert			newDbms.commit();			mdIds.add(id);		}		System.out.println("Migrated metadata : "+ mdIds.size());	}	//---------------------------------------------------------------------------	/** Migrates OperationAllowed */	private void migrateOperationAllowed(Dbms oldDbms, Dbms newDbms) throws SQLException	{		String query = "SELECT * FROM OperationAllowed WHERE operationId<>2 AND operationId<>4";		//--- copy metadata categories		List operAll = oldDbms.select(query).getChildren();		oldDbms.commit();		for (Object oa : operAll)		{			Element opAll = (Element) oa;			if (!mdIds.contains(opAll.getChildText("metadataid")))				continue;			Lib.database.insert(newDbms, "OperationAllowed", opAll, relationMapper);			//--- we can have even milions of records so it is convenient to commit			//--- at each insert			newDbms.commit();		}	}	//---------------------------------------------------------------------------	/** Migrates MetadataCateg */	private void migrateMetadataCateg(Dbms oldDbms, Dbms newDbms) throws SQLException	{		String query = "SELECT * FROM MetadataCateg";		//--- copy metadata categories		List oldMdCat = oldDbms.select(query).getChildren();		oldDbms.commit();		for (Object o : oldMdCat)		{			Element mdCat = (Element) o;			if (!mdIds.contains(mdCat.getChildText("metadataid")))				continue;			Lib.database.insert(newDbms, "MetadataCateg", mdCat, relationMapper);			//--- we can have even milions of records so it is convenient to commit			//--- at each insert			newDbms.commit();		}	}	//---------------------------------------------------------------------------	private void migrateSettings(Dbms newDbms) throws SQLException	{		String query = "UPDATE Settings SET value=? WHERE id=?";		//--- the following ids are taken from the Settings.ddf file		newDbms.execute(query, source.getNetwork(),    31);		newDbms.execute(query, source.getNetmask(),    32);		newDbms.execute(query, source.getPublicHost(), 21);		newDbms.execute(query, source.getPublicPort(), 22);		newDbms.execute(query, source.getZ3950Port(),  42);		newDbms.commit();	}	//---------------------------------------------------------------------------	private void restoreLocalizedRecords(Dbms newDbms) throws Exception	{		DdfLoader r = new DdfLoader();		//--- fix groups		LocalizFixer grp = new LocalizFixer();		r.setHandler(grp);		r.load(App.path + "/gast/setup/db/Groups.ddf");		LocalizFixer grpDes = new LocalizFixer();		r.setHandler(grpDes);		r.load(App.path + "/gast/setup/db/GroupsDes.ddf");		restoreLocalizedRecords(newDbms, "GroupsDes", grp, grpDes);		//--- fix categories		LocalizFixer cat = new LocalizFixer();		r.setHandler(cat);		r.load(App.path + "/gast/setup/db/Categories.ddf");		LocalizFixer catDes = new LocalizFixer();		r.setHandler(catDes);		r.load(App.path + "/gast/setup/db/CategoriesDes.ddf");		restoreLocalizedRecords(newDbms, "CategoriesDes", cat, catDes);	}	//---------------------------------------------------------------------------	private void restoreLocalizedRecords(Dbms dbms, String table, LocalizFixer base,												LocalizFixer des) throws SQLException	{		String query = "SELECT * FROM "+ table;		List records = dbms.select(query).getChildren();		for (Object r : records)		{			Element rec = (Element) r;			String idDes = rec.getChildText("iddes");			String lang  = rec.getChildText("langid");			String label = rec.getChildText("label");			String newId = getIdFromName(base, label);			if (newId != null)			{				label = getLabelFromId(des, newId, lang);				query = "UPDATE "+ table +" SET label=? WHERE idDes=? and langId=?";				dbms.execute(query, label, new Integer(idDes), lang);				dbms.commit();			}		}	}	//---------------------------------------------------------------------------	private int getIndex(LocalizFixer fl, String name)	{		for (int i=0; i<fl.fields.size(); i++)		{			ImportField field = fl.fields.get(i);			if (field.name.toLowerCase().equals(name.toLowerCase()))				return i;		}		return -1;	}	//---------------------------------------------------------------------------	private String getIdFromName(LocalizFixer lf, String name)	{		int idNDX   = getIndex(lf, "id");		int nameNDX = getIndex(lf, "name");		for (List<String> row : lf.rows)			if (row.get(nameNDX).equals(name))				return row.get(idNDX);		return null;	}	//---------------------------------------------------------------------------	private String getLabelFromId(LocalizFixer lf, String id, String lang)	{		int idDesNDX = getIndex(lf, "iddes");		int langNDX  = getIndex(lf, "langid");		int labelNDX = getIndex(lf, "label");		for (List<String> row : lf.rows)			if (row.get(idDesNDX).equals(id) && row.get(langNDX).equals(lang))				return row.get(labelNDX);		return null;	}	//---------------------------------------------------------------------------	//---	//--- Variables	//---	//---------------------------------------------------------------------------	private String      appPath;	private GNSource    source;	private Set<String> mdIds = new HashSet<String>();	private ProgressDialog dlg;	//---------------------------------------------------------------------------	private DatabaseLib.Mapper idMapper = new DatabaseLib.Mapper()	{		public Object map(String field, Object value)		{			if (field.equals("id"))				return new Integer(value.toString());			return value;		}	};	//---------------------------------------------------------------------------	private DatabaseLib.Mapper groupsMapper = new DatabaseLib.Mapper()	{		public Object map(String field, Object value)		{			if (field.equals("id"))				return new Integer(value.toString());			if (field.equals("referrer"))			{				String v = value.toString();				return (v.length() == 0) ? null : new Integer(v);			}			return value;		}	};	//---------------------------------------------------------------------------	private DatabaseLib.Mapper relationMapper = new DatabaseLib.Mapper()	{		public Object map(String field, Object value)		{			if (field.endsWith("id"))				return new Integer(value.toString());			return value;		}	};	//---------------------------------------------------------------------------	private DatabaseLib.Mapper userMapper = new DatabaseLib.Mapper()	{		public Object map(String field, Object value)		{			if (field.equals("id"))				return new Integer(value.toString());			if (field.equals("password"))				return Util.scramble(value.toString());			return value;		}	};}//==============================================================================class LocalizFixer implements DdfLoader.Handler{	//---------------------------------------------------------------------------	//---	//--- Handler interface	//---	//---------------------------------------------------------------------------	public void handleFields(List<ImportField> fields) throws Exception	{		this.fields = fields;	}	//---------------------------------------------------------------------------	public void handleRow(List<String> values) throws Exception	{		for (int i=0; i<values.size(); i++)			values.set(i, Codec.decodeString(values.get(i)));		rows.add(values);	}	//---------------------------------------------------------------------------	public void cleanUp() {}	//---------------------------------------------------------------------------	//---	//--- Variables	//---	//---------------------------------------------------------------------------	public List<ImportField>  fields;	public List<List<String>> rows = new ArrayList<List<String>>();}//==============================================================================

⌨️ 快捷键说明

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