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

📄 datamanager.java

📁 联合国农粮署牵头开发的geonetwork源代码最新版
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
		manageThumbnail(dbms, id, small, env, Geonet.File.UNSET_THUMBNAIL);	}	//--------------------------------------------------------------------------	private void manageThumbnail(Dbms dbms, String id, boolean small, Element env,										  String styleSheet) throws Exception	{		Element md = XmlSerializer.select(dbms, "Metadata", id);		if (md == null)			return;		md.detach();		String schema = getMetadataSchema(dbms, id);		//-----------------------------------------------------------------------		//--- remove thumbnail from metadata		//--- setup environment		String type = small ? "thumbnail" : "large_thumbnail";		env.addContent(new Element("type").setText(type));		//--- setup root element		Element root = new Element("root");		root.addContent(md);		root.addContent(env);		//--- do an XSL  transformation		styleSheet = editLib.getSchemaDir(schema) + styleSheet;		md = Xml.transform(root, styleSheet);		XmlSerializer.update(dbms, id, md);		//--- update search criteria		indexMetadata(dbms, id);	}	//--------------------------------------------------------------------------	//---	//--- Privileges API	//---	//--------------------------------------------------------------------------	/** Adds a permission to a group. Metadata is not reindexed	  */	public void setOperation(Dbms dbms, String mdId, String grpId, String opId) throws Exception	{		Object args[] = { new Integer(mdId), new Integer(grpId), new Integer(opId) };		String query = "SELECT metadataId FROM OperationAllowed " +							"WHERE metadataId=? AND groupId=? AND operationId=?";		Element elRes = dbms.select(query, args);		if (elRes.getChildren().size() == 0)			dbms.execute("INSERT INTO OperationAllowed(metadataId, groupId, operationId) " +							 "VALUES(?,?,?)", args);	}	//--------------------------------------------------------------------------	public void unsetOperation(Dbms dbms, int mdId, int groupId, int operId) throws Exception	{		String query = "DELETE FROM OperationAllowed "+							"WHERE metadataId=? AND groupId=? AND operationId=?";		dbms.execute(query, mdId, groupId, operId);	}	//--------------------------------------------------------------------------	//---	//--- Categories API	//---	//--------------------------------------------------------------------------	/** Adds a category to a metadata. Metadata is not reindexed	  */	public void setCategory(Dbms dbms, String mdId, String categId) throws Exception	{		Object args[] = { new Integer(mdId), new Integer(categId) };		if (!isCategorySet(dbms, mdId, categId))			dbms.execute("INSERT INTO MetadataCateg(metadataId, categoryId) VALUES(?,?)", args);	}	//--------------------------------------------------------------------------	public boolean isCategorySet(Dbms dbms, String mdId, String categId) throws Exception	{		String query = "SELECT metadataId FROM MetadataCateg " +"WHERE metadataId=? AND categoryId=?";		Element elRes = dbms.select(query, new Integer(mdId), new Integer(categId));		return (elRes.getChildren().size() != 0);	}	//--------------------------------------------------------------------------	public void unsetCategory(Dbms dbms, String mdId, String categId) throws Exception	{		String query = "DELETE FROM MetadataCateg WHERE metadataId=? AND categoryId=?";		dbms.execute(query, new Integer(mdId), new Integer(categId));	}	//--------------------------------------------------------------------------	public Element getCategories(Dbms dbms, String mdId) throws Exception	{		String query = "SELECT id, name FROM Categories, MetadataCateg "+							"WHERE id=categoryId AND metadataId=?";		return dbms.select(query, new Integer(mdId));	}	//--------------------------------------------------------------------------	//---	//--- Private methods	//---	//--------------------------------------------------------------------------	/** Used for editing : swaps children of 2 tags	  */	private void swapElements(Element el1, Element el2)	{		if (el1.getChildren().size() != 0)		{			Vector v1 = collectElements(el1);			Vector v2 = collectElements(el2);			addElements(el1, v2);			addElements(el2, v1);		}		else		{			//--- swap text			String sValue1 = el1.getText();			String sValue2 = el2.getText();			el1.setText(sValue2);			el2.setText(sValue1);		}	}	//--------------------------------------------------------------------------	/** Collects all children of a tag, removing them from the parent	  */	private Vector collectElements(Element el)	{		Vector v = new Vector();		List list = el.getChildren();		for(int i=0; i<list.size(); i++)			v.add(list.get(i));		el.removeContent();		return v;	}	//--------------------------------------------------------------------------	/** Add all tags in a vector to a tag	  */	private void addElements(Element el, Vector v)	{		for(int i=0; i<v.size(); i++)			el.addContent((Element) v.get(i));	}	//--------------------------------------------------------------------------	private Element updateFixedInfo(String schema, String id, Element md, Dbms dbms) throws Exception	{		String query = "SELECT uuid, source, isTemplate FROM Metadata WHERE id = " + id;		Element rec = dbms.select(query).getChild("record");		String isTemplate = rec.getChildText("istemplate");		// don't process templates		if (isTemplate.equals("n"))		{			String uuid = rec.getChildText("uuid");			return updateFixedInfo(schema, id, md, uuid);		}		else return md;	}	//--------------------------------------------------------------------------	public Element updateFixedInfo(String schema, String id, Element md, String uuid) throws Exception	{		//--- setup environment		Element env = new Element("env");		env.addContent(new Element("id")        .setText(id));		env.addContent(new Element("uuid")      .setText(uuid));		env.addContent(new Element("changeDate").setText(new ISODate().toString()));		env.addContent(new Element("siteURL")   .setText(getSiteURL()));		//--- setup root element		Element root = new Element("root");		root.addContent(md);		root.addContent(env);		//--- do an XSL  transformation		String styleSheet = editLib.getSchemaDir(schema) + Geonet.File.UPDATE_FIXED_INFO;		return Xml.transform(root, styleSheet);	}	//--------------------------------------------------------------------------	private Element buildInfoElem(ServiceContext context, String id, String version) throws Exception	{		Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB);		String query ="SELECT schemaId, createDate, changeDate, source, isTemplate, title, "+									"uuid, isHarvested FROM Metadata WHERE id = " + id;		// add Metadata table infos: schemaId, createDate, changeDate, source,		Element rec = dbms.select(query).getChild("record");		String  schema     = rec.getChildText("schemaid");		String  createDate = rec.getChildText("createdate");		String  changeDate = rec.getChildText("changedate");		String  source     = rec.getChildText("source");		String  isTemplate = rec.getChildText("istemplate");		String  title      = rec.getChildText("title");		String  uuid       = rec.getChildText("uuid");		String  isHarvested= rec.getChildText("isharvested");		Element info = new Element(Edit.RootChild.INFO, Edit.NAMESPACE);		addElement(info, Edit.Info.Elem.ID,          id);		addElement(info, Edit.Info.Elem.SCHEMA,      schema);		addElement(info, Edit.Info.Elem.CREATE_DATE, createDate);		addElement(info, Edit.Info.Elem.CHANGE_DATE, changeDate);		addElement(info, Edit.Info.Elem.IS_TEMPLATE, isTemplate);		addElement(info, Edit.Info.Elem.TITLE,       title);		addElement(info, Edit.Info.Elem.SOURCE,      source);		addElement(info, Edit.Info.Elem.UUID,        uuid);		addElement(info, Edit.Info.Elem.IS_HARVESTED,isHarvested);		if (version != null)			addElement(info, Edit.Info.Elem.VERSION, version);		// add operations		HashSet hsOper = accessMan.getOperations(context, id, context.getIpAddress());		addElement(info, Edit.Info.Elem.VIEW,     String.valueOf(hsOper.contains(AccessManager.OPER_VIEW)));		addElement(info, Edit.Info.Elem.NOTIFY,   String.valueOf(hsOper.contains(AccessManager.OPER_NOTIFY)));		addElement(info, Edit.Info.Elem.DOWNLOAD, String.valueOf(hsOper.contains(AccessManager.OPER_DOWNLOAD)));		addElement(info, Edit.Info.Elem.DYNAMIC,  String.valueOf(hsOper.contains(AccessManager.OPER_DYNAMIC)));		addElement(info, Edit.Info.Elem.FEATURED, String.valueOf(hsOper.contains(AccessManager.OPER_FEATURED)));		if (accessMan.canEdit(context, id))			addElement(info, Edit.Info.Elem.EDIT, "true");		// add categories		List categories = dbms.select("SELECT id, name FROM MetadataCateg, Categories "+												"WHERE metadataId = " + id + " AND categoryId = id ORDER BY id").getChildren();		for (Iterator iter = categories.iterator(); iter.hasNext(); )		{			Element category = (Element)iter.next();			addElement(info, Edit.Info.Elem.CATEGORY, category.getChildText("name"));		}		return info;	}	//--------------------------------------------------------------------------	private static void addElement(Element root, String name, String value)	{		root.addContent(new Element(name).setText(value));	}	//--------------------------------------------------------------------------	private String getMetadataSchema(Dbms dbms, String id) throws Exception	{		List list = dbms.select("SELECT schemaId FROM Metadata WHERE id = " +id).getChildren();		if (list.size() == 0)			throw new IllegalArgumentException("Metadata not found for id : " +id);		else		{			// get metadata			Element record = (Element) list.get(0);			return record.getChildText("schemaid");		}	}	//--------------------------------------------------------------------------	private void copyDefaultPrivForGroup(Dbms dbms, String id, String groupId) throws Exception	{		//--- store access operations for group		setOperation(dbms, id, groupId, AccessManager.OPER_VIEW);		setOperation(dbms, id, groupId, AccessManager.OPER_DOWNLOAD);		setOperation(dbms, id, groupId, AccessManager.OPER_NOTIFY);		setOperation(dbms, id, groupId, AccessManager.OPER_DYNAMIC);	}	//--------------------------------------------------------------------------	private String getSiteID()	{		return settingMan.getValue("system/site/siteId");	}	//---------------------------------------------------------------------------	//---	//--- Static methods	//---	//---------------------------------------------------------------------------	public static void setNamespacePrefix(Element md)	{		//--- if the metadata has no namespace or already has a namespace then		//--- we must skip this phase		Namespace ns = md.getNamespace();    // System.out.println("DM: Namespace prefix is '"+md.getNamespacePrefix()+"'"); // DEBUG    if (ns == Namespace.NO_NAMESPACE || (!md.getNamespacePrefix().equals("")))      return;		//--- set prefix for iso19139 metadata		ns = Namespace.getNamespace("gmd", md.getNamespace().getURI());		setNamespacePrefix(md, ns);	}	//---------------------------------------------------------------------------	private static void setNamespacePrefix(Element md, Namespace ns)	{		if (md.getNamespaceURI().equals(ns.getURI()))			md.setNamespace(ns);		for (Object o : md.getChildren())			setNamespacePrefix((Element) o, ns);	}	//--------------------------------------------------------------------------	//---	//--- Variables	//---	//--------------------------------------------------------------------------	private String baseURL;	private EditLib editLib = new EditLib(this);	private AccessManager  accessMan;	private SearchManager  searchMan;	private SettingManager settingMan;}//=============================================================================

⌨️ 快捷键说明

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