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 F5017. * @author alessia * */ class SozArchLIDO1000 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_1000' /** * 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_1000 Vollversammlungen Jugendbewegung Zürich' def String providerName = 'Schweizerisches Sozialarchiv' def abstractSum="""Zu Beginn der 1980er Jahre formierten sich in einigen Schweizer Städten bedeutende Jugendbewegungen. Im Zentrum der Forderungen standen eine stärkere Berücksichtigung ihrer kulturellen Bedürfnisse durch die öffentliche Hand und möglichst autonome Freiräume. In Zürich wurde der Kampf um ein Autonomes Jugendzentrum (AJZ) besonders intensiv geführt. Die Auseinandersetzungen wurden oft auf der Strasse und gewalttätig ausgetragen. Die tiefe Abneigung vieler Jugendlicher gegen hierarchische Strukturen äusserte sich auch in der Art, wie diese Jugendbewegung ihre Forderungen, Strategien und Aktionen festlegte: Nicht Leaderfiguren oder exklusive Führungszirkel entschieden über den nächsten Demonstrationstermin oder die Verhandlungstaktik mit der Stadt, sondern die für alle Interessierten zugängliche Vollversammlung. Das Sozialarchiv verfügt über Aufnahmen der ersten zehn Vollversammlungen aus dem Zeitraum zwischen dem Opernhauskrawall, der die Bewegung ausgelöst hatte, und der Eröffnung des AJZ an der Limmatstrasse. Die Aufnahmen entstanden zwischen dem 1. und 28. Juni 1980 in der Roten Fabrik, im Volkshaus, im Platzspitz Park oder im Festzelt vor dem Opernhaus. Die Vollversammlungen waren vor allem in der Anfangszeit Massenanlässe mit bis zu 3’000 Teilnehmenden. Trotz dieses grossen Andrangs und oft stundenlanger Debatten um strategische Finessen dürften die Vollversammlungen – neben dem Druck von der Strasse – wesentlich dazu beigetragen haben, dass die Stadt nur einen Monat nach den Ereignissen vor dem Opernhaus der Jugend die Liegenschaft an der Limmatstrasse als Treffpunkt überliess. Nach rund 30-stündiger Debatte an zehn Vollversammlungen und mehreren Demonstrationen hat die Jugendbewegung ihr Hauptziel erreicht: Am 28. Juni 1980 wird das AJZ mit einer (leider nicht mehr überlieferten) Vollversammlung und einem Fest eröffnet. """ 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:'Vollversammlungen Jugendbewegung Zürich') ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], descriptions:[ new LidoDescription(type:'custodial history', value:'von Rudolf Müller dem Sozialarchiv übergeben. Müller kennt den Urheber der Aufnahmen, musste ihm aber Anonymität zusichern.', langCode:'ger') ], creationDates:['1980'], accumulationDates:[ '2000', 'ca-Datum; Bestand war im Okt. 2002 schon hier.' ], owners:[providerName], sizeItems:'32', itemType:'SOUND', itemFormats:['CD-R'], itemFormatStm:'', collItemLanguages:['gsw'], associatedPub:'', typedSubjects:[ new TypedSubjects(type:'association', dates:['1980'], 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:'SOUND', 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) {} }