001/* 002 * Copyright (c) 2004-2024 QOS.ch 003 * All rights reserved. 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining 006 * a copy of this software and associated documentation files (the 007 * "Software"), to deal in the Software without restriction, including 008 * without limitation the rights to use, copy, modify, merge, publish, 009 * distribute, sublicense, and/or sell copies of the Software, and to 010 * permit persons to whom the Software is furnished to do so, subject to 011 * the following conditions: 012 * 013 * The above copyright notice and this permission notice shall be 014 * included in all copies or substantial portions of the Software. 015 * 016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 017 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 018 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 019 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 020 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 021 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 022 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 023 */ 024 025package ch.qos.logback.tyler.base.handler; 026 027import ch.qos.logback.classic.LoggerContext; 028import ch.qos.logback.core.Context; 029import ch.qos.logback.core.model.InsertFromJNDIModel; 030import ch.qos.logback.core.model.Model; 031import ch.qos.logback.core.model.processor.InsertFromJNDIModelHandler; 032import ch.qos.logback.core.model.processor.ModelHandlerBase; 033import ch.qos.logback.core.model.processor.ModelHandlerException; 034import ch.qos.logback.core.model.processor.ModelInterpretationContext; 035import ch.qos.logback.tyler.base.TylerModelInterpretationContext; 036import com.squareup.javapoet.MethodSpec; 037import com.squareup.javapoet.ParameterSpec; 038 039import javax.lang.model.element.Modifier; 040 041import static ch.qos.logback.tyler.base.TylerConstants.LOGGER_CONTEXT_PARAMETER_NAME; 042 043public class TylerInsertFromJNDIModelHandler extends ModelHandlerBase { 044 045 public TylerInsertFromJNDIModelHandler(Context context) { 046 super(context); 047 } 048 049 static public TylerInsertFromJNDIModelHandler makeInstance(Context context, ModelInterpretationContext mic) { 050 return new TylerInsertFromJNDIModelHandler(context); 051 } 052 053 @Override 054 public void handle(ModelInterpretationContext mic, Model model) throws ModelHandlerException { 055 InsertFromJNDIModel insertFromJNDIModel = (InsertFromJNDIModel) model; 056 TylerModelInterpretationContext tmic = (TylerModelInterpretationContext) mic; 057 addJavaStatement(tmic, insertFromJNDIModel); 058 } 059 060 private void addJavaStatement(TylerModelInterpretationContext tmic, InsertFromJNDIModel originalModel) { 061 062 // in configuration method add 063 // insertFromJNDIAs_$asStr(originalModel.asStr, originalModel.envEntryStr, originalModel.scopeStr); 064 065 // void insertFromJNDIAs(String asStr, String envEntryStr, String scopeStr) { 066 // InsertFromJNDIModel insertFromJNDIModel = new InsertFromJNDIModel(); 067 // insertFromJNDIModel.setAs(subst(asStr)); 068 // insertFromJNDIModel.setEnvEntryName(subst(envEntryStr)); 069 // insertFromJNDIModel.setScopeStr(subst(sopeStr)); 070 // 071 // InsertFromJNDIModelHandler insertFromJNDIModelHandler = new InsertFromJNDIModelHandler(context); 072 // insertFromJNDIModelHandler.detachedHandle(this, insertFromJNDIModel); 073 // } 074 String insertFromJNDIModelVarName = "insertFromJNDIModel"; 075 String ifjmVarName = "insertFromJNDIModelHandler"; 076 077 String asStr = originalModel.getAs(); 078 079 String jndiMethodName_As = "insertFromJNDIAs_" + asStr; 080 String asStrVarName = "asStr"; 081 String envEntryStrVarName = "envEntryStr"; 082 String scopeStrVarName = "scopeStr"; 083 084 final ParameterSpec asStr_ParameterSpec = ParameterSpec.builder(String.class, asStrVarName).build(); 085 final ParameterSpec envEntryStr_ParameterSpec = ParameterSpec.builder(String.class, envEntryStrVarName).build(); 086 final ParameterSpec scopeStr_ParameterSpec = ParameterSpec.builder(String.class, scopeStrVarName).build(); 087 088 MethodSpec.Builder msBuilder = MethodSpec.methodBuilder(jndiMethodName_As).addModifiers(Modifier.PRIVATE) 089 .addParameter(asStr_ParameterSpec) 090 .addParameter(envEntryStr_ParameterSpec) 091 .addParameter(scopeStr_ParameterSpec) 092 .returns(void.class); 093 094 msBuilder.addStatement("$1T $2N = new $1T()", InsertFromJNDIModel.class, insertFromJNDIModelVarName); 095 msBuilder.addStatement("$N.setAs(subst($S))", insertFromJNDIModelVarName, asStrVarName); 096 msBuilder.addStatement("$N.setEnvEntryName(subst($S))", insertFromJNDIModelVarName, envEntryStrVarName); 097 msBuilder.addStatement("$N.setScopeStr(subst($S))", insertFromJNDIModelVarName, scopeStrVarName); 098 099 msBuilder.addStatement("$1T $2N = new $1T($3N)", InsertFromJNDIModelHandler.class, ifjmVarName, tmic.getContextFieldSpec()); 100 msBuilder.addStatement("$N.detachedHandle(this, $N)", ifjmVarName, insertFromJNDIModelVarName); 101 102 tmic.mapOfMethodSpecBuilders.put(jndiMethodName_As, msBuilder); 103 104 tmic.configureMethodSpecBuilder.addStatement("$N($S, $S, $S)", jndiMethodName_As, originalModel.getAs(), originalModel.getEnvEntryName(), originalModel.getScopeStr()); 105 106 } 107}