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.* import eu.dnetlib.miscutils.datetime.DateUtils class FESLibrarySDPD implements RunnableGroovy { def FESLibraryUtils utils = new FESLibraryUtils() def String templatePath = "/var/lib/hope-scripts/templates" def BlockingQueue resultsQueue, inputQueue; def String repositoryId def String providerName = "Bibliothek der Friedrich-Ebert-Stiftung" def String providerLanguage = "deu" def oai_hope = new groovy.xml.Namespace("http://library.fes.de/xsd/hope/ http://library.fes.de/xsd/hope/hope.xsd", 'oai_hope') @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, 'sdpd', 'http://library.fes.de/library/html/voll-spdpd.html','http://hdl.handle.net/11088/de-bo133:spdpd') 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 setSpec = oaiHeaderNode.setSpec.text() def Node theRecord = xmlRoot.'**'.'metadata'.'oai_hope:record'[0] def String marcRecord = utils.transformRecord(theRecord, libraryTemplate, this.repositoryId, collectionDate) resultsQueue.put(marcRecord); c++; } libraryTemplate.reset() println c +" marc records enueued" this.resultsQueue.put("END") println "closedQueue" } def createCollection = { template, dateOfColl, repoId, set, collID, collPID-> template.reset() def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfColl, repositoryId:repoId, setSpec:set, identifier:collPID, objIdentifier:repoId+"::"+collPID) def String theAbstract = '''Der zentrale Sozialdemokratische Pressedienst wurde 1946 gegründet und erfreute sich rasch wachsenden Interesses. Er stellt über einen Zeitraum von mehreren Jahrzehnten das einzige authentische Sprachrohr der Sozialdemokratischen Partei Deutschlands dar. Er enthält verifizierbare Äußerungen der Partei (d.h. ihrer gewählten Gremien und Repräsentanten), die aus anderen Veröffentlichungen so nicht unmittelbar geschöpft werden können. Wer auf gedruckte Quellen zurückgreifen möchte, die die Meinungen des Vorstandes, der Bundestagsfraktion, der Arbeitsgemeinschaften und Kommissionen und ihrer gewählten Vorstandsmitglieder widerspiegeln, muß auf diesen internen Pressedienst zurückgreifen. ''' def MarcRecord marcCollection = new MarcRecord(descriptionLevel:'collection', europeanaType:'TEXT',language:'deu', accessRights:'General Public (Open Access)', useRights:'Copyright Bibliothek der Friedrich-Ebert-Stiftung', europeanaRights:'http://www.europeana.eu/rights/rr-f/', leader:'', pid:collPID, aggregator:"HOPE - Heritage of the people's Europe", creationDate:new DateStm(date:'1946', stm:'1946-1995'), accumulationDate:new DateStm(date:'2001'), isbn_020:'', issn_022:'', localID:collID, providerName:providerName, providerLanguage:providerLanguage, bookNo_091:'', extents:[ new LanguagedValue(value:'62980') ], physDetails:[ new LanguagedValue(value:'application/pdf') ], dimensions:[],materialDesignations:[ new LanguagedValue(value:'Text') ], accruals:[], toc:'', theabstracts:[ new LanguagedValue(language:'deu', value:theAbstract) ], genre:'', keywords:[ new LanguagedValue(value:'SPD'), new LanguagedValue(language:'eng', value:'press releases'), new LanguagedValue(language:'eng', value:'social democracy') ], creatorPersons_100:[], creatorCorps_110:[ 'Bibliothek der Friedrich-Ebert-Stiftung' ], contributorMeetings_711:[], personSubjects_600:[], corporateSubjects_610:[], temporalCoverages_648:['1946-1995'], topicSubjects_650:[], spatialCoverages_651:['DE'], personContributors:[], corporateContributors:[], creatorMeetings_111:[], titles_245:[ new MarcTitle(main:new MarcTranslatedTitle(original:'Sozialdemokratischer Pressedienst (1946 – 1995)')) ], editionStms_250:[], landingPage:new LandingPage(href:collPID, localID:collID), languages_041:['deu']) 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 } }