View Javadoc
1   package ch.qos.logback.core.model.processor;
2   
3   import javax.naming.NamingException;
4   
5   import ch.qos.logback.core.Context;
6   import ch.qos.logback.core.joran.action.ActionUtil;
7   import ch.qos.logback.core.joran.action.ActionUtil.Scope;
8   import ch.qos.logback.core.model.InsertFromJNDIModel;
9   import ch.qos.logback.core.model.Model;
10  import ch.qos.logback.core.model.util.PropertyModelHandlerHelper;
11  import ch.qos.logback.core.util.JNDIUtil;
12  import ch.qos.logback.core.util.OptionHelper;
13  
14  public class InsertFromJNDIModelHandler extends ModelHandlerBase {
15  
16      public InsertFromJNDIModelHandler(Context context) {
17          super(context);
18      }
19  
20      static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) {
21          return new InsertFromJNDIModelHandler(context);
22      }
23  
24      @Override
25      protected Class<InsertFromJNDIModel> getSupportedModelClass() {
26          return InsertFromJNDIModel.class;
27      }
28  
29      @Override
30      public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException {
31          int errorCount = 0;
32  
33          InsertFromJNDIModel ifjm = (InsertFromJNDIModel) model;
34  
35          String envEntryName = mic.subst(ifjm.getEnvEntryName());
36          String asKey = mic.subst(ifjm.getAs());
37  
38          String scopeStr = mic.subst(ifjm.getScopeStr());
39          Scope scope = ActionUtil.stringToScope(scopeStr);
40  
41          String envEntryValue;
42  
43          if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryName)) {
44              addError("[" + InsertFromJNDIModel.ENV_ENTRY_NAME_ATTR + "] missing");
45              errorCount++;
46          }
47  
48          if (OptionHelper.isNullOrEmptyOrAllSpaces(asKey)) {
49              addError("[" + InsertFromJNDIModel.AS_ATTR + "] missing");
50              errorCount++;
51          }
52  
53          if (errorCount != 0) {
54              return;
55          }
56  
57          try {
58              javax.naming.Context ctx = JNDIUtil.getInitialContext();
59              envEntryValue = JNDIUtil.lookupString(ctx, envEntryName);
60              if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryValue)) {
61                  addError("[" + envEntryName + "] has null or empty value");
62              } else {
63                  addInfo("Setting variable [" + asKey + "] to [" + envEntryValue + "] in [" + scope + "] scope");
64                  PropertyModelHandlerHelper.setProperty(mic, asKey, envEntryValue, scope);
65              }
66          } catch (NamingException e) {
67              addError("Failed to lookup JNDI env-entry [" + envEntryName + "]");
68          }
69  
70      }
71  
72  }