[New] Added EnumHandler.getEnum(StrolchTransaction, String)

This commit is contained in:
Robert von Burg 2020-08-06 09:31:13 +02:00
parent 07d2329725
commit 86f9419a6c
2 changed files with 20 additions and 13 deletions

View File

@ -44,26 +44,30 @@ public class DefaultEnumHandler extends StrolchComponent implements EnumHandler
@Override
public StrolchEnum getEnum(Certificate certificate, String name, Locale locale) {
DBC.PRE.assertNotEmpty("Enum name must be given!", name); //$NON-NLS-1$
DBC.PRE.assertNotNull("Locale must be given!", locale); //$NON-NLS-1$
try (StrolchTransaction tx = openTx(certificate, true)) {
Resource enumeration = tx.getResourceBy(TYPE_ENUMERATION, name, true);
ParameterBag enumValuesByLanguage = findParameterBagByLanguage(enumeration, locale);
List<Parameter<?>> parameters = enumValuesByLanguage.getParameters();
parameters.sort(Comparator.comparing(Parameter::getIndex));
Map<String, String> values = new LinkedHashMap<>(parameters.size());
for (Parameter<?> param : parameters) {
StringParameter enumParam = (StringParameter) param;
values.put(enumParam.getId(), enumParam.getValue());
}
return new StrolchEnum(name, locale, values);
return getEnum(tx, name);
}
}
@Override
public StrolchEnum getEnum(StrolchTransaction tx, String name) {
Resource enumeration = tx.getResourceBy(TYPE_ENUMERATION, name, true);
ParameterBag enumValuesByLanguage = findParameterBagByLanguage(enumeration, tx.getLocale());
List<Parameter<?>> parameters = enumValuesByLanguage.getParameters();
parameters.sort(Comparator.comparing(Parameter::getIndex));
Map<String, String> values = new LinkedHashMap<>(parameters.size());
for (Parameter<?> param : parameters) {
StringParameter enumParam = (StringParameter) param;
values.put(enumParam.getId(), enumParam.getValue());
}
return new StrolchEnum(name, tx.getLocale(), values);
}
private ParameterBag findParameterBagByLanguage(Resource enumeration, Locale locale) {
if (isNotEmpty(locale.getVariant())) {

View File

@ -17,6 +17,7 @@ package li.strolch.runtime.query.enums;
import java.util.Locale;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.privilege.model.Certificate;
/**
@ -25,4 +26,6 @@ import li.strolch.privilege.model.Certificate;
public interface EnumHandler {
StrolchEnum getEnum(Certificate certificate, String name, Locale locale);
StrolchEnum getEnum(StrolchTransaction tx, String name);
}