import org.antlr.stringtemplate.StringTemplate import org.apache.commons.lang.StringEscapeUtils import eu.dnetlib.hope.domains.common.Derivative import eu.dnetlib.hope.domains.common.LandingPage import eu.dnetlib.hope.domains.common.OAIHeader import eu.dnetlib.hope.domains.visual.* class AMSABVisualUtils{ String transform(Node record, StringTemplate template, String dateOfColl, String repoId, String set, String collectionId){ //reset the template for the current object template.reset() //identifiers: def String metadataId = record.LocalID.text() def String metadataPID = 'http://hdl.handle.net/10796/'+metadataId def String repoObjId = (repoId+"::"+metadataPID) def String landingPageURL = record.HOPE_DU_landingPage?.text() //oai header def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfColl, repositoryId:repoId, setSpec:set, identifier:metadataPID, objIdentifier:repoObjId) template.setAttribute("oaiheader", oaiheader) def src = record.HOPE_CP_name.text() def LidoIdentifiers lidoIds= new LidoIdentifiers(source:src, localID:metadataId, pid:metadataPID, parentID:collectionId, parentPID:collectionId) template.setAttribute("lido", lidoIds) def String mdLanguage = record.HOPE_DU_languageMetadata.text() def String europeanaType = record.HOPE_DR_type.text() def String rights = record.HOPE_DR_rights.text() def List materials = record.material*.text() def List techniques = record.technique*.text() def LidoEvent creationEvt = new LidoEvent(type:'creation', eventMaterialsTech:[ new LidoMaterial(type:'material', terms:materials), new LidoMaterial(type:'technique', terms:techniques) ], eventDisplayDates:record.'production.date.start'*.text(), eventActors:record.creator*.text().collect{ return new LidoActor(preferredName:StringEscapeUtils.escapeXml(it))} ) def List lidoSubjects = [ new TypedSubjects(type:'association', places:record.HOPE_DU_spatialCoverage*.text().collect{ return new LidoPlace(preferredName:it)} ) ] def List descrs = record.description*.text().collect{new LidoDescription(langCode:mdLanguage, value:StringEscapeUtils.escapeXml(it), type:'brief description')} def List titles = record.title*.text().collect{new LidoTitle(langCode:mdLanguage, value:StringEscapeUtils.escapeXml(it))} def LidoDescriptiveMetadata lidoDescrMD = new LidoDescriptiveMetadata( workTypes:record.object_name*.text(), lang:mdLanguage, objectMeasurements:record.dimensions*.text(), repositoryName:record.'institution.name'?.text(), europeanaType:europeanaType, collectionItemNumber:record.HOPE_DU_localID?.text(), titles:titles, descriptions:descrs, inscriptions: [], techAttributes:[], owners:[], creationEvent:creationEvt, typedSubjects:lidoSubjects, displaySubjects:record.'content.subject'*.text()) template.setAttribute("lidoDescr", lidoDescrMD) def LidoAdminMetadata lidoAdminMD = new LidoAdminMetadata(lang:mdLanguage, landingPage:new LandingPage(localID:landingPageURL, href:landingPageURL), recordType:record.HOPE_VU_levelOfDescription.text(), europeanaRights:rights, rightsCreditLines:[], resources:[ generateResourceWrap(record, europeanaType, rights) ]) template.setAttribute("lidoAdmin", lidoAdminMD) return template.toString(); } def generateResourceWrap = {record, euroType, euroRights -> def String resourcePid = record.HOPE_DR_persistentID.text() def String der2PID = record.HOPE_DR_derivative2.text() def String der3PID = record.HOPE_DR_derivative3.text() def ders = [ //String href, type, format, localID, pid new Derivative(localID:record.'reproduction.reference'.text(), pid:der2PID, type:'derivative2'), new Derivative(localID: der3PID, pid:der3PID, type:'derivative3') ] def LidoResourceWrap resWrap = new LidoResourceWrap(localID:resourcePid, pid:resourcePid, europeanaType:euroType, languages:[], creditLine:euroRights,derivatives:ders) return resWrap; } }