package org.ariadne_eu.utils.update; import java.util.List; import org.apache.log4j.Logger; import org.ariadne_eu.metadata.query.QueryMetadataFactory; import org.ariadne_eu.metadata.query.language.TranslateLanguage; import org.ariadne_eu.metadata.resultsformat.TranslateResultsformat; import org.ariadne_eu.oai.utils.OaiUtils; import org.jdom.Document; import org.jdom.Element; import org.jdom.Namespace; import org.jdom.output.XMLOutputter; import org.jdom.xpath.XPath; public class QueryOnId { private static Logger log = Logger.getLogger(QueryOnId.class); private static QueryOnId instance = null; private QueryOnId(){ } public static QueryOnId getMACEquery() { if(instance == null) { instance = new QueryOnId(); } return instance; } public String getMACEInstance(String metadataIdentifier) throws Exception { try { XMLOutputter outputter = new XMLOutputter(); 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); String query = "lom.metaMetadata.identifier.entry = \"" + metadataIdentifier + "\""; log.info("Requesting : " + metadataIdentifier); String resultString = QueryMetadataFactory.getQueryImpl(TranslateLanguage.PLQL1).query(query, 1, 12, TranslateResultsformat.LOM); Document doc = OaiUtils.parseXmlString2Lom(resultString); List results = doc.getRootElement().getChildren(); if(results.size() == 1) { Element el = (Element)results.get(0); el.detach(); log.info("Successfully Requested : " + metadataIdentifier); return outputter.outputString(el); }else if (results.size() < 1) { String msg = "No records found, please check the identifier"; throw new Exception(msg); }else if (results.size() > 1) { String msg = "Too many records found, please check the identifier"; throw new Exception(msg); } } catch (Exception e) { log.error("getMDInstance: identifier = " + metadataIdentifier, e); throw e; } return null; } public String getMDInstance(String metadataIdentifier) throws Exception { try { XMLOutputter outputter = new XMLOutputter(); String query = "key : \"" + metadataIdentifier + "\""; log.info("Requesting : " + metadataIdentifier); String resultString = QueryMetadataFactory.getQueryImpl(TranslateLanguage.LUCENE).query(query, 1, 12, TranslateResultsformat.LOM); Document doc = OaiUtils.parseXmlString2Lom(resultString); List results = doc.getRootElement().getChildren(); if(results.size() == 1) { Element el = (Element)results.get(0); el.detach(); log.info("Successfully Requested : " + metadataIdentifier); return outputter.outputString(el); }else if (results.size() < 1) { String msg = "No records found, please check the identifier"; throw new Exception(msg); }else if (results.size() > 1) { String msg = "Too many records found, please check the identifier"; throw new Exception(msg); } } catch (Exception e) { log.error("getMDInstance: identifier = " + metadataIdentifier, e); throw e; } return null; } public String getMetadataCollectionInstance(String metadataIdentifier) throws Exception { try { XMLOutputter outputter = new XMLOutputter(); String query = "metadatacollection.identifier.entry = \"" + metadataIdentifier + "\""; log.info("Requesting : " + metadataIdentifier); String resultString = QueryMetadataFactory.getQueryImpl(TranslateLanguage.PLQL1).query(query, 1, 12, TranslateResultsformat.LOM); Document doc = OaiUtils.parseXmlString2Lom(resultString); List results = doc.getRootElement().getChildren(); if(results.size() == 1) { Element el = (Element)results.get(0); el.detach(); log.info("Successfully Requested : " + metadataIdentifier); return outputter.outputString(el); }else { log.info("No MetadataCollection found, trying with protocol"); query = "protocol.identifier.entry = \"" + metadataIdentifier + "\""; log.info("Requesting : " + metadataIdentifier); resultString = QueryMetadataFactory.getQueryImpl(TranslateLanguage.PLQL1).query(query, 1, 12, TranslateResultsformat.LOM); doc = OaiUtils.parseXmlString2Lom(resultString); results = doc.getRootElement().getChildren(); if(results.size() == 1) { Element el = (Element)results.get(0); el.detach(); log.info("Successfully Requested : " + metadataIdentifier); return outputter.outputString(el); }else if (results.size() < 1) { String msg = "No records found, please check the identifier"; log.error("getMetadataCollectionInstance: identifier = " + metadataIdentifier + " - msg"); throw new Exception(msg); }else if (results.size() > 1) { String msg = "Too many records found, please check the identifier"; log.error("getMetadataCollectionInstance: identifier = " + metadataIdentifier + " - msg"); throw new Exception(msg); } } } catch (Exception e) { log.error("getMetadataCollectionInstance: identifier = " + metadataIdentifier, e); throw e; } return null; } }