DynamicConfig.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.pdd.core.dynamic;
import java.util.Map;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDServizioApplicativo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.state.RequestInfo;
import org.slf4j.Logger;
/**
* DynamicConfig
*
* @author Andrea Poli (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class DynamicConfig {
private Logger log;
private Map<String, Object> dynamicMap;
private RequestInfo requestInfo;
private Busta busta;
public DynamicConfig(Logger log, Map<String, Object> dynamicMap, RequestInfo requestInfo, Busta busta) {
this.log = log;
this.dynamicMap = dynamicMap;
this.requestInfo = requestInfo;
this.busta = busta;
}
private IDServizio configId = null;
private IDServizio getConfigId(){
if(this.configId!=null) {
return this.configId;
}
if(this.requestInfo!=null && this.requestInfo.getIdServizio()!=null) {
this.configId = this.requestInfo.getIdServizio();
}
else if(this.busta==null && this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_BUSTA_OBJECT);
if(o!=null && o instanceof Busta) {
this.busta = (Busta) o;
}
}
if(this.configId==null && this.busta!=null) {
try {
this.configId = IDServizioFactory.getInstance().getIDServizioFromValues(this.busta.getTipoServizio(), this.busta.getServizio(),
this.busta.getTipoDestinatario(), this.busta.getDestinatario(),
this.busta.getVersioneServizio());
}
catch(Exception e) {
this.log.error("Creazione IDServizio per dynamic config fallita: "+e.getMessage(),e);
}
}
return this.configId;
}
private Map<String, String> mapConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapConfig(){
if(this.mapConfig!=null) {
return this.mapConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_API_IMPL_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapConfig = (Map<String, String>) o;
}
}
return this.mapConfig;
}
private IDSoggetto providerOrganizationId;
@SuppressWarnings("unused")
private IDSoggetto getProviderOrganizationId(){
if(this.providerOrganizationId!=null) {
return this.providerOrganizationId;
}
if(this.requestInfo!=null && this.requestInfo.getIdServizio()!=null && this.requestInfo.getIdServizio().getSoggettoErogatore()!=null) {
this.providerOrganizationId = this.requestInfo.getIdServizio().getSoggettoErogatore();
}
else if(this.busta==null && this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_BUSTA_OBJECT);
if(o!=null && o instanceof Busta) {
this.busta = (Busta) o;
}
}
if(this.providerOrganizationId==null && this.busta!=null) {
try {
this.providerOrganizationId = new IDSoggetto(this.busta.getTipoDestinatario(), this.busta.getDestinatario());
}
catch(Exception e) {
this.log.error("Creazione IDSoggetto provider per dynamic config fallita: "+e.getMessage(),e);
}
}
return this.providerOrganizationId;
}
private Map<String, String> mapProviderOrganizationConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapProviderOrganizationConfig(){
if(this.mapProviderOrganizationConfig!=null) {
return this.mapProviderOrganizationConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_SOGGETTO_EROGATORE_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapProviderOrganizationConfig = (Map<String, String>) o;
}
}
return this.mapProviderOrganizationConfig;
}
private IDSoggetto clientOrganizationId;
private IDSoggetto getClientOrganizationId(){
if(this.clientOrganizationId!=null) {
return this.clientOrganizationId;
}
if(this.requestInfo!=null && this.requestInfo.getFruitore()!=null) {
this.clientOrganizationId = this.requestInfo.getFruitore();
}
else if(this.busta==null && this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_BUSTA_OBJECT);
if(o!=null && o instanceof Busta) {
this.busta = (Busta) o;
}
}
if(this.clientOrganizationId==null && this.busta!=null) {
this.clientOrganizationId = new IDSoggetto(this.busta.getTipoMittente(), this.busta.getMittente());
}
return this.clientOrganizationId;
}
private Map<String, String> mapClientOrganizationConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapClientOrganizationConfig(){
if(this.mapClientOrganizationConfig!=null) {
return this.mapClientOrganizationConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_SOGGETTO_FRUITORE_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapClientOrganizationConfig = (Map<String, String>) o;
}
}
return this.mapClientOrganizationConfig;
}
private IDServizioApplicativo clientApplicationId;
private IDServizioApplicativo getClientApplicationId(){
if(this.clientApplicationId!=null) {
return this.clientApplicationId;
}
if(this.busta==null && this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_BUSTA_OBJECT);
if(o!=null && o instanceof Busta) {
this.busta = (Busta) o;
}
}
if(this.clientOrganizationId==null && this.busta!=null && this.busta.getServizioApplicativoFruitore()!=null) {
IDSoggetto organization = getClientOrganizationId();
this.clientApplicationId = new IDServizioApplicativo();
this.clientApplicationId.setIdSoggettoProprietario(organization);
this.clientApplicationId.setNome(this.busta.getServizioApplicativoFruitore());
}
return this.clientApplicationId;
}
private Map<String, String> mapClientApplicationConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapClientApplicationConfig(){
if(this.mapClientApplicationConfig!=null) {
return this.mapClientApplicationConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_APPLICATIVO_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapClientApplicationConfig = (Map<String, String>) o;
}
}
return this.mapClientApplicationConfig;
}
private IDSoggetto tokenTokenClientOrganizationId;
@SuppressWarnings("unused")
private IDSoggetto getTokenClientOrganizationId(){
if(this.tokenTokenClientOrganizationId!=null) {
return this.tokenTokenClientOrganizationId;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_APPLICATIVO_TOKEN);
if(o!=null && o instanceof IDServizioApplicativo) {
this.tokenTokenClientApplicationId = (IDServizioApplicativo) o;
this.tokenTokenClientOrganizationId = this.tokenTokenClientApplicationId.getIdSoggettoProprietario();
}
}
return this.tokenTokenClientOrganizationId;
}
private Map<String, String> mapTokenClientOrganizationConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapTokenClientOrganizationConfig(){
if(this.mapTokenClientOrganizationConfig!=null) {
return this.mapTokenClientOrganizationConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_SOGGETTO_PROPRIETARIO_APPLICATIVO_TOKEN_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapTokenClientOrganizationConfig = (Map<String, String>) o;
}
}
return this.mapTokenClientOrganizationConfig;
}
private IDServizioApplicativo tokenTokenClientApplicationId;
private IDServizioApplicativo getTokenClientApplicationId(){
if(this.tokenTokenClientApplicationId!=null) {
return this.tokenTokenClientApplicationId;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_APPLICATIVO_TOKEN);
if(o!=null && o instanceof IDServizioApplicativo) {
this.tokenTokenClientApplicationId = (IDServizioApplicativo) o;
this.tokenTokenClientOrganizationId = this.tokenTokenClientApplicationId.getIdSoggettoProprietario();
}
}
return this.tokenTokenClientApplicationId;
}
private Map<String, String> mapTokenClientApplicationConfig = null;
@SuppressWarnings("unchecked")
private Map<String, String> getMapTokenClientApplicationConfig(){
if(this.mapTokenClientApplicationConfig!=null) {
return this.mapTokenClientApplicationConfig;
}
if(this.dynamicMap!=null && !this.dynamicMap.isEmpty()) {
Object o = this.dynamicMap.get(Costanti.MAP_APPLICATIVO_TOKEN_CONFIG_PROPERTY);
if(o!=null && o instanceof Map<?, ?>) {
this.mapTokenClientApplicationConfig = (Map<String, String>) o;
}
}
return this.mapTokenClientApplicationConfig;
}
// metodi diretti
public String getApi(String pName) throws DynamicException {
return this.getValue(getMapConfig(), pName);
}
public String getProviderOrganization(String pName) throws DynamicException {
return this.getValue(getMapProviderOrganizationConfig(), pName);
}
public String getClientApplication(String pName) throws DynamicException {
return this.getValue(getMapClientApplicationConfig(), pName);
}
public String getClientOrganization(String pName) throws DynamicException {
return this.getValue(getMapClientOrganizationConfig(), pName);
}
public String getTokenClientApplication(String pName) throws DynamicException {
return this.getValue(getMapTokenClientApplicationConfig(), pName);
}
public String getTokenClientOrganization(String pName) throws DynamicException {
return this.getValue(getMapTokenClientOrganizationConfig(), pName);
}
// ricerche
// ** applicativo client **
public String apiSearchByClientApplication(String pNameParam) throws DynamicException {
IDServizioApplicativo clientApplicationId = getClientApplicationId();
// 1. Cerco nell'api con nome '<clientOrganizationName>.<clientApplicationName>.<pName>'
// 2. Cerco nella fruizione con nome '<clientApplicationName>.<pName>'
// 3. Cerco nella fruizione con nome '<clientOrganizationName>.<pName>'
// 4. Proprietà di default
return apiSearchByClientApplication(pNameParam, clientApplicationId);
}
public String clientApplicationSearch(String pNameParam) throws DynamicException {
Map<String, String> mapClientApplicationConfig = getMapClientApplicationConfig();
// 1. Cerco nell'applicativo con nome '<nomeErogatore>.<nomeApiImpl>.v<versioneApiImpl>.<pName>'
// 2. Cerco nell'applicativo con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
// 3. Cerco nell'applicativo con nome '<nomeErogatore>.<pName>'
// 4. Proprietà di default <pName>
return searchByAPI(pNameParam, mapClientApplicationConfig);
}
public String clientOrganizationSearch(String pNameParam) throws DynamicException {
Map<String, String> mapClientOrganizationConfig = getMapClientOrganizationConfig();
// 1. Cerco nel soggetto dell'applicativo con nome '<nomeErogatore>.<nomeApiImpl>.v<versioneApiImpl>.<pName>'
// 2. Cerco nel soggetto dell'applicativo con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
// 3. Cerco nel soggetto dell'applicativo con nome '<nomeErogatore>.<pName>'
// 4. Proprietà di default <pName>
return searchByAPI(pNameParam, mapClientOrganizationConfig);
}
// ** applicativo token client **
public String apiSearchByTokenClientApplication(String pNameParam) throws DynamicException {
IDServizioApplicativo tokenClientApplicationId = getTokenClientApplicationId();
// 1. Cerco nell'api con nome '<tokenClientOrganizationName>.<tokenClientApplicationName>.<pName>'
// 2. Cerco nella fruizione con nome '<tokenClientApplicationName>.<pName>'
// 3. Cerco nella fruizione con nome '<tokenClientOrganizationName>.<pName>'
// 4. Proprietà di default
return apiSearchByClientApplication(pNameParam, tokenClientApplicationId);
}
public String tokenClientApplicationSearch(String pNameParam) throws DynamicException {
Map<String, String> mapTokenClientApplicationConfig = getMapTokenClientApplicationConfig();
// 1. Cerco nell'applicativo con nome '<nomeErogatore>.<nomeApiImpl>.v<versioneApiImpl>.<pName>'
// 2. Cerco nell'applicativo con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
// 3. Cerco nell'applicativo con nome '<nomeErogatore>.<pName>'
// 4. Proprietà di default <pName>
return searchByAPI(pNameParam, mapTokenClientApplicationConfig);
}
public String tokenClientOrganizationSearch(String pNameParam) throws DynamicException {
Map<String, String> mapTokenClientOrganizationConfig = getMapTokenClientOrganizationConfig();
// 1. Cerco nel soggetto dell'applicativo con nome '<nomeErogatore>.<nomeApiImpl>.v<versioneApiImpl>.<pName>'
// 2. Cerco nel soggetto dell'applicativo con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
// 3. Cerco nel soggetto dell'applicativo con nome '<nomeErogatore>.<pName>'
// 4. Proprietà di default <pName>
return searchByAPI(pNameParam, mapTokenClientOrganizationConfig);
}
// ** provider **
public String providerSearch(String pNameParam) throws DynamicException {
Map<String, String> mapProviderOrganizationConfig = getMapProviderOrganizationConfig();
// 1. Cerco nel soggetto erogatore con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
// 2. Proprietà di default <pName>
return searchByAPIwithoutProvider(pNameParam, mapProviderOrganizationConfig);
}
// Utility
private String apiSearchByClientApplication(String pNameParam, IDServizioApplicativo idSA) throws DynamicException {
Map<String, String> mapConfig = getMapConfig();
// 1. Cerco nell'api con nome '<clientOrganizationName>.<tokenClientApplicationName>.<pName>'
if(idSA!=null && idSA.getNome()!=null &&
idSA.getIdSoggettoProprietario()!=null && idSA.getIdSoggettoProprietario().getNome()!=null) {
String pName = idSA.getIdSoggettoProprietario().getNome()+"."+idSA.getNome()+"."+pNameParam;
String v = this.getValue(mapConfig, pName);
if(v!=null) {
return v;
}
}
// 2. Cerco nella fruizione con nome '<clientApplicationName>.<pName>'
if(idSA!=null && idSA.getNome()!=null) {
String pName = idSA.getNome()+"."+pNameParam;
String v = this.getValue(mapConfig, pName);
if(v!=null) {
return v;
}
}
// 3. Cerco nella fruizione con nome '<clientOrganizationName>.<pName>'
if(idSA!=null &&
idSA.getIdSoggettoProprietario()!=null && idSA.getIdSoggettoProprietario().getNome()!=null) {
String pName = idSA.getIdSoggettoProprietario().getNome()+"."+pNameParam;
String v = this.getValue(mapConfig, pName);
if(v!=null) {
return v;
}
}
// 4. Proprietà di default <pName>
return this.getValue(mapConfig, pNameParam);
}
private String searchByAPI(String pNameParam, Map<String, String> map) throws DynamicException {
IDServizio configId = this.getConfigId();
// 1. Cerco con nome '<nomeErogatore>.<nomeApiImpl>.v<versioneApiImpl>.<pName>'
if(configId!=null && configId.getNome()!=null && configId.getVersione()!=null &&
configId.getSoggettoErogatore()!=null && configId.getSoggettoErogatore().getNome()!=null) {
String pName = configId.getSoggettoErogatore().getNome() +"." + configId.getNome() + ".v"+configId.getVersione()+"."+pNameParam;
String v = this.getValue(map, pName);
if(v!=null) {
return v;
}
}
// 2. Cerco con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
if(configId!=null && configId.getNome()!=null && configId.getVersione()!=null) {
String pName = configId.getNome() + ".v"+configId.getVersione()+"."+pNameParam;
String v = this.getValue(map, pName);
if(v!=null) {
return v;
}
}
// 3. Cerco con nome '<nomeErogatore>.<pName>'
if(configId!=null &&
configId.getSoggettoErogatore()!=null && configId.getSoggettoErogatore().getNome()!=null) {
String pName = configId.getSoggettoErogatore().getNome() +"." + pNameParam;
String v = this.getValue(map, pName);
if(v!=null) {
return v;
}
}
// 4. Proprietà di default <pName>
return this.getValue(map, pNameParam);
}
private String searchByAPIwithoutProvider(String pNameParam, Map<String, String> map) throws DynamicException {
IDServizio configId = this.getConfigId();
// 1. Cerco con nome '<nomeApiImpl>.v<nomeApiImpl>.<pName>'
if(configId!=null && configId.getNome()!=null && configId.getVersione()!=null) {
String pName = configId.getNome() + ".v"+configId.getVersione()+"."+pNameParam;
String v = this.getValue(map, pName);
if(v!=null) {
return v;
}
}
// 2. Proprietà di default <pName>
return this.getValue(map, pNameParam);
}
private String getValue(Map<String, String> map, String pName) {
if(map!=null && !map.isEmpty()) {
for (String name : map.keySet()) {
if(name.equals(pName)) {
return map.get(name);
}
}
}
return null;
}
}