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