griffon/util/ConfigUtils.java

`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 = (Map) config.get(keys[i]); 041 } else { 042 return false; 043 } 044 } 045 if (config == null) return 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 = (Map) node; 076 } else { 077 return defaultValue; 078 } 079 } else { 080 return defaultValue; 081 } 082 } 083 if (config == null) return 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 }`