From b069c8edb608acb98ce623d96f8da411c2a48505 Mon Sep 17 00:00:00 2001 From: Thiago Mariano Date: Tue, 19 Mar 2013 12:44:10 -0300 Subject: [PATCH] Inclusão de lançamento de exceção caso o arquivo buscado não exista no projeto e inclusão de log caso a key buscada não exista no arquivo informado. --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------ impl/core/src/main/resources/demoiselle-core-bundle.properties | 29 ++++++++++++++++------------- 2 files changed, 65 insertions(+), 19 deletions(-) diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java index 2957168..36ae07a 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java @@ -1,4 +1,5 @@ /* +/* * Demoiselle Framework * Copyright (C) 2010 SERPRO * ---------------------------------------------------------------------------- @@ -63,8 +64,10 @@ import br.gov.frameworkdemoiselle.annotation.Name; import br.gov.frameworkdemoiselle.configuration.ConfigType; import br.gov.frameworkdemoiselle.configuration.Configuration; import br.gov.frameworkdemoiselle.configuration.ConfigurationException; +import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap; import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; +import br.gov.frameworkdemoiselle.util.Beans; import br.gov.frameworkdemoiselle.util.Reflections; import br.gov.frameworkdemoiselle.util.ResourceBundle; import br.gov.frameworkdemoiselle.util.Strings; @@ -83,6 +86,8 @@ public class ConfigurationLoader implements Serializable { private Logger logger; + private CoreBootstrap bootstrap; + /** * Loads a config class filling it with the corresponding values. * @@ -93,9 +98,14 @@ public class ConfigurationLoader implements Serializable { public void load(Object object) throws ConfigurationException { Class config = object.getClass(); + if (!getBootstrap().isAnnotatedType(config)) { + config = config.getSuperclass(); + getLogger().debug(getBundle().getString("proxy-detected", config, config.getClass().getSuperclass())); + } + getLogger().debug(getBundle().getString("loading-configuration-class", config.getName())); - for (Field field : Reflections.getNonStaticFields(config)) { + for (Field field : Reflections.getNonStaticDeclaredFields(config)) { loadField(field, object, config); } } @@ -108,10 +118,11 @@ public class ConfigurationLoader implements Serializable { if (config != null) { Key key = new Key(field, clazz, config); - Object value = getValue(key, field, config); - - validate(field, key, value, resource); - setValue(field, key, object, value); + if(validateKey(resource, key, type, config)){ + Object value = getValue(key, field, config); + validate(field, key, value, resource); + setValue(field, key, object, value); + } } } } @@ -131,6 +142,24 @@ public class ConfigurationLoader implements Serializable { } } + private boolean validateKey(String resource, Key key, ConfigType type, org.apache.commons.configuration.Configuration config){ + if(!config.containsKey(key.toString())){ + if(type.toString().equals("PROPERTIES")){ + getLogger().info(getBundle().getString("key-not-found-in-file", key, resource + ".properties")); + }else{ + if(type.toString().equals("XML")){ + getLogger().info(getBundle().getString("key-not-found-in-file", key, resource + ".xml")); + }else{ + if(type.toString().equals("SYSTEM")){ + getLogger().info(getBundle().getString("key-not-found-in-system", key)); + } + } + } + return false; + } + return true; + } + /** * Returns the configuration class according to specified resource name and configuration type. * @@ -154,6 +183,9 @@ public class ConfigurationLoader implements Serializable { if (url != null) { result = new DataConfiguration(new PropertiesConfiguration(url)); + }else{ + throw new ConfigurationException( + getBundle().getString("resource-not-found", resource + ".properties")); } break; @@ -163,6 +195,9 @@ public class ConfigurationLoader implements Serializable { if (url != null) { result = new DataConfiguration(new XMLConfiguration(url)); + }else{ + throw new ConfigurationException( + getBundle().getString("resource-not-found", resource + ".xml")); } break; @@ -405,6 +440,14 @@ public class ConfigurationLoader implements Serializable { return logger; } + private CoreBootstrap getBootstrap() { + if (bootstrap == null) { + bootstrap = Beans.getReference(CoreBootstrap.class); + } + + return bootstrap; + } + private class Key { private String prefix; @@ -459,4 +502,4 @@ public class ConfigurationLoader implements Serializable { return this.key; } } -} +} \ No newline at end of file diff --git a/impl/core/src/main/resources/demoiselle-core-bundle.properties b/impl/core/src/main/resources/demoiselle-core-bundle.properties index c15bb8e..8cdbdf6 100644 --- a/impl/core/src/main/resources/demoiselle-core-bundle.properties +++ b/impl/core/src/main/resources/demoiselle-core-bundle.properties @@ -34,12 +34,15 @@ # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. engine-on=Ligando os motores do Demoiselle ${project.version} -ambiguous-strategy-resolution=Foi detectada ambiguidade da interface "{0}" com as seguintes implementa\u00E7\u00F5es\: "{1}". Para resolver o conflito, defina explicitamente a implementa\u00E7\u00E3o no demoiselle.properties. -bean-not-found=Voc\u00EA est\u00E1 tentando obter um objeto n\u00E3o reconhecido pelo CDI via Beans.getReference({0}) +resource-not-found=Arquivo {0} n\u00E3o foi encontrado +key-not-found-in-file=A chave {0} n\u00E3o foi encontrada no arquivo {1} +key-not-found-in-system=A vari\u00E1vel de ambiente {0} n\u00E3o foi encontrada no sistema +ambiguous-strategy-resolution=Foi detectada ambiguidade da interface "{0}" com as seguintes implementa\u00E7\u00F5es\: "{1}". Para resolver o conflito, defina explicitamente a implementa\u00E7\u00E3o no demoiselle.properties. +bean-not-found=Voc\u00EA est\u00E1 tentando obter um objeto n\u00E3o reconhecido pelo CDI via Beans.getReference({0}) more-than-one-exceptionhandler-defined-for-same-class=Foi definido mais de um m\u00E9todo na classe {0} para tratar a exce\u00E7\u00E3o {1} handling-exception=Tratando a exce\u00E7\u00E3o {0} proxy-detected=Detectado o proxy {0} da classe {1} -ambiguous-key=Existe mais de uma chave declarada no arquivo de configura\u00E7\u00E3o para o campo {0} da classe {1}. Indique qual a chave correta utilizando a anota\u00E7\u00E3o Name +ambiguous-key=Existe mais de uma chave declarada no arquivo de configura\u00E7\u00E3o para o campo {0} da classe {1}. Indique qual a chave correta utilizando a anota\u00E7\u00E3o Name taking-off=O Demoiselle ${project.version} decolou engine-off=Desligando os motores do Demoiselle ${project.version} setting-up-bean-manager=BeanManager dispon\u00EDvel atrav\u00E9s do utilit\u00E1rio {0} @@ -61,14 +64,14 @@ configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pod configuration-key-not-found=Chave de configura\u00E7\u00E3o "{0}" n\u00E3o encontrada. Conven\u00E7\u00F5es verificadas\: "{1}" transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties -executing-all=Executando todos os \: {0} +executing-all=Executando todos os \: {0} custom-context-was-registered=O contexto {0} foi registrado custom-context-was-unregistered=O contexto {0} foi removido - + error-creating-configuration-from-resource=Error creating configuration from resource named "{0}" -configuration-type-not-implemented-yet=Configuration type "{0}" is not implemented yet -error-converting-to-type=Error converting to type "{0}" -error-creating-new-instance-for=Error creating a new instance for "{0}" +configuration-type-not-implemented-yet=Configuration type "{0}" is not implemented yet +error-converting-to-type=Error converting to type "{0}" +error-creating-new-instance-for=Error creating a new instance for "{0}" executed-successfully=\ {0} execultado com sucesso must-declare-one-single-parameter=Voc\u00EA deve declarar um par\u00E2metro \u00FAnico em {0} loading-default-transaction-manager=Carregando o gerenciador de transa\u00E7\u00E3o padr\u00E3o {0} @@ -77,8 +80,8 @@ page-result=Resultado paginado [p\u00E1gina\={0}, total de resultados\={1}] page=P\u00E1gina [n\u00FAmero\={0}, tamanho\={1}] processing=Processando\: {0} processing-fail=Falha no processamento devido a uma exce\u00E7\u00E3o lan\u00E7ada pela aplica\u00E7\u00E3o -for= \ para\: -file-not-found=O arquivo {0} n\u00E3o foi encontrado +for= \ para\: +file-not-found=O arquivo {0} n\u00E3o foi encontrado adding-message-to-context=Adicionando uma mensagem no contexto: [{0}] cleaning-message-context=Limpando o contexto de mensagens @@ -87,10 +90,10 @@ access-allowed=O usu\u00E1rio "{0}" acessou o recurso "{2}" com a a\u00E7\u00E3o access-denied=O usu\u00E1rio "{0}" n\u00E3o possui permiss\u00E3o para executar a a\u00E7\u00E3o "{1}" no recurso "{2}" access-denied-ui=Voc\u00EA n\u00E3o est\u00E1 autorizado a executar a a\u00E7\u00E3o {1} no recurso {0} authorizer-not-defined=Nenhuma regra de resolu\u00E7\u00E3o de permiss\u00F5es foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authorizer.class como regra de resolu\u00E7\u00E3o de permiss\u00F5es desejada no arquivo demoiselle.properties. -user-not-authenticated=Usu\u00E1rio n\u00E3o autenticado +user-not-authenticated=Usu\u00E1rio n\u00E3o autenticado has-role-verification=Verificando se o usu\u00E1rio {0} possui a(s) role(s)\: {1} does-not-have-role=Usu\u00E1rio {0} n\u00E3o possui a(s) role(s)\: {1} -does-not-have-role-ui=Para acessar este recurso \u00E9 necess\u00E1rio ser {0} +does-not-have-role-ui=Para acessar este recurso \u00E9 necess\u00E1rio ser {0} user-has-role=Usu\u00E1rio {0} possui a(s) role(s)\: {1} -authenticator-not-defined=Nenhum mecanismo de autentica\u00E7\u00E3o foi definido. Para utilizar {0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authenticator.class como mecanismo de autentica\u00E7\u00E3o desejado no arquivo demoiselle.properties. +authenticator-not-defined=Nenhum mecanismo de autentica\u00E7\u00E3o foi definido. Para utilizar {0} \u00E9 preciso definir a propriedade frameworkdemoiselle.security.authenticator.class como mecanismo de autentica\u00E7\u00E3o desejado no arquivo demoiselle.properties. \ No newline at end of file -- libgit2 0.21.2