📄 datamanager.java
字号:
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 + -