Context.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.utils.service.context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.UriInfo;
import org.openspcoop2.utils.UtilsException;
import org.openspcoop2.utils.logger.ILogger;
import org.openspcoop2.utils.logger.beans.context.core.AbstractContext;
import org.openspcoop2.utils.logger.beans.context.core.AbstractTransactionWithClient;
import org.openspcoop2.utils.logger.beans.context.core.Operation;
import org.openspcoop2.utils.logger.beans.context.core.Service;
import org.openspcoop2.utils.service.logger.ServiceLogger;
import org.slf4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
/**
* Context
*
* @author Andrea Poli (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class Context implements IContext {
private HttpServletRequest servletRequest;
private HttpServletResponse servletResponse;
private UriInfo uriInfo;
private String transactionId;
private String className;
private String methodName;
private String restPath;
private AbstractContext applicationContext;
private ILogger applicationLogger;
private ServiceLogger logger; // core
private Authentication authentication;
private boolean loggerPrefixEnabled;
public Context(ILogger applicationLogger, boolean loggerPrefixEnabled) throws UtilsException {
this.applicationLogger = applicationLogger;
this.applicationContext = (AbstractContext) this.applicationLogger.getContext();
this.transactionId = this.applicationContext.getIdTransaction();
if(this.transactionId==null) {
throw new UtilsException("TransactionId undefined");
}
this.loggerPrefixEnabled = loggerPrefixEnabled;
}
public void update(HttpServletRequest servletRequest, HttpServletResponse servletResponse, UriInfo uriInfo, int level, Logger log) {
this.servletRequest = servletRequest;
this.servletResponse = servletResponse;
this.uriInfo = uriInfo;
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
if(stackTrace!=null && stackTrace.length>=(level+1)) {
this.className = stackTrace[level].getClassName();
this.methodName = stackTrace[level].getMethodName();
}
this.logger = new ServiceLogger(this.transactionId, this.methodName, this.className, log, this.loggerPrefixEnabled);
this.authentication = SecurityContextHolder.getContext().getAuthentication();
AbstractTransactionWithClient transaction = (AbstractTransactionWithClient) this.applicationContext.getTransaction();
if(this.className!=null) {
if(transaction.getService()==null) {
transaction.setService(new Service());
}
if(transaction.getService().getName()==null) {
if(this.className.lastIndexOf(".")>0) {
transaction.getService().setName(this.className.substring(this.className.lastIndexOf(".")+1, this.className.length()));
}
else {
transaction.getService().setName(this.className);
}
}
}
if(this.methodName!=null) {
if(transaction.getOperation()==null) {
transaction.setOperation(new Operation());
}
transaction.getOperation().setName(this.methodName);
}
}
public void setRestPath(String restPath) {
this.restPath = restPath;
}
@Override
public HttpServletRequest getServletRequest() {
return this.servletRequest;
}
@Override
public HttpServletResponse getServletResponse() {
return this.servletResponse;
}
@Override
public UriInfo getUriInfo() {
return this.uriInfo;
}
@Override
public String getTransactionId() {
return this.transactionId;
}
@Override
public String getClassName() {
return this.className;
}
@Override
public String getMethodName() {
return this.methodName;
}
@Override
public String getRestPath() {
return this.restPath;
}
@Override
public AbstractContext getApplicationContext(){
return this.applicationContext;
}
@Override
public ILogger getApplicationLogger() throws UtilsException {
return this.applicationLogger;
}
@Override
public ServiceLogger getLogger() {
return this.logger;
}
@Override
public Authentication getAuthentication() {
return this.authentication;
}
}