001package ch.qos.logback.core.model.processor; 002 003import ch.qos.logback.core.Context; 004import ch.qos.logback.core.joran.action.ActionUtil; 005import ch.qos.logback.core.joran.action.ActionUtil.Scope; 006import ch.qos.logback.core.model.InsertFromJNDIModel; 007import ch.qos.logback.core.model.Model; 008import ch.qos.logback.core.model.util.PropertyModelHandlerHelper; 009import ch.qos.logback.core.spi.ContextAwarePropertyContainer; 010import ch.qos.logback.core.util.JNDIUtil; 011import ch.qos.logback.core.util.OptionHelper; 012 013public class InsertFromJNDIModelHandler extends ModelHandlerBase { 014 015 public InsertFromJNDIModelHandler(Context context) { 016 super(context); 017 } 018 019 static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) { 020 return new InsertFromJNDIModelHandler(context); 021 } 022 023 @Override 024 protected Class<InsertFromJNDIModel> getSupportedModelClass() { 025 return InsertFromJNDIModel.class; 026 } 027 028 @Override 029 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException { 030 InsertFromJNDIModel ifjm = (InsertFromJNDIModel) model; 031 detachedHandle(mic, ifjm); 032 } 033 034 /** 035 * 036 * @param capc 037 * @param ifjm 038 * @since 1.5.11 039 */ 040 public void detachedHandle(ContextAwarePropertyContainer capc, InsertFromJNDIModel ifjm) { 041 int errorCount = 0; 042 String envEntryName = capc.subst(ifjm.getEnvEntryName()); 043 String asKey = capc.subst(ifjm.getAs()); 044 045 String scopeStr = capc.subst(ifjm.getScopeStr()); 046 Scope scope = ActionUtil.stringToScope(scopeStr); 047 048 String envEntryValue; 049 050 if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryName)) { 051 addError("[" + InsertFromJNDIModel.ENV_ENTRY_NAME_ATTR + "] missing"); 052 errorCount++; 053 } 054 055 if (OptionHelper.isNullOrEmptyOrAllSpaces(asKey)) { 056 addError("[" + InsertFromJNDIModel.AS_ATTR + "] missing"); 057 errorCount++; 058 } 059 060 if (errorCount != 0) { 061 return; 062 } 063 064 try { 065 javax.naming.Context ctx = JNDIUtil.getInitialContext(); 066 envEntryValue = JNDIUtil.lookupString(ctx, envEntryName); 067 if (OptionHelper.isNullOrEmptyOrAllSpaces(envEntryValue)) { 068 addError("[" + envEntryName + "] has null or empty value"); 069 } else { 070 addInfo("Setting variable [" + asKey + "] to [" + envEntryValue + "] in [" + scope + "] scope"); 071 PropertyModelHandlerHelper.setProperty(capc, asKey, envEntryValue, scope); 072 } 073 } catch (Exception e) { 074 addError("Failed to lookup JNDI env-entry [" + envEntryName + "]"); 075 } 076 077 } 078 079}