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