View Javadoc

1   package com.atlassian.sal.core.usersettings;
2   
3   import com.atlassian.fugue.Option;
4   import com.atlassian.sal.api.usersettings.UserSettings;
5   import com.atlassian.sal.api.usersettings.UserSettingsBuilder;
6   import com.google.common.base.Preconditions;
7   
8   import java.util.HashMap;
9   import java.util.Map;
10  import java.util.Set;
11  
12  import static com.atlassian.sal.api.usersettings.UserSettingsService.MAX_KEY_LENGTH;
13  import static com.atlassian.sal.api.usersettings.UserSettingsService.MAX_STRING_VALUE_LENGTH;
14  
15  public class DefaultUserSettings implements UserSettings {
16      private final Map<String, Object> settings;
17  
18      private DefaultUserSettings(Map<String, Object> settings) {
19          this.settings = settings;
20      }
21  
22      @Override
23      public Option<String> getString(String key) {
24          checkKeyArgument(key);
25  
26          if (!settings.containsKey(key)) {
27              return Option.none();
28          }
29  
30          final Object value = settings.get(key);
31          return (value instanceof String) ? Option.some((String) value) : Option.<String>none();
32  
33      }
34  
35      @Override
36      public Option<Boolean> getBoolean(String key) {
37          checkKeyArgument(key);
38  
39          if (!settings.containsKey(key)) {
40              return Option.none();
41          }
42  
43          final Object value = settings.get(key);
44          return (value instanceof Boolean) ? Option.some((Boolean) value) : Option.<Boolean>none();
45      }
46  
47      @Override
48      public Option<Long> getLong(String key) {
49          checkKeyArgument(key);
50  
51          if (!settings.containsKey(key)) {
52              return Option.none();
53          }
54  
55          final Object value = settings.get(key);
56          return (value instanceof Long) ? Option.some((Long) value) : Option.<Long>none();
57  
58      }
59  
60      @Override
61      public Set<String> getKeys() {
62          return settings.keySet();
63      }
64  
65      public static class Builder implements UserSettingsBuilder {
66          private final Map<String, Object> settings = new HashMap<String, Object>();
67  
68          private Builder(UserSettings userSettings) {
69              for (String key : userSettings.getKeys()) {
70                  for (Boolean value : userSettings.getBoolean(key)) {
71                      settings.put(key, value);
72                  }
73                  for (String value : userSettings.getString(key)) {
74                      settings.put(key, value);
75                  }
76                  for (Long value : userSettings.getLong(key)) {
77                      settings.put(key, value);
78                  }
79              }
80          }
81  
82          private Builder() {
83  
84          }
85  
86          @Override
87          public UserSettingsBuilder put(String key, String value) {
88              checkKeyArgument(key);
89              checkValueArgument(value);
90  
91              settings.put(key, value);
92              return this;
93          }
94  
95          @Override
96          public UserSettingsBuilder put(String key, boolean value) {
97              checkKeyArgument(key);
98  
99              settings.put(key, value);
100             return this;
101         }
102 
103         @Override
104         public UserSettingsBuilder put(String key, long value) {
105             checkKeyArgument(key);
106 
107             settings.put(key, value);
108             return this;
109         }
110 
111         @Override
112         public UserSettingsBuilder remove(String key) {
113             checkKeyArgument(key);
114 
115             settings.remove(key);
116             return this;
117         }
118 
119         @Override
120         public Option<Object> get(String key) {
121             checkKeyArgument(key);
122 
123             return settings.containsKey(key) ? Option.some(settings.get(key)) : Option.none();
124         }
125 
126         @Override
127         public Set<String> getKeys() {
128             return settings.keySet();
129         }
130 
131         @Override
132         public UserSettings build() {
133             return new DefaultUserSettings(settings);
134         }
135 
136     }
137 
138     public static UserSettingsBuilder builder() {
139         return new Builder();
140     }
141 
142     public static UserSettingsBuilder builder(UserSettings userSettings) {
143         return new Builder(userSettings);
144     }
145 
146     private static void checkKeyArgument(String key) {
147         Preconditions.checkArgument(key != null, "key cannot be null");
148         Preconditions.checkArgument(key.length() <= MAX_KEY_LENGTH, "key cannot be longer than %s characters", MAX_KEY_LENGTH);
149     }
150 
151     private static void checkValueArgument(String value) {
152         Preconditions.checkArgument(value != null, "value cannot be null");
153         Preconditions.checkArgument(value.length() <= MAX_STRING_VALUE_LENGTH, "value cannot be longer than %s characters", MAX_STRING_VALUE_LENGTH);
154     }
155 }