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.LandingPage import eu.dnetlib.hope.domains.common.OAIHeader import eu.dnetlib.hope.domains.visual.LIDOCollection import eu.dnetlib.hope.domains.visual.LidoDescription import eu.dnetlib.hope.domains.visual.LidoPlace import eu.dnetlib.hope.domains.visual.LidoTitle import eu.dnetlib.hope.domains.visual.TypedSubjects class FESADAVLIDO implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def FESLidoUtils utils = new FESLidoUtils() def BlockingQueue resultsQueue, inputQueue; def String repositoryId = ""; /** * Driver namespace for elements in the OAI header. */ def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') def String collectionID = 'ADAV' String providerName = "Archiv der sozialen Demokratie (AdsD)" def generateCollectionRecord = { template, dateOfCollection, setSpec-> def String lPageURL = 'http://archiv2.fes.de/dok_start.fau?prj=fes&dm=Protokollbuch' def String abstractSum=''' Die Sammlung enthält das Protokollbuch des Allgemeinen Deutschen Arbeitervereins (ADAV). Der Augsburger ADAV wurde am 19. März 1864 von dem Mechaniker Friedrich Dürr gegründet. Das vorliegende handschriftliche Protokollbuch setzt mit der Gründungsversammlung ein und reicht bis Mitte August 1867. Inhaltlich dokumentiert der Band unter anderem die Besprechung von Organisations-, Agitations-, Presse- und Wahlrechtsfragen, parteiinterne Diskussionen sowie die Gestaltung der jährlichen Lassalle-Totenfeiern. ''' def OAIHeader collOaiheader = new OAIHeader(dateOfCollection:dateOfCollection, repositoryId:repositoryId, setSpec:setSpec, identifier:collectionID, objIdentifier:repositoryId+"::"+collectionID) def LIDOCollection coll = new LIDOCollection(collectionID:collectionID, langCode:'deu', titles:[ new LidoTitle(value:'Protokollbuch des Allgemeinen Deutschen Arbeitervereins (ADAV) Augsburg') ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], creationDates:['1864-1867'], accumulationDates:['n/a'], owners:[providerName], sizeItems:'4', itemType:'TEXT', itemFormatStm:'', associatedPub:'', typedSubjects:[ new TypedSubjects(type:'association', dates:['1864-1867'], places:[ new LidoPlace(preferredName:'DE') ]) ], subjects:[''], repository:providerName, useRights:"Die Nutzung is frei", accessRights:'Weitere Informationen finden Sie auf unseren Websites', collItemLanguages:['deu'], europeanaType:'TEXT', llandingPage:new LandingPage(href:lPageURL, localID:this.collectionID)) def String collection = coll.getXML(template, collOaiheader, providerName, coll) return collection } @Override public void run() { def StringTemplateGroup group = new StringTemplateGroup("visualGroup", templatePath, DefaultTemplateLexer.class); def StringTemplate template = group.getInstanceOf("visualTemplate"); def parser = new XmlParser(false, true); def String input; def String collection = generateCollectionRecord(template,'', '') resultsQueue.put(collection); def c = 1; while(!((input = this.inputQueue.take()).equals("END"))){ 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 fesRoot = xmlRoot.'**'.Fahnen[0]; def NodeList objects = xmlRoot.'**'.Objekt if(objects.size() > 1) println "Found "+objects.size()+" Objekts" objects.each { String lidoObject = utils.transformObjekt(it, template, dateOfCollection, repositoryId, setSpec, collectionID, true) //Hack for resolved XML entities... lidoObject = lidoObject.replace("&", "&") //add the Lido Element generated from the current (it) FaustObjekt resultsQueue.put(lidoObject); c++; // println lidoObject // println "***************" template.reset() } } println c +" lido objects enueued" 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" } @Override public void setRepositoryId(String repoId) {this.repositoryId = repoId} }