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

📄 metadatasync.java.svn-base

📁 由国外的一个著名的geonetwork修改而来
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
//=============================================================================//===	Copyright (C) 2001-2005 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//===//===	Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,//===	Rome - Italy. email: GeoNetwork@fao.org//==============================================================================package org.fao.geonet.schedules;import java.util.HashSet;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Vector;import jeeves.constants.Jeeves;import jeeves.interfaces.Schedule;import jeeves.resources.dbms.Dbms;import jeeves.server.ServiceConfig;import jeeves.server.context.ScheduleContext;import jeeves.utils.Util;import jeeves.utils.Xml;import jeeves.xml.XmlRequest;import org.fao.geonet.GeonetContext;import org.fao.geonet.constants.Edit;import org.fao.geonet.constants.Geonet;import org.fao.geonet.kernel.AccessManager;import org.fao.geonet.kernel.DataManager;import org.fao.geonet.util.ISODate;import org.jdom.Element;//=============================================================================public class MetadataSync implements Schedule{	private class Attr	{		private static final String ID   = "id";		private static final String NAME = "name";	}	//--------------------------------------------------------------------------	private class Elem	{		private static final String SITES          ="sites";		private static final String    GENERAL     = "general";		private static final String       HOST     = "host";		private static final String       PORT     = "port";		private static final String       LANGUAGE = "lang";		private static final String       USERNAME = "username";		private static final String       PASSWORD = "password";		private static final String    SERVICES    = "services";		private static final String       LOGIN    = "login";		private static final String       LOGOUT   = "logout";	//	private static final String       SEARCH   = "search"; // same as SEARCH		private static final String       GET      = "get";		private static final String    SEARCH      = "search";		private static final String    GROUP       = "group";		private static final String    	PRIVILEGE = "privilege";	};	//--------------------------------------------------------------------------	private Vector veSites = new Vector();	//--------------------------------------------------------------------------	//---	//--- Init	//---	//--------------------------------------------------------------------------	public void init(String appPath, ServiceConfig params) throws Exception	{		for(Iterator sites = params.getChildren(Elem.SITES); sites.hasNext();)		{			Element  site = (Element) sites.next();			SiteInfo si   = new SiteInfo();			Element general  = Util.getChild(site, Elem.GENERAL);			Element services = Util.getChild(site, Elem.SERVICES);			si.name     = Util.getAttrib(site, Attr.NAME);			si.host     = Util.getParam(general, Elem.HOST);			si.port     = Integer.parseInt(Util.getParam(general, Elem.PORT, "80"));			si.language = Util.getParam(general, Elem.LANGUAGE, "en");			si.username = Util.getParam(general, Elem.USERNAME, "");			si.password = Util.getParam(general, Elem.PASSWORD, "");			si.login  = Util.getParam(services, Elem.LOGIN);			si.logout = Util.getParam(services, Elem.LOGOUT);			si.search = Util.getParam(services, Elem.SEARCH);			si.get    = Util.getParam(services, Elem.GET);			//--- setup search queries			for(Iterator q=site.getChildren(Elem.SEARCH).iterator(); q.hasNext(); )			{				Element query = (Element) q.next();				query = (Element) query.clone();				query.setName(Jeeves.Elem.REQUEST);				si.queries.add(query);			}			//--- setup group privileges			for(Iterator g=site.getChildren(Elem.GROUP).iterator(); g.hasNext(); )			{				Element group = (Element) g.next();				Group grp = new Group();				grp.groupId = Util.getAttrib(group, Attr.ID);				si.groups.add(grp);				for(Iterator p=group.getChildren(Elem.PRIVILEGE).iterator(); p.hasNext();)				{					String priv = ((Element) p.next()).getValue();					int numPriv = AccessManager.getPrivilegeId(priv);					if (numPriv == -1)						throw new IllegalArgumentException("Unknown privilege : "+ priv);					grp.privileges.add(new Integer(numPriv));				}			}			veSites.add(si);		}	}	//--------------------------------------------------------------------------	//---	//--- Schedule	//---	//--------------------------------------------------------------------------	public void exec(ScheduleContext context) throws Exception	{		GeonetContext gc = (GeonetContext) context.getHandlerContext(Geonet.CONTEXT_NAME);		DataManager dataMan = gc.getDataManager();		Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB);		CategMapping mapCategories = new CategMapping(dbms);		for(Iterator i=veSites.iterator(); i.hasNext();)		{			SiteInfo si = (SiteInfo) i.next();			XmlRequest req = new XmlRequest(si.host, si.port);			req.setSiteName(si.name);			req.setLanguage(si.language);			//--- login			if (!si.username.equals(""))			{				context.info("Logging in to : "+ si.name);				req.addParam("username", si.username);				req.addParam("password", si.password);				req.execute(si.login);			}			//--- search			for(Iterator j=si.queries.iterator(); j.hasNext(); )			{				Element params = (Element) j.next();				context.info("Searching on : "+ si.name);				req.clearParams();				req.setParams(params);				Element result = req.execute(si.search);				context.debug("Obtained:\n"+Xml.getString(result));				//--- alignment				String siteId = params.getChildText("siteId");				if (siteId == null)				{					context.error("Missing 'siteId' parameter in search query");					throw new IllegalArgumentException("Missing 'siteId' parameter in search query");				}				alignSite(context, dataMan, dbms, result, si, req, mapCategories, siteId);			}			//--- logout			if (!si.username.equals(""))			{				context.info("Logging out from : "+ si.name);				req.clearParams();				req.execute(si.logout);			}		}	}	//--------------------------------------------------------------------------	//---	//--- Alignment method	//---	//--------------------------------------------------------------------------	private void alignSite(ScheduleContext context, DataManager dm, Dbms dbms,								  Element result, SiteInfo si, XmlRequest req,								  CategMapping mapCategories, String siteId) throws Exception	{		context.info("Start of alignment for site-id : "+ siteId);		List mdList = result.getChildren("metadata");		//-----------------------------------------------------------------------		//--- retrieve local uuids for given site-id		UuidMapping mapUuid = new UuidMapping(dbms, siteId);		//-----------------------------------------------------------------------		//--- remove old metadata		for (Iterator i=mapUuid.getUuids(); i.hasNext();)		{			String uuid = (String) i.next();			if (!exists(mdList, uuid))			{				String id = mapUuid.getId(uuid);				dm.deleteMetadata(dbms, id);				dbms.commit();				context.debug("  - Removed metadata with id="+ id);			}		}		//-----------------------------------------------------------------------		//--- insert/update new metadata		for(Iterator i=mdList.iterator(); i.hasNext(); )		{			Element elInfo = ((Element) i.next()).getChild("info", Edit.NAMESPACE);			String remoteId  = elInfo.getChildText("id");			String remoteUuid= elInfo.getChildText("uuid");			String schema    = elInfo.getChildText("schema");			String createDate= elInfo.getChildText("createDate");			String changeDate= elInfo.getChildText("changeDate");			List catList = elInfo.getChildren("category");			context.debug("Obtained remote id="+ remoteId +", changeDate="+ changeDate);			if (!dm.existsSchema(schema))				context.debug("  - Skipping unsupported schema : "+ schema);			else			{				String id = getLocalId(dbms, remoteUuid);				if (id == null)				{					//--- inserting new metadata					id = dm.insertMetadataExt(dbms, schema, getRemoteMetadata(req, remoteId, si),													  context.getSerialFactory(), siteId,													  createDate, changeDate, remoteUuid, null);

⌨️ 快捷键说明

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