Commit 86a2e752fe2dc94c03953897d954eca24597f992

Authored by Emerson Oliveira
1 parent ee28b5f4
Exists in master

Adicionando carregamento para tipos complexos

impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java
... ... @@ -48,6 +48,7 @@ import java.util.List;
48 48 import javax.validation.constraints.NotNull;
49 49  
50 50 import org.apache.commons.configuration.AbstractConfiguration;
  51 +import org.apache.commons.configuration.DataConfiguration;
51 52 import org.apache.commons.configuration.FileConfiguration;
52 53 import org.apache.commons.configuration.PropertiesConfiguration;
53 54 import org.apache.commons.configuration.SystemConfiguration;
... ... @@ -79,7 +80,7 @@ public class ConfigurationLoader implements Serializable {
79 80  
80 81 private String prefix;
81 82  
82   - private org.apache.commons.configuration.Configuration configuration;
  83 + private DataConfiguration configuration;
83 84  
84 85 private List<Field> fields;
85 86  
... ... @@ -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 144 private void loadResource() {
... ... @@ -172,16 +173,84 @@ public class ConfigurationLoader implements Serializable {
172 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 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 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 254 Reflections.setFieldValue(field, this.object, value);
186 255  
187 256 } catch (SecurityException cause) {
... ...