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  {
17      private final Map<String, Object> settings;
18  
19      private DefaultUserSettings(Map<String, Object> settings)
20      {
21          this.settings = settings;
22      }
23  
24      @Override
25      public Option<String> getString(String key)
26      {
27          checkKeyArgument(key);
28  
29          if (!settings.containsKey(key))
30          {
31              return Option.none();
32          }
33  
34          final Object value = settings.get(key);
35          return (value instanceof String) ? Option.some((String) value) : Option.<String>none();
36  
37      }
38  
39      @Override
40      public Option<Boolean> getBoolean(String key)
41      {
42          checkKeyArgument(key);
43  
44          if (!settings.containsKey(key))
45          {
46              return Option.none();
47          }
48  
49          final Object value = settings.get(key);
50          return (value instanceof Boolean) ? Option.some((Boolean) value) : Option.<Boolean>none();
51      }
52  
53      @Override
54      public Option<Long> getLong(String key)
55      {
56          checkKeyArgument(key);
57  
58          if (!settings.containsKey(key))
59          {
60              return Option.none();
61          }
62  
63          final Object value = settings.get(key);
64          return (value instanceof Long) ? Option.some((Long) value) : Option.<Long>none();
65  
66      }
67  
68      @Override
69      public Set<String> getKeys()
70      {
71          return settings.keySet();
72      }
73  
74      public static class Builder implements UserSettingsBuilder
75      {
76          private final Map<String, Object> settings = new HashMap<String, Object>();
77  
78          private Builder(UserSettings userSettings)
79          {
80              for (String key : userSettings.getKeys())
81              {
82                  for (Boolean value : userSettings.getBoolean(key))
83                  {
84                      settings.put(key, value);
85                  }
86                  for (String value : userSettings.getString(key))
87                  {
88                      settings.put(key, value);
89                  }
90                  for (Long value : userSettings.getLong(key))
91                  {
92                      settings.put(key, value);
93                  }
94              }
95          }
96  
97          private Builder()
98          {
99  
100         }
101 
102         @Override
103         public UserSettingsBuilder put(String key, String value)
104         {
105             checkKeyArgument(key);
106             checkValueArgument(value);
107 
108             settings.put(key, value);
109             return this;
110         }
111 
112         @Override
113         public UserSettingsBuilder put(String key, boolean value)
114         {
115             checkKeyArgument(key);
116 
117             settings.put(key, value);
118             return this;
119         }
120 
121         @Override
122         public UserSettingsBuilder put(String key, long value)
123         {
124             checkKeyArgument(key);
125 
126             settings.put(key, value);
127             return this;
128         }
129 
130         @Override
131         public UserSettingsBuilder remove(String key)
132         {
133             checkKeyArgument(key);
134 
135             settings.remove(key);
136             return this;
137         }
138 
139         @Override
140         public Option<Object> get(String key)
141         {
142             checkKeyArgument(key);
143 
144             return settings.containsKey(key) ? Option.some(settings.get(key)) : Option.none();
145         }
146 
147         @Override
148         public Set<String> getKeys()
149         {
150             return settings.keySet();
151         }
152 
153         @Override
154         public UserSettings build()
155         {
156             return new DefaultUserSettings(settings);
157         }
158 
159     }
160 
161     public static UserSettingsBuilder builder()
162     {
163         return new Builder();
164     }
165 
166     public static UserSettingsBuilder builder(UserSettings userSettings)
167     {
168         return new Builder(userSettings);
169     }
170 
171     private static void checkKeyArgument(String key)
172     {
173         Preconditions.checkArgument(key != null, "key cannot be null");
174         Preconditions.checkArgument(key.length() <= MAX_KEY_LENGTH, "key cannot be longer than %s characters", MAX_KEY_LENGTH);
175     }
176 
177     private static void checkValueArgument(String value)
178     {
179         Preconditions.checkArgument(value != null, "value cannot be null");
180         Preconditions.checkArgument(value.length() <= MAX_STRING_VALUE_LENGTH, "value cannot be longer than %s characters", MAX_STRING_VALUE_LENGTH);
181     }
182 }