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.archive.EadArchDesc import eu.dnetlib.hope.domains.common.OAIHeader /** * DNetGroovy class for GNQ metadata songs record. * @author alessia * */ class GNQSongsEAD implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def GNQSongsUtils utils = new GNQSongsUtils() def BlockingQueue resultsQueue, inputQueue; /** * Driver namespace for elements in the OAI header. */ def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') @Override public void run() { def StringTemplateGroup group = new StringTemplateGroup("archiveGroup", templatePath, DefaultTemplateLexer.class); def StringTemplate archiveTemplate = group.getInstanceOf("archiveTemplate"); println "got template at path "+templatePath def parser = new XmlParser(false, true) println "got parser" def input; def EadArchDesc postersCollectionArchDesc = utils.generateSharedArchDesc() //int i = 0; while(!((input = this.inputQueue.take()).equals("END"))){ def Node xmlRoot = parser.parseText(input) println "processing record" Node oaiHeaderNode = xmlRoot.'**'.header[0] def String repoId = oaiHeaderNode.'dri:repositoryId'.text() def OAIHeader oaiheader = new OAIHeader() oaiheader.setDateOfCollection(oaiHeaderNode.'dri:dateOfCollection'.text()) oaiheader.setIdentifier(oaiHeaderNode.identifier.text()) oaiheader.setObjIdentifier(oaiHeaderNode.'dri:objIdentifier'.text()) oaiheader.setRepositoryId(repoId) oaiheader.setSetSpec(oaiHeaderNode.setSpec.text()) def header = utils.generateHeader(xmlRoot) def EadArchDesc currentArchDesc = utils.fillArchDescSons(xmlRoot, postersCollectionArchDesc, repoId) archiveTemplate.setAttribute("oaiheader", oaiheader) archiveTemplate.setAttribute("header", header) archiveTemplate.setAttribute("archdescs", [currentArchDesc]) String res = archiveTemplate.toString().replace("&", "&") //.replace("") resultsQueue.put(res) println "result pushed" archiveTemplate.reset() } println "consumed input queue" this.resultsQueue.put("END") } @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) { } }