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 FESLibrarySozMon 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, 'sozmon', 'http://library.fes.de/sozmon/','http://hdl.handle.net/11088/de-bo133:sozmon') 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 = '''Die Zeitschrift "Sozialistische Monatshefte" (Vorgänger: "Der Sozialistische Akademiker") erschien von 1897 bis 1933 als Theorieorgan im Umfeld der deutschen Sozialdemokratie. Obgleich kein "offizielles" Parteiorgan, publizierten führende Vertreter der nationalen und internationalen Arbeiterbewegung in dem Blatt. Politisch standen die "Sozialistischen Monatshefte" dem revisionistischen Flügel innerhalb der Sozialdemokratie nahe. Das offizielle Theorieorgan "Die Neue Zeit" und die "Sozialistischen Monatshefte" waren die Publikationsorte, in denen auf hohem intellektuellen Niveau über die Ziele der Arbeiterbewegung diskutiert und gerungen wurde. Die von der Bibliothek der Friedrich-Ebert-Stiftung erarbeitete "Online-Edition der Sozialistischen Monatshefte" ermöglicht mit ihrer Tiefenerschließung auf Artikelebene einen komfortablen Zugang zu den 4500 Beiträgen des Organ. ''' 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:'1897', stm:'1897-1933'), accumulationDate:new DateStm(date:'2007'), isbn_020:'', issn_022:'', localID:collID, providerName:providerName, providerLanguage:providerLanguage, bookNo_091:'', extents:[ new LanguagedValue(value:'5363') ], 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(language:'eng', value:'social democracy'), new LanguagedValue(language:'eng', value:'labour movement') ], creatorPersons_100:[], creatorCorps_110:[ 'Bibliothek der Friedrich-Ebert-Stiftung' ], contributorMeetings_711:[], personSubjects_600:[], corporateSubjects_610:[], temporalCoverages_648:['1897-1933'], topicSubjects_650:[], spatialCoverages_651:['DE'], personContributors:[], corporateContributors:[], creatorMeetings_111:[], titles_245:[ new MarcTitle(main:new MarcTranslatedTitle(original:'Sozialistische Monatshefte (1897 - 1933)')) ], editionStms_250:[], landingPage:new LandingPage(href:'http://hdl.handle.net/11088/de-bo133:sozmon', localID:'http://library.fes.de/sozmon/'), 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 } }