View Javadoc

1   /* This file is part of the project "Hilbert II" - http://www.qedeq.org" target="alexandria_uri">http://www.qedeq.org
2    *
3    * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4    *
5    * "Hilbert II" is free software; you can redistribute
6    * it and/or modify it under the terms of the GNU General Public
7    * License as published by the Free Software Foundation; either
8    * version 2 of the License, or (at your option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13   * GNU General Public License for more details.
14   */
15  
16  package org.qedeq.base.io;
17  
18  import java.util.HashMap;
19  import java.util.Iterator;
20  import java.util.Map;
21  import java.util.Set;
22  
23  
24  /**
25   * Provides convenience methods for getting parameters out of a {@link Map}.
26   * The keys and the values are stored as Strings.
27   *
28   * @author  Michael Meyling
29   */
30  public class Parameters {
31  
32      /** In this map our values are stored. */
33      private final Map map;
34  
35      /** Empty parameters. */
36      public static final Parameters EMPTY = new Parameters();
37  
38      /**
39       * Constructs parameter access object.
40       *
41       * @param   map     Herein are the parameters. Must not be <code>null</code>.
42       */
43      public Parameters(final Map map) {
44          if (map == null) {
45              throw new NullPointerException("Map must not be null.");
46          }
47          this.map = map;
48      }
49  
50      /**
51       * Constructs parameter access object.
52       */
53      public Parameters() {
54          this.map = new HashMap();
55      }
56  
57      /**
58       * Searches for the value with the specified key.
59       * If the key has no String value an empty String is returned.
60       *
61       * @param   key   The key we want a value for.
62       * @return  The value for the specified key value.
63       */
64      public String getString(final String key) {
65          Object oval = map.get(key);
66          return (oval instanceof String) ? (String) oval : "";
67      }
68  
69  
70      /**
71       * Searches for the value with the specified key.
72       * If the key has no String value <code>def</code> is returned.
73       *
74       * @param   key   The key we want a value for.
75       * @param   def   The default value we get if we have no String value.
76       * @return  The value for the specified key value.
77       */
78      public String getString(final String key, final String def) {
79          Object oval = map.get(key);
80          return (oval instanceof String) ? (String) oval : def;
81      }
82  
83  
84      /**
85       * Searches for the value with the specified key.
86       * If the key has no int value 0 is returned.
87       *
88       * @param   key   The key we want a value for.
89       * @return  The value for the specified key value.
90       */
91      public int getInt(final String key) {
92          final Object oval = map.get(key);
93          if (oval instanceof String) {
94              try {
95                  return Integer.parseInt(oval.toString().trim());
96              } catch (NumberFormatException ex) {
97                  // ignore
98              }
99          }
100         return 0;
101     }
102 
103 
104     /**
105      * Searches for the value with the specified key.
106      * If the key has no int value <code>def</code> is returned.
107      *
108      * @param   key   The key we want a value for.
109      * @param   def   The default value we get if we have no String value.
110      * @return  The value for the specified key value.
111      */
112     public int getInt(final String key, final int def) {
113         final Object oval = map.get(key);
114         if (oval instanceof String) {
115             try {
116                 return Integer.parseInt(oval.toString().trim());
117             } catch (NumberFormatException ex) {
118                 // ignore
119             }
120         }
121         return def;
122     }
123 
124     /**
125      * Searches for the value with the specified key.
126      * If the key has no boolean value <code>false</code> is returned.
127      *
128      * @param   key   The key we want a value for.
129      * @return  The value for the specified key value.
130      */
131     public boolean getBoolean(final String key) {
132         final Object oval = map.get(key);
133         if (oval instanceof String) {
134             return "true".equalsIgnoreCase(oval.toString());
135         }
136         return false;
137     }
138 
139     /**
140      * Searches for the value with the specified key.
141      * If the key has no boolean value <code>def</code> is returned.
142      *
143      * @param   key   The key we want a value for.
144      * @param   def   The default value we get if we have no String value.
145      * @return  The value for the specified key value.
146      */
147     public boolean getBoolean(final String key, final boolean def) {
148         final Object oval = map.get(key);
149         if (oval instanceof String) {
150             if ("true".equalsIgnoreCase((String) oval)) {
151                 return true;
152             }
153             if ("false".equalsIgnoreCase((String) oval)) {
154                 return false;
155             }
156         }
157         return def;
158     }
159 
160     /**
161      * Get all parameters as a long string. Strings are not quoted.
162      *
163      * @return  String in form "a=b, c=d" and so on.
164      */
165     public String getParameterString() {
166         final StringBuffer buffer = new StringBuffer(30);
167         Iterator e = map.entrySet().iterator();
168         boolean notFirst = false;
169         while (e.hasNext()) {
170             final Map.Entry entry = (Map.Entry) e.next();
171             String key = String.valueOf(entry.getKey());
172             if (notFirst) {
173                 buffer.append(", ");
174             } else {
175                 notFirst = true;
176             }
177             buffer.append(key);
178             buffer.append("=");
179             buffer.append(String.valueOf(entry.getValue()));
180         }
181         return buffer.toString();
182     }
183 
184     /**
185      * Set default configuration parameter if the key has still no value.
186      *
187      * @param   key         Key we want to check.
188      * @param   value       Default value.
189      */
190     public void setDefault(final String key, final int value) {
191         if (!map.containsKey(key) || !(map.get(key) instanceof String)) {
192             map.put(key, "" + value);
193         }
194     }
195 
196     /**
197      * Set default configuration parameter if the key has still no value.
198      *
199      * @param   key         Key we want to check.
200      * @param   value       Default value.
201      */
202     public void setDefault(final String key, final String value) {
203         if (!map.containsKey(key) || !(map.get(key) instanceof String)) {
204             map.put(key, value);
205         }
206     }
207 
208     /**
209      * Set default configuration parameter if the key has still no value.
210      *
211      * @param   key         Key we want to check.
212      * @param   value       Default value.
213      */
214     public void setDefault(final String key, final boolean value) {
215         if (!map.containsKey(key) || !(map.get(key) instanceof String)) {
216             map.put(key, "" + value);
217         }
218     }
219 
220     /**
221      * Return key set for internal map.
222      *
223      * @return  Key set.
224      */
225     public Set keySet() {
226         return map.keySet();
227     }
228 }