import org.apache.commons.lang.StringEscapeUtils import eu.dnetlib.hope.domains.archive.* import eu.dnetlib.hope.domains.common.* class GNQPostersUtils { 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:StringEscapeUtils.escapeXml(eadHeaderElement.filedesc.titlestmt.titleproper.text())), creationProvider:dataProvider, languages:languageList ) return eadHeader } def generateSharedArchDesc = { -> def String collectionID = 'GNQPostersCollection' def EadDaoLoc collectionLandingPage = new EadDaoLoc(href:'http://odysseo.org/ead.html?id=FRAS075GNQ_edfaffiches', label:"landing_page"); def String collectionThumbnail def EadDid collectionDid = new EadDid(localId:collectionID, repository:'Génériques', unittitles:[ new UnitTitle(title:'Posters collection Migration in France, 1960 onwards.') ], physicalDescriptions:[ new EadPhysDesc(genreforms:[ new LanguagedValue(value:'image') ]) ], langmaterials:[ new Language(code:'deu', text:'German'), new Language(code:'eng', text:'English'), new Language(code:'ara', text:'Arab'), new Language(code:'spa', text:'Spanish'), new Language(code:'fra', text:'French'), new Language(code:'ell', text:'Greek'), new Language(code:'ita', text:'Italian'), new Language(code:'por', text:'Portuguese'), new Language(code:'rus', text:'Russian'), new Language(code:'tur', text:'Turkish'), new Language(code:'dut', text:'Dutch'), new Language(code:'kur', text:'Kurdish'), new Language(code:'pol', text:'Polish'), new Language(code:'cat', text:'Catalan'), new Language(code:'zho', text:'Chinese'), new Language(code:'tam', text:'Tamil'), new Language(code:'jbe', text:'Berber'), new Language(code:'cos', text:'Corsican'), new Language(code:'dan', text:'Danish'), new Language(code:'nor', text:'Norwegian'), new Language(code:'arm', text:'Armenian'), new Language(code:'hin', text:'Hindi'), new Language(code:'fas', text:'Farsi'), new Language(code:'ron', text:'Romanian'), new Language(code:'tha', text:'Thai'), new Language(code:'yid', text:'Yiddish') ]) def EadArchDesc eadArchDesc = new EadArchDesc(level:'collection', landingPage:collectionLandingPage, thumbnail:collectionThumbnail, did:collectionDid, dateCreated:new EadDate(normal:'1960-2010', value:'1960-2010'), dateAccumulated:new EadDate(normal:'1990-2010', value:'1990-2010'), scopecontentPars:[ new LanguagedValue(language:'eng', value:'Génériques’ poster collection was started the by the founding members of Génériques who, while fighting for immigrants’ rights in France in the early 1970s (in particular Said Bouziri, president of Génériques until his death in June 2009), were careful to save posters (as well as archival documents, leaflets, brochures, etc..).') ], acrualsPars:[ new LanguagedValue(language:'eng', value:'The collection has been enriched by donations from individuals and not-for-profit organisations. People working at Génériques have also worked for the preservation and collection of posters by working with organisations linked to immigrants. Some of those posters are now part of Génériques’ online digital library, Odysséo') ], userrestrictPars:[ new LanguagedValue(value:'Rights Reserved') ],accessrestrictPars:[ new LanguagedValue(value:'Free Access') ], europeanaType:'IMAGE', europeanaRights:'Rights Reserved - Free Access') 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.collect{ return StringEscapeUtils.escapeXml(it?.text()) } def List originationList = originationNames.collect{ return new EadOrigination(origination:it) }+[ new EadOrigination(origination:StringEscapeUtils.escapeXml(archDescElement.did.origination?.text() ), corpnames:archDescElement.did.origination.corpname*.text().collect{ return new LanguagedValue(value:StringEscapeUtils.escapeXml(it)) }, persnames:archDescElement.did.origination.persname*.text().collect{ return new LanguagedValue(value:StringEscapeUtils.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:StringEscapeUtils.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 def List languages = getItemLanguages(it) eadItem.setLanguages(languages.collect{it.text}) numberOfEntries += languages.size() eadItem.setNumberOfEntries(numberOfEntries) //daolocs: def String dao = it.dao.@href[0] if(dao != null && !dao.isEmpty()){ processedDao++; def String[] splitted = dao.split("/") def String digitalObjectID = splitted[1].toUpperCase().replace(".JPG", "") //href: http://odysseo.org/img-viewer/affiches/viewer.html?name=LID.jpg 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:StringEscapeUtils.escapeXml(it))} eadC.setBioghistPars(bioghistPars) def custodHistPars = archDescElement.custodhist.p*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setCustodHistPars(custodHistPars) def scopeContentPars = archDescElement.scopecontent.p*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setScopecontentPars(scopeContentPars) def accessPars = archDescElement.accessrestrict.p*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setAccessrestrictPars(accessPars) def relMaterials = cElement.relatedmaterial*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setRelatedmaterials(relMaterials) def sepMaterials = cElement.separatedmaterial*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setSeparatedmaterials(sepMaterials) def biblios = cElement.bibliography*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} eadC.setBibliographies(biblios) def accesses = cElement.controlaccess def List accessList = accesses.collect{ def EadControlAccess controlAccess = new EadControlAccess(controlaccess:StringEscapeUtils.escapeXml(it.text() )) controlAccess.setCorpNames(it.corpname.findAll{!(it.'@role'.equals('auteur'))}*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))}) controlAccess.setPersNames(it.persname*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))}) controlAccess.setGeognames(it.geogname.findAll{it.'@type' .equals("lieu_evenement")}*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(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 getFlattenLanguagesFromLangmaterial = { Node didNode -> def List langMaterials = didNode.langmaterial?.findAll{it.'@label' .equals("Langue du texte")}*.text() def outLangs = langMaterials.collect{ def String[] splitted = [it]as String[] if(it.contains(' ; ')) splitted = it.split(' ; ') else if(it.contains(' • ')) splitted = it.split(' • ') //in the original EAD ' • ' is ' • ' return splitted.collect{ new Language(code:"", text:it ) } } def langmaterialsList = outLangs.flatten() return langmaterialsList } 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 getItemLanguages = { Node cNode -> def langs = cNode.did.langmaterial*.text() //if there are no languages at this level, then check the parent if(!langs) langs = cNode.parent().did.langmaterial*.text() //if the parent has no languages, then use "fra" as default if(!langs) return [ new Language(code:'fra', text:'fra' ) ] //split on both delimiter characters def tokenizedLanguages = langs.collect{it.tokenize(';•')} return tokenizedLanguages.flatten().collect{new Language(code:it, text:it )} } def generateDid = {Node cElement, Node archDescElement, String repoId, List originationList -> def seriesId = cElement.did.unitid.find{it.'@label' .equals("Référence")}?.text() def languages = getLanguages(cElement) def physNode = cElement.did.physdesc?.find{it.'@label' .equals("Description physique")} def physDesc = new EadPhysDesc(physdesc:StringEscapeUtils.escapeXml(physNode?.text() ), genreforms:[ new LanguagedValue(value:StringEscapeUtils.escapeXml(physNode?.genreform?.find{it.'@source' .equals("liste-typedocAC")}?.text() )) ]) def notesList = cElement.odd?.findAll{it.'@type' .equals("commentaire") || it.'@type' .equals("information imprimerur")}?.p*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} def oddsList = cElement.odd?.findAll{it.'@type' .equals("note isbd") }?.p*.text().collect{return new LanguagedValue(value:StringEscapeUtils.escapeXml(it))} def List cUnitTitles = cElement.did.collect{ def String titleValue = it.unittitle?.text() if(!titleValue) titleValue = it.unittitle?.unitdate?.text() new UnitTitle(title:StringEscapeUtils.escapeXml(titleValue), date:StringEscapeUtils.escapeXml(it.unitdate?.text())) } def eadDid = new EadDid(callNumber:seriesId, localId:cElement.@id, langmaterials:languages, repository:StringEscapeUtils.escapeXml(archDescElement.did.repository?.text()), originations:originationList, physicalDescriptions:[physDesc], unittitles:cUnitTitles, odds:oddsList, notes:notesList) return eadDid; } }