Fix and fine-tune suppress_nulls.
[squelch.git] / src / main / java / net / jaekl / squelch / db / Setting.java
1 package net.jaekl.squelch.db;
2
3 import java.util.Locale;
4
5 public class Setting {
6         private String m_name;
7         private Class<?> m_type;
8         private Object m_value;
9         
10         public Setting(String name, Class<?> type, Object defaultValue)
11         {
12                 m_name = name;
13                 m_type = type;
14                 m_value = defaultValue;
15         }
16         
17         public String getName() { return m_name; }
18         
19         public boolean getBoolean() 
20         { 
21                 assert(Boolean.class == m_type);
22                 
23                 if (m_value instanceof Boolean) {
24                         return ((Boolean)m_value).booleanValue();
25                 }
26                 return false;
27         }
28         
29         public void set(Object value) 
30         {
31                 if (Boolean.class == m_type) {
32                         if (value instanceof String) {
33                                 m_value = parseBoolean((String)value);
34                         }
35                         else if (value instanceof Boolean) {
36                                 m_value = value;
37                         }
38                 }
39                 else {
40                         throw new IllegalArgumentException("This type not yet supported.");
41                 }
42         }
43
44         private boolean parseBoolean(String value) 
45         {
46                 if (null == value) {
47                         return false;
48                 }
49                 
50                 String setting = value.trim().toLowerCase(Locale.CANADA);
51                 
52                 if (setting.equals("yes") || setting.equals("true")  || setting.equals("on")  || setting.equals("1")) {
53                         return true;
54                 }
55                 if (setting.equals("no")  || setting.equals("false") || setting.equals("off") || setting.equals("0")) {
56                         return false;
57                 }
58                 
59                 throw new IllegalArgumentException("UnrecognizedBooleanValue:  \"" + value + "\"");
60         }
61 }