package de.jpaw.bonaparte.core; import java.util.Locale; import de.jpaw.bonaparte.pojos.meta.LocaleAdapter; public class LocaleAdapterImpl { private static String nie(String s) { // nie: null if empty return s == null || s.length() == 0 ? null : s; } private static String nvl(String s) { return s == null ? "(null)" : s; } public static LocaleAdapter marshal(Locale obj) { return new LocaleAdapter(obj.getLanguage(), nie(obj.getCountry()), nie(obj.getVariant()), nie(obj.getScript())); } public static <E extends Exception> Locale unmarshal(LocaleAdapter so, ExceptionConverter<E> p) throws E { try { if (so.getCountry() == null) return new Locale(so.getLanguage()); else if (so.getVariant() == null) return new Locale(so.getLanguage(), so.getCountry()); else return new Locale(so.getLanguage(), so.getCountry(), so.getVariant()); } catch (Exception e) { throw p.customExceptionConverter("Cannot create Locale for language " + nvl(so.getLanguage()) + ", country " + nvl(so.getCountry()) + ", variant " + nvl(so.getVariant()), e); } } }