package de.micromata.borgbutler.server.user; import de.micromata.borgbutler.server.Languages; import de.micromata.borgbutler.server.RunningMode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Locale; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; /** * Contains only one (dummy) user (for desktop version). */ public class SingleUserManager extends UserManager { private static final String USER_LOCAL_PREF_KEY = "userLocale"; private static Logger log = LoggerFactory.getLogger(SingleUserManager.class); private UserData singleUser; private Preferences preferences; public SingleUserManager() { if (RunningMode.getUserManagement() != RunningMode.UserManagement.SINGLE) { throw new IllegalStateException("Can't use SingleUserManager in user management mode '" + RunningMode.getUserManagement() + "'. Only allowed in '" + RunningMode.UserManagement.SINGLE + "'."); } log.info("Using SingleUserManger as user manager."); preferences = Preferences.userRoot().node("de").node("micromata").node("borgbutler"); singleUser = new UserData(); singleUser.setUsername("admin"); singleUser.setAdmin(true); load(singleUser); } public UserData getUser(String id) { return singleUser; } /** * Stores only the user's configured locale as preference. * * @param userData * @see Preferences */ @Override public void saveUser(UserData userData) { Locale locale = userData.getLocale(); this.singleUser.setLocale(locale); String dateFormat = userData.getDateFormat(); this.singleUser.setDateFormat(dateFormat); String lang = Languages.asString(locale); preferences.put(USER_LOCAL_PREF_KEY, lang); try { preferences.flush(); } catch (BackingStoreException ex) { log.error("Can't save user locale to preferences: " + ex.getMessage(), ex); } } private void load(UserData userData) { String language = preferences.get(USER_LOCAL_PREF_KEY, "en"); Locale locale = Languages.asLocale(language); singleUser.setLocale(locale); } }