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) { |