private void updateMetadata( RecordInfo ri, String id, Element md, Element info, boolean localRating) throws Exception { String date = localUuids.getChangeDate(ri.uuid); // validate it here if requested if (params.validate) { if (!dataMan.validate(md)) { log.info("Ignoring invalid metadata"); result.doesNotValidate++; return; } } if (!ri.isMoreRecentThan(date)) { if (log.isDebugEnabled()) log.debug(" - XML not changed for local metadata with uuid:" + ri.uuid); result.unchangedMetadata++; } else { md = processMetadata(ri, md); // update metadata if (log.isDebugEnabled()) log.debug(" - Updating local metadata with id=" + id); boolean validate = false; boolean ufo = params.mefFormatFull; boolean index = false; String language = context.getLanguage(); dataMan.updateMetadata( context, dbms, id, md, validate, ufo, index, language, ri.changeDate, false); result.updatedMetadata++; } Element general = info.getChild("general"); String popularity = general.getChildText("popularity"); if (!localRating) { String rating = general.getChildText("rating"); if (rating != null) dbms.execute( "UPDATE Metadata SET rating=? WHERE id=?", new Integer(rating), new Integer(id)); } if (popularity != null) dbms.execute( "UPDATE Metadata SET popularity=? WHERE id=?", new Integer(popularity), new Integer(id)); dbms.execute("DELETE FROM MetadataCateg WHERE metadataId=?", Integer.parseInt(id)); addCategories(id); if (params.createRemoteCategory) { Element categs = info.getChild("categories"); if (categs != null) { Importer.addCategories(context, dataMan, dbms, id, categs); } } dbms.execute("DELETE FROM OperationAllowed WHERE metadataId=?", Integer.parseInt(id)); addPrivileges(id, info.getChild("privileges")); dbms.commit(); dataMan.indexMetadataGroup(dbms, id); }
private String addMetadata(RecordInfo ri, Element md, Element info, boolean localRating) throws Exception { Element general = info.getChild("general"); String createDate = general.getChildText("createDate"); String changeDate = general.getChildText("changeDate"); String isTemplate = general.getChildText("isTemplate"); String siteId = general.getChildText("siteId"); String popularity = general.getChildText("popularity"); if ("true".equals(isTemplate)) isTemplate = "y"; else isTemplate = "n"; if (log.isDebugEnabled()) log.debug(" - Adding metadata with remote uuid:" + ri.uuid); // validate it here if requested if (params.validate) { if (!dataMan.validate(md)) { log.info("Ignoring invalid metadata"); result.doesNotValidate++; return null; } } md = processMetadata(ri, md); // insert metadata int userid = 1; String group = null, docType = null, title = null, category = null; // If MEF format is full, private file links needs to be updated boolean ufo = params.mefFormatFull; boolean indexImmediate = false; String id = dataMan.insertMetadata( context, dbms, ri.schema, md, context.getSerialFactory().getSerial(dbms, "Metadata"), ri.uuid, userid, group, siteId, isTemplate, docType, title, category, createDate, changeDate, ufo, indexImmediate); int iId = Integer.parseInt(id); dataMan.setTemplateExt(dbms, iId, isTemplate, null); dataMan.setHarvestedExt(dbms, iId, params.uuid); if (!localRating) { String rating = general.getChildText("rating"); if (rating != null) dbms.execute("UPDATE Metadata SET rating=? WHERE id=?", new Integer(rating), iId); } if (popularity != null) dbms.execute("UPDATE Metadata SET popularity=? WHERE id=?", new Integer(popularity), iId); String pubDir = Lib.resource.getDir(context, "public", id); String priDir = Lib.resource.getDir(context, "private", id); new File(pubDir).mkdirs(); new File(priDir).mkdirs(); addCategories(id); if (params.createRemoteCategory) { Element categs = info.getChild("categories"); if (categs != null) { Importer.addCategories(context, dataMan, dbms, id, categs); } } addPrivileges(id, info.getChild("privileges")); dbms.commit(); dataMan.indexMetadataGroup(dbms, id); result.addedMetadata++; return id; }