Add ExtraProperties for DMP and language for Dataset Template
parent
8a34ee6233
commit
78ee4673ee
@ -0,0 +1,229 @@
|
||||
package eu.eudat.models.rda;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonValue;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum Language {
|
||||
|
||||
AAR("aar"),
|
||||
ABK("abk"),
|
||||
AFR("afr"),
|
||||
AKA("aka"),
|
||||
AMH("amh"),
|
||||
ARA("ara"),
|
||||
ARG("arg"),
|
||||
ASM("asm"),
|
||||
AVA("ava"),
|
||||
AVE("ave"),
|
||||
AYM("aym"),
|
||||
AZE("aze"),
|
||||
BAK("bak"),
|
||||
BAM("bam"),
|
||||
BEL("bel"),
|
||||
BEN("ben"),
|
||||
BIH("bih"),
|
||||
BIS("bis"),
|
||||
BOD("bod"),
|
||||
BOS("bos"),
|
||||
BRE("bre"),
|
||||
BUL("bul"),
|
||||
CAT("cat"),
|
||||
CES("ces"),
|
||||
CHA("cha"),
|
||||
CHE("che"),
|
||||
CHU("chu"),
|
||||
CHV("chv"),
|
||||
COR("cor"),
|
||||
COS("cos"),
|
||||
CRE("cre"),
|
||||
CYM("cym"),
|
||||
DAN("dan"),
|
||||
DEU("deu"),
|
||||
DIV("div"),
|
||||
DZO("dzo"),
|
||||
ELL("ell"),
|
||||
ENG("eng"),
|
||||
EPO("epo"),
|
||||
EST("est"),
|
||||
EUS("eus"),
|
||||
EWE("ewe"),
|
||||
FAO("fao"),
|
||||
FAS("fas"),
|
||||
FIJ("fij"),
|
||||
FIN("fin"),
|
||||
FRA("fra"),
|
||||
FRY("fry"),
|
||||
FUL("ful"),
|
||||
GLA("gla"),
|
||||
GLE("gle"),
|
||||
GLG("glg"),
|
||||
GLV("glv"),
|
||||
GRN("grn"),
|
||||
GUJ("guj"),
|
||||
HAT("hat"),
|
||||
HAU("hau"),
|
||||
HBS("hbs"),
|
||||
HEB("heb"),
|
||||
HER("her"),
|
||||
HIN("hin"),
|
||||
HMO("hmo"),
|
||||
HRV("hrv"),
|
||||
HUN("hun"),
|
||||
HYE("hye"),
|
||||
IBO("ibo"),
|
||||
IDO("ido"),
|
||||
III("iii"),
|
||||
IKU("iku"),
|
||||
ILE("ile"),
|
||||
INA("ina"),
|
||||
IND("ind"),
|
||||
IPK("ipk"),
|
||||
ISL("isl"),
|
||||
ITA("ita"),
|
||||
JAV("jav"),
|
||||
JPN("jpn"),
|
||||
KAL("kal"),
|
||||
KAN("kan"),
|
||||
KAS("kas"),
|
||||
KAT("kat"),
|
||||
KAU("kau"),
|
||||
KAZ("kaz"),
|
||||
KHM("khm"),
|
||||
KIK("kik"),
|
||||
KIN("kin"),
|
||||
KIR("kir"),
|
||||
KOM("kom"),
|
||||
KON("kon"),
|
||||
KOR("kor"),
|
||||
KUA("kua"),
|
||||
KUR("kur"),
|
||||
LAO("lao"),
|
||||
LAT("lat"),
|
||||
LAV("lav"),
|
||||
LIM("lim"),
|
||||
LIN("lin"),
|
||||
LIT("lit"),
|
||||
LTZ("ltz"),
|
||||
LUB("lub"),
|
||||
LUG("lug"),
|
||||
MAH("mah"),
|
||||
MAL("mal"),
|
||||
MAR("mar"),
|
||||
MKD("mkd"),
|
||||
MLG("mlg"),
|
||||
MLT("mlt"),
|
||||
MON("mon"),
|
||||
MRI("mri"),
|
||||
MSA("msa"),
|
||||
MYA("mya"),
|
||||
NAU("nau"),
|
||||
NAV("nav"),
|
||||
NBL("nbl"),
|
||||
NDE("nde"),
|
||||
NDO("ndo"),
|
||||
NEP("nep"),
|
||||
NLD("nld"),
|
||||
NNO("nno"),
|
||||
NOB("nob"),
|
||||
NOR("nor"),
|
||||
NYA("nya"),
|
||||
OCI("oci"),
|
||||
OJI("oji"),
|
||||
ORI("ori"),
|
||||
ORM("orm"),
|
||||
OSS("oss"),
|
||||
PAN("pan"),
|
||||
PLI("pli"),
|
||||
POL("pol"),
|
||||
POR("por"),
|
||||
PUS("pus"),
|
||||
QUE("que"),
|
||||
ROH("roh"),
|
||||
RON("ron"),
|
||||
RUN("run"),
|
||||
RUS("rus"),
|
||||
SAG("sag"),
|
||||
SAN("san"),
|
||||
SIN("sin"),
|
||||
SLK("slk"),
|
||||
SLV("slv"),
|
||||
SME("sme"),
|
||||
SMO("smo"),
|
||||
SNA("sna"),
|
||||
SND("snd"),
|
||||
SOM("som"),
|
||||
SOT("sot"),
|
||||
SPA("spa"),
|
||||
SQI("sqi"),
|
||||
SRD("srd"),
|
||||
SRP("srp"),
|
||||
SSW("ssw"),
|
||||
SUN("sun"),
|
||||
SWA("swa"),
|
||||
SWE("swe"),
|
||||
TAH("tah"),
|
||||
TAM("tam"),
|
||||
TAT("tat"),
|
||||
TEL("tel"),
|
||||
TGK("tgk"),
|
||||
TGL("tgl"),
|
||||
THA("tha"),
|
||||
TIR("tir"),
|
||||
TON("ton"),
|
||||
TSN("tsn"),
|
||||
TSO("tso"),
|
||||
TUK("tuk"),
|
||||
TUR("tur"),
|
||||
TWI("twi"),
|
||||
UIG("uig"),
|
||||
UKR("ukr"),
|
||||
URD("urd"),
|
||||
UZB("uzb"),
|
||||
VEN("ven"),
|
||||
VIE("vie"),
|
||||
VOL("vol"),
|
||||
WLN("wln"),
|
||||
WOL("wol"),
|
||||
XHO("xho"),
|
||||
YID("yid"),
|
||||
YOR("yor"),
|
||||
ZHA("zha"),
|
||||
ZHO("zho"),
|
||||
ZUL("zul");
|
||||
private final String value;
|
||||
private final static Map<String, Language> CONSTANTS = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (Language c: values()) {
|
||||
CONSTANTS.put(c.value, c);
|
||||
}
|
||||
}
|
||||
|
||||
private Language(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
@JsonValue
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
@JsonCreator
|
||||
public static Language fromValue(String value) {
|
||||
Language constant = CONSTANTS.get(value);
|
||||
if (constant == null) {
|
||||
throw new IllegalArgumentException(value);
|
||||
} else {
|
||||
return constant;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package eu.eudat.models.rda.mapper;
|
||||
|
||||
import eu.eudat.models.rda.Language;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class LanguageRDAMapper {
|
||||
private final static Map<String, Object> langMap = new HashMap<>();
|
||||
private static final Logger logger = LoggerFactory.getLogger(LanguageRDAMapper.class);
|
||||
|
||||
static {
|
||||
String json = null;
|
||||
try {
|
||||
json = new BufferedReader(new InputStreamReader(LanguageRDAMapper.class.getClassLoader().getResource("internal/rda-lang-map.json").openStream(), StandardCharsets.UTF_8))
|
||||
.lines().collect(Collectors.joining("\n"));
|
||||
langMap.putAll(new org.json.JSONObject(json).toMap());
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Language mapLanguageIsoToRDAIso(String code) {
|
||||
return langMap.entrySet().stream().map(entry -> {
|
||||
if (entry.getValue().toString().equals(code)) {
|
||||
return Language.fromValue(entry.getKey());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}).filter(Objects::nonNull).findFirst().get();
|
||||
}
|
||||
|
||||
public static String mapRDAIsoToLanguageIso(Language lang) {
|
||||
return langMap.get(lang.value()).toString();
|
||||
}
|
||||
}
|
@ -0,0 +1,186 @@
|
||||
{
|
||||
"aar": "aa",
|
||||
"abk": "ab",
|
||||
"afr": "af",
|
||||
"aka": "ak",
|
||||
"amh": "am",
|
||||
"ara": "ar",
|
||||
"arg": "an",
|
||||
"asm": "as",
|
||||
"ava": "av",
|
||||
"ave": "ae",
|
||||
"aym": "ay",
|
||||
"aze": "az",
|
||||
"bak": "ba",
|
||||
"bam": "bm",
|
||||
"bel": "be",
|
||||
"ben": "bn",
|
||||
"bis": "bi",
|
||||
"bod": "bo",
|
||||
"bos": "bs",
|
||||
"bre": "br",
|
||||
"bul": "bg",
|
||||
"cat": "ca",
|
||||
"ces": "cs",
|
||||
"cha": "ch",
|
||||
"che": "ce",
|
||||
"chu": "cu",
|
||||
"chv": "cv",
|
||||
"cor": "kw",
|
||||
"cos": "co",
|
||||
"cre": "cr",
|
||||
"cym": "cy",
|
||||
"dan": "da",
|
||||
"deu": "de",
|
||||
"div": "dv",
|
||||
"dzo": "dz",
|
||||
"ell": "el",
|
||||
"eng": "en",
|
||||
"epo": "eo",
|
||||
"est": "et",
|
||||
"eus": "eu",
|
||||
"ewe": "ee",
|
||||
"fao": "fo",
|
||||
"fas": "fa",
|
||||
"fij": "fj",
|
||||
"fin": "fi",
|
||||
"fra": "fr",
|
||||
"fry": "fy",
|
||||
"ful": "ff",
|
||||
"gla": "gd",
|
||||
"gle": "ga",
|
||||
"glg": "gl",
|
||||
"glv": "gv",
|
||||
"grn": "gn",
|
||||
"guj": "gu",
|
||||
"hat": "ht",
|
||||
"hau": "ha",
|
||||
"hbs": "sh",
|
||||
"heb": "he",
|
||||
"her": "hz",
|
||||
"hin": "hi",
|
||||
"hmo": "ho",
|
||||
"hrv": "hr",
|
||||
"hun": "hu",
|
||||
"hye": "hy",
|
||||
"ibo": "ig",
|
||||
"ido": "io",
|
||||
"iii": "ii",
|
||||
"iku": "iu",
|
||||
"ile": "ie",
|
||||
"ina": "ia",
|
||||
"ind": "id",
|
||||
"ipk": "ik",
|
||||
"isl": "is",
|
||||
"ita": "it",
|
||||
"jav": "jv",
|
||||
"jpn": "ja",
|
||||
"kal": "kl",
|
||||
"kan": "kn",
|
||||
"kas": "ks",
|
||||
"kat": "ka",
|
||||
"kau": "kr",
|
||||
"kaz": "kk",
|
||||
"khm": "km",
|
||||
"kik": "ki",
|
||||
"kin": "rw",
|
||||
"kir": "ky",
|
||||
"kom": "kv",
|
||||
"kon": "kg",
|
||||
"kor": "ko",
|
||||
"kua": "kj",
|
||||
"kur": "ku",
|
||||
"lao": "lo",
|
||||
"lat": "la",
|
||||
"lav": "lv",
|
||||
"lim": "li",
|
||||
"lin": "ln",
|
||||
"lit": "lt",
|
||||
"ltz": "lb",
|
||||
"lub": "lu",
|
||||
"lug": "lg",
|
||||
"mah": "mh",
|
||||
"mal": "ml",
|
||||
"mar": "mr",
|
||||
"mkd": "mk",
|
||||
"mlg": "mg",
|
||||
"mlt": "mt",
|
||||
"mon": "mn",
|
||||
"mri": "mi",
|
||||
"msa": "ms",
|
||||
"mya": "my",
|
||||
"nau": "na",
|
||||
"nav": "nv",
|
||||
"nbl": "nr",
|
||||
"nde": "nd",
|
||||
"ndo": "ng",
|
||||
"nep": "ne",
|
||||
"nld": "nl",
|
||||
"nno": "nn",
|
||||
"nob": "nb",
|
||||
"nor": "no",
|
||||
"nya": "ny",
|
||||
"oci": "oc",
|
||||
"oji": "oj",
|
||||
"ori": "or",
|
||||
"orm": "om",
|
||||
"oss": "os",
|
||||
"pan": "pa",
|
||||
"pli": "pi",
|
||||
"pol": "pl",
|
||||
"por": "pt",
|
||||
"pus": "ps",
|
||||
"que": "qu",
|
||||
"roh": "rm",
|
||||
"ron": "ro",
|
||||
"run": "rn",
|
||||
"rus": "ru",
|
||||
"sag": "sg",
|
||||
"san": "sa",
|
||||
"sin": "si",
|
||||
"slk": "sk",
|
||||
"slv": "sl",
|
||||
"sme": "se",
|
||||
"smo": "sm",
|
||||
"sna": "sn",
|
||||
"snd": "sd",
|
||||
"som": "so",
|
||||
"sot": "st",
|
||||
"spa": "es",
|
||||
"sqi": "sq",
|
||||
"srd": "sc",
|
||||
"srp": "sr",
|
||||
"ssw": "ss",
|
||||
"sun": "su",
|
||||
"swa": "sw",
|
||||
"swe": "sv",
|
||||
"tah": "ty",
|
||||
"tam": "ta",
|
||||
"tat": "tt",
|
||||
"tel": "te",
|
||||
"tgk": "tg",
|
||||
"tgl": "tl",
|
||||
"tha": "th",
|
||||
"tir": "ti",
|
||||
"ton": "to",
|
||||
"tsn": "tn",
|
||||
"tso": "ts",
|
||||
"tuk": "tk",
|
||||
"tur": "tr",
|
||||
"twi": "tw",
|
||||
"uig": "ug",
|
||||
"ukr": "uk",
|
||||
"urd": "ur",
|
||||
"uzb": "uz",
|
||||
"ven": "ve",
|
||||
"vie": "vi",
|
||||
"vol": "vo",
|
||||
"wln": "wa",
|
||||
"wol": "wo",
|
||||
"xho": "xh",
|
||||
"yid": "yi",
|
||||
"yor": "yo",
|
||||
"zha": "za",
|
||||
"zho": "zh",
|
||||
"zul": "zu"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@
|
||||
ALTER TABLE public."DMP"
|
||||
ADD COLUMN "extraProperties" text;
|
||||
|
||||
ALTER TABLE public."DatasetProfile"
|
||||
ADD COLUMN "Language" character varying;
|
||||
|
||||
UPDATE public."DMP"
|
||||
SET "extraProperties"='{"language": "en"}';
|
||||
|
||||
UPDATE public."DatasetProfile"
|
||||
SET "Language"='en';
|
||||
|
||||
ALTER TABLE public."DatasetProfile"
|
||||
ALTER COLUMN "Language" SET NOT NULL;
|
||||
|
||||
INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.00.004', '2020-06-03 12:00:00.000000+03', now(), 'Add language to DMP and Dataset Template');
|
||||
|
@ -0,0 +1,5 @@
|
||||
export interface LanguageInfo {
|
||||
code: string;
|
||||
name: string;
|
||||
native: string;
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
import { registerLocaleData } from '@angular/common';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable, Subject } from 'rxjs';
|
||||
import { LoggingService } from '../logging/logging-service';
|
||||
import { TypeUtils } from '../utilities/type-utils.service';
|
||||
import { LanguageInfo } from '@app/core/model/language-info';
|
||||
|
||||
const availableLanguageInfos: LanguageInfo[] = require('../../../../assets/localization/languages.json');
|
||||
|
||||
@Injectable()
|
||||
export class LanguageInfoService {
|
||||
|
||||
private languageInfoValues = new Map<string, LanguageInfo>(); // cultures by name
|
||||
private languageInfoeChangeSubject = new Subject<LanguageInfo>();
|
||||
private currentLanguageInfo: LanguageInfo;
|
||||
|
||||
constructor(
|
||||
private typeUtils: TypeUtils,
|
||||
private logger: LoggingService
|
||||
) {
|
||||
if (availableLanguageInfos) {
|
||||
this.languageInfoValues = new Map<string, LanguageInfo>();
|
||||
availableLanguageInfos.forEach(languageInfo => {
|
||||
this.languageInfoValues.set(languageInfo.code, languageInfo);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getLanguageInfoValues(): LanguageInfo[] {
|
||||
const values: LanguageInfo[] = [];
|
||||
this.languageInfoValues.forEach((value) => values.push(value));
|
||||
return values;
|
||||
}
|
||||
|
||||
getLanguageInfoValue(languageInfo: string): LanguageInfo | undefined {
|
||||
return this.languageInfoValues.get(languageInfo);
|
||||
}
|
||||
|
||||
languageInfoSelected(languageInfo: string | LanguageInfo) {
|
||||
let newLanguageInfoName: string;
|
||||
if (this.typeUtils.isString(languageInfo)) {
|
||||
if (this.currentLanguageInfo && this.currentLanguageInfo.code === languageInfo) { return; }
|
||||
newLanguageInfoName = languageInfo;
|
||||
} else {
|
||||
if (this.currentLanguageInfo && this.currentLanguageInfo.code === languageInfo.code) { return; }
|
||||
newLanguageInfoName = languageInfo.code;
|
||||
}
|
||||
|
||||
const newLanguageInfo = this.languageInfoValues.get(newLanguageInfoName);
|
||||
if (!newLanguageInfo) {
|
||||
console.error(`unsupported language given: ${newLanguageInfoName}`); //TODO: throw error?
|
||||
return;
|
||||
}
|
||||
this.currentLanguageInfo = newLanguageInfo;
|
||||
this.languageInfoeChangeSubject.next(newLanguageInfo);
|
||||
|
||||
// Set angular locale based on user selection.
|
||||
// This is a very hacky way to map cultures with angular cultures, since there is no mapping. We first try to
|
||||
// use the culture with the specialization (ex en-US), and if not exists we import the base culture (first part).
|
||||
let locale = newLanguageInfo.code;
|
||||
import(`@angular/common/locales/${locale}.js`).catch(reason => {
|
||||
this.logger.error('Could not load locale: ' + locale);
|
||||
}).then(selectedLocale => {
|
||||
if (selectedLocale) {
|
||||
registerLocaleData(selectedLocale.default);
|
||||
} else {
|
||||
// locale = newCulture.code.split('-')[0];
|
||||
import(`@angular/common/locales/${locale}.js`).catch(reason => {
|
||||
this.logger.error('Could not load locale: ' + locale);
|
||||
}).then(selectedDefaultLocale => {
|
||||
if (selectedDefaultLocale !== undefined) {
|
||||
registerLocaleData(selectedDefaultLocale.default);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getLanguageInfoChangeObservable(): Observable<LanguageInfo> {
|
||||
return this.languageInfoeChangeSubject.asObservable();
|
||||
}
|
||||
|
||||
getCurrentLanguageInfo(): LanguageInfo {
|
||||
return this.currentLanguageInfo;
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
import { ValidationContext } from '@common/forms/validation/validation-context';
|
||||
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
||||
import { BackendErrorValidator } from '@common/forms/validation/custom-validator';
|
||||
|
||||
export class ExtraPropertiesFormModel {
|
||||
public language: string;
|
||||
|
||||
fromModel(item: any): ExtraPropertiesFormModel {
|
||||
this.language = item.language;
|
||||
return this;
|
||||
}
|
||||
|
||||
buildForm(context: ValidationContext = null, disabled: boolean = false): FormGroup {
|
||||
if (context == null) { context = this.createValidationContext(); }
|
||||
|
||||
const formGroup = new FormBuilder().group({
|
||||
language: [{ value: this.language, disabled: disabled }, context.getValidation('language').validators]
|
||||
});
|
||||
return formGroup;
|
||||
}
|
||||
|
||||
createValidationContext(): ValidationContext {
|
||||
const baseContext: ValidationContext = new ValidationContext();
|
||||
baseContext.validation.push({ key: 'language', validators: [] });
|
||||
return baseContext;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue