Commit 86a2e752fe2dc94c03953897d954eca24597f992
1 parent
ee28b5f4
Exists in
master
Adicionando carregamento para tipos complexos
Showing
1 changed file
with
77 additions
and
8 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java
| @@ -48,6 +48,7 @@ import java.util.List; | @@ -48,6 +48,7 @@ import java.util.List; | ||
| 48 | import javax.validation.constraints.NotNull; | 48 | import javax.validation.constraints.NotNull; |
| 49 | 49 | ||
| 50 | import org.apache.commons.configuration.AbstractConfiguration; | 50 | import org.apache.commons.configuration.AbstractConfiguration; |
| 51 | +import org.apache.commons.configuration.DataConfiguration; | ||
| 51 | import org.apache.commons.configuration.FileConfiguration; | 52 | import org.apache.commons.configuration.FileConfiguration; |
| 52 | import org.apache.commons.configuration.PropertiesConfiguration; | 53 | import org.apache.commons.configuration.PropertiesConfiguration; |
| 53 | import org.apache.commons.configuration.SystemConfiguration; | 54 | import org.apache.commons.configuration.SystemConfiguration; |
| @@ -79,7 +80,7 @@ public class ConfigurationLoader implements Serializable { | @@ -79,7 +80,7 @@ public class ConfigurationLoader implements Serializable { | ||
| 79 | 80 | ||
| 80 | private String prefix; | 81 | private String prefix; |
| 81 | 82 | ||
| 82 | - private org.apache.commons.configuration.Configuration configuration; | 83 | + private DataConfiguration configuration; |
| 83 | 84 | ||
| 84 | private List<Field> fields; | 85 | private List<Field> fields; |
| 85 | 86 | ||
| @@ -137,7 +138,7 @@ public class ConfigurationLoader implements Serializable { | @@ -137,7 +138,7 @@ public class ConfigurationLoader implements Serializable { | ||
| 137 | } | 138 | } |
| 138 | } | 139 | } |
| 139 | 140 | ||
| 140 | - this.configuration = conf; | 141 | + this.configuration = new DataConfiguration(conf); |
| 141 | } | 142 | } |
| 142 | 143 | ||
| 143 | private void loadResource() { | 144 | private void loadResource() { |
| @@ -172,16 +173,84 @@ public class ConfigurationLoader implements Serializable { | @@ -172,16 +173,84 @@ public class ConfigurationLoader implements Serializable { | ||
| 172 | return; | 173 | return; |
| 173 | } | 174 | } |
| 174 | 175 | ||
| 176 | + String key = getKey(field); | ||
| 177 | + | ||
| 178 | + // if (field.getType() == String.class) { | ||
| 179 | + // loadStringField(field, key); | ||
| 180 | + // } else { | ||
| 181 | + // loadBasicField(field, key); | ||
| 182 | + // } | ||
| 183 | + | ||
| 184 | + // if (field.getType().isArray()) { | ||
| 185 | + // loadArrayField(field, key); | ||
| 186 | + // } else { | ||
| 187 | + loadBasicField(field, key); | ||
| 188 | + // } | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + // private void loadStringField(Field field, String key) { | ||
| 192 | + // try { | ||
| 193 | + // String value = (String) Reflections.getFieldValue(field, this.object); | ||
| 194 | + // | ||
| 195 | + // for (String string : this.configuration.getStringArray(key)) { | ||
| 196 | + // if (value == null) { | ||
| 197 | + // value = ""; | ||
| 198 | + // this.configuration.get(String.class, key); | ||
| 199 | + // } else { | ||
| 200 | + // value += ","; | ||
| 201 | + // } | ||
| 202 | + // | ||
| 203 | + // value += string; | ||
| 204 | + // } | ||
| 205 | + // // this.configuration.setDelimiterParsingDisabled(true); | ||
| 206 | + // | ||
| 207 | + // Reflections.setFieldValue(field, this.object, value); | ||
| 208 | + // | ||
| 209 | + // } catch (SecurityException cause) { | ||
| 210 | + // cause.printStackTrace(); | ||
| 211 | + // } catch (IllegalArgumentException cause) { | ||
| 212 | + // cause.printStackTrace(); | ||
| 213 | + // } | ||
| 214 | + // } | ||
| 215 | + | ||
| 216 | + private void loadArrayField(Field field, String key) { | ||
| 175 | try { | 217 | try { |
| 176 | - String key = getKey(field); | ||
| 177 | - Class<?> fieldType = field.getType(); | ||
| 178 | - String methodName = "get" + Strings.firstToUpper(fieldType.getSimpleName()); | 218 | + @SuppressWarnings("unused") |
| 219 | + Object array = this.configuration.getArray(Integer.class, key); | ||
| 220 | + | ||
| 221 | + String methodName = "get" + Strings.firstToUpper(field.getType().getSimpleName()); | ||
| 222 | + | ||
| 223 | + if (field.getType().isArray()) { | ||
| 224 | + methodName = Strings.removeChars(methodName, '[', ']') + "Array"; | ||
| 225 | + } | ||
| 179 | 226 | ||
| 180 | - Method method = this.configuration.getClass().getMethod(methodName, String.class, fieldType); | 227 | + Method method = this.configuration.getClass().getMethod(methodName, String.class, field.getType()); |
| 181 | Object value = method.invoke(this.configuration, key, Reflections.getFieldValue(field, this.object)); | 228 | Object value = method.invoke(this.configuration, key, Reflections.getFieldValue(field, this.object)); |
| 182 | - // TODO Se não achar no arquivo de configuração vai dar a falsa sensação que o valor padrão foi carregado de | ||
| 183 | - // lá. Corrigir isso! | 229 | + Reflections.setFieldValue(field, this.object, value); |
| 230 | + | ||
| 231 | + } catch (SecurityException cause) { | ||
| 232 | + cause.printStackTrace(); | ||
| 233 | + } catch (NoSuchMethodException cause) { | ||
| 234 | + cause.printStackTrace(); | ||
| 235 | + } catch (IllegalArgumentException cause) { | ||
| 236 | + cause.printStackTrace(); | ||
| 237 | + } catch (IllegalAccessException cause) { | ||
| 238 | + cause.printStackTrace(); | ||
| 239 | + } catch (InvocationTargetException cause) { | ||
| 240 | + cause.printStackTrace(); | ||
| 241 | + } | ||
| 242 | + } | ||
| 243 | + | ||
| 244 | + private void loadBasicField(Field field, String key) { | ||
| 245 | + try { | ||
| 246 | + String methodName = "get" + Strings.firstToUpper(field.getType().getSimpleName()); | ||
| 184 | 247 | ||
| 248 | + if (field.getType().isArray()) { | ||
| 249 | + methodName = Strings.removeChars(methodName, '[', ']') + "Array"; | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + Method method = this.configuration.getClass().getMethod(methodName, String.class, field.getType()); | ||
| 253 | + Object value = method.invoke(this.configuration, key, Reflections.getFieldValue(field, this.object)); | ||
| 185 | Reflections.setFieldValue(field, this.object, value); | 254 | Reflections.setFieldValue(field, this.object, value); |
| 186 | 255 | ||
| 187 | } catch (SecurityException cause) { | 256 | } catch (SecurityException cause) { |