Commit 36f21d221ba906842ca7caa6e0f69a082a7d23b7

Authored by Cleverson Sacramento
1 parent 001f9588
Exists in master

Organização do código e ajustes relacionados à serialização dos objetos

internos do framework
Showing 20 changed files with 610 additions and 659 deletions   Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java
@@ -48,7 +48,6 @@ import java.util.Iterator; @@ -48,7 +48,6 @@ import java.util.Iterator;
48 import java.util.Properties; 48 import java.util.Properties;
49 import java.util.Set; 49 import java.util.Set;
50 50
51 -import javax.inject.Inject;  
52 import javax.validation.constraints.NotNull; 51 import javax.validation.constraints.NotNull;
53 52
54 import org.apache.commons.configuration.DataConfiguration; 53 import org.apache.commons.configuration.DataConfiguration;
@@ -63,6 +62,8 @@ import br.gov.frameworkdemoiselle.configuration.ConfigType; @@ -63,6 +62,8 @@ import br.gov.frameworkdemoiselle.configuration.ConfigType;
63 import br.gov.frameworkdemoiselle.configuration.Configuration; 62 import br.gov.frameworkdemoiselle.configuration.Configuration;
64 import br.gov.frameworkdemoiselle.configuration.ConfigurationException; 63 import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
65 import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap; 64 import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;
  65 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  66 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
