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 import groovy.util.XmlParser /** * DNetGroovy class for SSA F5025. * @author alessia * */ class SozArchLIDO5025 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5025' /** * 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_5025 Schweizerisches Arbeiterhilfswerk' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum="Während der letzten Jahre des Zweiten Weltkriegs nahm das Schweizerische Arbeiterhilfswerk SAH eine ausgedehnte Versorgungs- und Unterstützungstätigkeit in den umliegenden Ländern auf. Was 1944 mit wenigen nach Frankreich verschickten Lebensmittelpaketen begann, wuchs sich rasch zu einer Grossaktion aus: Die Aktion unter der Bezeichnung „Colis Suisse“ lieferte Ende der 1940er Jahre monatlich bis zu 60'000 Pakete nach Italien, Deutschland, Österreich und Frankreich. Dank der Solidarität der Arbeiterbewegung konnte die Bevölkerung der kriegsversehrten Nachbarländer auch mit Möbeln und Kleidern versorgt werden. In der Schweiz führte das SAH mehrere Ferienheime, dank derer auch finanziell schlechter gestellte Familien Ferien machen konnten. – Das Bildarchiv des SAH umfasst mehr als 1'900 Fotos. Der Fokus liegt auf den 1940er und 1950er Jahren. Besonders gut dokumentiert sind die Hilfsaktionen der letzten Kriegs- und unmittelbaren Nachkriegsjahre in den Nachbarländern. Hermann Freytag und Ernst Koehli, zwei Zürcher Fotografen aus dem Umfeld der Arbeiterbewegung, haben die Tätigkeiten des SAH über Jahre hinweg verfolgt und in nüchterner Weise festgehalten. Die Tätigkeiten späterer Jahre sind nur noch spärlich fotografisch dokumentiert." def OAIHeader collOaiheader = new OAIHeader(dateOfCollection:dateOfCollection, repositoryId:repoId, setSpec:setSpec, identifier:collectionID, objIdentifier:repoId+"::"+collectionID) def LIDOCollection coll = new LIDOCollection(collectionID:collectionID, langCode:'ger', titles:[ new LidoTitle(value:"Schweizerisches Arbeiterhilfswerk (SAH) - Oeuvre suisse d'entraide ouvrière (OSEO)") ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], creationDates:['1921P63Y'], accumulationDates:[ '2009', 'Das Bildarchiv des SAH wurde anfangs 2009 im Zuge der Nachlieferung des konventionellen SAH-Archivs abgeliefert. Die Ablieferung setzte sich aus Fotos, Dias, Videos und einem Film (in div. Kopien) zusammen.' ], owners:[providerName], sizeItems:'1913', itemType:'IMAGE', itemFormatStm:'', collItemLanguages:[ 'ger', 'gsw', 'ita', 'fre', 'eng', ], associatedPub:'http://www.findmittel.ch/Archive/archNeu/Ar20.html', subjects:['Solidarbewegung'], typedSubjects:[ new TypedSubjects(type:'association', dates:['1932-1984'], 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 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"); //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 collection = generateCollectionRecord(template, repoId, setSpec, dateOfCollection) resultsQueue.put(collection); 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) {} }