Commit 5b13ae54e703ead7cbabd40a1eadfbecb6823ae4

Authored by Emerson Oliveira
1 parent 35c73525
Exists in master

Implementado o seguinte comportamento: quando não for encontrada uma

classe extratora para um determinado campo, será lançada uma
ConfigurationException, com uma mensagem apropriada e
ClassNotFoundException como causa. Os testes da classe
ConfigurationCUstomFieldTest foram ajustados para esperar esse
comportamento
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationLoader.java
@@ -126,7 +126,8 @@ public class ConfigurationLoader implements Serializable { @@ -126,7 +126,8 @@ public class ConfigurationLoader implements Serializable {
126 Name annotation = field.getAnnotation(Name.class); 126 Name annotation = field.getAnnotation(Name.class);
127 127
128 if (annotation != null && Strings.isEmpty(annotation.value())) { 128 if (annotation != null && Strings.isEmpty(annotation.value())) {
129 - throw new ConfigurationException(getBundle().getString("configuration-name-attribute-cant-be-empty")); 129 + throw new ConfigurationException(getBundle().getString("configuration-name-attribute-cant-be-empty"),
  130 + new IllegalArgumentException());
130 } 131 }
131 } 132 }
132 133
@@ -179,7 +180,7 @@ public class ConfigurationLoader implements Serializable { @@ -179,7 +180,7 @@ public class ConfigurationLoader implements Serializable {
179 180
180 default: 181 default:
181 throw new ConfigurationException(getBundle().getString("configuration-type-not-implemented-yet", 182 throw new ConfigurationException(getBundle().getString("configuration-type-not-implemented-yet",
182 - type.name())); 183 + type.name()), new IllegalArgumentException());
183 } 184 }
184 185
185 config.setDelimiterParsingDisabled(true); 186 config.setDelimiterParsingDisabled(true);
@@ -241,13 +242,12 @@ public class ConfigurationLoader implements Serializable { @@ -241,13 +242,12 @@ public class ConfigurationLoader implements Serializable {
241 } 242 }
242 } 243 }
243 244
244 - ConfigurationValueExtractor elected = StrategySelector.getInstance(ConfigurationValueExtractor.class, 245 + ConfigurationValueExtractor elected = StrategySelector.selectInstance(ConfigurationValueExtractor.class,
245 candidates); 246 candidates);
246 247
247 if (elected == null) { 248 if (elected == null) {
248 - // TODO lançar exceção informando que nenhum extrator foi encontrado para o field e ensinar como implementar  
249 - // um extrator personalizado.  
250 - throw new ConfigurationException(""); 249 + throw new ConfigurationException(getBundle().getString("configuration-extractor-not-found",
  250 + field.toGenericString(), ConfigurationValueExtractor.class.getName()), new ClassNotFoundException());
251 } 251 }
252 252
253 return elected; 253 return elected;
impl/core/src/main/resources/demoiselle-core-bundle.properties
@@ -59,6 +59,7 @@ configuration-field-loaded=Configura\u00E7\u00E3o {0} atribu\u00EDda a {1} com o @@ -59,6 +59,7 @@ configuration-field-loaded=Configura\u00E7\u00E3o {0} atribu\u00EDda a {1} com o
59 configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1} 59 configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1}
60 configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pode estar em branco 60 configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pode estar em branco
61 configuration-key-not-found=Chave de configura\u00E7\u00E3o {0} n\u00E3o encontrada 61 configuration-key-not-found=Chave de configura\u00E7\u00E3o {0} n\u00E3o encontrada
  62 +configuration-extractor-not-found=N\u00E3o foi poss\u00EDvel encontrar a classe extratora para o atributo {0}. Implemente a interface {1} para criar sua classe extratora.
62 63
63 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 64 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
64 executing-all=Executando todos os \: {0} 65 executing-all=Executando todos os \: {0}
impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/custom/ConfigurationCustomFieldTest.java
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 */ 36 */
37 package br.gov.frameworkdemoiselle.configuration.field.custom; 37 package br.gov.frameworkdemoiselle.configuration.field.custom;
38 38
  39 +import static junit.framework.Assert.assertEquals;
39 import static junit.framework.Assert.assertNotNull; 40 import static junit.framework.Assert.assertNotNull;
40 import static junit.framework.Assert.fail; 41 import static junit.framework.Assert.fail;
41 42
@@ -84,6 +85,7 @@ public class ConfigurationCustomFieldTest extends AbstractConfigurationTest { @@ -84,6 +85,7 @@ public class ConfigurationCustomFieldTest extends AbstractConfigurationTest {
84 unmappedField.getUnmappedClass(); 85 unmappedField.getUnmappedClass();
85 fail(); 86 fail();
86 } catch (ConfigurationException cause) { 87 } catch (ConfigurationException cause) {
  88 + assertEquals(ClassNotFoundException.class, cause.getCause().getClass());
87 } 89 }
88 } 90 }
89 } 91 }
impl/core/src/test/resources/configuration/field/custom/demoiselle.properties
@@ -32,3 +32,5 @@ @@ -32,3 +32,5 @@
32 # "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> 32 # "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
33 # ou escreva para a Fundação do Software Livre (FSF) Inc., 33 # ou escreva para a Fundação do Software Livre (FSF) Inc.,
34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. 34 # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  35 +mappedClass=Mapped Class
  36 +unmappedClass=UnmappedClass