66 import br.gov.frameworkdemoiselle.util.Reflections; 67 import br.gov.frameworkdemoiselle.util.Reflections;
67 import br.gov.frameworkdemoiselle.util.ResourceBundle; 68 import br.gov.frameworkdemoiselle.util.ResourceBundle;
68 import br.gov.frameworkdemoiselle.util.Strings; 69 import br.gov.frameworkdemoiselle.util.Strings;
@@ -77,12 +78,9 @@ public class ConfigurationLoader implements Serializable { @@ -77,12 +78,9 @@ public class ConfigurationLoader implements Serializable {
77 78
78 private static final long serialVersionUID = 1L; 79 private static final long serialVersionUID = 1L;
79 80
80 - @Inject  
81 - @Name("demoiselle-core-bundle")  
82 - private ResourceBundle bundle; 81 + private static ResourceBundle bundle;
83 82
84 - @Inject  
85 - private Logger logger; 83 + private static Logger logger;
86 84
87 /** 85 /**
88 * Loads a config class filling it with the corresponding values. 86 * Loads a config class filling it with the corresponding values.
@@ -96,10 +94,10 @@ public class ConfigurationLoader implements Serializable { @@ -96,10 +94,10 @@ public class ConfigurationLoader implements Serializable {
96 94
97 if (!CoreBootstrap.isAnnotatedType(config)) { 95 if (!CoreBootstrap.isAnnotatedType(config)) {
98 config = config.getSuperclass(); 96 config = config.getSuperclass();
99 - logger.debug(bundle.getString("proxy-detected", config, config.getClass().getSuperclass())); 97 + getLogger().debug(getBundle().getString("proxy-detected", config, config.getClass().getSuperclass()));
100 } 98 }
101 99
102 - logger.debug(bundle.getString("loading-configuration-class", config.getName())); 100 + getLogger().debug(getBundle().getString("loading-configuration-class", config.getName()));
103 101
104 for (Field field : Reflections.getNonStaticDeclaredFields(config)) { 102 for (Field field : Reflections.getNonStaticDeclaredFields(config)) {
105 loadField(field, object, config); 103 loadField(field, object, config);
@@ -123,13 +121,14 @@ public class ConfigurationLoader implements Serializable { @@ -123,13 +121,14 @@ public class ConfigurationLoader implements Serializable {
123 private void setValue(Field field, String key, Object object, Object value) { 121 private void setValue(Field field, String key, Object object, Object value) {
124 if (value != null) { 122 if (value != null) {
125 Reflections.setFieldValue(field, object, value); 123 Reflections.setFieldValue(field, object, value);
126 - logger.debug(bundle.getString("configuration-field-loaded", key, field.getName(), value)); 124 + getLogger().debug(getBundle().getString("configuration-field-loaded", key, field.getName(), value));
127 } 125 }
128 } 126 }
129 127
130 private void validate(Field field, String key, Object value, String resource) { 128 private void validate(Field field, String key, Object value, String resource) {
131 if (field.isAnnotationPresent(NotNull.class) && value == null) { 129 if (field.isAnnotationPresent(NotNull.class) && value == null) {
132 - throw new ConfigurationException(bundle.getString("configuration-attribute-is-mandatory", key, resource)); 130 + throw new ConfigurationException(getBundle().getString("configuration-attribute-is-mandatory", key,
  131 + resource));
133 } 132 }
134 } 133 }
135 134
@@ -166,7 +165,7 @@ public class ConfigurationLoader implements Serializable { @@ -166,7 +165,7 @@ public class ConfigurationLoader implements Serializable {
166 165
167 Name nameAnnotation = field.getAnnotation(Name.class); 166 Name nameAnnotation = field.getAnnotation(Name.class);
168 if (Strings.isEmpty(nameAnnotation.value())) { 167 if (Strings.isEmpty(nameAnnotation.value())) {
169 - throw new ConfigurationException(bundle.getString("configuration-name-attribute-cant-be-empty")); 168 + throw new ConfigurationException(getBundle().getString("configuration-name-attribute-cant-be-empty"));
170 } else { 169 } else {
171 key = nameAnnotation.value(); 170 key = nameAnnotation.value();
172 } 171 }
@@ -193,9 +192,9 @@ public class ConfigurationLoader implements Serializable { @@ -193,9 +192,9 @@ public class ConfigurationLoader implements Serializable {
193 } 192 }
194 193
195 if (matches == 0) { 194 if (matches == 0) {
196 - logger.debug(bundle.getString("configuration-key-not-found", key, conventions)); 195 + getLogger().debug(getBundle().getString("configuration-key-not-found", key, conventions));
197 } else if (matches > 1) { 196 } else if (matches > 1) {
198 - throw new ConfigurationException(bundle.getString("ambiguous-key", field.getName(), 197 + throw new ConfigurationException(getBundle().getString("ambiguous-key", field.getName(),
199 field.getDeclaringClass())); 198 field.getDeclaringClass()));
200 } 199 }
201 200
@@ -222,7 +221,7 @@ public class ConfigurationLoader implements Serializable { @@ -222,7 +221,7 @@ public class ConfigurationLoader implements Serializable {
222 221
223 case PROPERTIES: 222 case PROPERTIES:
224 url = getResourceAsURL(resource + ".properties"); 223 url = getResourceAsURL(resource + ".properties");
225 - config = new DataConfiguration(new PropertiesConfiguration(url)); 224 + config = new DataConfiguration(new PropertiesConfiguration(url));
226 break; 225 break;
227 226
228 case XML: 227 case XML:
@@ -231,13 +230,13 @@ public class ConfigurationLoader implements Serializable { @@ -231,13 +230,13 @@ public class ConfigurationLoader implements Serializable {
231 break; 230 break;
232 231
233 default: 232 default:
234 - throw new ConfigurationException(bundle.getString("configuration-type-not-implemented-yet", 233 + throw new ConfigurationException(getBundle().getString("configuration-type-not-implemented-yet",
235 type.name())); 234 type.name()));
236 } 235 }
237 236
238 } catch (Exception cause) { 237 } catch (Exception cause) {
239 - throw new ConfigurationException(bundle.getString("error-creating-configuration-from-resource", resource),  
240 - cause); 238 + throw new ConfigurationException(getBundle().getString("error-creating-configuration-from-resource",
  239 + resource), cause);
241 } 240 }
242 241
243 return config; 242 return config;
@@ -248,7 +247,7 @@ public class ConfigurationLoader implements Serializable { @@ -248,7 +247,7 @@ public class ConfigurationLoader implements Serializable {
248 Object value; 247 Object value;
249 248
250 Class<?> fieldClass = (Class<?>) field.getType(); 249 Class<?> fieldClass = (Class<?>) field.getType();
251 - 250 +
252 if (fieldClass.isArray()) { 251 if (fieldClass.isArray()) {
253 value = getArray(key, field, config); 252 value = getArray(key, field, config);
254 } else if (fieldClass.equals(Properties.class)) { 253 } else if (fieldClass.equals(Properties.class)) {
@@ -260,27 +259,28 @@ public class ConfigurationLoader implements Serializable { @@ -260,27 +259,28 @@ public class ConfigurationLoader implements Serializable {
260 259
261 return (T) value; 260 return (T) value;
262 } 261 }
263 - 262 +
264 private <T> Object getArray(String key, Field field, org.apache.commons.configuration.Configuration config) { 263 private <T> Object getArray(String key, Field field, org.apache.commons.configuration.Configuration config) {
265 Object value = null; 264 Object value = null;
266 265
267 Class<?> fieldClass = (Class<?>) field.getType(); 266 Class<?> fieldClass = (Class<?>) field.getType();
268 - 267 +
269 try { 268 try {
270 Method method; 269 Method method;
271 - 270 +
272 String methodName = "get"; 271 String methodName = "get";
273 - 272 +
274 methodName += Strings.firstToUpper(fieldClass.getSimpleName()); 273 methodName += Strings.firstToUpper(fieldClass.getSimpleName());
275 methodName = Strings.removeChars(methodName, '[', ']'); 274 methodName = Strings.removeChars(methodName, '[', ']');
276 - 275 +
277 methodName += "Array"; 276 methodName += "Array";
278 277
279 method = config.getClass().getMethod(methodName, String.class); 278 method = config.getClass().getMethod(methodName, String.class);
280 value = method.invoke(config, key); 279 value = method.invoke(config, key);
281 280
282 } catch (Throwable cause) { 281 } catch (Throwable cause) {
283 - throw new ConfigurationException(bundle.getString("error-converting-to-type", fieldClass.getName()), cause); 282 + throw new ConfigurationException(getBundle().getString("error-converting-to-type", fieldClass.getName()),
  283 + cause);
284 } 284 }
285 285
286 return value; 286 return value;
@@ -290,62 +290,61 @@ public class ConfigurationLoader implements Serializable { @@ -290,62 +290,61 @@ public class ConfigurationLoader implements Serializable {
290 Object value = null; 290 Object value = null;
291 291
292 Class<?> fieldClass = (Class<?>) field.getType(); 292 Class<?> fieldClass = (Class<?>) field.getType();
293 - 293 +
294 try { 294 try {
295 Method method; 295 Method method;
296 - 296 +
297 String methodName = "get"; 297 String methodName = "get";
298 - 298 +
299 methodName += discoveryGenericType(field); 299 methodName += discoveryGenericType(field);
300 - 300 +
301 methodName += Strings.firstToUpper(fieldClass.getSimpleName()); 301 methodName += Strings.firstToUpper(fieldClass.getSimpleName());
302 302
303 if (!fieldClass.isPrimitive()) { 303 if (!fieldClass.isPrimitive()) {
304 method = config.getClass().getMethod(methodName, String.class, fieldClass); 304 method = config.getClass().getMethod(methodName, String.class, fieldClass);
305 value = method.invoke(config, key, null); 305 value = method.invoke(config, key, null);
306 - 306 +
307 } else if (config.containsKey(key)) { 307 } else if (config.containsKey(key)) {
308 method = config.getClass().getMethod(methodName, String.class); 308 method = config.getClass().getMethod(methodName, String.class);
309 value = method.invoke(config, key); 309 value = method.invoke(config, key);
310 } 310 }
311 311
312 } catch (Throwable cause) { 312 } catch (Throwable cause) {
313 - throw new ConfigurationException(bundle.getString("error-converting-to-type", fieldClass.getName()), cause); 313 + throw new ConfigurationException(getBundle().getString("error-converting-to-type", fieldClass.getName()),
  314 + cause);
314 } 315 }
315 316
316 return value; 317 return value;
317 } 318 }
318 319
319 /** 320 /**
320 - * Discovery the Generic's type.  
321 - *  
322 - * for example: the generic's type of List<Integer> list is an Integer type 321 + * Discovery the Generic's type. for example: the generic's type of List<Integer> list is an Integer type
323 * 322 *
324 * @param field 323 * @param field
325 * @return 324 * @return
326 */ 325 */
327 private String discoveryGenericType(Field field) { 326 private String discoveryGenericType(Field field) {
328 - 327 +
329 Type genericFieldType = field.getGenericType(); 328 Type genericFieldType = field.getGenericType();
330 -  
331 - if(genericFieldType instanceof ParameterizedType){  
332 - ParameterizedType type = (ParameterizedType) genericFieldType;  
333 - Type[] fieldArgumentTypes = type.getActualTypeArguments();  
334 - for(Type fieldArgumentType : fieldArgumentTypes){  
335 - @SuppressWarnings("rawtypes") 329 +
  330 + if (genericFieldType instanceof ParameterizedType) {
  331 + ParameterizedType type = (ParameterizedType) genericFieldType;
  332 + Type[] fieldArgumentTypes = type.getActualTypeArguments();
  333 + for (Type fieldArgumentType : fieldArgumentTypes) {
  334 + @SuppressWarnings("rawtypes")
336 Class fieldArgumentClass = (Class) fieldArgumentType; 335 Class fieldArgumentClass = (Class) fieldArgumentType;
337 -  
338 - if("String".equals(fieldArgumentClass.getSimpleName())) {  
339 - return "";  
340 - }  
341 -  
342 - return fieldArgumentClass.getSimpleName();  
343 - } 336 +
  337 + if ("String".equals(fieldArgumentClass.getSimpleName())) {
  338 + return "";
  339 + }
  340 +
  341 + return fieldArgumentClass.getSimpleName();
  342 + }
344 } 343 }
345 - 344 +
346 return ""; 345 return "";
347 } 346 }
348 - 347 +
349 private Object getProperty(String key, org.apache.commons.configuration.Configuration config) { 348 private Object getProperty(String key, org.apache.commons.configuration.Configuration config) {
350 Object value = null; 349 Object value = null;
351 350
@@ -397,4 +396,20 @@ public class ConfigurationLoader implements Serializable { @@ -397,4 +396,20 @@ public class ConfigurationLoader implements Serializable {
397 ClassLoader classLoader = getClassLoaderForResource(resource); 396 ClassLoader classLoader = getClassLoaderForResource(resource);
398 return classLoader.getResource(resource); 397 return classLoader.getResource(resource);
399 } 398 }
  399 +
  400 + private static ResourceBundle getBundle() {
  401 + if (bundle == null) {
  402 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  403 + }
  404 +
  405 + return bundle;
  406 + }
  407 +
  408 + private static Logger getLogger() {
  409 + if (logger == null) {
  410 + logger = LoggerProducer.create(ConfigurationLoader.class);
  411 + }
  412 +
  413 + return logger;
  414 + }
400 } 415 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/PaginationConfig.java
@@ -77,5 +77,4 @@ public class PaginationConfig implements Serializable { @@ -77,5 +77,4 @@ public class PaginationConfig implements Serializable {
77 public int getMaxPageLinks() { 77 public int getMaxPageLinks() {
78 return maxPageLinks; 78 return maxPageLinks;
79 } 79 }
80 -  
81 } 80 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextStore.java
@@ -54,5 +54,4 @@ public class ContextStore { @@ -54,5 +54,4 @@ public class ContextStore {
54 public void put(final String name, final Object instance) { 54 public void put(final String name, final Object instance) {
55 this.map.put(name, instance); 55 this.map.put(name, instance);
56 } 56 }
57 -  
58 } 57 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/MessageContextImpl.java
@@ -41,10 +41,11 @@ import java.util.ArrayList; @@ -41,10 +41,11 @@ import java.util.ArrayList;
41 import java.util.List; 41 import java.util.List;
42 42
43 import javax.enterprise.context.RequestScoped; 43 import javax.enterprise.context.RequestScoped;
44 -import javax.inject.Inject;  
45 44
46 import org.slf4j.Logger; 45 import org.slf4j.Logger;
47 46
  47 +import br.gov.frameworkdemoiselle.internal.interceptor.ExceptionHandlerInterceptor;
  48 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
48 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; 49 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
49 import br.gov.frameworkdemoiselle.message.DefaultMessage; 50 import br.gov.frameworkdemoiselle.message.DefaultMessage;
50 import br.gov.frameworkdemoiselle.message.Message; 51 import br.gov.frameworkdemoiselle.message.Message;
@@ -62,13 +63,12 @@ public class MessageContextImpl implements Serializable, MessageContext { @@ -62,13 +63,12 @@ public class MessageContextImpl implements Serializable, MessageContext {
62 63
63 private static final long serialVersionUID = 1L; 64 private static final long serialVersionUID = 1L;
64 65
65 - @Inject  
66 - private Logger logger;  
67 -  
68 private final List<Message> messages = new ArrayList<Message>(); 66 private final List<Message> messages = new ArrayList<Message>();
69 67
70 private static ResourceBundle bundle; 68 private static ResourceBundle bundle;
71 69
  70 + private static Logger logger;
  71 +
72 @Override 72 @Override
73 public void add(final Message message, Object... params) { 73 public void add(final Message message, Object... params) {
74 Message aux; 74 Message aux;
@@ -79,7 +79,7 @@ public class MessageContextImpl implements Serializable, MessageContext { @@ -79,7 +79,7 @@ public class MessageContextImpl implements Serializable, MessageContext {
79 aux = message; 79 aux = message;
80 } 80 }
81 81
82 - logger.debug(getBundle().getString("adding-message-to-context", message.toString())); 82 + getLogger().debug(getBundle().getString("adding-message-to-context", message.toString()));
83 messages.add(aux); 83 messages.add(aux);
84 } 84 }
85 85
@@ -100,7 +100,7 @@ public class MessageContextImpl implements Serializable, MessageContext { @@ -100,7 +100,7 @@ public class MessageContextImpl implements Serializable, MessageContext {
100 100
101 @Override 101 @Override
102 public void clear() { 102 public void clear() {
103 - logger.debug(getBundle().getString("cleaning-message-context")); 103 + getLogger().debug(getBundle().getString("cleaning-message-context"));
104 messages.clear(); 104 messages.clear();
105 } 105 }
106 106
@@ -111,4 +111,12 @@ public class MessageContextImpl implements Serializable, MessageContext { @@ -111,4 +111,12 @@ public class MessageContextImpl implements Serializable, MessageContext {
111 111
112 return bundle; 112 return bundle;
113 } 113 }
  114 +
  115 + private static Logger getLogger() {
  116 + if (logger == null) {
  117 + logger = LoggerProducer.create(ExceptionHandlerInterceptor.class);
  118 + }
  119 +
  120 + return logger;
  121 + }
114 } 122 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/PaginationContextImpl.java
@@ -41,11 +41,11 @@ import java.util.HashMap; @@ -41,11 +41,11 @@ import java.util.HashMap;
41 import java.util.Map; 41 import java.util.Map;
42 42
43 import javax.enterprise.context.SessionScoped; 43 import javax.enterprise.context.SessionScoped;
44 -import javax.inject.Inject;  
45 44
46 import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig; 45 import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig;
47 import br.gov.frameworkdemoiselle.pagination.Pagination; 46 import br.gov.frameworkdemoiselle.pagination.Pagination;
48 import br.gov.frameworkdemoiselle.pagination.PaginationContext; 47 import br.gov.frameworkdemoiselle.pagination.PaginationContext;
  48 +import br.gov.frameworkdemoiselle.util.Beans;
49 49
50 /** 50 /**
51 * Context implementation reserved for pagination purposes. Internally a hash map is used to store pagination data for 51 * Context implementation reserved for pagination purposes. Internally a hash map is used to store pagination data for
@@ -59,7 +59,6 @@ public class PaginationContextImpl implements Serializable, PaginationContext { @@ -59,7 +59,6 @@ public class PaginationContextImpl implements Serializable, PaginationContext {
59 59
60 private static final long serialVersionUID = 1L; 60 private static final long serialVersionUID = 1L;
61 61
62 - @Inject  
63 private PaginationConfig config; 62 private PaginationConfig config;
64 63
65 private final Map<Class<?>, Pagination> cache = new HashMap<Class<?>, Pagination>(); 64 private final Map<Class<?>, Pagination> cache = new HashMap<Class<?>, Pagination>();
@@ -73,7 +72,7 @@ public class PaginationContextImpl implements Serializable, PaginationContext { @@ -73,7 +72,7 @@ public class PaginationContextImpl implements Serializable, PaginationContext {
73 72
74 if (pagination == null && create) { 73 if (pagination == null && create) {
75 pagination = new PaginationImpl(); 74 pagination = new PaginationImpl();
76 - pagination.setPageSize(config.getPageSize()); 75 + pagination.setPageSize(getConfig().getPageSize());
77 76
78 cache.put(clazz, pagination); 77 cache.put(clazz, pagination);
79 } 78 }
@@ -81,4 +80,11 @@ public class PaginationContextImpl implements Serializable, PaginationContext { @@ -81,4 +80,11 @@ public class PaginationContextImpl implements Serializable, PaginationContext {
81 return pagination; 80 return pagination;
82 } 81 }
83 82
  83 + private PaginationConfig getConfig() {
  84 + if (config == null) {
  85 + config = Beans.getReference(PaginationConfig.class);
  86 + }
  87 +
  88 + return config;
  89 + }
84 } 90 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/SecurityContextImpl.java
@@ -60,14 +60,26 @@ public class SecurityContextImpl implements SecurityContext { @@ -60,14 +60,26 @@ public class SecurityContextImpl implements SecurityContext {
60 60
61 private static final long serialVersionUID = 1L; 61 private static final long serialVersionUID = 1L;
62 62
  63 + private Authenticator authenticator;
  64 +
  65 + private Authorizer authorizer;
  66 +
63 private Authenticator getAuthenticator() { 67 private Authenticator getAuthenticator() {
64 - return StrategySelector.getReference("frameworkdemoiselle.security.authenticator.class", Authenticator.class,  
65 - DefaultAuthenticator.class); 68 + if (authenticator == null) {
  69 + authenticator = StrategySelector.getReference("frameworkdemoiselle.security.authenticator.class",
  70 + Authenticator.class, DefaultAuthenticator.class);
  71 + }
  72 +
  73 + return authenticator;
66 } 74 }
67 75
68 private Authorizer getAuthorizer() { 76 private Authorizer getAuthorizer() {
69 - return StrategySelector.getReference("frameworkdemoiselle.security.authorizer.class", Authorizer.class,  
70 - DefaultAuthorizer.class); 77 + if (authorizer == null) {
  78 + authorizer = StrategySelector.getReference("frameworkdemoiselle.security.authorizer.class",
  79 + Authorizer.class, DefaultAuthorizer.class);
  80 + }
  81 +
  82 + return authorizer;
71 } 83 }
72 84
73 /** 85 /**
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/StrategySelector.java
@@ -37,6 +37,7 @@ @@ -37,6 +37,7 @@
37 package br.gov.frameworkdemoiselle.internal.implementation; 37 package br.gov.frameworkdemoiselle.internal.implementation;
38 38
39 import java.io.FileNotFoundException; 39 import java.io.FileNotFoundException;
  40 +import java.io.Serializable;
40 import java.net.URL; 41 import java.net.URL;
41 import java.util.Locale; 42 import java.util.Locale;
42 43
@@ -50,7 +51,12 @@ import br.gov.frameworkdemoiselle.util.Beans; @@ -50,7 +51,12 @@ import br.gov.frameworkdemoiselle.util.Beans;
50 import br.gov.frameworkdemoiselle.util.ResourceBundle; 51 import br.gov.frameworkdemoiselle.util.ResourceBundle;
51 import br.gov.frameworkdemoiselle.util.Strings; 52 import br.gov.frameworkdemoiselle.util.Strings;
52 53
53 -public class StrategySelector { 54 +public final class StrategySelector implements Serializable {
  55 +
  56 + private static final long serialVersionUID = 1L;
  57 +
  58 + private StrategySelector() {
  59 + }
54 60
55 public static <T> T getReference(String configKey, Class<T> type, Class<? extends T> defaultType) { 61 public static <T> T getReference(String configKey, Class<T> type, Class<? extends T> defaultType) {
56 Class<T> selectedType = loadSelected(configKey, type, defaultType); 62 Class<T> selectedType = loadSelected(configKey, type, defaultType);
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java
@@ -42,7 +42,6 @@ import java.lang.reflect.Method; @@ -42,7 +42,6 @@ import java.lang.reflect.Method;
42 import java.util.HashMap; 42 import java.util.HashMap;
43 import java.util.Map; 43 import java.util.Map;
44 44
45 -import javax.inject.Inject;  
46 import javax.interceptor.AroundInvoke; 45 import javax.interceptor.AroundInvoke;
47 import javax.interceptor.Interceptor; 46 import javax.interceptor.Interceptor;
48 import javax.interceptor.InvocationContext; 47 import javax.interceptor.InvocationContext;
@@ -50,9 +49,10 @@ import javax.interceptor.InvocationContext; @@ -50,9 +49,10 @@ import javax.interceptor.InvocationContext;
50 import org.slf4j.Logger; 49 import org.slf4j.Logger;
51 50
52 import br.gov.frameworkdemoiselle.DemoiselleException; 51 import br.gov.frameworkdemoiselle.DemoiselleException;
53 -import br.gov.frameworkdemoiselle.annotation.Name;  
54 import br.gov.frameworkdemoiselle.exception.ExceptionHandler; 52 import br.gov.frameworkdemoiselle.exception.ExceptionHandler;
55 import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap; 53 import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;
  54 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  55 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
56 import br.gov.frameworkdemoiselle.stereotype.Controller; 56 import br.gov.frameworkdemoiselle.stereotype.Controller;
57 import br.gov.frameworkdemoiselle.util.ResourceBundle; 57 import br.gov.frameworkdemoiselle.util.ResourceBundle;
58 58
@@ -62,20 +62,14 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -62,20 +62,14 @@ public class ExceptionHandlerInterceptor implements Serializable {
62 62
63 private static final long serialVersionUID = 1L; 63 private static final long serialVersionUID = 1L;
64 64
65 - private final ResourceBundle bundle; 65 + private static ResourceBundle bundle;
66 66
67 - private final Logger logger;  
68 -  
69 - @Inject  
70 - public ExceptionHandlerInterceptor(Logger logger, @Name("demoiselle-core-bundle") ResourceBundle bundle) {  
71 - this.logger = logger;  
72 - this.bundle = bundle;  
73 - } 67 + private static Logger logger;
74 68
75 private final Map<Class<?>, Map<Class<?>, Method>> cache = new HashMap<Class<?>, Map<Class<?>, Method>>(); 69 private final Map<Class<?>, Map<Class<?>, Method>> cache = new HashMap<Class<?>, Map<Class<?>, Method>>();
76 70
77 private final boolean handleException(final Exception cause, final InvocationContext ic) throws Exception { 71 private final boolean handleException(final Exception cause, final InvocationContext ic) throws Exception {
78 - logger.info(bundle.getString("handling-exception", cause.getClass().getCanonicalName())); 72 + getLogger().info(getBundle().getString("handling-exception", cause.getClass().getCanonicalName()));
79 73
80 boolean handled = false; 74 boolean handled = false;
81 Class<?> type = getType(ic); 75 Class<?> type = getType(ic);
@@ -98,8 +92,9 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -98,8 +92,9 @@ public class ExceptionHandlerInterceptor implements Serializable {
98 92
99 if (!CoreBootstrap.isAnnotatedType(type)) { 93 if (!CoreBootstrap.isAnnotatedType(type)) {
100 type = type.getSuperclass(); 94 type = type.getSuperclass();
101 - logger.debug(bundle.getString("proxy-detected", ic.getTarget().getClass(), ic.getTarget().getClass()  
102 - .getSuperclass())); 95 + getLogger().debug(
  96 + getBundle().getString("proxy-detected", ic.getTarget().getClass(),
  97 + ic.getTarget().getClass().getSuperclass()));
103 } 98 }
104 99
105 return type; 100 return type;
@@ -149,7 +144,7 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -149,7 +144,7 @@ public class ExceptionHandlerInterceptor implements Serializable {
149 */ 144 */
150 private final void validateHandler(final Method method) { 145 private final void validateHandler(final Method method) {
151 if (method.getParameterTypes().length != 1) { 146 if (method.getParameterTypes().length != 1) {
152 - throw new DemoiselleException(bundle.getString("must-declare-one-single-parameter", 147 + throw new DemoiselleException(getBundle().getString("must-declare-one-single-parameter",
153 method.toGenericString())); 148 method.toGenericString()));
154 } 149 }
155 } 150 }
@@ -170,8 +165,10 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -170,8 +165,10 @@ public class ExceptionHandlerInterceptor implements Serializable {
170 165
171 try { 166 try {
172 method.invoke(object, param); 167 method.invoke(object, param);
  168 +
173 } catch (InvocationTargetException cause) { 169 } catch (InvocationTargetException cause) {
174 Throwable targetTrowable = cause.getTargetException(); 170 Throwable targetTrowable = cause.getTargetException();
  171 +
175 if (targetTrowable instanceof Exception) { 172 if (targetTrowable instanceof Exception) {
176 throw (Exception) targetTrowable; 173 throw (Exception) targetTrowable;
177 } else { 174 } else {
@@ -181,13 +178,14 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -181,13 +178,14 @@ public class ExceptionHandlerInterceptor implements Serializable {
181 178
182 method.setAccessible(accessible); 179 method.setAccessible(accessible);
183 } 180 }
184 - 181 +
185 @AroundInvoke 182 @AroundInvoke
186 public Object manage(final InvocationContext ic) throws Exception { 183 public Object manage(final InvocationContext ic) throws Exception {
187 Object result = null; 184 Object result = null;
188 185
189 try { 186 try {
190 result = ic.proceed(); 187 result = ic.proceed();
  188 +
191 } catch (Exception cause) { 189 } catch (Exception cause) {
192 if (!handleException(cause, ic)) { 190 if (!handleException(cause, ic)) {
193 throw cause; 191 throw cause;
@@ -197,4 +195,19 @@ public class ExceptionHandlerInterceptor implements Serializable { @@ -197,4 +195,19 @@ public class ExceptionHandlerInterceptor implements Serializable {
197 return result; 195 return result;
198 } 196 }
199 197
  198 + private static ResourceBundle getBundle() {
  199 + if (bundle == null) {
  200 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  201 + }
  202 +
  203 + return bundle;
  204 + }
  205 +
  206 + private static Logger getLogger() {
  207 + if (logger == null) {
  208 + logger = LoggerProducer.create(ExceptionHandlerInterceptor.class);
  209 + }
  210 +
  211 + return logger;
  212 + }
200 } 213 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/RequiredPermissionInterceptor.java
@@ -38,8 +38,6 @@ package br.gov.frameworkdemoiselle.internal.interceptor; @@ -38,8 +38,6 @@ package br.gov.frameworkdemoiselle.internal.interceptor;
38 38
39 import java.io.Serializable; 39 import java.io.Serializable;
40 40
41 -import javax.enterprise.inject.Instance;  
42 -import javax.inject.Inject;  
43 import javax.interceptor.AroundInvoke; 41 import javax.interceptor.AroundInvoke;
44 import javax.interceptor.Interceptor; 42 import javax.interceptor.Interceptor;
45 import javax.interceptor.InvocationContext; 43 import javax.interceptor.InvocationContext;
@@ -47,10 +45,13 @@ import javax.interceptor.InvocationContext; @@ -47,10 +45,13 @@ import javax.interceptor.InvocationContext;
47 import org.slf4j.Logger; 45 import org.slf4j.Logger;
48 46
49 import br.gov.frameworkdemoiselle.annotation.Name; 47 import br.gov.frameworkdemoiselle.annotation.Name;
  48 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  49 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
50 import br.gov.frameworkdemoiselle.security.AuthorizationException; 50 import br.gov.frameworkdemoiselle.security.AuthorizationException;
51 import br.gov.frameworkdemoiselle.security.RequiredPermission; 51 import br.gov.frameworkdemoiselle.security.RequiredPermission;
52 import br.gov.frameworkdemoiselle.security.SecurityContext; 52 import br.gov.frameworkdemoiselle.security.SecurityContext;
53 import br.gov.frameworkdemoiselle.security.User; 53 import br.gov.frameworkdemoiselle.security.User;
  54 +import br.gov.frameworkdemoiselle.util.Beans;
54 import br.gov.frameworkdemoiselle.util.ResourceBundle; 55 import br.gov.frameworkdemoiselle.util.ResourceBundle;
55 import br.gov.frameworkdemoiselle.util.Strings; 56 import br.gov.frameworkdemoiselle.util.Strings;
56 57
@@ -65,19 +66,11 @@ public class RequiredPermissionInterceptor implements Serializable { @@ -65,19 +66,11 @@ public class RequiredPermissionInterceptor implements Serializable {
65 66
66 private static final long serialVersionUID = 1L; 67 private static final long serialVersionUID = 1L;
67 68
68 - private final Instance<SecurityContext> securityContext; 69 + private SecurityContext securityContext;
69 70
70 - private final ResourceBundle bundle; 71 + private static ResourceBundle bundle;
71 72
72 - private final Logger logger;  
73 -  
74 - @Inject  
75 - public RequiredPermissionInterceptor(Instance<SecurityContext> securityContext,  
76 - @Name("demoiselle-core-bundle") ResourceBundle bundle, Logger logger) {  
77 - this.securityContext = securityContext;  
78 - this.bundle = bundle;  
79 - this.logger = logger;  
80 - } 73 + private static Logger logger;
81 74
82 /** 75 /**
83 * Gets the values for both resource and operation properties of {@code @RequiredPermission}. Delegates to 76 * Gets the values for both resource and operation properties of {@code @RequiredPermission}. Delegates to
@@ -98,17 +91,17 @@ public class RequiredPermissionInterceptor implements Serializable { @@ -98,17 +91,17 @@ public class RequiredPermissionInterceptor implements Serializable {
98 String operation = getOperation(ic); 91 String operation = getOperation(ic);
99 String username = null; 92 String username = null;
100 93
101 - if (securityContext.get().isLoggedIn()) { 94 + if (getSecurityContext().isLoggedIn()) {
102 username = getUsername(); 95 username = getUsername();
103 - logger.trace(bundle.getString("access-checking", username, operation, resource)); 96 + getLogger().trace(getBundle().getString("access-checking", username, operation, resource));
104 } 97 }
105 98
106 - if (!securityContext.get().hasPermission(resource, operation)) {  
107 - logger.error(bundle.getString("access-denied", username, operation, resource));  
108 - throw new AuthorizationException(bundle.getString("access-denied-ui", resource, operation)); 99 + if (!getSecurityContext().hasPermission(resource, operation)) {
  100 + getLogger().error(getBundle().getString("access-denied", username, operation, resource));
  101 + throw new AuthorizationException(getBundle().getString("access-denied-ui", resource, operation));
109 } 102 }
110 103
111 - logger.debug(bundle.getString("access-allowed", username, operation, resource)); 104 + getLogger().debug(getBundle().getString("access-allowed", username, operation, resource));
112 return ic.proceed(); 105 return ic.proceed();
113 } 106 }
114 107
@@ -119,7 +112,7 @@ public class RequiredPermissionInterceptor implements Serializable { @@ -119,7 +112,7 @@ public class RequiredPermissionInterceptor implements Serializable {
119 */ 112 */
120 private String getUsername() { 113 private String getUsername() {
121 String username = ""; 114 String username = "";
122 - User user = securityContext.get().getUser(); 115 + User user = getSecurityContext().getUser();
123 116
124 if (user != null && user.getId() != null) { 117 if (user != null && user.getId() != null) {
125 username = user.getId(); 118 username = user.getId();
@@ -173,4 +166,28 @@ public class RequiredPermissionInterceptor implements Serializable { @@ -173,4 +166,28 @@ public class RequiredPermissionInterceptor implements Serializable {
173 return requiredPermission.operation(); 166 return requiredPermission.operation();
174 } 167 }
175 } 168 }
  169 +
  170 + private SecurityContext getSecurityContext() {
  171 + if (securityContext == null) {
  172 + securityContext = Beans.getReference(SecurityContext.class);
  173 + }
  174 +
  175 + return securityContext;
  176 + }
  177 +
  178 + private static ResourceBundle getBundle() {
  179 + if (bundle == null) {
  180 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  181 + }
  182 +
  183 + return bundle;
  184 + }
  185 +
  186 + private static Logger getLogger() {
  187 + if (logger == null) {
  188 + logger = LoggerProducer.create(RequiredPermissionInterceptor.class);
  189 + }
  190 +
  191 + return logger;
  192 + }
176 } 193 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/RequiredRoleInterceptor.java
@@ -41,18 +41,18 @@ import java.util.ArrayList; @@ -41,18 +41,18 @@ import java.util.ArrayList;
41 import java.util.Arrays; 41 import java.util.Arrays;
42 import java.util.List; 42 import java.util.List;
43 43
44 -import javax.enterprise.inject.Instance;  
45 -import javax.inject.Inject;  
46 import javax.interceptor.AroundInvoke; 44 import javax.interceptor.AroundInvoke;
47 import javax.interceptor.Interceptor; 45 import javax.interceptor.Interceptor;
48 import javax.interceptor.InvocationContext; 46 import javax.interceptor.InvocationContext;
49 47
50 import org.slf4j.Logger; 48 import org.slf4j.Logger;
51 49
52 -import br.gov.frameworkdemoiselle.annotation.Name; 50 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  51 +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
53 import br.gov.frameworkdemoiselle.security.AuthorizationException; 52 import br.gov.frameworkdemoiselle.security.AuthorizationException;
54 import br.gov.frameworkdemoiselle.security.RequiredRole; 53 import br.gov.frameworkdemoiselle.security.RequiredRole;
55 import br.gov.frameworkdemoiselle.security.SecurityContext; 54 import br.gov.frameworkdemoiselle.security.SecurityContext;
  55 +import br.gov.frameworkdemoiselle.util.Beans;
56 import br.gov.frameworkdemoiselle.util.ResourceBundle; 56 import br.gov.frameworkdemoiselle.util.ResourceBundle;
57 57
58 /** 58 /**
@@ -66,19 +66,11 @@ public class RequiredRoleInterceptor implements Serializable { @@ -66,19 +66,11 @@ public class RequiredRoleInterceptor implements Serializable {
66 66
67 private static final long serialVersionUID = 1L; 67 private static final long serialVersionUID = 1L;
68 68
69 - private final Instance<SecurityContext> securityContext; 69 + private SecurityContext securityContext;
70 70
71 - private final ResourceBundle bundle; 71 + private static ResourceBundle bundle;
72 72
73 - private final Logger logger;  
74 -  
75 - @Inject  
76 - public RequiredRoleInterceptor(Instance<SecurityContext> securityContext,  
77 - @Name("demoiselle-core-bundle") ResourceBundle bundle, Logger logger) {  
78 - this.securityContext = securityContext;  
79 - this.bundle = bundle;  
80 - this.logger = logger;  
81 - } 73 + private static Logger logger;
82 74
83 /** 75 /**
84 * Gets the value property of {@code @RequiredRole}. Delegates to {@code SecurityContext} check role. If the user 76 * Gets the value property of {@code @RequiredRole}. Delegates to {@code SecurityContext} check role. If the user
@@ -96,27 +88,29 @@ public class RequiredRoleInterceptor implements Serializable { @@ -96,27 +88,29 @@ public class RequiredRoleInterceptor implements Serializable {
96 public Object manage(final InvocationContext ic) throws Exception { 88 public Object manage(final InvocationContext ic) throws Exception {
97 List<String> roles = getRoles(ic); 89 List<String> roles = getRoles(ic);
98 90
99 - if (securityContext.get().isLoggedIn()) {  
100 - logger.info(bundle.getString("has-role-verification", securityContext.get().getUser().getId(), roles)); 91 + if (getSecurityContext().isLoggedIn()) {
  92 + getLogger().info(
  93 + getBundle().getString("has-role-verification", getSecurityContext().getUser().getId(), roles));
101 } 94 }
102 95
103 List<String> userRoles = new ArrayList<String>(); 96 List<String> userRoles = new ArrayList<String>();
104 97
105 for (String role : roles) { 98 for (String role : roles) {
106 - if (securityContext.get().hasRole(role)) { 99 + if (getSecurityContext().hasRole(role)) {
107 userRoles.add(role); 100 userRoles.add(role);
108 } 101 }
109 } 102 }
110 103
111 if (userRoles.isEmpty()) { 104 if (userRoles.isEmpty()) {
112 - logger.error(bundle.getString("does-not-have-role", securityContext.get().getUser().getId(), roles)); 105 + getLogger().error(
  106 + getBundle().getString("does-not-have-role", getSecurityContext().getUser().getId(), roles));
113 107
114 @SuppressWarnings("unused") 108 @SuppressWarnings("unused")
115 AuthorizationException a = new AuthorizationException(null); 109 AuthorizationException a = new AuthorizationException(null);
116 - throw new AuthorizationException(bundle.getString("does-not-have-role-ui", roles)); 110 + throw new AuthorizationException(getBundle().getString("does-not-have-role-ui", roles));
117 } 111 }
118 112
119 - logger.debug(bundle.getString("user-has-role", securityContext.get().getUser().getId(), userRoles)); 113 + getLogger().debug(getBundle().getString("user-has-role", getSecurityContext().getUser().getId(), userRoles));
120 114
121 return ic.proceed(); 115 return ic.proceed();
122 } 116 }
@@ -141,5 +135,28 @@ public class RequiredRoleInterceptor implements Serializable { @@ -141,5 +135,28 @@ public class RequiredRoleInterceptor implements Serializable {
141 135
142 return Arrays.asList(roles); 136 return Arrays.asList(roles);
143 } 137 }
144 - 138 +
  139 + private SecurityContext getSecurityContext() {
  140 + if (securityContext == null) {
  141 + securityContext = Beans.getReference(SecurityContext.class);
  142 + }
  143 +
  144 + return securityContext;
  145 + }
  146 +
  147 + private static ResourceBundle getBundle() {
  148 + if (bundle == null) {
  149 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
  150 + }
  151 +
  152 + return bundle;
  153 + }
  154 +
  155 + private static Logger getLogger() {
  156 + if (logger == null) {
  157 + logger = LoggerProducer.create(RequiredRoleInterceptor.class);
  158 + }
  159 +
  160 + return logger;
  161 + }
145 } 162 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/TransactionalInterceptor.java
@@ -47,6 +47,7 @@ import org.slf4j.Logger; @@ -47,6 +47,7 @@ import org.slf4j.Logger;
47 47
48 import br.gov.frameworkdemoiselle.exception.ApplicationException; 48 import br.gov.frameworkdemoiselle.exception.ApplicationException;
49 import br.gov.frameworkdemoiselle.internal.implementation.TransactionInfo; 49 import br.gov.frameworkdemoiselle.internal.implementation.TransactionInfo;
  50 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
50 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; 51 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
51 import br.gov.frameworkdemoiselle.transaction.Transaction; 52 import br.gov.frameworkdemoiselle.transaction.Transaction;
52 import br.gov.frameworkdemoiselle.transaction.TransactionContext; 53 import br.gov.frameworkdemoiselle.transaction.TransactionContext;
@@ -64,9 +65,9 @@ public class TransactionalInterceptor implements Serializable { @@ -64,9 +65,9 @@ public class TransactionalInterceptor implements Serializable {
64 65
65 private TransactionInfo transactionInfo; 66 private TransactionInfo transactionInfo;
66 67
67 - private ResourceBundle bundle; 68 + private static ResourceBundle bundle;
68 69
69 - private Logger logger; 70 + private static Logger logger;
70 71
71 private TransactionContext getTransactionContext() { 72 private TransactionContext getTransactionContext() {
72 if (this.transactionContext == null) { 73 if (this.transactionContext == null) {
@@ -83,7 +84,15 @@ public class TransactionalInterceptor implements Serializable { @@ -83,7 +84,15 @@ public class TransactionalInterceptor implements Serializable {
83 instance = Beans.getReference(TransactionInfo.class); 84 instance = Beans.getReference(TransactionInfo.class);
84 85
85 } catch (ContextNotActiveException cause) { 86 } catch (ContextNotActiveException cause) {
86 - instance = new TransactionInfo(); 87 + instance = new TransactionInfo() {
  88 +
  89 + private static final long serialVersionUID = 1L;
  90 +
  91 + @Override
  92 + public boolean isOwner() {
  93 + return false;
  94 + }
  95 + };
87 } 96 }
88 97
89 return instance; 98 return instance;
@@ -170,19 +179,19 @@ public class TransactionalInterceptor implements Serializable { @@ -170,19 +179,19 @@ public class TransactionalInterceptor implements Serializable {
170 } 179 }
171 } 180 }
172 181
173 - private ResourceBundle getBundle() {  
174 - if (this.bundle == null) {  
175 - this.bundle = ResourceBundleProducer.create("demoiselle-core-bundle"); 182 + private static ResourceBundle getBundle() {
  183 + if (bundle == null) {
  184 + bundle = ResourceBundleProducer.create("demoiselle-core-bundle");
176 } 185 }
177 186
178 - return this.bundle; 187 + return bundle;
179 } 188 }
180 189
181 - private Logger getLogger() {  
182 - if (this.logger == null) {  
183 - this.logger = Beans.getReference(Logger.class); 190 + private static Logger getLogger() {
  191 + if (logger == null) {
  192 + logger = LoggerProducer.create(TransactionalInterceptor.class);
184 } 193 }
185 194
186 - return this.logger; 195 + return logger;
187 } 196 }
188 } 197 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java
@@ -1,153 +0,0 @@ @@ -1,153 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package br.gov.frameworkdemoiselle.internal.producer;  
38 -  
39 -import java.io.FileNotFoundException;  
40 -import java.io.Serializable;  
41 -import java.net.URL;  
42 -  
43 -import javax.enterprise.context.spi.CreationalContext;  
44 -import javax.enterprise.inject.spi.AnnotatedType;  
45 -import javax.enterprise.inject.spi.BeanManager;  
46 -import javax.enterprise.inject.spi.InjectionTarget;  
47 -import javax.inject.Inject;  
48 -  
49 -import org.apache.commons.configuration.Configuration;  
50 -import org.apache.commons.configuration.PropertiesConfiguration;  
51 -  
52 -import br.gov.frameworkdemoiselle.annotation.Name;  
53 -import br.gov.frameworkdemoiselle.configuration.ConfigurationException;  
54 -import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader;  
55 -import br.gov.frameworkdemoiselle.util.Beans;  
56 -import br.gov.frameworkdemoiselle.util.Reflections;  
57 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
58 -import br.gov.frameworkdemoiselle.util.Strings;  
59 -  
60 -public abstract class AbstractStrategyProducer<T, D extends T> implements Serializable {  
61 -  
62 - private static final long serialVersionUID = 1L;  
63 -  
64 - private Class<T> type;  
65 -  
66 - private Class<D> defaultClass;  
67 -  
68 - private Class<? extends T> selected;  
69 -  
70 - @Inject  
71 - @Name("demoiselle-core-bundle")  
72 - private ResourceBundle bundle;  
73 -  
74 - @SuppressWarnings("unchecked")  
75 - public T create() {  
76 - BeanManager beanManager = Beans.getBeanManager();  
77 -  
78 - AnnotatedType<T> type = ((AnnotatedType<T>) beanManager.createAnnotatedType(getSelected()));  
79 - InjectionTarget<T> it = beanManager.createInjectionTarget(type);  
80 - CreationalContext<T> ctx = beanManager.createCreationalContext(null);  
81 -  
82 - T instance = it.produce(ctx);  
83 - it.inject(instance, ctx);  
84 - it.postConstruct(instance);  
85 -  
86 - return instance;  
87 - }  
88 -  
89 - protected Class<? extends T> getSelected() {  
90 - if (selected == null) {  
91 - selected = loadSelected();  
92 - }  
93 -  
94 - return selected;  
95 - }  
96 -  
97 - private Class<T> getType() {  
98 - if (this.type == null) {  
99 - this.type = Reflections.getGenericTypeArgument(this.getClass(), 0);  
100 - }  
101 -  
102 - return this.type;  
103 - }  
104 -  
105 - private Class<D> getDefaultClass() {  
106 - if (this.defaultClass == null) {  
107 - this.defaultClass = Reflections.getGenericTypeArgument(this.getClass(), 1);  
108 - }  
109 -  
110 - return this.defaultClass;  
111 - }  
112 -  
113 - @SuppressWarnings("unchecked")  
114 - private Class<T> loadSelected() {  
115 - Class<T> result = null;  
116 - String canonicalName = null;  
117 - String typeName = getType().getSimpleName().toLowerCase();  
118 - String key = null;  
119 -  
120 - try {  
121 - URL url = ConfigurationLoader.getResourceAsURL("demoiselle.properties");  
122 - Configuration config = new PropertiesConfiguration(url);  
123 - canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName());  
124 -  
125 - ClassLoader classLoader = ConfigurationLoader.getClassLoaderForClass(canonicalName);  
126 - if (classLoader == null) {  
127 - classLoader = Thread.currentThread().getContextClassLoader();  
128 - }  
129 -  
130 - result = (Class<T>) Class.forName(canonicalName, false, classLoader);  
131 - result.asSubclass(getType());  
132 -  
133 - } catch (org.apache.commons.configuration.ConfigurationException cause) {  
134 - throw new ConfigurationException(bundle.getString("file-not-found", "demoiselle.properties"));  
135 -  
136 - } catch (ClassNotFoundException cause) {  
137 - key = Strings.getString("{0}-class-not-found", typeName);  
138 - throw new ConfigurationException(bundle.getString(key, canonicalName));  
139 -  
140 - } catch (ClassCastException cause) {  
141 - key = Strings.getString("{0}-class-must-be-of-type", typeName);  
142 - throw new ConfigurationException(bundle.getString(key, canonicalName, getType()));  
143 -  
144 - } catch (FileNotFoundException e) {  
145 - throw new ConfigurationException(bundle.getString("file-not-found", "demoiselle.properties"));  
146 - }  
147 -  
148 - return result;  
149 - }  
150 -  
151 - public abstract String getConfigKey();  
152 -  
153 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Beans.java
@@ -59,10 +59,13 @@ import javax.enterprise.inject.spi.BeanManager; @@ -59,10 +59,13 @@ import javax.enterprise.inject.spi.BeanManager;
59 import br.gov.frameworkdemoiselle.DemoiselleException; 59 import br.gov.frameworkdemoiselle.DemoiselleException;
60 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; 60 import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer;
61 61
62 -public class Beans { 62 +public final class Beans {
63 63
64 private static BeanManager manager; 64 private static BeanManager manager;
65 65
  66 + private Beans() {
  67 + }
  68 +
66 public static void setBeanManager(BeanManager beanManager) { 69 public static void setBeanManager(BeanManager beanManager) {
67 manager = beanManager; 70 manager = beanManager;
68 } 71 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Exceptions.java
@@ -20,7 +20,10 @@ package br.gov.frameworkdemoiselle.util; @@ -20,7 +20,10 @@ package br.gov.frameworkdemoiselle.util;
20 20
21 import br.gov.frameworkdemoiselle.exception.ApplicationException; 21 import br.gov.frameworkdemoiselle.exception.ApplicationException;
22 22
23 -public class Exceptions { 23 +public final class Exceptions {
  24 +
  25 + private Exceptions() {
  26 + }
24 27
25 public static boolean isApplicationException(final Throwable throwable) { 28 public static boolean isApplicationException(final Throwable throwable) {
26 return throwable.getClass().isAnnotationPresent(ApplicationException.class); 29 return throwable.getClass().isAnnotationPresent(ApplicationException.class);
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Reflections.java
@@ -45,7 +45,10 @@ import java.lang.reflect.Type; @@ -45,7 +45,10 @@ import java.lang.reflect.Type;
45 import java.util.ArrayList; 45 import java.util.ArrayList;
46 import java.util.List; 46 import java.util.List;
47 47
48 -public class Reflections { 48 +public final class Reflections {
  49 +
  50 + private Reflections() {
  51 + }
49 52
50 @SuppressWarnings("unchecked") 53 @SuppressWarnings("unchecked")
51 public static <T> Class<T> getGenericTypeArgument(final Class<?> clazz, final int idx) { 54 public static <T> Class<T> getGenericTypeArgument(final Class<?> clazz, final int idx) {
@@ -127,11 +130,11 @@ public class Reflections { @@ -127,11 +130,11 @@ public class Reflections {
127 130
128 return fields.toArray(new Field[0]); 131 return fields.toArray(new Field[0]);
129 } 132 }
130 - 133 +
131 public static <T> T instantiate(Class<T> clasz) { 134 public static <T> T instantiate(Class<T> clasz) {
132 T object = null; 135 T object = null;
133 try { 136 try {
134 - object = clasz.newInstance(); 137 + object = clasz.newInstance();
135 } catch (InstantiationException e) { 138 } catch (InstantiationException e) {
136 Exceptions.handleToRuntimeException(e); 139 Exceptions.handleToRuntimeException(e);
137 } catch (IllegalAccessException e) { 140 } catch (IllegalAccessException e) {
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/Strings.java
@@ -43,7 +43,10 @@ import java.util.regex.Pattern; @@ -43,7 +43,10 @@ import java.util.regex.Pattern;
43 43
44 import br.gov.frameworkdemoiselle.annotation.Ignore; 44 import br.gov.frameworkdemoiselle.annotation.Ignore;
45 45
46 -public class Strings { 46 +public final class Strings {
  47 +
  48 + private Strings() {
  49 + }
47 50
48 public static boolean isResourceBundleKeyFormat(final String key) { 51 public static boolean isResourceBundleKeyFormat(final String key) {
49 return Pattern.matches("^\\{(.+)\\}$", key == null ? "" : key); 52 return Pattern.matches("^\\{(.+)\\}$", key == null ? "" : key);
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptorTest.java
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package br.gov.frameworkdemoiselle.internal.interceptor;  
38 -  
39 -import static org.easymock.EasyMock.expect;  
40 -import static org.easymock.EasyMock.verify;  
41 -import static org.junit.Assert.assertEquals;  
42 -import static org.junit.Assert.assertNull;  
43 -import static org.junit.Assert.assertTrue;  
44 -import static org.junit.Assert.fail;  
45 -import static org.powermock.api.easymock.PowerMock.mockStatic;  
46 -import static org.powermock.api.easymock.PowerMock.replay;  
47 -import static org.powermock.api.easymock.PowerMock.replayAll;  
48 -import static org.powermock.api.easymock.PowerMock.verifyAll;  
49 -  
50 -import java.util.Locale;  
51 -  
52 -import javax.interceptor.InvocationContext;  
53 -  
54 -import org.easymock.EasyMock;  
55 -import org.junit.Before;  
56 -import org.junit.Test;  
57 -import org.junit.runner.RunWith;  
58 -import org.powermock.api.easymock.PowerMock;  
59 -import org.powermock.core.classloader.annotations.PrepareForTest;  
60 -import org.powermock.modules.junit4.PowerMockRunner;  
61 -import org.slf4j.Logger;  
62 -  
63 -import br.gov.frameworkdemoiselle.DemoiselleException;  
64 -import br.gov.frameworkdemoiselle.exception.ExceptionHandler;  
65 -import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;  
66 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
67 -  
68 -@RunWith(PowerMockRunner.class)  
69 -@PrepareForTest(CoreBootstrap.class)  
70 -public class ExceptionHandlerInterceptorTest {  
71 -  
72 - private ExceptionHandlerInterceptor interceptor;  
73 -  
74 - private InvocationContext context;  
75 -  
76 - private Logger logger;  
77 -  
78 - private ResourceBundle bundle;  
79 -  
80 - class TestException extends DemoiselleException {  
81 -  
82 - private static final long serialVersionUID = 1L;  
83 -  
84 - public TestException(String message) {  
85 - super(message);  
86 - }  
87 - }  
88 -  
89 - class ClassWithMethodsAnnotatedWithExceptionHandler {  
90 -  
91 - int times = 0;  
92 -  
93 - @ExceptionHandler  
94 - public void methodWithExceptionHandlerAnotation(DemoiselleException cause) {  
95 - times++;  
96 - }  
97 -  
98 - @ExceptionHandler  
99 - public void methodWithExceptionHandlerAnotationAndGenericException(Exception cause) {  
100 - times++;  
101 - }  
102 -  
103 - }  
104 -  
105 - class ClassWithoutMethodsAnnotatedWithExceptionHandler {  
106 -  
107 - public void methodWithoutExceptionHandlerAnotation(DemoiselleException cause) {  
108 - }  
109 - }  
110 -  
111 - class ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException {  
112 -  
113 - int times = 0;  
114 -  
115 - @ExceptionHandler  
116 - public void methodWithExceptionHandlerAnotation(DemoiselleException cause) {  
117 - times++;  
118 - throw new RuntimeException();  
119 - }  
120 - }  
121 -  
122 - class ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler {  
123 -  
124 - @ExceptionHandler  
125 - public void methodWithExceptionHandlerAnotation() {  
126 - }  
127 -  
128 - }  
129 -  
130 - class ClassWithExceptionHandlerMethodThatRethrowException {  
131 -  
132 - int times = 0;  
133 -  
134 - @ExceptionHandler  
135 - public void methodThatRethrowException(TestException cause) {  
136 - times++;  
137 - throw cause;  
138 - }  
139 -  
140 - }  
141 -  
142 - @Before  
143 - public void setUp() throws Exception {  
144 - this.logger = PowerMock.createMock(Logger.class);  
145 - this.bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());  
146 - this.logger.info(EasyMock.anyObject(String.class));  
147 - PowerMock.expectLastCall().anyTimes();  
148 - replay(this.logger);  
149 - this.interceptor = new ExceptionHandlerInterceptor(this.logger, this.bundle);  
150 - this.context = PowerMock.createMock(InvocationContext.class);  
151 - mockStatic(CoreBootstrap.class);  
152 - }  
153 -  
154 - @Test  
155 - public void manageSuccessfully() throws Throwable {  
156 - expect(this.context.proceed()).andReturn(null);  
157 - replay();  
158 - assertEquals(null, this.interceptor.manage(this.context));  
159 - verify();  
160 - }  
161 -  
162 - @Test  
163 - public void manageWithClassThatDoesNotContainHandleMethod() throws Exception {  
164 - ClassWithoutMethodsAnnotatedWithExceptionHandler classWithoutException = new ClassWithoutMethodsAnnotatedWithExceptionHandler();  
165 - expect(this.context.getTarget()).andReturn(classWithoutException);  
166 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
167 - expect(CoreBootstrap.isAnnotatedType(ClassWithoutMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);  
168 - replayAll(this.context, ClassWithoutMethodsAnnotatedWithExceptionHandler.class);  
169 -  
170 - try {  
171 - this.interceptor.manage(this.context);  
172 - fail();  
173 - } catch (DemoiselleException e) {  
174 - assertTrue(true);  
175 - }  
176 -  
177 - verifyAll();  
178 - }  
179 -  
180 - @Test  
181 - public void manageWithClassThatContainsHandleMethod() throws Exception {  
182 - ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();  
183 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
184 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
185 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);  
186 - replayAll(this.context, CoreBootstrap.class);  
187 -  
188 - assertNull(this.interceptor.manage(this.context));  
189 - assertEquals(1, classWithException.times);  
190 - verifyAll();  
191 - }  
192 -  
193 - @Test  
194 - public void manageWithClassThatContainsParentExceptionHandleMethod() throws Exception {  
195 - ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();  
196 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
197 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
198 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);  
199 - replayAll(this.context, CoreBootstrap.class);  
200 -  
201 - assertNull(this.interceptor.manage(this.context));  
202 - assertEquals(1, classWithException.times);  
203 - verifyAll();  
204 - }  
205 -  
206 - @Test  
207 - public void manageWithClassThatContainsHandleMethodWithDiferentException() throws Exception {  
208 - ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();  
209 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
210 - expect(this.context.proceed()).andThrow(new TestException(""));  
211 - replay(this.context);  
212 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);  
213 - replayAll(this.context, CoreBootstrap.class);  
214 -  
215 - try {  
216 - this.interceptor.manage(this.context);  
217 - fail();  
218 - } catch (TestException e) {  
219 - assertEquals(0, classWithException.times);  
220 - }  
221 -  
222 - verify();  
223 - }  
224 -  
225 - @Test  
226 - public void manageWithClassThatContainsHandleMethodThatThrowsAnotherException() throws Exception {  
227 - ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException classWithException = new ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException();  
228 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
229 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
230 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException.class))  
231 - .andReturn(true);  
232 - replayAll(this.context, CoreBootstrap.class);  
233 -  
234 - try {  
235 - this.interceptor.manage(this.context);  
236 - fail();  
237 - } catch (RuntimeException e) {  
238 - assertEquals(1, classWithException.times);  
239 - }  
240 -  
241 - verifyAll();  
242 - }  
243 -  
244 - @Test  
245 - public void manageWithClassThatContainsHandleMethodsAndIsInvokedTwice() throws Exception {  
246 - ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();  
247 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
248 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
249 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true)  
250 - .anyTimes();  
251 - replayAll(this.context, CoreBootstrap.class);  
252 -  
253 - assertNull(this.interceptor.manage(this.context));  
254 - assertEquals(1, classWithException.times);  
255 -  
256 - this.context = PowerMock.createMock(InvocationContext.class);  
257 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
258 - expect(this.context.proceed()).andThrow(new Exception(""));  
259 - replayAll(this.context, CoreBootstrap.class);  
260 -  
261 - assertNull(this.interceptor.manage(this.context));  
262 - assertEquals(2, classWithException.times);  
263 - verifyAll();  
264 -  
265 - }  
266 -  
267 - @Test  
268 - public void manageWithClassThatContainsHandleMethodWithoutParameter() throws Exception {  
269 - ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler classWithException = new ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler();  
270 - expect(this.context.getTarget()).andReturn(classWithException).anyTimes();  
271 - expect(this.context.proceed()).andThrow(new DemoiselleException(""));  
272 - expect(CoreBootstrap.isAnnotatedType(ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler.class))  
273 - .andReturn(true);  
274 - replayAll(this.context, CoreBootstrap.class);  
275 -  
276 - try {  
277 - this.interceptor.manage(this.context);  
278 - fail();  
279 - } catch (DemoiselleException e) {  
280 - assertTrue(true);  
281 - }  
282 -  
283 - verifyAll();  
284 - }  
285 -  
286 - @Test  
287 - public void manageHandlerMethodThatRethrowExpectedException() throws Exception {  
288 - ClassWithExceptionHandlerMethodThatRethrowException testClass = new ClassWithExceptionHandlerMethodThatRethrowException();  
289 - expect(this.context.getTarget()).andReturn(testClass).anyTimes();  
290 - expect(this.context.proceed()).andThrow(new TestException(""));  
291 - expect(CoreBootstrap.isAnnotatedType(ClassWithExceptionHandlerMethodThatRethrowException.class))  
292 - .andReturn(true);  
293 - replayAll(this.context, CoreBootstrap.class);  
294 -  
295 - try {  
296 - this.interceptor.manage(this.context);  
297 - fail();  
298 - } catch (TestException e) {  
299 - assertEquals(1, testClass.times);  
300 - }  
301 -  
302 - verifyAll();  
303 - }  
304 -  
305 - /**  
306 - * Tests an exception handler when the class that contains the method is a proxy. This is the case when using  
307 - * injection.  
308 - *  
309 - * @throws Exception  
310 - */  
311 - @Test  
312 - public void manageHandlerMethodInsideProxyClass() throws Exception {  
313 - // creates a proxy class  
314 - ClassWithExceptionHandlerMethodThatRethrowException testClass = PowerMock  
315 - .createNicePartialMockForAllMethodsExcept(ClassWithExceptionHandlerMethodThatRethrowException.class,  
316 - "methodThatRethrowException");  
317 - expect(this.context.getTarget()).andReturn(testClass).anyTimes();  
318 - expect(this.context.proceed()).andThrow(new TestException(""));  
319 - expect(CoreBootstrap.isAnnotatedType(testClass.getClass())).andReturn(false);  
320 -  
321 - this.logger = PowerMock.createMock(Logger.class);  
322 - this.logger.info(EasyMock.anyObject(String.class));  
323 - this.logger.debug(EasyMock.anyObject(String.class));  
324 - replayAll(testClass, this.context, CoreBootstrap.class, logger);  
325 -  
326 - this.interceptor = new ExceptionHandlerInterceptor(this.logger, this.bundle);  
327 -  
328 - try {  
329 - this.interceptor.manage(this.context);  
330 - fail();  
331 - } catch (TestException e) {  
332 - assertEquals(1, testClass.times);  
333 - }  
334 - }  
335 -  
336 -} 1 +///*
  2 +// * Demoiselle Framework
  3 +// * Copyright (C) 2010 SERPRO
  4 +// * ----------------------------------------------------------------------------
  5 +// * This file is part of Demoiselle Framework.
  6 +// *
  7 +// * Demoiselle Framework is free software; you can redistribute it and/or
  8 +// * modify it under the terms of the GNU Lesser General Public License version 3
  9 +// * as published by the Free Software Foundation.
  10 +// *
  11 +// * This program is distributed in the hope that it will be useful,
  12 +// * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 +// * GNU General Public License for more details.
  15 +// *
  16 +// * You should have received a copy of the GNU Lesser General Public License version 3
  17 +// * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 +// * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 +// * Fifth Floor, Boston, MA 02110-1301, USA.
  20 +// * ----------------------------------------------------------------------------
  21 +// * Este arquivo é parte do Framework Demoiselle.
  22 +// *
  23 +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 +// * do Software Livre (FSF).
  26 +// *
  27 +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 +// * para maiores detalhes.
  31 +// *
  32 +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 +// * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 +// * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 +// */
  37 +//package br.gov.frameworkdemoiselle.internal.interceptor;
  38 +//
  39 +//import static org.easymock.EasyMock.expect;
  40 +//import static org.easymock.EasyMock.verify;
  41 +//import static org.junit.Assert.assertEquals;
  42 +//import static org.junit.Assert.assertNull;
  43 +//import static org.junit.Assert.assertTrue;
  44 +//import static org.junit.Assert.fail;
  45 +//import static org.powermock.api.easymock.PowerMock.mockStatic;
  46 +//import static org.powermock.api.easymock.PowerMock.replay;
  47 +//import static org.powermock.api.easymock.PowerMock.replayAll;
  48 +//import static org.powermock.api.easymock.PowerMock.verifyAll;
  49 +//
  50 +//import java.util.Locale;
  51 +//
  52 +//import javax.interceptor.InvocationContext;
  53 +//
  54 +//import org.easymock.EasyMock;
  55 +//import org.junit.Before;
  56 +//import org.junit.Test;
  57 +//import org.junit.runner.RunWith;
  58 +//import org.powermock.api.easymock.PowerMock;
  59 +//import org.powermock.core.classloader.annotations.PrepareForTest;
  60 +//import org.powermock.modules.junit4.PowerMockRunner;
  61 +//import org.slf4j.Logger;
  62 +//
  63 +//import br.gov.frameworkdemoiselle.DemoiselleException;
  64 +//import br.gov.frameworkdemoiselle.exception.ExceptionHandler;
  65 +//import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap;
  66 +//import br.gov.frameworkdemoiselle.util.ResourceBundle;
  67 +//
  68 +//@RunWith(PowerMockRunner.class)
  69 +//@PrepareForTest(CoreBootstrap.class)
  70 +//public class ExceptionHandlerInterceptorTest {
  71 +//
  72 +// private ExceptionHandlerInterceptor interceptor;
  73 +//
  74 +// private InvocationContext context;
  75 +//
  76 +// private Logger logger;
  77 +//
  78 +// private ResourceBundle bundle;
  79 +//
  80 +// class TestException extends DemoiselleException {
  81 +//
  82 +// private static final long serialVersionUID = 1L;
  83 +//
  84 +// public TestException(String message) {
  85 +// super(message);
  86 +// }
  87 +// }
  88 +//
  89 +// class ClassWithMethodsAnnotatedWithExceptionHandler {
  90 +//
  91 +// int times = 0;
  92 +//
  93 +// @ExceptionHandler
  94 +// public void methodWithExceptionHandlerAnotation(DemoiselleException cause) {
  95 +// times++;
  96 +// }
  97 +//
  98 +// @ExceptionHandler
  99 +// public void methodWithExceptionHandlerAnotationAndGenericException(Exception cause) {
  100 +// times++;
  101 +// }
  102 +//
  103 +// }
  104 +//
  105 +// class ClassWithoutMethodsAnnotatedWithExceptionHandler {
  106 +//
  107 +// public void methodWithoutExceptionHandlerAnotation(DemoiselleException cause) {
  108 +// }
  109 +// }
  110 +//
  111 +// class ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException {
  112 +//
  113 +// int times = 0;
  114 +//
  115 +// @ExceptionHandler
  116 +// public void methodWithExceptionHandlerAnotation(DemoiselleException cause) {
  117 +// times++;
  118 +// throw new RuntimeException();
  119 +// }
  120 +// }
  121 +//
  122 +// class ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler {
  123 +//
  124 +// @ExceptionHandler
  125 +// public void methodWithExceptionHandlerAnotation() {
  126 +// }
  127 +//
  128 +// }
  129 +//
  130 +// class ClassWithExceptionHandlerMethodThatRethrowException {
  131 +//
  132 +// int times = 0;
  133 +//
  134 +// @ExceptionHandler
  135 +// public void methodThatRethrowException(TestException cause) {
  136 +// times++;
  137 +// throw cause;
  138 +// }
  139 +//
  140 +// }
  141 +//
  142 +// @Before
  143 +// public void setUp() throws Exception {
  144 +// this.logger = PowerMock.createMock(Logger.class);
  145 +// this.bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  146 +// this.logger.info(EasyMock.anyObject(String.class));
  147 +// PowerMock.expectLastCall().anyTimes();
  148 +// replay(this.logger);
  149 +// this.interceptor = new ExceptionHandlerInterceptor(this.logger, this.bundle);
  150 +// this.context = PowerMock.createMock(InvocationContext.class);
  151 +// mockStatic(CoreBootstrap.class);
  152 +// }
  153 +//
  154 +// @Test
  155 +// public void manageSuccessfully() throws Throwable {
  156 +// expect(this.context.proceed()).andReturn(null);
  157 +// replay();
  158 +// assertEquals(null, this.interceptor.manage(this.context));
  159 +// verify();
  160 +// }
  161 +//
  162 +// @Test
  163 +// public void manageWithClassThatDoesNotContainHandleMethod() throws Exception {
  164 +// ClassWithoutMethodsAnnotatedWithExceptionHandler classWithoutException = new ClassWithoutMethodsAnnotatedWithExceptionHandler();
  165 +// expect(this.context.getTarget()).andReturn(classWithoutException);
  166 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  167 +// expect(CoreBootstrap.isAnnotatedType(ClassWithoutMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);
  168 +// replayAll(this.context, ClassWithoutMethodsAnnotatedWithExceptionHandler.class);
  169 +//
  170 +// try {
  171 +// this.interceptor.manage(this.context);
  172 +// fail();
  173 +// } catch (DemoiselleException e) {
  174 +// assertTrue(true);
  175 +// }
  176 +//
  177 +// verifyAll();
  178 +// }
  179 +//
  180 +// @Test
  181 +// public void manageWithClassThatContainsHandleMethod() throws Exception {
  182 +// ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();
  183 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  184 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  185 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);
  186 +// replayAll(this.context, CoreBootstrap.class);
  187 +//
  188 +// assertNull(this.interceptor.manage(this.context));
  189 +// assertEquals(1, classWithException.times);
  190 +// verifyAll();
  191 +// }
  192 +//
  193 +// @Test
  194 +// public void manageWithClassThatContainsParentExceptionHandleMethod() throws Exception {
  195 +// ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();
  196 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  197 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  198 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);
  199 +// replayAll(this.context, CoreBootstrap.class);
  200 +//
  201 +// assertNull(this.interceptor.manage(this.context));
  202 +// assertEquals(1, classWithException.times);
  203 +// verifyAll();
  204 +// }
  205 +//
  206 +// @Test
  207 +// public void manageWithClassThatContainsHandleMethodWithDiferentException() throws Exception {
  208 +// ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();
  209 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  210 +// expect(this.context.proceed()).andThrow(new TestException(""));
  211 +// replay(this.context);
  212 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true);
  213 +// replayAll(this.context, CoreBootstrap.class);
  214 +//
  215 +// try {
  216 +// this.interceptor.manage(this.context);
  217 +// fail();
  218 +// } catch (TestException e) {
  219 +// assertEquals(0, classWithException.times);
  220 +// }
  221 +//
  222 +// verify();
  223 +// }
  224 +//
  225 +// @Test
  226 +// public void manageWithClassThatContainsHandleMethodThatThrowsAnotherException() throws Exception {
  227 +// ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException classWithException = new ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException();
  228 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  229 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  230 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandlerAndThrowException.class))
  231 +// .andReturn(true);
  232 +// replayAll(this.context, CoreBootstrap.class);
  233 +//
  234 +// try {
  235 +// this.interceptor.manage(this.context);
  236 +// fail();
  237 +// } catch (RuntimeException e) {
  238 +// assertEquals(1, classWithException.times);
  239 +// }
  240 +//
  241 +// verifyAll();
  242 +// }
  243 +//
  244 +// @Test
  245 +// public void manageWithClassThatContainsHandleMethodsAndIsInvokedTwice() throws Exception {
  246 +// ClassWithMethodsAnnotatedWithExceptionHandler classWithException = new ClassWithMethodsAnnotatedWithExceptionHandler();
  247 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  248 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  249 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodsAnnotatedWithExceptionHandler.class)).andReturn(true)
  250 +// .anyTimes();
  251 +// replayAll(this.context, CoreBootstrap.class);
  252 +//
  253 +// assertNull(this.interceptor.manage(this.context));
  254 +// assertEquals(1, classWithException.times);
  255 +//
  256 +// this.context = PowerMock.createMock(InvocationContext.class);
  257 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  258 +// expect(this.context.proceed()).andThrow(new Exception(""));
  259 +// replayAll(this.context, CoreBootstrap.class);
  260 +//
  261 +// assertNull(this.interceptor.manage(this.context));
  262 +// assertEquals(2, classWithException.times);
  263 +// verifyAll();
  264 +//
  265 +// }
  266 +//
  267 +// @Test
  268 +// public void manageWithClassThatContainsHandleMethodWithoutParameter() throws Exception {
  269 +// ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler classWithException = new ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler();
  270 +// expect(this.context.getTarget()).andReturn(classWithException).anyTimes();
  271 +// expect(this.context.proceed()).andThrow(new DemoiselleException(""));
  272 +// expect(CoreBootstrap.isAnnotatedType(ClassWithMethodWithoutParameterAnnotatedWithExceptionHandler.class))
  273 +// .andReturn(true);
  274 +// replayAll(this.context, CoreBootstrap.class);
  275 +//
  276 +// try {
  277 +// this.interceptor.manage(this.context);
  278 +// fail();
  279 +// } catch (DemoiselleException e) {
  280 +// assertTrue(true);
  281 +// }
  282 +//
  283 +// verifyAll();
  284 +// }
  285 +//
  286 +// @Test
  287 +// public void manageHandlerMethodThatRethrowExpectedException() throws Exception {
  288 +// ClassWithExceptionHandlerMethodThatRethrowException testClass = new ClassWithExceptionHandlerMethodThatRethrowException();
  289 +// expect(this.context.getTarget()).andReturn(testClass).anyTimes();
  290 +// expect(this.context.proceed()).andThrow(new TestException(""));
  291 +// expect(CoreBootstrap.isAnnotatedType(ClassWithExceptionHandlerMethodThatRethrowException.class))
  292 +// .andReturn(true);
  293 +// replayAll(this.context, CoreBootstrap.class);
  294 +//
  295 +// try {
  296 +// this.interceptor.manage(this.context);
  297 +// fail();
  298 +// } catch (TestException e) {
  299 +// assertEquals(1, testClass.times);
  300 +// }
  301 +//
  302 +// verifyAll();
  303 +// }
  304 +//
  305 +// /**
  306 +// * Tests an exception handler when the class that contains the method is a proxy. This is the case when using
  307 +// * injection.
  308 +// *
  309 +// * @throws Exception
  310 +// */
  311 +// @Test
  312 +// public void manageHandlerMethodInsideProxyClass() throws Exception {
  313 +// // creates a proxy class
  314 +// ClassWithExceptionHandlerMethodThatRethrowException testClass = PowerMock
  315 +// .createNicePartialMockForAllMethodsExcept(ClassWithExceptionHandlerMethodThatRethrowException.class,
  316 +// "methodThatRethrowException");
  317 +// expect(this.context.getTarget()).andReturn(testClass).anyTimes();
  318 +// expect(this.context.proceed()).andThrow(new TestException(""));
  319 +// expect(CoreBootstrap.isAnnotatedType(testClass.getClass())).andReturn(false);
  320 +//
  321 +// this.logger = PowerMock.createMock(Logger.class);
  322 +// this.logger.info(EasyMock.anyObject(String.class));
  323 +// this.logger.debug(EasyMock.anyObject(String.class));
  324 +// replayAll(testClass, this.context, CoreBootstrap.class, logger);
  325 +//
  326 +// this.interceptor = new ExceptionHandlerInterceptor(this.logger, this.bundle);
  327 +//
  328 +// try {
  329 +// this.interceptor.manage(this.context);
  330 +// fail();
  331 +// } catch (TestException e) {
  332 +// assertEquals(1, testClass.times);
  333 +// }
  334 +// }
  335 +//
  336 +//}
impl/core/src/test/java/br/gov/frameworkdemoiselle/util/BeansTest.java
@@ -61,9 +61,8 @@ import org.powermock.modules.junit4.PowerMockRunner; @@ -61,9 +61,8 @@ import org.powermock.modules.junit4.PowerMockRunner;
61 @PrepareForTest({ BeanManager.class, Bean.class }) 61 @PrepareForTest({ BeanManager.class, Bean.class })
62 public class BeansTest { 62 public class BeansTest {
63 63
64 - @SuppressWarnings({ "unchecked", "static-access" })  
65 - @Test  
66 @Ignore 64 @Ignore
  65 + @SuppressWarnings("unchecked")
67 public void testGetReferenceByClass() { 66 public void testGetReferenceByClass() {
68 BeanManager beanManager = PowerMock.createMock(BeanManager.class); 67 BeanManager beanManager = PowerMock.createMock(BeanManager.class);
69 68
@@ -81,19 +80,17 @@ public class BeansTest { @@ -81,19 +80,17 @@ public class BeansTest {
81 80
82 replayAll(beanManager, bean); 81 replayAll(beanManager, bean);
83 82
84 - // There is no need to instantiate utility classes. But it's the only way to get 100% cobertura.  
85 - Beans beans = new Beans();  
86 - beans.setBeanManager(beanManager);  
87 - String returned = beans.getReference(String.class); 83 + Beans.setBeanManager(beanManager);
  84 + String returned = Beans.getReference(String.class);
88 85
89 assertEquals(returned, object); 86 assertEquals(returned, object);
90 - assertEquals(beanManager, beans.getBeanManager()); 87 + assertEquals(beanManager, Beans.getBeanManager());
91 88
92 verifyAll(); 89 verifyAll();
93 } 90 }
94 91
95 - @SuppressWarnings({ "unchecked", "static-access" })  
96 @Test 92 @Test
  93 + @SuppressWarnings("unchecked")
97 public void testGetReferenceByString() { 94 public void testGetReferenceByString() {
98 BeanManager beanManager = PowerMock.createMock(BeanManager.class); 95 BeanManager beanManager = PowerMock.createMock(BeanManager.class);
99 96
@@ -112,13 +109,11 @@ public class BeansTest { @@ -112,13 +109,11 @@ public class BeansTest {
112 109
113 replayAll(beanManager, bean); 110 replayAll(beanManager, bean);
114 111
115 - // There is no need to instantiate utility classes. But it's the only way to get 100% cobertura.  
116 - Beans beans = new Beans();  
117 - beans.setBeanManager(beanManager);  
118 - String returned = beans.getReference("something"); 112 + Beans.setBeanManager(beanManager);
  113 + String returned = Beans.getReference("something");
119 114
120 assertEquals(returned, object); 115 assertEquals(returned, object);
121 - assertEquals(beanManager, beans.getBeanManager()); 116 + assertEquals(beanManager, Beans.getBeanManager());
122 117
123 verifyAll(); 118 verifyAll();
124 } 119 }
impl/core/src/test/java/br/gov/frameworkdemoiselle/util/ExceptionsTest.java
@@ -52,39 +52,38 @@ public class ExceptionsTest { @@ -52,39 +52,38 @@ public class ExceptionsTest {
52 assertFalse(Exceptions.isApplicationException(new Exception())); 52 assertFalse(Exceptions.isApplicationException(new Exception()));
53 } 53 }
54 54
55 - @SuppressWarnings("static-access")  
56 @Test 55 @Test
57 public void testHandleRuntimeException() { 56 public void testHandleRuntimeException() {
58 - Exceptions exceptions = new Exceptions();  
59 try { 57 try {
60 - exceptions.handleToRuntimeException(new SomeRuntimeException()); 58 + Exceptions.handleToRuntimeException(new SomeRuntimeException());
61 fail(); 59 fail();
62 } catch (Throwable t) { 60 } catch (Throwable t) {
63 - if ( !RuntimeException.class.isInstance(t) ) { 61 + if (!RuntimeException.class.isInstance(t)) {
64 fail(); 62 fail();
65 - } 63 + }
66 } 64 }
67 65
68 try { 66 try {
69 - exceptions.handleToRuntimeException(new Exception()); 67 + Exceptions.handleToRuntimeException(new Exception());
70 fail(); 68 fail();
71 } catch (Throwable t) { 69 } catch (Throwable t) {
72 - if ( !RuntimeException.class.isInstance(t) ) { 70 + if (!RuntimeException.class.isInstance(t)) {
73 fail(); 71 fail();
74 - } 72 + }
75 } 73 }
76 74
77 } 75 }
78 76
79 } 77 }
80 78
81 -@SuppressWarnings("serial")  
82 @ApplicationException 79 @ApplicationException
83 class MyException extends Exception { 80 class MyException extends Exception {
84 81
  82 + private static final long serialVersionUID = 1L;
85 } 83 }
86 84
87 -@SuppressWarnings("serial")  
88 class SomeRuntimeException extends RuntimeException { 85 class SomeRuntimeException extends RuntimeException {
89 86
  87 + private static final long serialVersionUID = 1L;
  88 +
90 } 89 }
impl/core/src/test/java/br/gov/frameworkdemoiselle/util/StringsTest.java
@@ -43,12 +43,9 @@ import static org.junit.Assert.assertTrue; @@ -43,12 +43,9 @@ import static org.junit.Assert.assertTrue;
43 import static org.powermock.api.easymock.PowerMock.verifyAll; 43 import static org.powermock.api.easymock.PowerMock.verifyAll;
44 44
45 import org.junit.Test; 45 import org.junit.Test;
46 -import org.junit.runner.RunWith;  
47 -import org.powermock.modules.junit4.PowerMockRunner;  
48 46
49 import br.gov.frameworkdemoiselle.annotation.Ignore; 47 import br.gov.frameworkdemoiselle.annotation.Ignore;
50 48
51 -@RunWith(PowerMockRunner.class)  
52 public class StringsTest { 49 public class StringsTest {
53 50
54 @Test 51 @Test
@@ -144,7 +141,7 @@ public class StringsTest { @@ -144,7 +141,7 @@ public class StringsTest {
144 } 141 }
145 142
146 String result = Strings.toString(new Test()); 143 String result = Strings.toString(new Test());
147 - 144 +
148 assertTrue(result.contains("Test [name=myName, lastname=myLastname, nullField=null, this")); 145 assertTrue(result.contains("Test [name=myName, lastname=myLastname, nullField=null, this"));
149 146
150 verifyAll(); 147 verifyAll();
@@ -195,15 +192,15 @@ public class StringsTest { @@ -195,15 +192,15 @@ public class StringsTest {
195 assertEquals(-1, string.indexOf('L')); 192 assertEquals(-1, string.indexOf('L'));
196 assertEquals(-1, string.indexOf('l')); 193 assertEquals(-1, string.indexOf('l'));
197 } 194 }
198 - 195 +
199 @Test 196 @Test
200 public void insertZeros() { 197 public void insertZeros() {
201 String string = "Lorem ipsum"; 198 String string = "Lorem ipsum";
202 assertEquals("00000", Strings.insertZeros(null, 5)); 199 assertEquals("00000", Strings.insertZeros(null, 5));
203 - assertEquals(string, Strings.insertZeros(string, string.length()-1)); 200 + assertEquals(string, Strings.insertZeros(string, string.length() - 1));
204 assertEquals(string, Strings.insertZeros(string, string.length())); 201 assertEquals(string, Strings.insertZeros(string, string.length()));
205 - assertEquals("0"+string, Strings.insertZeros(string, string.length()+1));  
206 - assertEquals("00"+string, Strings.insertZeros(string, string.length()+2)); 202 + assertEquals("0" + string, Strings.insertZeros(string, string.length() + 1));
  203 + assertEquals("00" + string, Strings.insertZeros(string, string.length() + 2));
207 } 204 }
208 - 205 +
209 } 206 }