import java.util.concurrent.BlockingQueue import org.antlr.stringtemplate.StringTemplate import org.antlr.stringtemplate.StringTemplateGroup import org.antlr.stringtemplate.language.DefaultTemplateLexer import eu.dnetlib.enabling.manager.msro.hope.groovy.RunnableGroovy import eu.dnetlib.hope.domains.common.* import eu.dnetlib.hope.domains.generic.* import eu.dnetlib.miscutils.datetime.DateUtils class BDICKagan implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def BlockingQueue resultsQueue, inputQueue def String repositoryId def String setName = 'default.NOTICES.PHOTOGRAPHIES_ELIE_KAGAN' /** * Driver namespace for elements in the OAI header. */ def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') def oai_dc = new groovy.xml.Namespace("http://www.openarchives.org/OAI/2.0/oai_dc/", 'oai_dc') def dc = new groovy.xml.Namespace("http://purl.org/dc/elements/1.1/", 'dc') def xml = new groovy.xml.Namespace("http://www.w3.org/XML/1998/namespace", 'xml') def BDICUtils utils = new BDICUtils() @Override public void run() { def StringTemplateGroup group = new StringTemplateGroup("genericGroup", templatePath, DefaultTemplateLexer.class) def StringTemplate genericTemplate = group.getInstanceOf("genericTemplate") println "got template at path "+templatePath def parser = new XmlParser(false, true) println "got parser" def input int count = 0 while(!((input = this.inputQueue.take()).equals("END"))){ genericTemplate.reset() def Node xmlRoot = parser.parseText(input) def OAIHeader oaiheader = utils.getOAIHeader(xmlRoot, this.repositoryId) def Node dcNode = xmlRoot.'**'.'oai_dc:dc'[0] def DCObject dcObject = utils.processDCRecord(dcNode, oaiheader.identifier, oaiheader.setSpec, true, this.setName) if(dcObject){ genericTemplate.setAttribute("oaiheader", oaiheader) genericTemplate.setAttribute("dc", dcObject) def String res = genericTemplate.toString() //println res resultsQueue.put(res) count++ } } println "consumed input queue" genericTemplate.reset() def String collectionRecord = this.generateCollectionRecord(genericTemplate, count) resultsQueue.put(collectionRecord) println "enqueued collection" this.resultsQueue.put("END") } def generateCollectionRecord = { StringTemplate genericTemplate, int numberOfItems -> def OAIHeader oaiheader = new OAIHeader() oaiheader.setDateOfCollection(DateUtils.now_ISO8601()) oaiheader.setIdentifier(this.setName) oaiheader.setObjIdentifier(this.repositoryId+'::'+this.setName) oaiheader.setRepositoryId(this.repositoryId) oaiheader.setSetSpec(this.setName) genericTemplate.setAttribute("oaiheader", oaiheader) def String dataProvider = "Bibliothèque de Documentation Internationale Contemporaine (BDIC)" def String metadataLanguage = 'fre' def LandingPage landingPage = new LandingPage(localID:this.setName, href:'http://www.bdic.fr/collections/quels-documents/photographies') def List theSpatials = [ new LanguagedValue(value:'FR'), new LanguagedValue(value:'Algeria') ] def List theTemporals = [ new LanguagedValue(value:'1950-1995') ] def List theProvenances = [ new LanguagedValue(value:dataProvider) ] def List theRights = [ new LanguagedValue(language:'eng', value:'Negotiated rights'), new LanguagedValue(language:'eng', value:'Free Access') ] def DCMetadata duMD = new DCMetadata(localID:this.setName, language:metadataLanguage,descriptionLevel:'collection', creationDates:['1950-1995'],issueDates:[], landingPage:landingPage, extents:[ new LanguagedValue(value:numberOfItems.toString()) ], mediums:[],subjects:[], spatials:theSpatials, temporals:theTemporals, relations:[], provenances:theProvenances, rights:theRights ) def List theTitles = [ new LanguagedValue(language:'eng', value:'Photographs by Elie Kagan') ] def List theAltTitles = [ new LanguagedValue(language:metadataLanguage, value:"Photographies d'Elie Kagan") ] def LanguagedValue collectionAbstract = new LanguagedValue(language:metadataLanguage, value:"2000 photographies d’Élie Kagan (1928-1999) sur la vie politique, syndicale, économique et sociale en France et à l'étranger -notamment en Algérie.") def List itemLanguages = ['fre'] def DCObject dcObject = new DCObject(europeanaType:'IMAGE', europeanaRights:'NEGOTIATED RIGHTS', cpName:dataProvider, titles:theTitles, altTitles:theAltTitles, theAbstract:collectionAbstract, descriptions:[], creators:[], contributors:[], publishers:[], du:duMD, dr:new DCResource(languages:itemLanguages) ) genericTemplate.setAttribute("dc", dcObject) def String collectionRes = genericTemplate.toString() //println collectionRes return collectionRes } @Override public void setResultsQueue(BlockingQueue queue) { this.resultsQueue = queue } @Override public void setInputQueue(BlockingQueue queue) { this.inputQueue = queue } @Override public void closeResultQueue() { this.resultsQueue.put("END") } @Override public void setRepositoryId(String repoId) { this.repositoryId = repoId } }