package org.ariadne_eu.utils.update; import java.io.StringReader; import org.apache.log4j.Logger; import org.ariadne_eu.metadata.delete.DeleteMetadataFactory; import org.ariadne_eu.metadata.insert.InsertMetadataFactory; import org.ariadne_eu.oai.utils.OaiUtils; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; public class UpdateMetadata { private static UpdateMetadata instance = null; private static Logger logger = Logger.getLogger(UpdateMetadata.class); public static UpdateMetadata getInstance() { if(instance == null) { instance = new UpdateMetadata(); } return instance; } /* * NOTE: Collection is not implemented! * * */ public void publishMetadata(String metadata) throws Exception { SAXBuilder builder = new SAXBuilder(); try { Namespace ns = Namespace.getNamespace("lom","http://ltsc.ieee.org/xsd/LOM"); XPath oaiIds = XPath.newInstance("//lom:lom/lom:metaMetadata/lom:identifier/lom:catalog[text()=\"oai\"]/parent::*/lom:entry"); oaiIds.addNamespace(ns); XPath ids = XPath.newInstance("//lom:lom/lom:metaMetadata/lom:identifier/lom:entry"); ids.addNamespace(ns); org.jdom.Document xmlDoc = builder.build(new StringReader(metadata)); String id = null; Element foundOaiId = (Element) oaiIds.selectSingleNode(xmlDoc); if(foundOaiId != null) { id = foundOaiId.getTextTrim(); } else { Element foundId = (Element) ids.selectSingleNode(xmlDoc); if(foundId != null) { id = foundId.getTextTrim(); } } if (id == null) { throw new Exception("No Id found !!!"); } logger.info("Pushing " + id); InsertMetadataFactory.insertMetadata(id, OaiUtils.parseLom2XmlstringNoXmlHeader(xmlDoc.getRootElement()),"ARIADNE"); logger.info("Successfully pushed : " + id); } catch (Exception e) { logger.error(e.getMessage()); throw e; } } public void deleteMetadata(String id) throws Exception { try { logger.info("Deleting " + id); DeleteMetadataFactory.deleteMetadata(id); logger.info("Successfully deleted : " + id); } catch (Exception e) { logger.error(e.getMessage()); throw e; } } }