import org.antlr.stringtemplate.StringTemplate 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 TALidoUtils{ String transformSozObjekt(Node taObjekt, StringTemplate template, String dateOfColl, String repoId, String set, String collectionID){ //reset the template for the current object template.reset() //some useful roots: def Node adminNode = taObjekt.'lido:administrativeMetadata'.find{it.'@xml:lang' = 'fi'} def Node descrNode = taObjekt.'lido:descriptiveMetadata'.find{it.'@xml:lang' = 'fi'} //identifiers: def String metadataId = adminNode.'lido:recordWrap'.'lido:recordID'.find{it.'@lido:type' = 'local'}.text() def String resourceId = 'DR_'+metadataId; def String repoObjId = (repoId+"::"+metadataId) def String landingPageURL = "http://www.arjenhistoria.fi/actions/imageinfo.php?id="+metadataId def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfColl, repositoryId:repoId, setSpec:set, identifier:metadataId, objIdentifier:repoObjId) template.setAttribute("oaiheader", oaiheader) //def src = "Työväen Arkisto" def src = adminNode.'**'.'lido:rightsWorkWrap'?.'**'.'lido:legalBodyName'?.'lido:appellationValue'[0]?.text() if(!src) src = "Työväen Arkisto" def LidoIdentifiers lidoIds= new LidoIdentifiers(source:src, localID:metadataId, pid:'', parentID:collectionID) template.setAttribute("lido", lidoIds) def String europeanaType = descrNode.'**'.'lido:objectWorkType'.'lido:term'.text() def List lidoSubjects = [ new TypedSubjects(type:"depiction", concepts: descrNode.'lido:objectRelationWrap'?.'lido:subjectWrap'?.'**'.'lido:subject'?.'lido:subjectConcept'?.'lido:term'*.text(), ), new TypedSubjects(type:"association", places:descrNode.'**'.'lido:event'?.'lido:eventPlace'?.'lido:displayPlace'?.collect{ return new LidoPlace(preferredName:it?.text())}) ] def LidoEvent creationEvt = new LidoEvent(type:'creation', eventDisplayDates: descrNode.'**'.'lido:event'?.'lido:eventDate'?.'lido:displayDate'*.text() ) def theTitles = [] def titles = descrNode.'**'.'lido:objectDescriptionSet'?.'lido:descriptiveNoteValue'*.text().collect{ return new LidoTitle(value:it.replaceAll("&", "&"), langCode:'fin')} if(titles == null || titles.isEmpty()){ //fallback on lido:objectIdentificationWrap.lido:titleWrap.lido:titleSet.lido:appellationValue titles = descrNode.'**'.'lido:objectIdentificationWrap'?.'lido:titleWrap'?.'lido:titleSet'?.'lido:appellationValue'*.text().collect{ return new LidoTitle(value:it.replaceAll("&", "&"), langCode:'fin')} if(titles == null || titles.isEmpty()){ //fallback on No Title titles = [ new LidoTitle(value:'No Title') ] println "No Title for descriptive unit with local ID : "+metadataId } } theTitles = titles //workTypes will be mapped into objectNames def LidoDescriptiveMetadata lidoDescrMD = new LidoDescriptiveMetadata( workTypes:[], lang:"fi", objectMeasurements:[], repositoryName:src, europeanaType:europeanaType, collectionItemNumber:descrNode.'lido:objectIdentificationWrap'?.'lido:repositoryWrap'?.'lido:repositorySet'?.'lido:workID'?.text(), titles:theTitles, inscriptions: [], techAttributes:[], owners:[], creationEvent:creationEvt, typedSubjects:lidoSubjects, displaySubjects:[]) template.setAttribute("lidoDescr", lidoDescrMD) def String euroRights = 'http://www.europeana.eu/rights/rr-r/' def LidoAdminMetadata lidoAdminMD = new LidoAdminMetadata(lang:"fi", landingPage:new LandingPage(localID:landingPageURL, href:landingPageURL), recordType:adminNode.'**'.'lido:recordType'?.'lido:term'?.text(), europeanaRights:euroRights, rightsCreditLines:[]) //due to the PID assignment implementation: //if a derivative's resolveURL value (href) is empty: CP uses SOR, hence use the PID as it is //String href, type, format, localID, pid def String der2Link = adminNode.'**'.'lido:resourceRepresentation'?.'lido:linkResource'?.text()?.replaceAll('&', '&') def List ders = [] if(der2Link) ders = [ new Derivative(href:der2Link, localID:der2Link, type:'derivative2') ] else println "No derivative2 for resource: "+resourceId def LidoResourceWrap resWrap = new LidoResourceWrap(localID:resourceId, pid:'', europeanaType:europeanaType, languages:[], creditLine:euroRights,transcription:'', derivatives:ders) lidoAdminMD.setResources([resWrap]) template.setAttribute("lidoAdmin", lidoAdminMD) return template.toString(); } }