import org.antlr.stringtemplate.StringTemplate import org.apache.commons.lang.StringEscapeUtils import eu.dnetlib.hope.domains.common.LandingPage import eu.dnetlib.hope.domains.common.LanguagedValue import eu.dnetlib.hope.domains.common.OAIHeader import eu.dnetlib.hope.domains.library.MarcEditionStm import eu.dnetlib.hope.domains.library.MarcPublication import eu.dnetlib.hope.domains.library.MarcRecord import eu.dnetlib.hope.domains.library.MarcRelative import eu.dnetlib.hope.domains.library.MarcTitle import eu.dnetlib.hope.domains.library.MarcTranslatedTitle class IISHNDLibraryUtils { def marc=new groovy.xml.Namespace("http://www.loc.gov/MARC21/slim", 'marc') def createMarcRecord = { Node marcRecord, StringTemplate template, String dateOfCOllection, String repositoryId, String dataProvider, String collectionID, String collectionPID -> //reset the template for the current record template.reset() //identifiers def String objPID = marcRecord.'*:datafield'.find{it.'@tag' == '902'}.'*:subfield'.find{it.'@code' == 'a'}.text() def String repoObjId = (repositoryId+"::"+objPID) def String objPIDUrl = 'http://hdl.handle.net/'+objPID //oai header def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfCOllection, repositoryId:repositoryId, setSpec:'', identifier:objPID, objIdentifier:repoObjId, nonDigitalCollection:true) def LandingPage landingpage = new LandingPage(href:objPIDUrl) def MarcTranslatedTitle mainTitle = new MarcTranslatedTitle( original:StringEscapeUtils.escapeXml(marcRecord.'*:datafield'.find{it.'@tag' == '245'}?.'*:subfield'.find{it.'@code' == 'a'}?.text()), translation:StringEscapeUtils.escapeXml(marcRecord.'*:datafield'.find{it.'@tag' == '740'}?.'*:subfield'.find{it.'@code' == 'a'}?.text()) ) def MarcTitle marcTitle = new MarcTitle(main: mainTitle, materialDesignation:StringEscapeUtils.escapeXml(marcRecord.'*:datafield'.find{it.'@tag' == '245'}?.'*:subfield'.find{it.'@code' == 'k'}?.text())) def editionNodes = marcRecord.'*:datafield'.findAll{it.'@tag' == '250'} List editionStms = editionNodes.collect{ return new MarcEditionStm(main:StringEscapeUtils.escapeXml(it?.'*:subfield'?.find{it.'@code' == 'a'}?.text()), responsibility:StringEscapeUtils.escapeXml(it?.'*:subfield'?.find{it.'@code' == 'b'}?.text())) } def publicationNode = marcRecord.'*:datafield'.find{it.'@tag' == '260'} def MarcPublication marcPublication= new MarcPublication( placeOfPublication:StringEscapeUtils.escapeXml(publicationNode?.'*:subfield'?.find{it.'@code' == 'a'}?.text()), publisher:StringEscapeUtils.escapeXml(publicationNode?.'*:subfield'?.find{it.'@code' == 'b'}?.text()), dateOfPublication:StringEscapeUtils.escapeXml(publicationNode?.'*:subfield'?.find{it.'@code' == 'c'}?.text())) //def List theNotes = marcRecord.'*:datafield'.findAll{it.'@tag' == '500'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text() //I do not know why the above gpath does not work. The workaround is the following gpath, which is not strictly correct, but it is useful to the goal. def theNotes = marcRecord.'*:datafield'.findAll{it.'@tag'=='500'}.'*:subfield'*.text() def MarcRecord marc = new MarcRecord(leader:'',localID:objPID, pid:objPIDUrl, aggregator:'', descriptionLevel:'item', landingPage:landingpage, parentRecord:new MarcRelative(localID:collectionID,pid:collectionPID), providerName:dataProvider, providerLanguage:'nld', extents: marcRecord.'*:datafield'.findAll{it.'@tag' == '300'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))}, physDetails:[], dimensions:[], materialDesignations: marcRecord.'*:datafield'.findAll{it.'@tag' == '245'}.'*:subfield'.findAll{it.'@code' == 'k'}*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))}, toc:StringEscapeUtils.escapeXml(marcRecord.'*:datafield'.find{it.'@tag' == '505'}?.'*:subfield'.find{it.'@code' == 'a'}?.text()), theabstracts: marcRecord.'*:datafield'.findAll{it.'@tag' == '520'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))}, genre:'', keywords:[], topicSubjects_650:[], creatorPersons_100:marcRecord.'*:datafield'.findAll{it.'@tag' == '100'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, personContributors:marcRecord.'*:datafield'.findAll{it.'@tag' == '700'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, creatorCorps_110:marcRecord.'*:datafield'.findAll{it.'@tag' == '110'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, corporateContributors:marcRecord.'*:datafield'.findAll{it.'@tag' == '710'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, creatorMeetings_111: marcRecord.'*:datafield'.findAll{it.'@tag' == '111'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, contributorMeetings_711:marcRecord.'*:datafield'.findAll{it.'@tag' == '711'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, personSubjects_600:marcRecord.'*:datafield'.findAll{it.'@tag' == '600'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, corporateSubjects_610:[], temporalCoverages_648:marcRecord.'*:datafield'.findAll{it.'@tag' == '648'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text().collect{return StringEscapeUtils.escapeXml(it)}, spatialCoverages_651:[], titles_245:[marcTitle], editionStms_250:editionStms, publication:marcPublication, europeanaType:'TEXT', europeanaRights:'Rights Reserved - Free Access', languages_041 :marcRecord.'*:datafield'.findAll{it.'@tag' == '41'}.'*:subfield'.findAll{it.'@code' == 'a'}*.text(), notes:theNotes.collect{ if(it) return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} ) template.setAttribute("oaiheader", oaiheader) template.setAttribute("marc", marc) return template.toString(); } }