Advertisement
Guest User

Untitled

a guest
Nov 18th, 2010
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 17.57 KB | None | 0 0
  1. Index: src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java
  2. ===================================================================
  3. --- src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java   (wersja 0)
  4. +++ src/main/java/pl/koziolekweb/loggerservice/AutoDetectAdapter.java   (wersja 0)
  5. @@ -0,0 +1,9 @@
  6. +package pl.koziolekweb.loggerservice;
  7. +
  8. +public class AutoDetectAdapter implements LoggerFactoryAdapter<Object> {
  9. +   public Object getLogger( Class< ? > fieldType, Object... factoryArguments ) {
  10. +       LoggerFactoryAdapter< ? > loggerFactoryAdapter = AutoDetectRegistry.getAdapter( fieldType );
  11. +       return loggerFactoryAdapter.getLogger(  fieldType,
  12. +                                               factoryArguments );
  13. +   }
  14. +}
  15. Index: src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java
  16. ===================================================================
  17. --- src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java  (wersja 0)
  18. +++ src/main/java/pl/koziolekweb/loggerservice/AutoDetectRegistry.java  (wersja 0)
  19. @@ -0,0 +1,20 @@
  20. +package pl.koziolekweb.loggerservice;
  21. +
  22. +import java.util.HashMap;
  23. +import java.util.Map;
  24. +
  25. +public class AutoDetectRegistry {
  26. +   private final static Map<String, LoggerFactoryAdapter< ? >> adapterMap  = new HashMap<String, LoggerFactoryAdapter< ? >>();
  27. +
  28. +   public static void registerAdapter( Class< ? > loggerClass, LoggerFactoryAdapter< ? > adapter ) {
  29. +       adapterMap.put( loggerClass.getName(),
  30. +                       adapter );
  31. +   }
  32. +
  33. +   public static LoggerFactoryAdapter< ? > getAdapter( Class< ? > loggerClass ) {
  34. +       LoggerFactoryAdapter< ? > loggerFactoryAdapter = adapterMap.get( loggerClass.getName() );
  35. +       if ( loggerFactoryAdapter == null )
  36. +           throw new RuntimeException( "unable to find logger adapter for " + loggerClass.getName() );
  37. +       return loggerFactoryAdapter;
  38. +   }
  39. +}
  40. Index: src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java
  41. ===================================================================
  42. --- src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java  (wersja 0)
  43. +++ src/main/java/pl/koziolekweb/loggerservice/AutoLogger.java  (wersja 0)
  44. @@ -0,0 +1,16 @@
  45. +package pl.koziolekweb.loggerservice;
  46. +
  47. +import java.lang.annotation.Documented;
  48. +import java.lang.annotation.ElementType;
  49. +import java.lang.annotation.Retention;
  50. +import java.lang.annotation.RetentionPolicy;
  51. +import java.lang.annotation.Target;
  52. +
  53. +
  54. +@Retention(RetentionPolicy.RUNTIME)
  55. +@Target(ElementType.FIELD)
  56. +@Documented
  57. +@LogService(loggerFactoryAdapterClass = AutoDetectAdapter.class)
  58. +public @interface AutoLogger {
  59. +
  60. +}
  61. Index: src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java
  62. ===================================================================
  63. --- src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java  (wersja 24)
  64. +++ src/main/java/pl/koziolekweb/loggerservice/CommonsAdapter.java  (kopia robocza)
  65. @@ -1,8 +1,11 @@
  66.  package pl.koziolekweb.loggerservice;
  67.  
  68.  public final class CommonsAdapter implements LoggerFactoryAdapter<org.apache.commons.logging.Log> {
  69. -
  70. -   public org.apache.commons.logging.Log getLogger(Object... factoryArguments) {
  71. +   static {
  72. +       AutoDetectRegistry.registerAdapter( org.apache.commons.logging.Log.class, new CommonsAdapter() );
  73. +   }
  74. +  
  75. +   public org.apache.commons.logging.Log getLogger(Class<?> fieldType, Object... factoryArguments) {
  76.         org.apache.commons.logging.Log logger = null;
  77.         if (factoryArguments.length <= 0)
  78.             logger = org.apache.commons.logging.LogFactory.getLog(Object.class);
  79. Index: src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java
  80. ===================================================================
  81. --- src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java   (wersja 0)
  82. +++ src/main/java/pl/koziolekweb/loggerservice/CommonsLogger.java   (wersja 0)
  83. @@ -0,0 +1,15 @@
  84. +package pl.koziolekweb.loggerservice;
  85. +
  86. +import java.lang.annotation.Documented;
  87. +import java.lang.annotation.ElementType;
  88. +import java.lang.annotation.Retention;
  89. +import java.lang.annotation.RetentionPolicy;
  90. +import java.lang.annotation.Target;
  91. +
  92. +@Retention(RetentionPolicy.RUNTIME)
  93. +@Target(ElementType.FIELD)
  94. +@Documented
  95. +@LogService(loggerFactoryAdapterClass = CommonsAdapter.class)
  96. +public @interface CommonsLogger {
  97. +
  98. +}
  99. Index: src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java
  100. ===================================================================
  101. --- src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java   (wersja 24)
  102. +++ src/main/java/pl/koziolekweb/loggerservice/JavaSeAdapter.java   (kopia robocza)
  103. @@ -1,8 +1,11 @@
  104.  package pl.koziolekweb.loggerservice;
  105.  
  106.  public final class JavaSeAdapter implements LoggerFactoryAdapter<java.util.logging.Logger> {
  107. +   static {
  108. +       AutoDetectRegistry.registerAdapter( java.util.logging.Logger.class, new JavaSeAdapter() );
  109. +   }
  110.  
  111. -   public java.util.logging.Logger getLogger(Object... factoryArguments) {
  112. +   public java.util.logging.Logger getLogger(Class<?> fieldType, Object... factoryArguments) {
  113.         java.util.logging.Logger logger = null;
  114.         if (factoryArguments.length <= 0)
  115.             logger = java.util.logging.Logger.getLogger("");
  116. Index: src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java
  117. ===================================================================
  118. --- src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java    (wersja 0)
  119. +++ src/main/java/pl/koziolekweb/loggerservice/JavaSeLogger.java    (wersja 0)
  120. @@ -0,0 +1,15 @@
  121. +package pl.koziolekweb.loggerservice;
  122. +
  123. +import java.lang.annotation.Documented;
  124. +import java.lang.annotation.ElementType;
  125. +import java.lang.annotation.Retention;
  126. +import java.lang.annotation.RetentionPolicy;
  127. +import java.lang.annotation.Target;
  128. +
  129. +@Retention(RetentionPolicy.RUNTIME)
  130. +@Target(ElementType.FIELD)
  131. +@Documented
  132. +@LogService(loggerFactoryAdapterClass = JavaSeAdapter.class)
  133. +public @interface JavaSeLogger {
  134. +
  135. +}
  136. Index: src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java
  137. ===================================================================
  138. --- src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java    (wersja 24)
  139. +++ src/main/java/pl/koziolekweb/loggerservice/Log4jAdapter.java    (kopia robocza)
  140. @@ -1,15 +1,21 @@
  141.  package pl.koziolekweb.loggerservice;
  142.  
  143. +import org.apache.log4j.Logger;
  144. +
  145.  public final class Log4jAdapter implements LoggerFactoryAdapter<org.apache.log4j.Logger> {
  146. +   static {
  147. +       AutoDetectRegistry.registerAdapter( Logger.class,
  148. +                                           new Log4jAdapter() );
  149. +   }
  150.  
  151. -   public org.apache.log4j.Logger getLogger(Object... factoryArguments) {
  152. +   public org.apache.log4j.Logger getLogger( Class< ? > fieldType, Object... factoryArguments ) {
  153.         org.apache.log4j.Logger logger = null;
  154. -       if (factoryArguments.length <= 0)
  155. -           logger = org.apache.log4j.Logger.getLogger(Object.class);
  156. -       if (factoryArguments[0] instanceof Class)
  157. -           logger = org.apache.log4j.Logger.getLogger((Class<?>) factoryArguments[0]);
  158. -       if (factoryArguments[0] instanceof String)
  159. -           logger = org.apache.log4j.Logger.getLogger(factoryArguments[0].toString());
  160. +       if ( factoryArguments.length <= 0 )
  161. +           logger = org.apache.log4j.Logger.getLogger( Object.class );
  162. +       if ( factoryArguments[ 0 ] instanceof Class )
  163. +           logger = org.apache.log4j.Logger.getLogger( (Class< ? >) factoryArguments[ 0 ] );
  164. +       if ( factoryArguments[ 0 ] instanceof String )
  165. +           logger = org.apache.log4j.Logger.getLogger( factoryArguments[ 0 ].toString() );
  166.  
  167.         return logger;
  168.     }
  169. Index: src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java
  170. ===================================================================
  171. --- src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java (wersja 0)
  172. +++ src/main/java/pl/koziolekweb/loggerservice/Log4jLogger.java (wersja 0)
  173. @@ -0,0 +1,14 @@
  174. +package pl.koziolekweb.loggerservice;
  175. +
  176. +import java.lang.annotation.Documented;
  177. +import java.lang.annotation.ElementType;
  178. +import java.lang.annotation.Retention;
  179. +import java.lang.annotation.RetentionPolicy;
  180. +import java.lang.annotation.Target;
  181. +
  182. +@Retention(RetentionPolicy.RUNTIME)
  183. +@Target(ElementType.FIELD)
  184. +@Documented
  185. +@LogService(loggerFactoryAdapterClass = Log4jAdapter.class)
  186. +public @interface Log4jLogger {
  187. +}
  188. Index: src/main/java/pl/koziolekweb/loggerservice/LogService.java
  189. ===================================================================
  190. --- src/main/java/pl/koziolekweb/loggerservice/LogService.java  (wersja 24)
  191. +++ src/main/java/pl/koziolekweb/loggerservice/LogService.java  (kopia robocza)
  192. @@ -7,7 +7,7 @@
  193.  import java.lang.annotation.Target;
  194.  
  195.  @Retention(RetentionPolicy.RUNTIME)
  196. -@Target(ElementType.FIELD)
  197. +@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE })
  198.  @Documented
  199.  public @interface LogService {
  200.  
  201. Index: src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java
  202. ===================================================================
  203. --- src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java (wersja 24)
  204. +++ src/main/java/pl/koziolekweb/loggerservice/LogServicePostProcessor.java (kopia robocza)
  205. @@ -1,6 +1,8 @@
  206.  package pl.koziolekweb.loggerservice;
  207.  
  208. +import java.lang.annotation.Annotation;
  209.  import java.lang.reflect.Field;
  210. +import java.util.Arrays;
  211.  
  212.  import org.springframework.beans.BeansException;
  213.  import org.springframework.beans.factory.config.BeanPostProcessor;
  214. @@ -18,11 +20,22 @@
  215.             ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
  216.                 public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
  217.                     LogService logServiceAnnotation = field.getAnnotation(LogService.class);
  218. +                  
  219. +                   if ( logServiceAnnotation == null ) {
  220. +                       Annotation[] annotations = field.getAnnotations();
  221. +                       for ( int i = 0; i < annotations.length; ++i ) {
  222. +                           Annotation a = annotations[ i ];
  223. +                           Class<? extends Annotation> annotationType = a.annotationType();
  224. +                           logServiceAnnotation = annotationType.getAnnotation( LogService.class );
  225. +                           if ( logServiceAnnotation != null )
  226. +                               break;
  227. +                       }
  228. +                   }
  229. +                  
  230.                     if (logServiceAnnotation != null) {
  231.                         try {
  232.                             Class<LoggerFactoryAdapter<Object>> loggerFactoryAdapterClass = null;
  233.                             if (logServiceAnnotation.loggerFactoryAdapterClass().equals(Void.class)) {
  234. -                               Class<LoggerFactoryAdapter> loggerFactoryAdapterClassLoader = LoggerFactoryAdapter.class;
  235.                                 loggerFactoryAdapterClass = (Class<LoggerFactoryAdapter<Object>>) Class
  236.                                         .forName(logServiceAnnotation.loggerFactoryAdapterClassName());
  237.                             } else {
  238. @@ -30,7 +43,7 @@
  239.                                         .loggerFactoryAdapterClass();
  240.                             }
  241.                             LoggerFactoryAdapter<Object> newInstance = loggerFactoryAdapterClass.newInstance();
  242. -                           setLogger(bean, field, newInstance.getLogger(bean.getClass()));
  243. +                           setLogger(bean, field, newInstance.getLogger(field.getType(), bean.getClass()));
  244.                         } catch (InstantiationException e) {
  245.                             e.printStackTrace();
  246.                         } catch (ClassNotFoundException e) {
  247. Index: src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java
  248. ===================================================================
  249. --- src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java    (wersja 24)
  250. +++ src/main/java/pl/koziolekweb/loggerservice/LoggerFactoryAdapter.java    (kopia robocza)
  251. @@ -2,6 +2,5 @@
  252.  
  253.  
  254.  public interface LoggerFactoryAdapter<T> {
  255. -
  256. -   public T getLogger(Object... factoryArguments);
  257. +   public T getLogger(Class<?> fieldType, Object... factoryArguments);
  258.  }
  259. Index: src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java
  260. ===================================================================
  261. --- src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java    (wersja 24)
  262. +++ src/main/java/pl/koziolekweb/loggerservice/Sfl4jAdapter.java    (kopia robocza)
  263. @@ -1,15 +0,0 @@
  264. -package pl.koziolekweb.loggerservice;
  265. -
  266. -public final class Sfl4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
  267. -
  268. -   public org.slf4j.Logger getLogger(Object... factoryArguments) {
  269. -       org.slf4j.Logger logger = null;
  270. -       if (factoryArguments.length <= 0)
  271. -           logger = org.slf4j.LoggerFactory.getLogger(Object.class);
  272. -       if (factoryArguments[0] instanceof Class)
  273. -           logger = org.slf4j.LoggerFactory.getLogger((Class<?>) factoryArguments[0]);
  274. -       if (factoryArguments[0] instanceof String)
  275. -           logger = org.slf4j.LoggerFactory.getLogger(factoryArguments[0].toString());
  276. -       return logger;
  277. -   }
  278. -}
  279. \ No newline at end of file
  280. Index: src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java
  281. ===================================================================
  282. --- src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java    (wersja 24)
  283. +++ src/main/java/pl/koziolekweb/loggerservice/Slf4jAdapter.java    (kopia robocza)
  284. @@ -1,15 +1,19 @@
  285.  package pl.koziolekweb.loggerservice;
  286.  
  287. -public final class Sfl4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
  288. +public final class Slf4jAdapter implements LoggerFactoryAdapter<org.slf4j.Logger> {
  289. +   static {
  290. +       AutoDetectRegistry.registerAdapter( org.slf4j.Logger.class,
  291. +                                           new Slf4jAdapter() );
  292. +   }
  293.  
  294. -   public org.slf4j.Logger getLogger(Object... factoryArguments) {
  295. +   public org.slf4j.Logger getLogger( Class< ? > fieldType, Object... factoryArguments ) {
  296.         org.slf4j.Logger logger = null;
  297. -       if (factoryArguments.length <= 0)
  298. -           logger = org.slf4j.LoggerFactory.getLogger(Object.class);
  299. -       if (factoryArguments[0] instanceof Class)
  300. -           logger = org.slf4j.LoggerFactory.getLogger((Class<?>) factoryArguments[0]);
  301. -       if (factoryArguments[0] instanceof String)
  302. -           logger = org.slf4j.LoggerFactory.getLogger(factoryArguments[0].toString());
  303. +       if ( factoryArguments.length <= 0 )
  304. +           logger = org.slf4j.LoggerFactory.getLogger( Object.class );
  305. +       if ( factoryArguments[ 0 ] instanceof Class )
  306. +           logger = org.slf4j.LoggerFactory.getLogger( (Class< ? >) factoryArguments[ 0 ] );
  307. +       if ( factoryArguments[ 0 ] instanceof String )
  308. +           logger = org.slf4j.LoggerFactory.getLogger( factoryArguments[ 0 ].toString() );
  309.         return logger;
  310.     }
  311.  }
  312. \ No newline at end of file
  313. Index: src/test/java/pl/koziolekweb/loggerservice/AutoBean.java
  314. ===================================================================
  315. --- src/test/java/pl/koziolekweb/loggerservice/AutoBean.java    (wersja 0)
  316. +++ src/test/java/pl/koziolekweb/loggerservice/AutoBean.java    (wersja 0)
  317. @@ -0,0 +1,28 @@
  318. +package pl.koziolekweb.loggerservice;
  319. +
  320. +import org.apache.commons.logging.Log;
  321. +import org.apache.log4j.Logger;
  322. +
  323. +
  324. +public class AutoBean {
  325. +   @AutoLogger
  326. +   private Logger loggerLog4j;
  327. +
  328. +   @AutoLogger
  329. +   private Log loggerCommons;
  330. +  
  331. +   @AutoLogger
  332. +   private org.slf4j.Logger loggerSlf4j;
  333. +  
  334. +   public Logger getLoggerLog4j() {
  335. +       return loggerLog4j;
  336. +   }
  337. +  
  338. +   public Log getLoggerCommons() {
  339. +       return loggerCommons;
  340. +   }
  341. +
  342. +   public org.slf4j.Logger getLoggerSlf4j() {
  343. +       return loggerSlf4j;
  344. +   }
  345. +}
  346. \ No newline at end of file
  347. Index: src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java
  348. ===================================================================
  349. --- src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java  (wersja 0)
  350. +++ src/test/java/pl/koziolekweb/loggerservice/Log4jLogBeanSimple.java  (wersja 0)
  351. @@ -0,0 +1,15 @@
  352. +package pl.koziolekweb.loggerservice;
  353. +
  354. +import org.apache.log4j.Logger;
  355. +
  356. +
  357. +public class Log4jLogBeanSimple {
  358. +
  359. +   @Log4jLogger
  360. +   private Logger logger;
  361. +
  362. +   public Logger getLogger() {
  363. +       return logger;
  364. +   }
  365. +
  366. +}
  367. \ No newline at end of file
  368. Index: src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java
  369. ===================================================================
  370. --- src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java (wersja 24)
  371. +++ src/test/java/pl/koziolekweb/loggerservice/LogServicePostProcessorTest.java (kopia robocza)
  372. @@ -1,7 +1,6 @@
  373.  package pl.koziolekweb.loggerservice;
  374.  
  375.  import static org.testng.Assert.assertNotNull;
  376. -
  377.  import static org.testng.Assert.assertSame;
  378.  import static org.testng.Assert.fail;
  379.  
  380. @@ -30,6 +29,8 @@
  381.         testSfl4J();
  382.         testCommons();
  383.         testLog4j();
  384. +       testLog4jSimple();
  385. +       testAuto();
  386.     }
  387.  
  388.     @Test(expectedExceptions = { BeansException.class })
  389. @@ -48,6 +49,32 @@
  390.     }
  391.  
  392.     @Test
  393. +   public void testLog4jSimple() {
  394. +       Log4jLogBeanSimple log4jBean = new Log4jLogBeanSimple();
  395. +       logServicePostProcessor.postProcessBeforeInitialization(log4jBean, "");
  396. +       assertNotNull(log4jBean.getLogger());
  397. +   }
  398. +
  399. +   @Test
  400. +   public void testAuto() {
  401. +       // TODO jak to scierwo automatycznie zaladowac?
  402. +       try {
  403. +           Class.forName( Log4jAdapter.class.getName() );
  404. +           Class.forName( CommonsAdapter.class.getName() );
  405. +           Class.forName( Slf4jAdapter.class.getName() );
  406. +           Class.forName( JavaSeAdapter.class.getName() );
  407. +       } catch ( ClassNotFoundException e ) {
  408. +           throw new RuntimeException( "e" );
  409. +       }
  410. +      
  411. +       AutoBean bean = new AutoBean();
  412. +       logServicePostProcessor.postProcessBeforeInitialization(bean, "");
  413. +       assertNotNull(bean.getLoggerLog4j());
  414. +       assertNotNull(bean.getLoggerCommons());
  415. +       assertNotNull(bean.getLoggerSlf4j());
  416. +   }
  417. +
  418. +   @Test
  419.     public void testCommons() {
  420.         CommonsLogBean commonsBean = new CommonsLogBean();
  421.         logServicePostProcessor.postProcessBeforeInitialization(commonsBean, "");
  422. Index: src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java
  423. ===================================================================
  424. --- src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java    (wersja 24)
  425. +++ src/test/java/pl/koziolekweb/loggerservice/Sfl4jLogBean.java    (kopia robocza)
  426. @@ -4,7 +4,7 @@
  427.  
  428.  public class Sfl4jLogBean {
  429.  
  430. -   @LogService(loggerFactoryAdapterClassName = "pl.koziolekweb.loggerservice.Sfl4jAdapter")
  431. +   @LogService(loggerFactoryAdapterClassName = "pl.koziolekweb.loggerservice.Slf4jAdapter")
  432.     public Logger logger;
  433.  
  434.     private Object someField;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement