Skip to content

Commit

Permalink
update rights, description and language in Datacite metadata and in D…
Browse files Browse the repository at this point in the history
…atacite Register
  • Loading branch information
juancorr committed Mar 15, 2024
1 parent 4fb27a3 commit 38d89a7
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package edu.harvard.iq.dataverse;

import static edu.harvard.iq.dataverse.DataCiteMetadataTemplate.getLanguageCode;
import static edu.harvard.iq.dataverse.DOIDataCiteRegisterService.getLanguageCode;
import edu.harvard.iq.dataverse.license.License;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.MarkupChecker;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,21 @@
*/
@Stateless
public class DOIDataCiteRegisterService {
// MADROÑO BEGIN. Send rights, subjects and languages to DataCite
private static String languageCodes= "aa,Afar#ab,Abkhazian#ae,Avestan#af,Afrikaans#ak,Akan#am,Amharic#an,Aragonese#ar,Arabic#as,Assamese#av,Avaric#ay,Aymara#az,Azerbaijani#ba,Bashkir#be,Belarusian#bg,Bulgarian#bh,Bihari languages#bi,Bislama#bm,Bambara#bn,Bengali#bo,Tibetan#br,Breton#bs,Bosnian#ca,Catalan; Valencian#ce,Chechen#ch,Chamorro#co,Corsican#cr,Cree#cs,Czech#cu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic#cv,Chuvash#cy,Welsh#da,Danish#de,German#dv,Divehi; Dhivehi; Maldivian#dz,Dzongkha#ee,Ewe#el,\"Greek, Modern (1453-)\"#en,English#eo,Esperanto#es,Spanish; Castilian#es,Spanish#et,Estonian#eu,Basque#fa,Persian#ff,Fulah#fi,Finnish#fj,Fijian#fo,Faroese#fr,French#fy,Western Frisian#ga,Irish#gd,Gaelic; Scottish Gaelic#gl,Galician#gn,Guarani#gu,Gujarati#gv,Manx#ha,Hausa#he,Hebrew#hi,Hindi#ho,Hiri Motu#hr,Croatian#ht,Haitian; Haitian Creole#hu,Hungarian#hy,Armenian#hz,Herero#ia,Interlingua (International Auxiliary Language Association)#id,Indonesian#ie,Interlingue; Occidental#ig,Igbo#ii,Sichuan Yi; Nuosu#ik,Inupiaq#io,Ido#is,Icelandic#it,Italian#iu,Inuktitut#ja,Japanese#jv,Javanese#ka,Georgian#kg,Kongo#ki,Kikuyu; Gikuyu#kj,Kuanyama; Kwanyama#kk,Kazakh#kl,Kalaallisut; Greenlandic#km,Central Khmer#kn,Kannada#ko,Korean#kr,Kanuri#ks,Kashmiri#ku,Kurdish#kv,Komi#kw,Cornish#ky,Kirghiz; Kyrgyz#la,Latin#lb,Luxembourgish; Letzeburgesch#lg,Ganda#li,Limburgan; Limburger; Limburgish#ln,Lingala#lo,Lao#lt,Lithuanian#lu,Luba-Katanga#lv,Latvian#mg,Malagasy#mh,Marshallese#mi,Maori#mk,Macedonian#ml,Malayalam#mn,Mongolian#mr,Marathi#ms,Malay#mt,Maltese#my,Burmese#na,Nauru#nb,\"Bokmål, Norwegian; Norwegian Bokmål\"#nd,\"Ndebele, North; North Ndebele\"#ne,Nepali#ng,Ndonga#nl,Dutch; Flemish#nn,\"Norwegian Nynorsk; Nynorsk, Norwegian\"#no,Norwegian#nr,\"Ndebele, South; South Ndebele\"#nv,Navajo; Navaho#ny,Chichewa; Chewa; Nyanja#oc,Occitan (post 1500)#oj,Ojibwa#om,Oromo#or,Oriya#os,Ossetian; Ossetic#pa,Panjabi; Punjabi#pi,Pali#pl,Polish#ps,Pushto; Pashto#pt,Portuguese#qu,Quechua#rm,Romansh#rn,Rundi#ro,Romanian; Moldavian; Moldovan#ru,Russian#rw,Kinyarwanda#sa,Sanskrit#sc,Sardinian#sd,Sindhi#se,Northern Sami#sg,Sango#si,Sinhala; Sinhalese#sk,Slovak#sl,Slovenian#sm,Samoan#sn,Shona#so,Somali#sq,Albanian#sr,Serbian#ss,Swati#st,\"Sotho, Southern\"#su,Sundanese#sv,Swedish#sw,Swahili#ta,Tamil#te,Telugu#tg,Tajik#th,Thai#ti,Tigrinya#tk,Turkmen#tl,Tagalog#tn,Tswana#to,Tonga (Tonga Islands)#tr,Turkish#ts,Tsonga#tt,Tatar#tw,Twi#ty,Tahitian#ug,Uighur; Uyghur#uk,Ukrainian#ur,Urdu#uz,Uzbek#ve,Venda#vi,Vietnamese#vo,Volapük#wa,Walloon#wo,Wolof#xh,Xhosa#yi,Yiddish#yo,Yoruba#za,Zhuang; Chuang#zh,Chinese#zu,Zulu";
public static HashMap <String,String> languageCodesMap;
public static String getLanguageCode (String langName) {
if (languageCodesMap== null) {
languageCodesMap= new HashMap<>();
String languagesArray[]= languageCodes.split("#");
for (String languageSet: languagesArray) {
String languagePartsArray[]= languageSet.split(",");
languageCodesMap.put(languagePartsArray[1], languagePartsArray[0]);
}
}
return languageCodesMap.get (langName);
}
// MADROÑO END. Send rights, subjects and languages to DataCite

private static final Logger logger = Logger.getLogger(DOIDataCiteRegisterService.class.getCanonicalName());

Expand Down Expand Up @@ -400,23 +415,9 @@ class DataCiteMetadataTemplate {
private List<String[]> producers;

// MADROÑO BEGIN. Send rights, subjects and languages to DataCite
private static String languageCodes= "aa,Afar#ab,Abkhazian#ae,Avestan#af,Afrikaans#ak,Akan#am,Amharic#an,Aragonese#ar,Arabic#as,Assamese#av,Avaric#ay,Aymara#az,Azerbaijani#ba,Bashkir#be,Belarusian#bg,Bulgarian#bh,Bihari languages#bi,Bislama#bm,Bambara#bn,Bengali#bo,Tibetan#br,Breton#bs,Bosnian#ca,Catalan; Valencian#ce,Chechen#ch,Chamorro#co,Corsican#cr,Cree#cs,Czech#cu,Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic#cv,Chuvash#cy,Welsh#da,Danish#de,German#dv,Divehi; Dhivehi; Maldivian#dz,Dzongkha#ee,Ewe#el,\"Greek, Modern (1453-)\"#en,English#eo,Esperanto#es,Spanish; Castilian#es,Spanish#et,Estonian#eu,Basque#fa,Persian#ff,Fulah#fi,Finnish#fj,Fijian#fo,Faroese#fr,French#fy,Western Frisian#ga,Irish#gd,Gaelic; Scottish Gaelic#gl,Galician#gn,Guarani#gu,Gujarati#gv,Manx#ha,Hausa#he,Hebrew#hi,Hindi#ho,Hiri Motu#hr,Croatian#ht,Haitian; Haitian Creole#hu,Hungarian#hy,Armenian#hz,Herero#ia,Interlingua (International Auxiliary Language Association)#id,Indonesian#ie,Interlingue; Occidental#ig,Igbo#ii,Sichuan Yi; Nuosu#ik,Inupiaq#io,Ido#is,Icelandic#it,Italian#iu,Inuktitut#ja,Japanese#jv,Javanese#ka,Georgian#kg,Kongo#ki,Kikuyu; Gikuyu#kj,Kuanyama; Kwanyama#kk,Kazakh#kl,Kalaallisut; Greenlandic#km,Central Khmer#kn,Kannada#ko,Korean#kr,Kanuri#ks,Kashmiri#ku,Kurdish#kv,Komi#kw,Cornish#ky,Kirghiz; Kyrgyz#la,Latin#lb,Luxembourgish; Letzeburgesch#lg,Ganda#li,Limburgan; Limburger; Limburgish#ln,Lingala#lo,Lao#lt,Lithuanian#lu,Luba-Katanga#lv,Latvian#mg,Malagasy#mh,Marshallese#mi,Maori#mk,Macedonian#ml,Malayalam#mn,Mongolian#mr,Marathi#ms,Malay#mt,Maltese#my,Burmese#na,Nauru#nb,\"Bokmål, Norwegian; Norwegian Bokmål\"#nd,\"Ndebele, North; North Ndebele\"#ne,Nepali#ng,Ndonga#nl,Dutch; Flemish#nn,\"Norwegian Nynorsk; Nynorsk, Norwegian\"#no,Norwegian#nr,\"Ndebele, South; South Ndebele\"#nv,Navajo; Navaho#ny,Chichewa; Chewa; Nyanja#oc,Occitan (post 1500)#oj,Ojibwa#om,Oromo#or,Oriya#os,Ossetian; Ossetic#pa,Panjabi; Punjabi#pi,Pali#pl,Polish#ps,Pushto; Pashto#pt,Portuguese#qu,Quechua#rm,Romansh#rn,Rundi#ro,Romanian; Moldavian; Moldovan#ru,Russian#rw,Kinyarwanda#sa,Sanskrit#sc,Sardinian#sd,Sindhi#se,Northern Sami#sg,Sango#si,Sinhala; Sinhalese#sk,Slovak#sl,Slovenian#sm,Samoan#sn,Shona#so,Somali#sq,Albanian#sr,Serbian#ss,Swati#st,\"Sotho, Southern\"#su,Sundanese#sv,Swedish#sw,Swahili#ta,Tamil#te,Telugu#tg,Tajik#th,Thai#ti,Tigrinya#tk,Turkmen#tl,Tagalog#tn,Tswana#to,Tonga (Tonga Islands)#tr,Turkish#ts,Tsonga#tt,Tatar#tw,Twi#ty,Tahitian#ug,Uighur; Uyghur#uk,Ukrainian#ur,Urdu#uz,Uzbek#ve,Venda#vi,Vietnamese#vo,Volapük#wa,Walloon#wo,Wolof#xh,Xhosa#yi,Yiddish#yo,Yoruba#za,Zhuang; Chuang#zh,Chinese#zu,Zulu";
public static HashMap <String,String> languageCodesMap;

private List <String> languages;
private List <String> subjects;
private TermsOfUseAndAccess termsOfUse;
public static String getLanguageCode (String langName) {
if (languageCodesMap== null) {
languageCodesMap= new HashMap<>();
String languagesArray[]= languageCodes.split("#");
for (String languageSet: languagesArray) {
String languagePartsArray[]= languageSet.split(",");
languageCodesMap.put(languagePartsArray[1], languagePartsArray[0]);
}
}
return languageCodesMap.get (langName);
}
// MADROÑO END. Send rights, subjects and languages to DataCite

public List<String[]> getProducers() {
Expand Down Expand Up @@ -568,7 +569,7 @@ public String generateXML(DvObject dvObject) {
StringBuilder languageElements= new StringBuilder();
List <String> languageElementList= getLanguages();
if (languageElementList!= null && !languageElementList.isEmpty()) {
String languageName= getLanguageCode(languageElementList.get(0));
String languageName= DOIDataCiteRegisterService.getLanguageCode(languageElementList.get(0));
if (languageName!= null && !languageName.equals("null"))
languageElements.append("<language>").append(languageName).append("</language>");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package edu.harvard.iq.dataverse.export.dublincore;

import com.google.gson.Gson;
import static edu.harvard.iq.dataverse.DOIDataCiteRegisterService.getLanguageCode;
import edu.harvard.iq.dataverse.DatasetFieldConstant;
import edu.harvard.iq.dataverse.GlobalId;
import edu.harvard.iq.dataverse.api.dto.DatasetDTO;
Expand All @@ -16,6 +17,7 @@
import edu.harvard.iq.dataverse.harvest.server.OAIRecordServiceBean;
import edu.harvard.iq.dataverse.util.json.JsonUtil;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -55,7 +57,8 @@ public class DublinCoreExportUtil {
protected static HashMap <String, String> recolectaAcronymsMap;
protected static HashSet <String> recolectaAcronymsSet;


protected static Map<String, String> langIsoCodes; // Madroño. Get the lang codes in the iso format

public static void datasetJson2dublincore(JsonObject datasetDtoAsJson, OutputStream outputStream, String dcFlavor) throws XMLStreamException {
logger.fine(JsonUtil.prettyPrint(datasetDtoAsJson.toString()));
Gson gson = new Gson();
Expand Down Expand Up @@ -175,9 +178,14 @@ private static void createOAIDC(XMLStreamWriter xmlw, DatasetDTO datasetDto, Str
writeAbstractElement(xmlw, version, dcFlavor); // Description
writeSubjectElement(xmlw, version, dcFlavor); //Subjects and Key Words

writeFullElementList(xmlw, dcFlavor+":"+"language", dto2PrimitiveList(version, DatasetFieldConstant.language));
// MADROÑO BEGIN
List<String> languages= dto2PrimitiveList(version, DatasetFieldConstant.language);

writeFullElement(xmlw, dcFlavor+":"+"date", dto2Primitive(version, DatasetFieldConstant.productionDate));
List<String> isoLanguages= getIsoLanguages (languages);
writeFullElementList(xmlw, dcFlavor+":"+"language", isoLanguages);

writeFullElement(xmlw, dcFlavor+":"+"date", dto2Primitive(version, DatasetFieldConstant.dateOfDeposit)); // MADROÑO. For us, the deposit date is more important one
// MADROÑO END

writeFullElement(xmlw, dcFlavor+":"+"contributor", dto2Primitive(version, DatasetFieldConstant.depositor));

Expand Down Expand Up @@ -423,6 +431,27 @@ private static void writeFunderElement(XMLStreamWriter xmlw, DatasetVersionDTO d
}
}
}

private static List <String> getIsoLanguages (List <String> origLanguages) {
List <String> isoLanguagesList= new ArrayList <>();
if (origLanguages== null) {
isoLanguagesList.add ("und");
} else{
for (String origLanguage: origLanguages) {
isoLanguagesList.add(getLangIsoCode (origLanguage));
}
if (isoLanguagesList.isEmpty())
isoLanguagesList.add ("und");
}
return isoLanguagesList;
}

public static String getLangIsoCode (String langName) {
String isoCode= getLanguageCode (langName);
if (isoCode== null || isoCode.equals("null"))
isoCode="mis";
return isoCode;
}
// MADROÑO END


Expand Down Expand Up @@ -561,7 +590,6 @@ private static String dto2Primitive(DatasetVersionDTO datasetVersionDTO, String
}

private static List<String> dto2PrimitiveList(DatasetVersionDTO datasetVersionDTO, String datasetFieldTypeName) {
// logger.log(Level.SEVERE, "Juan:SEVERE " + datasetFieldTypeName);
for (Map.Entry<String, MetadataBlockDTO> entry : datasetVersionDTO.getMetadataBlocks().entrySet()) {
MetadataBlockDTO value = entry.getValue();
for (FieldDTO fieldDTO : value.getFields()) {
Expand All @@ -575,21 +603,24 @@ private static List<String> dto2PrimitiveList(DatasetVersionDTO datasetVersionDT

private static void writeFullElementList(XMLStreamWriter xmlw, String name, List<String> values) throws XMLStreamException {
//For the simplest Elements we can
///MADROÑO BEGIN
// MADROÑO BEGIN
if (name.equals("dc:type")) {
xmlw.writeStartElement(name);
xmlw.writeCharacters("info:eu-repo/semantics/dataset");
xmlw.writeEndElement(); // labl
}
///MADROÑO END
xmlw.writeStartElement(name);
xmlw.writeCharacters("info:eu-repo/semantics/publishedVersion");
xmlw.writeEndElement(); // labl
} else // RECOLECTA and LaReferencia compatibility. Only set the primary type
// MADROÑO END
if (values != null && !values.isEmpty()) {
for (String value : values) {
xmlw.writeStartElement(name);
xmlw.writeCharacters(value);
xmlw.writeEndElement(); // labl
}
}
// logger.log(Level.SEVERE, "Juan:SEVERE writeFullElementList" + name);

}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public GetRecord handle(OAICompiledRequest parameters) throws OAIException, Hand

MetadataFormat format = getContext().formatForPrefix(parameters.getMetadataPrefix());
if (format == null)
System.err.println("**************************** JUAN: FORMAT ES NULL ****************");
System.err.println("**************************** MADROÑO: FORMAT ES NULL ****************");
Item item = getRepository().getItemRepository().getItem(parameters.getIdentifier());

if (getContext().hasCondition() &&
Expand Down

0 comments on commit 38d89a7

Please sign in to comment.