View Javadoc
1   package ch.qos.logback.classic.model.processor;
2   
3   import ch.qos.logback.classic.LoggerContext;
4   import ch.qos.logback.classic.model.LoggerContextListenerModel;
5   import ch.qos.logback.classic.spi.LoggerContextListener;
6   import ch.qos.logback.core.Context;
7   import ch.qos.logback.core.model.Model;
8   import ch.qos.logback.core.model.processor.ModelHandlerBase;
9   import ch.qos.logback.core.model.processor.ModelHandlerException;
10  import ch.qos.logback.core.model.processor.ModelInterpretationContext;
11  import ch.qos.logback.core.spi.ContextAware;
12  import ch.qos.logback.core.spi.LifeCycle;
13  import ch.qos.logback.core.util.OptionHelper;
14  
15  public class LoggerContextListenerModelHandler extends ModelHandlerBase {
16      boolean inError = false;
17      LoggerContextListener lcl;
18  
19      public LoggerContextListenerModelHandler(Context context) {
20          super(context);
21      }
22  
23      static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) {
24          return new LoggerContextListenerModelHandler(context);
25      }
26  
27      @Override
28      protected Class<LoggerContextListenerModel> getSupportedModelClass() {
29          return LoggerContextListenerModel.class;
30      }
31  
32      @Override
33      public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
34          LoggerContextListenerModel lclModel = (LoggerContextListenerModel) model;
35  
36          String className = lclModel.getClassName();
37          if (OptionHelper.isNullOrEmptyOrAllSpaces(className)) {
38              addError("Empty class name for LoggerContextListener");
39              inError = true;
40          } else {
41              className = mic.getImport(className);
42          }
43  
44          try {
45              lcl = (LoggerContextListener) OptionHelper.instantiateByClassName(className, LoggerContextListener.class,
46                      context);
47  
48              if (lcl instanceof ContextAware) {
49                  ((ContextAware) lcl).setContext(context);
50              }
51  
52              mic.pushObject(lcl);
53              addInfo("Adding LoggerContextListener of type [" + className + "] to the object stack");
54  
55          } catch (Exception oops) {
56              inError = true;
57              addError("Could not create LoggerContextListener of type " + className + "].", oops);
58          }
59      }
60  
61      @Override
62      public void postHandle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
63          if (inError) {
64              return;
65          }
66          Object o = mic.peekObject();
67  
68          if (o != lcl) {
69              addWarn("The object on the top the of the stack is not the LoggerContextListener pushed earlier.");
70          } else {
71              if (lcl instanceof LifeCycle) {
72                  ((LifeCycle) lcl).start();
73                  addInfo("Starting LoggerContextListener");
74              }
75              ((LoggerContext) context).addListener(lcl);
76              mic.popObject();
77          }
78      }
79  }