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 /** * DNetGroovy class for SSA F5033. * @author alessia * */ class SozArchLIDO5033 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5033' /** * Driver namespace for elements in the OAI header. */ def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') def generateCollectionRecord = { template, repoId, setSpec, dateOfCollection -> def String lPageURL = 'http://www.bild-video-ton.ch/archiv/images?Bilder.ssaBestand=F_5033 Lebensmittelverein Zürich (LVZ)' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum="""Einer der reichhaltigsten Bildbestände des Sozialarchivs: über 1‘600 Fotos, Negative, Dias, Glasdias und Objekte zur Geschichte des Lebensmittelverbands Zürich. Zeitraum: 1870er bis 1990er Jahre. Der LVZ (ab 1970: Coop) hat die Welt des Konsums entscheidend mitgeprägt und sorgte nach dem Zweiten Weltkrieg mit einem weitverzweigten Filialnetz für ein permanentes Warenangebot. Das Bildarchiv des LVZ geht erfreulicherweise weit über die naheliegende und zu erwartende Präsentation von Waren zu reinen Werbezwecken hinaus. Schon in den 1910er Jahren setzte der LVZ auf Eigenproduktionen und belieferte seine Kundschaft mit Brot, Fleisch und Kaffee aus eigenen Betrieben. Die genossenschaftlich organisierte Grossproduktion sorgte für attraktive Preise. In den grossen Lagerhäusern an der Turbinenstrasse wurde Brennholz, Öl und Kohle umgeschlagen. Dank direktem Gleisanschluss konnte der LVZ auch grosse Mengen kostengünstig verschieben. 1914 eröffnete der LVZ mit dem St. Annahof ein riesiges Kaufhaus an bester Lage an der Zürcher Bahnhofstrasse. Die dort gepflegte traditionelle Art des Präsentierens und Verkaufens erlebte nach dem Zweiten Weltkrieg eine radikale Veränderung. Die Selbstbedienung setzte sich durch.""" def OAIHeader collOaiheader = new OAIHeader(dateOfCollection:dateOfCollection, repositoryId:repoId, setSpec:setSpec, identifier:collectionID, objIdentifier:repoId+"::"+collectionID) def LIDOCollection coll5017 = new LIDOCollection(collectionID:collectionID, langCode:'ger', titles:[ new LidoTitle(value:"Lebensmittelverein Zürich (LVZ)") ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], descriptions:[ new LidoDescription(type:'custodial history', value:"Die Übernahme kam anlässlich der Aufhebung des Standorts Zürich und des Umzugs nach Basel zustande. (Bernhard Hänni, Coop Zürich) Das Verbandsarchiv ist in Basel.") ], creationDates:['1870P112Y'], accumulationDates:['2006'], owners:[providerName], sizeItems:'1641', itemType:'IMAGE', itemFormatStm:'', collItemLanguages:[ 'ger', 'fre', 'gsw', 'eng', ], associatedPub:'', subjects:['Genossenschaftsbewegung'], typedSubjects:[ new TypedSubjects(type:'association', dates:['1877-1971'], places:[ new LidoPlace(preferredName:'CH') ]) ], repository:providerName, useRights:"Jede Art der Verwendung und der Reproduktion setzt eine Bewilligung und einen vereinbarten Zweck voraus. Jede weitere Nutzung bedarf der erneuten Zustimmung des Schweizerischen Sozialarchivs oder des jeweiligen Rechteinhabers.", accessRights:'Auf den Bestand oder auf Teile davon gewährt das Schweizerische Sozialarchiv öffentlichen, kostenlosen Zugang. Weitere Bestimmungen finden Sie auf unseren Websites.', europeanaType:'IMAGE', landingPage:new LandingPage(href:lPageURL, localID:lPageURL)) def String collection5017 = coll5017.getXML(template, collOaiheader, providerName, coll5017) return collection5017 } @Override public void run() { def StringTemplateGroup group = new StringTemplateGroup("visualGroup", templatePath, DefaultTemplateLexer.class); def StringTemplate template = group.getInstanceOf("visualTemplate"); //iterates on the input xml to generate records contained by the collection created above def parser = new XmlParser(false, true); def String input; def c = 0; while(!((input = this.inputQueue.take()).equals("END"))){ template.reset() def Node xmlRoot = parser.parseText(input) def Node oaiHeaderNode = xmlRoot.'**'.header[0] //Common OAI Header elements def dateOfCollection = oaiHeaderNode.'dri:dateOfCollection'.text() def repoId = oaiHeaderNode.'dri:repositoryId'.text() def setSpec = oaiHeaderNode.setSpec.text() //create collection from constants values from the mapping if(c == 0){ def String collection5017 = generateCollectionRecord(template, repoId, setSpec, dateOfCollection) resultsQueue.put(collection5017); c++ } def Node sozRoot = xmlRoot.'**'.ImagicXML[0] def NodeList sozObjects = sozRoot.Update.Row println "Found "+sozObjects.size()+" rows" sozObjects.each { String lidoObject = utils.transformSozObjekt(it, template, dateOfCollection, repoId, setSpec, collectionID, utils.generateDefaultResourceWrap) resultsQueue.put(lidoObject); c++ 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" } /** * TODO: use this to set the repoId of the collection instead of the current trick * {@inheritDoc} * @see eu.dnetlib.enabling.manager.msro.hope.groovy.RunnableGroovy#setRepositoryId(java.lang.String) */ @Override public void setRepositoryId(String repoId) {} }