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.library.DateStm import eu.dnetlib.hope.domains.library.MarcRecord import eu.dnetlib.hope.domains.library.MarcTitle import eu.dnetlib.hope.domains.library.MarcTranslatedTitle import eu.dnetlib.miscutils.datetime.DateUtils class CGILOpuscoliModsMARC implements RunnableGroovy { def CGILModsUtils utils = new CGILModsUtils() def String templatePath = "/var/lib/hope-scripts/templates" def BlockingQueue resultsQueue, inputQueue; def String dataProvider = 'Confederazione Generale Italiana del Lavoro' def String collectionID = 'Opuscoli' def String repositoryId; //def mods = new groovy.xml.Namespace("http://www.loc.gov/mods/v3", 'mods') @Override public void run() { def StringTemplateGroup group = new StringTemplateGroup("libraryGroup", templatePath, DefaultTemplateLexer.class); def StringTemplate libraryTemplate = group.getInstanceOf("libraryTemplate"); def parser = new XmlParser(false, true) def input; def String collectionDate = DateUtils.now_ISO8601() def String marcCollection = createCollection(libraryTemplate, collectionDate, this.repositoryId, '', this.collectionID) resultsQueue.put(marcCollection) def c = 1; while(!((input = this.inputQueue.take()).equals("END"))){ println "processing record" def Node xmlRoot = parser.parseText(input) def Node oaiHeaderNode = xmlRoot.'**'.header[0] //Common OAI Header elements def String dateOfCollection = oaiHeaderNode.'dri:dateOfCollection'.text() def String repoId = oaiHeaderNode.'dri:repositoryId'.text() def String setSpec = oaiHeaderNode.setSpec.text() def NodeList modsObjects =xmlRoot.'**'.'*:mods' println "Found "+modsObjects.size()+" mods entries" modsObjects.each{ def String marcRecord = utils.transformModsRecord(it, libraryTemplate, dateOfCollection, repoId, setSpec, this.dataProvider, 'ita', this.collectionID) if(marcRecord){ resultsQueue.put(marcRecord); c++; } } } libraryTemplate.reset() println c +" marc records enueued" this.resultsQueue.put("END") println "closedQueue" } def createCollection = { template, dateOfColl, repoId, set, collID -> template.reset() def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfColl, repositoryId:repoId, setSpec:set, identifier:collID, objIdentifier:repoId+"::"+collID) def String theAbstract = 'Booklets and pamphlets edited by Cgil and other Unions' def MarcRecord marcCollection = new MarcRecord(descriptionLevel:'collection', repositories:[ 'Archivio storico della Cgil' ], europeanaType:'TEXT',language:'ita', accessRights:'Free access', useRights:'Rights reserved', europeanaRights:'Rights Reserved - Free Access', leader:'', pid:'', aggregator:"HOPE - Heritage of the people's Europe", creationDate:new DateStm(date:'1945-2000', stm:'1945-2000'), accumulationDate:new DateStm(date:'1968-2008', stm:'1968-2008'), isbn_020:'', issn_022:'', localID:collID, providerName:dataProvider, providerLanguage:'ita', bookNo_091:'', extents:[ new LanguagedValue(value:'793') ], physDetails:[], dimensions:[],materialDesignations:[], accruals:[], toc:'', theabstracts:[ new LanguagedValue(language:'eng', value:theAbstract) ], genre:'', keywords:[], creatorPersons_100:[], creatorCorps_110:[], contributorMeetings_711:[], personSubjects_600:[], corporateSubjects_610:[], temporalCoverages_648:[], topicSubjects_650:[], spatialCoverages_651:[], personContributors:[], corporateContributors:[], creatorMeetings_111:[], titles_245:[ new MarcTitle(main:new MarcTranslatedTitle(original:'Opuscoli')) ], editionStms_250:[], languages_041:['ita']) template.setAttribute("oaiheader", oaiheader) template.setAttribute("marc", marcCollection) return template.toString(); } @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} }