import java.util.concurrent.BlockingQueue import eu.dnetlib.enabling.manager.msro.hope.groovy.RunnableGroovy class OSANonDigitalArchive implements RunnableGroovy { def BlockingQueue resultsQueue, inputQueue; def String repositoryId; def String collectionID = "placeholderOSA" def String dataProvider = "Open Society Archives at Central European University" /** * Driver namespace for elements in the OAI header. */ def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') def oai = new groovy.xml.Namespace("http://www.openarchives.org/OAI/2.0/", 'oai') @Override public void run() { def String input; //just need to update the OAI header def String oaiHeader = '
'+collectionID+""+ ""+repositoryId+""+ ""+repositoryId+'::'+collectionID+""+ "true
" def fragmentToAdd = new XmlSlurper( false, false ).parseText( oaiHeader ) while(!((input = this.inputQueue.take()).equals("END"))){ //just need to update the OAI header def xmlRoot = new XmlSlurper( false, true ).parseText(input) def headerNode = xmlRoot.'header' headerNode.replaceNode{ node -> mkp.yield(fragmentToAdd)} def String outputRecord = groovy.xml.XmlUtil.serialize(xmlRoot) resultsQueue.put(outputRecord); } this.resultsQueue.put("END") println "closedQueue" } @Override public void setResultsQueue(BlockingQueue queue) { this.resultsQueue = queue } @Override public void setInputQueue(BlockingQueue queue) { this.inputQueue = queue } /** * TODO: calling the method from the run() does not work. Kinda groovy strange stuff, I do not know why. */ @Override public void closeResultQueue() { this.resultsQueue.put("END") println "closedQueue" } /** * {@inheritDoc} * @see eu.dnetlib.enabling.manager.msro.hope.groovy.RunnableGroovy#setRepositoryId(java.lang.String) */ @Override public void setRepositoryId(String repoId) { this.repositoryId = repoId; } }