import eu.dnetlib.data.transformation.manager.GroovyUnaryFunction class EfgToDMF extends GroovyUnaryFunction { @Override public String evaluate(String input) { // println("EFG....") def params = getParams() def efg = new groovy.xml.Namespace("http://www.europeanfilmgateway.eu/efg", 'efg') def dri = new groovy.xml.Namespace("http://www.driver-repository.eu/namespace/dri", 'dri') def parser = new XmlParser(false, true) def inputRecord = parser.parseText(input); def objId = inputRecord.'*'.'dri:objIdentifier'.text() def repoId = inputRecord.'*'.'dri:repositoryId'.text() def dateColl = inputRecord.'*'.'dri:dateOfCollection'.text() def blobText = inputRecord.'**'*.text().join(' ') def title = inputRecord.'**'.'efg:title'[0]?.'efg:text'?.text() def listCreators = inputRecord.'**'.'efg:relPerson'?.'efg:name'*.text() def listDescriptions = inputRecord.'**'.'efg:description'*.text() def listSubjects = inputRecord.'**'.'efg:keywords'?.'efg:term'*.text() def listDates = inputRecord.'**'.'efg:date'*.text() def sw = new StringWriter() def xml = new groovy.xml.MarkupBuilder(sw) xml.record('xmlns:dc': 'http://purl.org/dc/elements/1.1/', 'xmlns:dr': 'http://www.driver-repository.eu/namespace/dr', 'xmlns:dri': "http://www.driver-repository.eu/namespace/dri") { header { 'dri:objIdentifier'(objId) 'dri:repositoryId'(repoId) 'dri:dateOfCollection'(dateColl) } metadata { 'dc:title'(title) repeatedValues(xml, 'dc:creator', listCreators) repeatedValues(xml, 'dc:description', listDescriptions) repeatedValues(xml, 'dc:subject', listSubjects) repeatedValues(xml, 'dc:date', listDates) 'dr:repositoryName'(params.repositoryName) 'dr:repositoryInstitution'(params.repositoryInstitution) 'dr:repositoryLink'(params.repositoryLink) 'dr:repositoryCountry'(params.repositoryCountry) 'blob' (blobText) } } println (sw.toString()) //println("done") return sw.toString() } def repeatedValues(builder, element, values ) { values.each { builder."${element}"("${it}".trim()) } } }