package org.ovirt.engine.ui.uicommonweb.models.vms; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.TimeZoneType; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; public class TimeZoneModel { private static final Map<TimeZoneType, Collection<TimeZoneModel>> cachedTimeZoneModels = new HashMap<>(); public static Collection<TimeZoneModel> getTimeZones(TimeZoneType timeZoneType) { return cachedTimeZoneModels.get(timeZoneType); } static { for (TimeZoneType timeZoneType : TimeZoneType.values()) { mapListModels(timeZoneType, timeZoneType.getTimeZoneList()); } } private static void mapListModels(TimeZoneType timeZoneType, Map<String, String> timeZones) { List<TimeZoneModel> models = new ArrayList<>(); models.add(new TimeZoneModel(null, timeZoneType)); // add empty field representing default engine TZ for (Map.Entry<String, String> entry : timeZones.entrySet()) { models.add(new TimeZoneModel(entry.getKey(), timeZoneType)); } cachedTimeZoneModels.put(timeZoneType, models); } private final String timeZoneKey; private final TimeZoneType timeZoneType; public TimeZoneModel(String timeZoneKey, TimeZoneType timeZoneType) { this.timeZoneKey = timeZoneKey; this.timeZoneType = timeZoneType; } public String getTimeZoneKey() { return timeZoneKey; } public boolean isDefault() { return timeZoneKey == null; } public String getDisplayValue() { if (isDefault()) { String defaultTimeZoneKey = (String) AsyncDataProvider.getInstance().getConfigValuePreConverted(timeZoneType.getDefaultTimeZoneConfigurationKey()); // check if default timezone is correct if (!timeZoneType.getTimeZoneList().containsKey(defaultTimeZoneKey)) { // if not show GMT defaultTimeZoneKey = timeZoneType.getUltimateFallback(); } return timeZoneType.getTimeZoneList().get(defaultTimeZoneKey); } else { return timeZoneType.getTimeZoneList().get(timeZoneKey); } } }