public static Set<UserSetting> getDefaultUserSettings( User user ) { Set<UserSetting> defaultUserSettings = new HashSet<>(); DEFAULT_USER_SETTINGS_MAP.forEach( ( key, value ) -> { UserSetting userSetting = new UserSetting(); userSetting.setName( key ); userSetting.setValue( value ); userSetting.setUser( user ); defaultUserSettings.add( userSetting ); } ); return defaultUserSettings; } }
@Override @Transactional public void saveUserSetting( UserSettingKey key, Serializable value, User user ) { if ( user == null ) { return; } userSettingCache.invalidate( getCacheKey( key.getName(), user.getUsername() ) ); UserSetting userSetting = userSettingStore.getUserSetting( user, key.getName() ); if ( userSetting == null ) { userSetting = new UserSetting( user, key.getName(), value ); userSettingStore.addUserSetting( userSetting ); } else { userSetting.setValue( value ); userSettingStore.updateUserSetting( userSetting ); } }
/** * Get user setting optional. The database call is executed in a * programmatic transaction. If the user setting exists and has a value, * the value is returned. If not, the default value for the key is returned, * if not present, an empty optional is returned. * * @param key the user setting key. * @param username the username of the user. * @return an optional user setting value. */ private Optional<Serializable> getUserSettingOptional( UserSettingKey key, String username ) { UserCredentials userCredentials = userService.getUserCredentialsByUsername( username ); if ( userCredentials == null ) { return Optional.empty(); } UserSetting setting = transactionTemplate.execute( new TransactionCallback<UserSetting>() { public UserSetting doInTransaction( TransactionStatus status ) { return userSettingStore.getUserSetting( userCredentials.getUserInfo(), key.getName() ); } } ); Serializable value = setting != null && setting.hasValue() ? setting.getValue() : key.getDefaultValue(); return Optional.ofNullable( value ); }
@Override public Map<String, Serializable> getUserSettingsWithFallbackByUserAsMap( User user, Set<UserSettingKey> userSettingKeys, boolean useFallback ) { Map<String, Serializable> result = Sets.newHashSet( getUserSettings( user ) ).stream() .filter( userSetting -> userSetting != null && userSetting.getName() != null && userSetting.getValue() != null ) .collect( Collectors.toMap( UserSetting::getName, UserSetting::getValue ) ); userSettingKeys.forEach( userSettingKey -> { if ( !result.containsKey( userSettingKey.getName() ) ) { Optional<SettingKey> systemSettingKey = SettingKey.getByName( userSettingKey.getName() ); if ( useFallback && systemSettingKey.isPresent() ) { result.put( userSettingKey.getName(), systemSettingManager.getSystemSetting( systemSettingKey.get() ) ); } else { result.put( userSettingKey.getName(), null ); } } } ); return result; }