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 F5053. * @author alessia * */ class SozArchLIDO5053 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5053' /** * 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_5053 Schlup, Bernard' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum='''Kern des Vorlasses von Bernard Schlup ist eine grosse Sammlung von Abziehbildern und Ansteckobjekten, die Schlup während Jahrzehnten gesammelt hat und die die politische Agenda der 1970er, 1980er und frühen 1990er Jahre widerspiegeln. Die weit über 400 Objekte gewähren Einblick sowohl in die stilistische Ästhetik als auch in die gesellschaftspolitischen Auseinandersetzungen dieser Jahrzehnte. So finden sich grell leuchtende Aufkleber von der Revolutionär-Marxistischen Liga der Schweiz und Pins gegen die Stationierung von Atomraketen in Westdeutschland, aber auch Raritäten der kommunistischen Unabhängigkeitsbewegung in Eritrea. Viele der liebevoll gestalteten Darstellungen atmen den Geist einer idealistischen Zeit, in der Errungenschaften erkämpft wurden, die heute als selbstverständlich betrachtet werden, sei es die Entkolonialisierung Afrikas, die politischen Rechte der Frau in der Schweiz oder die atomare Befriedung Europas. Manche der Themen haben jedoch nichts an ihrer Aktualität eingebüsst, so etwa die Frage des Atomausstiegs, die Solidarisierung gegen den US-amerikanischen Imperialismus in Lateinamerika oder der Palästinakonflikt. ''' 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:"Schlup, Bernard (*1948)") ], abstractSummaries:[ new LidoDescription(type:'abstract', value:abstractSum) ], creationDates:['2008'], accumulationDates:['2009'], owners:[providerName], sizeItems:'506', itemType:'IMAGE', itemFormatStm:'', collItemLanguages:['ger'], descriptions:[ new LidoDescription(type:'language statement', value:'plus ca. 30 andere Sprachen') ], associatedPub:'http://www.findmittel.ch/Archive/archNeu/Ar161.html', subjects:['Nachlass'], typedSubjects:[ new TypedSubjects(type:'association', dates:['1912-2008'], 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) {} }