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_5061. * @author alessia and lucien * */ class SozArchLIDO5061 implements RunnableGroovy { def String templatePath = "/var/lib/hope-scripts/templates" def SozArchUtils utils = new SozArchUtils() def BlockingQueue resultsQueue, inputQueue; def String collectionID = 'F_5061' /** * 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_5061 Winterhilfe Schweiz' def String providerName = 'Schweizerisches Sozialarchiv' def String abstractSum = """Der fotografische Bestand der Winterhilfe dokumentiert eindrücklich die Unterstützungsaktionen in den Bereichen der Kleider- und Nahrungsmittelhilfe. Zeitlich liegt der Schwerpunkt auf den 1940er- und 1950er-Jahre. Dank dem langjährigen Auftragsverhältnis mit Theo Frey gehört der Bestand auch künstlerisch zu bedeutendsten im Schweizerischen Sozialarchiv. Die Aufnahmen (meist ländlicher) Angewiesenheit auf materielle und finanzielle Unterstützung sind auch insofern interessant, als sie noch nicht vom Missbrauchsdiskurs kontaminiert sind. Porträtiert werden in der Regel Menschen, die es in arbeitsreicher Umgebung einfach nicht schaffen, (finanziell) auf einen grünen Zweig zu kommen. Ebenfalls breiten Raum nehmen die Dokumentationen zur Abzeichenherstellung, zur Birnel- und Apfelringproduktion der Winterhilfe ein. Äusserst reichhaltiger Bestand mit Fotos, Objekten (Winterhilfeabzeichen) und Plakaten.""" 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: "Winterhilfe Schweiz") ], abstractSummaries: [ new LidoDescription(type: 'abstract', value: abstractSum) ], creationDates: ['1936P74Y'], accumulationDates: ['2010'], owners: [providerName], sizeItems: '847', itemType: 'IMAGE', itemFormatStm: '', collItemLanguages: [ 'fre', 'ger', ], associatedPub: 'http://findmittel.ch/Archive/archNeu/Ar2.html http://findmittel.ch/Archive/archNeu/Ar487.html', subjects: ['Solidarbewegung'], typedSubjects: [ new TypedSubjects(type: 'association', dates: ['1936-2010'], places: [ new LidoPlace(preferredName: 'CH') ]) ], descriptions: [ new LidoDescription(langCode: 'ger', value: "Bewertung erfolgt am 4. und 5. Feb. 2010; Erschliessungshilfen Nr. 1 bis 22; 1 Kartonschachtel „ohne Nr.“; 1 grosse Kartonschachtel mit Foto\'alben\' (Kontaktabzüge und Farbnegative letzte 15 Jahre) und Signetentwürfe 1938 bis ca. 1955; 5 Schachteln (Fa, 2xFb, Fc und Fd) vorbereitet für Digitalisierung: ca. 250 Einheiten; Abklärung Fotos von Theo Frey (aus Couvert 8).", type: 'custodial history') ] , 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) {} }