ConfigUtils.java
001 /*
002  * Copyright 2011-2012 the original author or authors.
003  *
004  * Licensed under the Apache License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *      http://www.apache.org/licenses/LICENSE-2.0
009  *
010  * Unless required by applicable law or agreed to in writing, software
011  * distributed under the License is distributed on an "AS IS" BASIS,
012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  * See the License for the specific language governing permissions and
014  * limitations under the License.
015  */
016 
017 package griffon.util;
018 
019 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
020 
021 import java.util.Map;
022 
023 /**
024  * Utility class for reading configuration properties.
025  *
026  @author Andres Almiray
027  */
028 public abstract class ConfigUtils {
029     /**
030      * Returns true if there's a on-null value for the specified key.
031      *
032      @param config the configuration object to be searched upon
033      @param key    the key to be searched
034      @return true if there's a value for the specified key, false otherwise
035      */
036     public static boolean isValueDefined(Map config, String key) {
037         String[] keys = key.split("\\.");
038         for (int i = 0; i < keys.length - 1; i++) {
039             if (config != null) {
040                 config = (Mapconfig.get(keys[i]);
041             else {
042                 return false;
043             }
044         }
045         if (config == nullreturn false;
046         Object value = config.get(keys[keys.length - 1]);
047         return value != null;
048     }
049 
050     /**
051      * Returns the value for the specified key.
052      *
053      @param config the configuration object to be searched upon
054      @param key    the key to be searched
055      @return the value of the key. May return null
056      */
057     public static Object getConfigValue(Map config, String key) {
058         return getConfigValue(config, key, null);
059     }
060 
061     /**
062      * Returns the value for the specified key with an optional default value if no match is found.
063      *
064      @param config       the configuration object to be searched upon
065      @param key          the key to be searched
066      @param defaultValue the value to send back if no match is found
067      @return the value of the key or the default value if no match is found
068      */
069     public static Object getConfigValue(Map config, String key, Object defaultValue) {
070         String[] keys = key.split("\\.");
071         for (int i = 0; i < keys.length - 1; i++) {
072             if (config != null) {
073                 Object node = config.get(keys[i]);
074                 if(node instanceof Map) {
075                     config = (Mapnode;
076                 else {
077                     return defaultValue;
078                 }
079             else {
080                 return defaultValue;
081             }
082         }
083         if (config == nullreturn defaultValue;
084         Object value = config.get(keys[keys.length - 1]);
085         return value != null ? value : defaultValue;
086     }
087 
088     /**
089      * Returns the value for the specified key coerced to a boolean.
090      *
091      @param config the configuration object to be searched upon
092      @param key    the key to be searched
093      @return the value of the key. Returns {@code false} if no match.
094      */
095     public static boolean getConfigValueAsBoolean(Map config, String key) {
096         return getConfigValueAsBoolean(config, key, false);
097     }
098 
099     /**
100      * Returns the value for the specified key with an optional default value if no match is found.
101      *
102      @param config       the configuration object to be searched upon
103      @param key          the key to be searched
104      @param defaultValue the value to send back if no match is found
105      @return the value of the key or the default value if no match is found
106      */
107     public static boolean getConfigValueAsBoolean(Map config, String key, boolean defaultValue) {
108         Object value = getConfigValue(config, key, defaultValue);
109         return DefaultTypeTransformation.castToBoolean(value);
110     }
111 
112     /**
113      * Returns the value for the specified key coerced to an int.
114      *
115      @param config the configuration object to be searched upon
116      @param key    the key to be searched
117      @return the value of the key. Returns {@code 0} if no match.
118      */
119     public static int getConfigValueAsInt(Map config, String key) {
120         return getConfigValueAsInt(config, key, 0);
121     }
122 
123     /**
124      * Returns the value for the specified key with an optional default value if no match is found.
125      *
126      @param config       the configuration object to be searched upon
127      @param key          the key to be searched
128      @param defaultValue the value to send back if no match is found
129      @return the value of the key or the default value if no match is found
130      */
131     public static int getConfigValueAsInt(Map config, String key, int defaultValue) {
132         Object value = getConfigValue(config, key, defaultValue);
133         return DefaultTypeTransformation.castToNumber(value).intValue();
134     }
135 
136     /**
137      * Returns the value for the specified key converted to a String.
138      *
139      @param config the configuration object to be searched upon
140      @param key    the key to be searched
141      @return the value of the key. Returns {@code ""} if no match.
142      */
143     public static String getConfigValueAsString(Map config, String key) {
144         return getConfigValueAsString(config, key, "");
145     }
146 
147     /**
148      * Returns the value for the specified key with an optional default value if no match is found.
149      *
150      @param config       the configuration object to be searched upon
151      @param key          the key to be searched
152      @param defaultValue the value to send back if no match is found
153      @return the value of the key or the default value if no match is found
154      */
155     public static String getConfigValueAsString(Map config, String key, String defaultValue) {
156         Object value = getConfigValue(config, key, defaultValue);
157         return String.valueOf(value);
158     }
159 }