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.* /** * DNetGroovy class for SSA F_5060. * @author alessia * */ class SozArchLIDO5060 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5060' /** * 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_5060 Frauenbefreiungsbewegung Zürich (FBB) - Autonomes Frauenzentrum Zürich' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum = '''Der Bestand vermag (vorläufig) erst einige Aspekte dieser wichtigen Vertreterin der neuen Frauenbewegung zu dokumentieren. Bisher konnten rund 100 Fotos, Transparente, Objekte und audiovisuelle Medien zusammengetragen werden.''' 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: "Frauenbefreiungsbewegung Zürich (FBB) - Autonomes Frauenzentrum Zürich") ], abstractSummaries: [ new LidoDescription(type: 'abstract', value: abstractSum) ], creationDates: ['1969P31Y'], accumulationDates: ['2009'], owners: [providerName], sizeItems: '119', itemType: 'IMAGE', itemFormatStm: '', collItemLanguages: [], associatedPub: 'http://findmittel.ch/Archive/archNeu/Ar465.html', subjects: ['Frauenbewegung'], typedSubjects: [ new TypedSubjects(type: 'association', dates: ['1985-2004'], places: [ new LidoPlace(preferredName: 'CH') ]) ], descriptions: [], 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 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) {} }