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 F5000. * @author alessia * */ class SozArchLIDO5000 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5000' /** * 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_5000 Wandervogel' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum='''Diese frühe Jugendbewegung suchte und fand ihre Freiräume in der Natur: beim Spielen im Wald, beim Tanzen auf der Wiese und beim Wandern in den Bergen. Ganz wichtig dabei war die Gemeinschaft, das gemeinsame Verbringen der spärlichen Freizeit. Es dominieren denn auch Ringtänze, gemeinsames Musizieren, grosse Theateraufführungen auf Freilichtbühnen. Höhepunkte im Wandervogelleben waren die grossen Fahrten und die "Landsgemeinden". - Die getroffene Auswahl (der gesamte Bestand umfasst mehrere Tausend Fotos!) berücksichtigt das ganze Spektrum dieser Aktivitäten. Es wurden möglichst alle vorkommenden Ortsgruppen und besuchten geografischen Räume miteinbezogen. ''' 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:'Wandervogel - Schweizerischer Bund für alkoholfreie Jugendwanderungen') ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], descriptions:[ new LidoDescription(type:'custodial history', value:'Die historischen Akten zur Wandervogel-Bewegung in der Schweiz wurden von Fritz Baumann, Aarau, zusammengetragen. Die Uebernahme erfolgte 1984.') ], creationDates:['1906P49Y'], accumulationDates:['2003'], owners:[providerName], sizeItems:'643', itemType:'IMAGE', itemFormatStm:'', associatedPub:'http://findmittel.ch/archive/archNeu/Ar19.html', typedSubjects:[ new TypedSubjects(type:'association', dates:['1906-1955'], places:[ new LidoPlace(preferredName:'CH') ]) ], subjects:['Jugendbewegung'], 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 StringTemplate template = null try{ def StringTemplateGroup group = new StringTemplateGroup("visualGroup", templatePath, DefaultTemplateLexer.class); 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 collection5003 = generateCollectionRecord(template, repoId, setSpec, dateOfCollection) resultsQueue.put(collection5003); 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" }catch(Exception e){ println "An exception in groovy script: "+e.getMessage() this.resultsQueue.put("END") println "closedQueue" } finally{ if(template) template.reset() } } @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) {} }