import eu.dnetlib.hope.domains.archive.* import eu.dnetlib.hope.domains.common.* class GNQPhotosUtils { def escapeXml = {String s -> //return s.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'") if(s) return s.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<") else return '' } def generateHeader= { Node xmlRoot -> def eadHeaderElement = xmlRoot.'**'.eadheader def NodeList languages = eadHeaderElement.profiledesc.langusage.language def List languageList = languages.collect{ new Language(code:it.text(), text:it.text()) } def String dataProvider = "Génériques" def EadHeader eadHeader = new EadHeader( mainagencycode:"Hope", eadid:eadHeaderElement.eadid.text(), titleproper:new UnitTitle(title:eadHeaderElement.filedesc.titlestmt.titleproper.text()), creationProvider:dataProvider, languages:languageList ) return eadHeader } def generateSharedArchDesc = { -> def String collectionID = 'GNQPhotographsCollection' def EadDaoLoc collectionLandingPage = new EadDaoLoc(href:'http://odysseo.org/ead.html?id=FRAS075GNQ_edfphotographies ', label:"landing_page"); def String collectionThumbnail def EadDid collectionDid = new EadDid(localId:collectionID, repository:'Génériques', unittitles:[ new UnitTitle(title:'Photographs collection Migration in France, 1940 onwards.') ], physicalDescriptions:[ new EadPhysDesc(genreforms:[ new LanguagedValue(value:'image') ]) ], langmaterials:[]) def EadArchDesc eadArchDesc = new EadArchDesc(level:'collection', landingPage:collectionLandingPage, thumbnail:collectionThumbnail, did:collectionDid, dateCreated:new EadDate(normal:'1940-2000', value:'1940-2000'), dateAccumulated:new EadDate(normal:'2009-2012', value:'2009-2012'), scopecontentPars:[ new LanguagedValue(language:'eng', value:"""This collection includes several photographs relating to the history of immigration in France (1940-1990). These documents, produced by musicians, singers and athletes were collected by Génériques, whose mission consists in the preservation and valorisation of the private archives of immigration.""") ], acrualsPars:[], userrestrictPars:[ new LanguagedValue(value:'Rights Reserved') ],accessrestrictPars:[ new LanguagedValue(value:'Free Access') ], europeanaType:'IMAGE', europeanaRights:'Rights Reserved - Free Access', spatialCoverages:['France'], temporalCoverages:['1940-1990']) return eadArchDesc } def fillArchDescSons = { Node xmlRoot, EadArchDesc eadArchDesc, String repoId-> def archDescElement = xmlRoot.'**'.archdesc[0] def String eadId = xmlRoot.'**'.eadheader.eadid.text() def List originationNames = archDescElement.did.origination.name*.text() def List originationList = originationNames.collect{ return new EadOrigination(origination:escapeXml(it)) }+[ new EadOrigination(origination:escapeXml(archDescElement.did.origination?.text() ), corpnames:archDescElement.did.origination.corpname*.text().collect{ return new LanguagedValue(value:escapeXml(it)) }, persnames:archDescElement.did.origination.persname*.text().collect{ return new LanguagedValue(value:escapeXml(it)) }) ] def List midLevels = generateMidLevels(archDescElement, repoId, true, eadId, originationList) eadArchDesc.setNestedLevels(midLevels) def items = generateItemList(archDescElement.dsc[0], archDescElement, eadId, repoId, originationList) eadArchDesc.setItems(items) return eadArchDesc } def generateMidLevels = { cNode, repoId, isArchdesc, eadId, originationList -> def List midNodes if(isArchdesc) midNodes = cNode.dsc[0].findAll{ it.'@id' } else midNodes = cNode.c.findAll{ it.'@id' } //println 'counted '+midNodes.size() + " nested c elements" def List midLevels = midNodes.collect { if(it.'@level' == '' || !it.'@level' .equals('item')){ def EadMidLevel eadMidLevel = new EadMidLevel() def EadDid eadDid = generateDid(it, cNode, repoId, originationList) eadMidLevel.setDid(eadDid); eadMidLevel = generateCFields(eadMidLevel, cNode, it, repoId, eadId, false) def items = generateItemList(it, cNode, eadId, repoId, originationList) eadMidLevel.setItems(items) def List nestedLevels = generateMidLevels(it, repoId, false, eadId, originationList); eadMidLevel.setNestedLevels(nestedLevels) return eadMidLevel } } return midLevels; } def generateItemList={ Node container, Node archdescElement, String eadId, String repoId, List originationList -> def List itemNodes = container.c.findAll{it.'@level' .equals('item')} .findAll{it.dao} //println "found dao nodes: "+itemNodes.size(); int processedDao = 0; def List items = itemNodes.collect{ EadDid did = generateDid(it, archdescElement, repoId, originationList) def EadItem eadItem = new EadItem(transcription:escapeXml(it.scopecontent.p.text() ), type:"IMAGE", rights:"Free Access - Rights Reserved") eadItem = generateCFields(eadItem,archdescElement, it, repoId, eadId, false) as EadItem eadItem.setDid(did) def int numberOfEntries = 3 eadItem.setNumberOfEntries(numberOfEntries) //daolocs: def String dao = it.dao.@href[0] if(dao != null && !dao.isEmpty()){ processedDao++; def String digitalObjectID = dao EadDaoLoc der2 = new EadDaoLoc(href:"", label:"derivative2") EadDaoLoc der3 = new EadDaoLoc(href:"", label:"derivative3") eadItem.setDaolocs([der2, der3]) eadItem.setDaogrpId(digitalObjectID) } return eadItem } //println "processed dao nodes: "+processedDao; return items } def generateCFields={ EadCElement eadC, Node archDescElement, Node cElement, String repoId, String eadId, boolean isArchdesc -> //eadC.setId(cElement.@id) if(cElement.@level) eadC.setLevel(cElement.@level) else eadC.setLevel("mid-level") def bioghistPars = archDescElement.bioghist.p*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setBioghistPars(bioghistPars) def custodHistPars = archDescElement.custodhist.p*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setCustodHistPars(custodHistPars) def scopeContentPars = cElement.scopecontent.p*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setScopecontentPars(scopeContentPars) def accessPars = archDescElement.accessrestrict.p*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setAccessrestrictPars(accessPars) def relMaterials = cElement.relatedmaterial*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setRelatedmaterials(relMaterials) def sepMaterials = cElement.separatedmaterial*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setSeparatedmaterials(sepMaterials) def biblios = cElement.bibliography*.text().collect{return new LanguagedValue(value:escapeXml(it))} eadC.setBibliographies(biblios) def accesses = cElement.controlaccess def List accessList = accesses.collect{ def EadControlAccess controlAccess = new EadControlAccess(controlaccess:escapeXml(it.text() )) controlAccess.setCorpNames(it.corpname*.text().collect{return new LanguagedValue(value:it)}) controlAccess.setPersNames(it.persname*.text().collect{return new LanguagedValue(value:it)}) controlAccess.setGeognames(it.geogname*.text().collect{return new LanguagedValue(value:it)}) return controlAccess } eadC.setControlAccesses(accessList) eadC.setEuropeanaType('IMAGE') eadC.setEuropeanaRights("Free Access - Rights Reserved") //landing page: //concat("http://odysseo.org/ead.html?id=", /ead/eadheader/eadid, "&c=", /ead/eadheader/eadid, "_", //c@id, "&qid=sdx_q24") def EadDaoLoc landingPage = new EadDaoLoc() if(!isArchdesc) landingPage.setHref("http://odysseo.org/ead.html?id="+eadId+"&c="+eadId+'_'+cElement.'@id'+"&qid=sdx_q24") else landingPage.setHref("http://odysseo.org/ead.html?id="+eadId+"&qid=sdx_q24") landingPage.setLabel("landing_page") eadC.setLandingPage(landingPage) return eadC; } def getLanguages = { Node cNode -> def List langs = cNode.controlaccess?.subject?.findAll{it.'@source' .equals("liste-langue")}*.text() return langs.collect{new Language(code:"", text:it )} } def generateDid = {Node cElement, Node archDescElement, String repoId, List originationList -> def callNo = cElement.dao?.@href[0] def languages = getLanguages(cElement) def physNode = cElement.did.physdesc?.find{it.'@label' .equals("Description physique")} def physDesc = new EadPhysDesc(physdesc:escapeXml(physNode?.text() ), genreforms:[ new LanguagedValue(value:escapeXml(physNode?.genreform?.find{it.'@source' .equals("liste-typedocAC")}?.text() )) ]) def oddsList = cElement.odd?.findAll{it.'@type' .equals("commentaire")}?.p*.text().collect{return new LanguagedValue(value:escapeXml(it))} def List cUnitTitles = cElement.did.collect{return new UnitTitle(title:it.unittitle?.text(), date:it.unitdate?.text())} def eadDid = new EadDid(callNumber:callNo, localId:cElement.@id, langmaterials:languages, repository:archDescElement.did.repository?.text() , originations:originationList, physicalDescriptions:[physDesc], unittitles:cUnitTitles, odds:oddsList, notes:[]) return eadDid; } }