import eu.dnetlib.data.transformation.manager.GroovyUnaryFunction class CmdiToDMF extends GroovyUnaryFunction { @Override public String evaluate(String input) { //println("CMDI....") def params = getParams() def inputRecord = new XmlSlurper().parseText(input); def objId = inputRecord.header.objIdentifier def repoId = inputRecord.header.repositoryId def dateColl = inputRecord.header.dateOfCollection def blobText = inputRecord.metadata.text().replaceAll(/\n/, " ").replaceAll(/\s+/, " ") def listTitles = inputRecord.depthFirst().findAll { it.name() == 'Title' && it.parent()?.name() == 'Session' && it.text().length() > 0 } def listCreators = inputRecord.depthFirst().findAll { it.name() == 'Name' && it.parent()?.name() == 'Actor' && it.text().length() > 0 } def listDescriptions = inputRecord.depthFirst().findAll { it.name() == 'Description' && it.parent()?.parent()?.name() == 'Session' && it.text().length() > 0 } def listDates = inputRecord.depthFirst().findAll { it.name() == 'Date' && it.parent()?.name() == 'Session' && it.text().length() > 0 } def listSubjects = [] 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 { repeatedValues(xml, 'dc:title', listTitles) 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()) } } }