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.LanguagedValue import eu.dnetlib.hope.domains.common.OAIHeader import eu.dnetlib.hope.domains.library.MarcEditionStm import eu.dnetlib.hope.domains.library.MarcMeeting 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.MarcResource import eu.dnetlib.hope.domains.library.MarcTitle import eu.dnetlib.hope.domains.library.MarcTranslatedTitle class CGILModsUtils { def String transformModsRecord(Node modsNode, StringTemplate template, String dateOfColl, String repoId, String set, String providerName, String providerLanguage, String collectionID){ //reset the template for the current Faust-Objekt template.reset() //identifiers //mods/recordInfo/recordIdentifier def String objID = modsNode.'*:recordInfo'.'*:recordIdentifier'.text() def String repoObjId = (repoId+"::"+objID) //oai header def OAIHeader oaiheader = new OAIHeader(dateOfCollection:dateOfColl, repositoryId:repoId, setSpec:set, identifier:objID, objIdentifier:repoObjId) def String issn = modsNode.'*:relatedItem'?.find { it.'@displayLabel' == 'collezione' }?.'*:identifier'?.find{it.'@type' == 'issn'}?.text() def String isbn = modsNode.'*:identifier'.find { it.'@type' == 'ibsn' }?.text() def String bookNo = '' def landingPageURL = "http://cgil.maas.ccr.it/cgilbiblio/HAPConsole.aspx?dns=hap:localhost/bibliocgilPUBB/"+objID def LandingPage landingpage = new LandingPage(localID:landingPageURL, href:landingPageURL) def MarcTranslatedTitle mainTitle = new MarcTranslatedTitle( translation:StringEscapeUtils.escapeXml(modsNode.'*:titleInfo'?.find{it.'@type' == 'translated'}?.'*:title'?.text())) def MarcTranslatedTitle subTitle = new MarcTranslatedTitle( original:StringEscapeUtils.escapeXml(modsNode.'*:titleInfo'?.find{it.'@type' == 'uniform'}?.'*:subTitle'?.text()), translation:StringEscapeUtils.escapeXml(modsNode.'*:titleInfo'?.find{it.'@type' == 'translated'}?.'*:subTitle'?.text())) def MarcTitle marcTitle = new MarcTitle(main: mainTitle,subtitle:subTitle, proper:StringEscapeUtils.escapeXml(modsNode.'*:titleInfo'?.find{it.'@type' == 'uniform'}?.'*:title'?.text()), responsibility:StringEscapeUtils.escapeXml(modsNode.'*:note'?.find{it.'@type' == 'statement of responsibility'}?.text())) def editionNode = modsNode.'*:originInfo'?.find{it.'*:displayLabel' == 'edizione'} def printNode = modsNode.'*:originInfo'?.find{it.'*:displayLabel' == 'stampa'} def MarcPublication marcPublication= new MarcPublication( placeOfPublication:editionNode?.'*:place'?.'*:placeTerm'?.text(), publisher:editionNode?.'*:publisher'?.text(), dateOfPublication:editionNode?.'*:dateIssued'?.text(), dateOfPrinting:printNode?.'*:dateIssued'?.text(), placeOfPrinting: printNode?.'*:place'?.'*:placeTerm'?.text(), productor:printNode?.'*:publisher'?.text()) def String descrLevel = 'item' def String edmRights = 'Rights Reserved - Free Access' /* * //mods/name[@type=”personal”][@usage="primary"][role/@roleTerm=”author”]/namePart //mods/name[@type=”personal”][not(@usage="primary")][role/@roleTerm=”author”]/namePart //mods/name[@type=”corporate”][role/@roleTerm=”author”]/namePart */ def persons = modsNode.'*:name'.findAll{it.'@type' == 'personal' && it.'*:role'?.'@roleTerm' == 'author'} def corps =modsNode.'*:name'.findAll{it.'@type' == 'corporate' && it.'*:role'?.'@roleTerm' == 'author'}.'*:namePart'*.text() def authors = persons.findAll{it.'@usage' == 'primary'}.'*:namePart'*.text() def collaborators = persons.findAll{!it.'@usage'}.'*:namePart'*.text() /* * //mods/name[@type=”conference”][role/@roleTerm=”author”]/namePart x //mods/name[@type=”conference”][role/@roleTerm=”author”]/namePart[@type=”date”] //mods/name[@type=”conference”][role/@roleTerm=”author”]/description * String name, location, date */ def conferenceNodes = modsNode.'*:name'.findAll{it.'@type' == 'conference' && it.role?.'@roleTerm' == 'author'} def creatorMeetings = conferenceNodes.collect{ return new MarcMeeting(name:it.'*:namePart'?.find{!it.'@type' || it.'@type' != 'date'}?.text(), location:it.'*:description'?.text(), date:it.'*:namePart'?.find{it.'@type' == 'date'}?.text())} def theLanguage = modsNode.'*:language'.'*:languageTerm'.text() if(!theLanguage) theLanguage = providerLanguage def MarcRecord marcRecord = new MarcRecord(leader:'',pid:'', aggregator:'', descriptionLevel:descrLevel, localID:objID, issn_022:issn, landingPage:landingpage, parentRecord:new MarcRelative(localID:collectionID), providerName:providerName, providerLanguage:providerLanguage, bookNo_091:bookNo, extents:modsNode.'*:physicalDescription'?.'*:extent'*.text().collect{return new LanguagedValue(value:it)}, physDetails:[], dimensions:[], materialDesignations:[], toc:'', theabstracts:[], genre:'', keywords:modsNode.'*:subject'.'*:topic'*.text().collect{return new LanguagedValue(value:it)}, topicSubjects_650:[], creatorPersons_100:authors,personContributors:collaborators, creatorCorps_110:corps, corporateContributors:[], creatorMeetings_111:creatorMeetings,contributorMeetings_711:[], personSubjects_600:[],corporateSubjects_610:[], temporalCoverages_648:[],spatialCoverages_651:[], titles_245:[marcTitle], editionStms_250:editionNode?.'*:edition'*.text().collect{return new MarcEditionStm(main:it)}, publication:marcPublication, europeanaType:'TEXT', europeanaRights:edmRights, languages_041:[theLanguage]) /* * concat("cgil.maas.ccr.it/cgilbiblio/AJAXAttachment.ashx?resource=", substring-after(//mods/location/url,'/')) */ def baseURL = "http://cgil.maas.ccr.it/cgilbiblio/AJAXAttachment.ashx?resource=" def locURL = modsNode.'*:location'?.'*:url'?.text() def locationURL = locURL[1..-1] if(locationURL){ def String der2URL = baseURL+locationURL def String der2Id = locationURL def Derivative der2 = new Derivative(href:der2URL, localID:der2Id, type:'derivative2') def String resourceID = locationURL //objPID+"_"+der2Id def MarcResource resource = new MarcResource(id:resourceID, type:'TEXT', languages:[theLanguage], rights:edmRights, derivatives:[der2]) template.setAttribute("resources", [resource]) } else {template.setAttribute("resources", []) println "No resource to generate for metadata record "+objID } template.setAttribute("oaiheader", oaiheader) template.setAttribute("marc", marcRecord) return template.toString(); } }