DBOggettiInUsoUtils_plugins.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.protocol.engine.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.openspcoop2.core.allarmi.constants.RuoloPorta;
import org.openspcoop2.core.commons.DBUtils;
import org.openspcoop2.core.commons.ErrorsHandlerCostant;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.core.controllo_traffico.constants.TipoFiltroApplicativo;
import org.openspcoop2.utils.UtilsException;
import org.openspcoop2.utils.jdbc.JDBCParameterUtilities;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.LikeConfig;
import org.openspcoop2.utils.sql.SQLObjectFactory;
/**
* DBOggettiInUsoUtils_plugins
*
* @author Andrea Poli (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class DBOggettiInUsoUtils_plugins {
protected static boolean isPluginInUso(Connection con, String tipoDB, String className, String label, String tipoPlugin, String tipo,
Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean normalizeObjectIds) throws UtilsException {
String nomeMetodo = "isPluginInUso";
PreparedStatement stmt = null;
ResultSet risultato = null;
PreparedStatement stmt2 = null;
ResultSet risultato2 = null;
String queryString;
try {
boolean isInUso = false;
long idPluginLong = DBUtils.getIdPlugin(className, label, tipoPlugin, tipo, con, tipoDB);
if(idPluginLong<=0){
throw new UtilsException("Plugin con Label ["+label+"] non trovato");
}
if("CONNETTORE".equals(tipoPlugin)) {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.CONNETTORI);
sqlQueryObject.addSelectField("id");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition("endpointtype=?");
sqlQueryObject.addWhereCondition("custom=?");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
stmt.setInt(2, CostantiDB.TRUE);
risultato = stmt.executeQuery();
List<Long> idConnettori = new ArrayList<Long>();
while (risultato.next()){
long idConnettore = risultato.getLong("id");
idConnettori.add(idConnettore);
}
risultato.close();
stmt.close();
if(idConnettori!=null && !idConnettori.isEmpty()) {
isInUso = true; // già è in uso... anche se fallisse sotto il mapping
}
/*
* Le seguenti liste vengono inizializzate dentro il metodo.
*
* List<String> connettorePA_list = whereIsInUso.get(ErrorsHandlerCostant.CONNETTORE_PA);
* List<String> connettorePD_list = whereIsInUso.get(ErrorsHandlerCostant.CONNETTORE_PD);
* List<String> mapping_connettorePA_list = whereIsInUso.get(ErrorsHandlerCostant.CONNETTORE_MAPPING_PA);
* List<String> mapping_connettorePD_list = whereIsInUso.get(ErrorsHandlerCostant.CONNETTORE_MAPPING_PD);
**/
DBOggettiInUsoUtils.formatConnettori(idConnettori,whereIsInUso, con, normalizeObjectIds, tipoDB);
}
else if("AUTENTICAZIONE".equals(tipoPlugin) ||
"AUTORIZZAZIONE".equals(tipoPlugin) ||
"AUTORIZZAZIONE_CONTENUTI".equals(tipoPlugin) ||
"INTEGRAZIONE".equals(tipoPlugin) ||
"BEHAVIOUR".equals(tipoPlugin)) {
boolean autenticazione = "AUTENTICAZIONE".equals(tipoPlugin);
boolean autorizzazione = "AUTORIZZAZIONE".equals(tipoPlugin);
boolean autorizzazione_contenuti = "AUTORIZZAZIONE_CONTENUTI".equals(tipoPlugin);
boolean integrazione = "INTEGRAZIONE".equals(tipoPlugin);
boolean behaviour = "BEHAVIOUR".equals(tipoPlugin);
ErrorsHandlerCostant PD_tipoControllo_mapping = null;
ErrorsHandlerCostant PD_tipoControllo = null;
ErrorsHandlerCostant PA_tipoControllo_mapping = null;
ErrorsHandlerCostant PA_tipoControllo = null;
String colonna = "";
if(autenticazione){
PD_tipoControllo_mapping = ErrorsHandlerCostant.AUTENTICAZIONE_MAPPING_PD;
PD_tipoControllo = ErrorsHandlerCostant.AUTENTICAZIONE_PD;
PA_tipoControllo_mapping = ErrorsHandlerCostant.AUTENTICAZIONE_MAPPING_PA;
PA_tipoControllo = ErrorsHandlerCostant.AUTENTICAZIONE_PA;
colonna = "autenticazione";
}
else if(autorizzazione){
PD_tipoControllo_mapping = ErrorsHandlerCostant.AUTORIZZAZIONE_MAPPING_PD;
PD_tipoControllo = ErrorsHandlerCostant.AUTORIZZAZIONE_PD;
PA_tipoControllo_mapping = ErrorsHandlerCostant.AUTORIZZAZIONE_MAPPING_PA;
PA_tipoControllo = ErrorsHandlerCostant.AUTORIZZAZIONE_PA;
colonna = "autorizzazione";
}
else if(autorizzazione_contenuti){
PD_tipoControllo_mapping = ErrorsHandlerCostant.AUTORIZZAZIONE_CONTENUTI_MAPPING_PD;
PD_tipoControllo = ErrorsHandlerCostant.AUTORIZZAZIONE_CONTENUTI_PD;
PA_tipoControllo_mapping = ErrorsHandlerCostant.AUTORIZZAZIONE_CONTENUTI_MAPPING_PA;
PA_tipoControllo = ErrorsHandlerCostant.AUTORIZZAZIONE_CONTENUTI_PA;
colonna = "autorizzazione_contenuto";
}
else if(integrazione) {
PD_tipoControllo_mapping = ErrorsHandlerCostant.INTEGRAZIONE_MAPPING_PD;
PD_tipoControllo = ErrorsHandlerCostant.INTEGRAZIONE_PD;
PA_tipoControllo_mapping = ErrorsHandlerCostant.INTEGRAZIONE_MAPPING_PA;
PA_tipoControllo = ErrorsHandlerCostant.INTEGRAZIONE_PA;
colonna = "integrazione";
}
else if(behaviour) {
PA_tipoControllo_mapping = ErrorsHandlerCostant.BEHAVIOUR_MAPPING_PA;
PA_tipoControllo = ErrorsHandlerCostant.BEHAVIOUR_PA;
colonna = "behaviour";
}
List<String> PD_mapping_list = null;
List<String> PD_list = null;
if(!behaviour) {
PD_mapping_list = whereIsInUso.get(PD_tipoControllo_mapping);
PD_list = whereIsInUso.get(PD_tipoControllo);
}
List<String> PA_mapping_list = whereIsInUso.get(PA_tipoControllo_mapping);
List<String> PA_list = whereIsInUso.get(PA_tipoControllo);
if(!behaviour) {
if (PD_mapping_list == null) {
PD_mapping_list = new ArrayList<>();
whereIsInUso.put(PD_tipoControllo_mapping, PD_mapping_list);
}
if (PD_list == null) {
PD_list = new ArrayList<>();
whereIsInUso.put(PD_tipoControllo, PD_list);
}
}
if (PA_mapping_list == null) {
PA_mapping_list = new ArrayList<>();
whereIsInUso.put(PA_tipoControllo_mapping, PA_mapping_list);
}
if (PA_list == null) {
PA_list = new ArrayList<>();
whereIsInUso.put(PA_tipoControllo, PA_list);
}
int i = 0;
if(behaviour) {
i=1;
}
for (; i < 2; i++) {
String table = CostantiDB.PORTE_DELEGATE;
if(i==1) {
table = CostantiDB.PORTE_APPLICATIVE;
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(table);
sqlQueryObject.addSelectField("nome_porta");
sqlQueryObject.setANDLogicOperator(true);
if(integrazione) {
// condizione di controllo
ISQLQueryObject sqlQueryObjectOr = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObjectOr.setANDLogicOperator(false);
// (integrazione == 'NOME') OR (integrazione like 'NOME,%') OR (integrazione like '%,NOME') OR (integrazione like '%,applicabilita_azioni,%')
// CLOB sqlQueryObjectOr.addWhereCondition(integrazione = ?");
sqlQueryObjectOr.addWhereLikeCondition(colonna, tipo, false , false);
sqlQueryObjectOr.addWhereLikeCondition(colonna, tipo+",", LikeConfig.startsWith(false));
sqlQueryObjectOr.addWhereLikeCondition(colonna, ","+tipo, LikeConfig.endsWith(false));
sqlQueryObjectOr.addWhereLikeCondition(colonna, ","+tipo+",", true , false);
sqlQueryObject.addWhereCondition(sqlQueryObjectOr.createSQLConditions());
}
else {
sqlQueryObject.addWhereCondition(colonna+"=?");
}
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
if(!integrazione) {
stmt.setString(1, tipo);
}
risultato = stmt.executeQuery();
while (risultato.next()){
String nome = risultato.getString("nome_porta");
if(CostantiDB.PORTE_DELEGATE.equals(table)) {
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
PD_mapping_list.add(resultPorta.label);
}
else {
PD_list.add(resultPorta.label);
}
}
else {
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
PA_mapping_list.add(resultPorta.label);
}
else {
PA_list.add(resultPorta.label);
}
}
isInUso = true;
}
risultato.close();
stmt.close();
}
}
else if("RATE_LIMITING".equals(tipoPlugin)) {
List<String> ct_list = whereIsInUso.get(ErrorsHandlerCostant.CONTROLLO_TRAFFICO);
if (ct_list == null) {
ct_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.CONTROLLO_TRAFFICO, ct_list);
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY);
sqlQueryObject.addSelectField("active_policy_id");
sqlQueryObject.addSelectField("policy_alias");
sqlQueryObject.addSelectField("filtro_ruolo");
sqlQueryObject.addSelectField("filtro_porta");
sqlQueryObject.setANDLogicOperator(false); // OR
sqlQueryObject.addWhereCondition(true,
CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_key_enabled = ?",
CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_key_type = ?",
sqlQueryObject.getWhereLikeCondition(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".filtro_key_name", tipo, false, false));
sqlQueryObject.addWhereCondition(true,
CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".group_key_enabled = ?",
CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".group_key_type = ?",
sqlQueryObject.getWhereLikeCondition(CostantiDB.CONTROLLO_TRAFFICO_ACTIVE_POLICY+".group_key_name", tipo, false, false));
sqlQueryObject.addOrderBy("filtro_ruolo");
sqlQueryObject.addOrderBy("filtro_porta");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
int index = 1;
JDBCParameterUtilities utils = new JDBCParameterUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2());
utils.setParameter(stmt, index++, true, boolean.class);
stmt.setString(index++, TipoFiltroApplicativo.PLUGIN_BASED.getValue());
utils.setParameter(stmt, index++, true, boolean.class);
stmt.setString(index++, TipoFiltroApplicativo.PLUGIN_BASED.getValue());
risultato = stmt.executeQuery();
while (risultato.next()) {
String alias = risultato.getString("policy_alias");
if(alias== null || "".equals(alias)) {
alias = risultato.getString("active_policy_id");
}
String nomePorta = risultato.getString("filtro_porta");
String filtro_ruolo = risultato.getString("filtro_ruolo");
if(nomePorta!=null) {
String tipoPorta = null;
String labelPorta = null;
if("delegata".equals(filtro_ruolo)) {
try {
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nomePorta, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
labelPorta = "Fruizione di Servizio "+ resultPorta.label;
}
}catch(Exception e) {
tipoPorta = "Outbound";
}
}
else if("applicativa".equals(filtro_ruolo)) {
try {
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nomePorta, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
labelPorta = "Erogazione di Servizio "+ resultPorta.label;
}
}catch(Exception e) {
tipoPorta = "Inbound";
}
}
else {
tipoPorta = filtro_ruolo;
}
if(labelPorta==null) {
ct_list.add("Policy '"+alias+"' attiva nella porta '"+tipoPorta+"' '"+nomePorta+"' ");
}
else {
ct_list.add("Policy '"+alias+"' attiva nella "+labelPorta);
}
}
else {
ct_list.add("Policy '"+alias+"'");
}
isInUso = true;
}
risultato.close();
stmt.close();
}
else if("ALLARME".equals(tipoPlugin)) {
List<String> allarmiPD_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI_MAPPING_PD);
List<String> allarmiPD_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI_PD);
List<String> allarmiPA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI_MAPPING_PA);
List<String> allarmiPA_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI_PA);
List<String> allarmi_list = whereIsInUso.get(ErrorsHandlerCostant.ALLARMI);
if (allarmiPD_mapping_list == null) {
allarmiPD_mapping_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.ALLARMI_MAPPING_PD, allarmiPD_mapping_list);
}
if (allarmiPD_list == null) {
allarmiPD_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.ALLARMI_PD, allarmiPD_list);
}
if (allarmiPA_mapping_list == null) {
allarmiPA_mapping_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.ALLARMI_MAPPING_PA, allarmiPA_mapping_list);
}
if (allarmiPA_list == null) {
allarmiPA_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.ALLARMI_PA, allarmiPA_list);
}
if (allarmi_list == null) {
allarmi_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.ALLARMI, allarmi_list);
}
// allarmi
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ALLARMI);
sqlQueryObject.addSelectField("nome");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition("tipo=?");
sqlQueryObject.addWhereIsNullCondition("filtro_porta");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
risultato = stmt.executeQuery();
while (risultato.next()){
String nome = risultato.getString("nome");
allarmi_list.add(nome);
isInUso = true;
}
risultato.close();
stmt.close();
// Porte applicative, allarmi
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ALLARMI);
sqlQueryObject.addSelectField("nome");
sqlQueryObject.addSelectField("filtro_porta");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition("tipo=?");
sqlQueryObject.addWhereCondition("filtro_ruolo=?");
sqlQueryObject.addWhereIsNotNullCondition("filtro_porta");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
stmt.setString(2, RuoloPorta.APPLICATIVA.getValue());
risultato = stmt.executeQuery();
while (risultato.next()){
String nome = risultato.getString("filtro_porta");
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
allarmiPA_mapping_list.add(resultPorta.label);
}
else {
allarmiPA_list.add(resultPorta.label);
}
isInUso = true;
}
risultato.close();
stmt.close();
// Porte delegate, allarmi
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.ALLARMI);
sqlQueryObject.addSelectField("nome");
sqlQueryObject.addSelectField("filtro_porta");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition("tipo=?");
sqlQueryObject.addWhereCondition("filtro_ruolo=?");
sqlQueryObject.addWhereIsNotNullCondition("filtro_porta");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
stmt.setString(2, RuoloPorta.DELEGATA.getValue());
risultato = stmt.executeQuery();
while (risultato.next()){
String nome = risultato.getString("filtro_porta");
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
allarmiPD_mapping_list.add(resultPorta.label);
}
else {
allarmiPD_list.add(resultPorta.label);
}
isInUso = true;
}
risultato.close();
stmt.close();
}else if("MESSAGE_HANDLER".equals(tipoPlugin)) {
List<String> messageHandlerPD_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.MESSAGE_HANDLER_MAPPING_PD);
List<String> messageHandlerPD_list = whereIsInUso.get(ErrorsHandlerCostant.MESSAGE_HANDLER_PD);
List<String> messageHandlerPA_mapping_list = whereIsInUso.get(ErrorsHandlerCostant.MESSAGE_HANDLER_MAPPING_PA);
List<String> messageHandlerPA_list = whereIsInUso.get(ErrorsHandlerCostant.MESSAGE_HANDLER_PA);
List<String> messageHandler_list = whereIsInUso.get(ErrorsHandlerCostant.MESSAGE_HANDLER);
if (messageHandlerPD_mapping_list == null) {
messageHandlerPD_mapping_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.MESSAGE_HANDLER_MAPPING_PD, messageHandlerPD_mapping_list);
}
if (messageHandlerPD_list == null) {
messageHandlerPD_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.MESSAGE_HANDLER_PD, messageHandlerPD_list);
}
if (messageHandlerPA_mapping_list == null) {
messageHandlerPA_mapping_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.MESSAGE_HANDLER_MAPPING_PA, messageHandlerPA_mapping_list);
}
if (messageHandlerPA_list == null) {
messageHandlerPA_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.MESSAGE_HANDLER_PA, messageHandlerPA_list);
}
if (messageHandler_list == null) {
messageHandler_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.MESSAGE_HANDLER, messageHandler_list);
}
// config handlers
String tabella = CostantiDB.CONFIGURAZIONE_HANDLERS;
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addSelectField(tabella +".tipologia");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition(tabella +".tipo=?");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
risultato = stmt.executeQuery();
while (risultato.next()){
String tipologia = risultato.getString("tipologia");
String labelMessaggio = formatMessageHandlerFromTipologia(tipologia);
messageHandler_list.add(labelMessaggio);
isInUso = true;
}
risultato.close();
stmt.close();
// Porte applicative, message handlers
tabella = CostantiDB.PORTE_APPLICATIVE_HANDLERS;
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addFromTable(CostantiDB.PORTE_APPLICATIVE);
sqlQueryObject.addSelectField(tabella +".tipologia");
sqlQueryObject.addSelectField(CostantiDB.PORTE_APPLICATIVE +".nome_porta");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition(tabella+".id_porta="+CostantiDB.PORTE_APPLICATIVE+".id");
sqlQueryObject.addWhereCondition(tabella+".tipo=?");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
risultato = stmt.executeQuery();
while (risultato.next()){
String tipologia = risultato.getString("tipologia");
String nome = risultato.getString("nome_porta");
String labelMessaggio = formatMessageHandlerFromTipologia(tipologia);
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaApplicativa(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
messageHandlerPA_mapping_list.add(resultPorta.label + ": " + labelMessaggio);
}
else {
messageHandlerPA_list.add(resultPorta.label + ": " + labelMessaggio);
}
isInUso = true;
}
risultato.close();
stmt.close();
// Porte delegate, message handlers
tabella = CostantiDB.PORTE_DELEGATE_HANDLERS;
sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addFromTable(CostantiDB.PORTE_DELEGATE);
sqlQueryObject.addSelectField(tabella +".tipologia");
sqlQueryObject.addSelectField(CostantiDB.PORTE_DELEGATE +".nome_porta");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition(tabella+".id_porta="+CostantiDB.PORTE_DELEGATE+".id");
sqlQueryObject.addWhereCondition(tabella+".tipo=?");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
risultato = stmt.executeQuery();
while (risultato.next()){
String tipologia = risultato.getString("tipologia");
String nome = risultato.getString("nome_porta");
String labelMessaggio = formatMessageHandlerFromTipologia(tipologia);
ResultPorta resultPorta = DBOggettiInUsoUtils.formatPortaDelegata(nome, tipoDB, con, normalizeObjectIds);
if(resultPorta.mapping) {
messageHandlerPD_mapping_list.add(resultPorta.label + ": " + labelMessaggio);
}
else {
messageHandlerPD_list.add(resultPorta.label + ": " + labelMessaggio);
}
isInUso = true;
}
risultato.close();
stmt.close();
}else if("SERVICE_HANDLER".equals(tipoPlugin)) {
List<String> serviceHandler_list = whereIsInUso.get(ErrorsHandlerCostant.SERVICE_HANDLER);
if (serviceHandler_list == null) {
serviceHandler_list = new ArrayList<>();
whereIsInUso.put(ErrorsHandlerCostant.SERVICE_HANDLER, serviceHandler_list);
}
// config handlers
String tabella = CostantiDB.CONFIGURAZIONE_HANDLERS;
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addSelectField(tabella +".tipologia");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition(tabella +".tipo=?");
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
stmt.setString(1, tipo);
risultato = stmt.executeQuery();
while (risultato.next()){
String tipologia = risultato.getString("tipologia");
String labelMessaggio = formatServiceHandlerFromTipologia(tipologia);
serviceHandler_list.add(labelMessaggio);
isInUso = true;
}
risultato.close();
stmt.close();
}
else if("TOKEN_DYNAMIC_DISCOVERY".equals(tipoPlugin)
||
"TOKEN_VALIDAZIONE".equals(tipoPlugin)
||
"TOKEN_NEGOZIAZIONE".equals(tipoPlugin)
||
"ATTRIBUTE_AUTHORITY".equals(tipoPlugin) ) {
boolean tokenDynamicDiscovery = "TOKEN_DYNAMIC_DISCOVERY".equals(tipoPlugin);
boolean tokenValidazione = "TOKEN_VALIDAZIONE".equals(tipoPlugin);
boolean tokenNegoziazione = "TOKEN_NEGOZIAZIONE".equals(tipoPlugin);
boolean attributeAuthority = "ATTRIBUTE_AUTHORITY".equals(tipoPlugin);
ErrorsHandlerCostant constants = null;
String tipologia = null;
if(tokenDynamicDiscovery) {
constants = ErrorsHandlerCostant.TOKEN_DYNAMIC_DISCOVERY_PA;
tipologia = CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_VALIDATION;
}
else if(tokenValidazione) {
constants = ErrorsHandlerCostant.TOKEN_PA;
tipologia = CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_VALIDATION;
}
else if(tokenNegoziazione) {
constants = ErrorsHandlerCostant.TOKEN_NEGOZIAZIONE_PA;
tipologia = CostantiConfigurazione.GENERIC_PROPERTIES_TOKEN_TIPOLOGIA_RETRIEVE;
}
else {
constants = ErrorsHandlerCostant.ATTRIBUTE_AUTHORITY_PA;
tipologia = CostantiConfigurazione.GENERIC_PROPERTIES_ATTRIBUTE_AUTHORITY;
}
List<String> gpList = whereIsInUso.get(constants);
if (gpList == null) {
gpList = new ArrayList<>();
whereIsInUso.put(constants, gpList);
}
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDB);
sqlQueryObject.addFromTable(CostantiDB.CONFIG_GENERIC_PROPERTIES, "gps");
sqlQueryObject.addFromTable(CostantiDB.CONFIG_GENERIC_PROPERTY, "gp");
sqlQueryObject.setSelectDistinct(true);
sqlQueryObject.addSelectAliasField("gps", "nome", "nomeGP");
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addWhereCondition("gps.id=gp.id_props");
sqlQueryObject.addWhereCondition("gps.tipologia=?");
String campoGpNome = "gp.nome=?";
String campoGpValore = "gp.valore";
if(tokenValidazione) {
sqlQueryObject.addWhereCondition(false, campoGpNome, campoGpNome, campoGpNome);
sqlQueryObject.addWhereLikeCondition(campoGpValore, tipo, false, false, false);
}
else if(tokenDynamicDiscovery || tokenNegoziazione || attributeAuthority) {
sqlQueryObject.addWhereCondition(campoGpNome);
sqlQueryObject.addWhereLikeCondition(campoGpValore, tipo, false, false, false);
}
queryString = sqlQueryObject.createSQLQuery();
stmt = con.prepareStatement(queryString);
int index = 1;
JDBCParameterUtilities utils = new JDBCParameterUtilities(sqlQueryObject.getTipoDatabaseOpenSPCoop2());
utils.setParameter(stmt, index++, tipologia, String.class);
if(tokenValidazione) {
utils.setParameter(stmt, index++, CostantiConfigurazione.POLICY_VALIDAZIONE_CLAIMS_PARSER_PLUGIN_TYPE, String.class);
utils.setParameter(stmt, index++, CostantiConfigurazione.POLICY_INTROSPECTION_CLAIMS_PARSER_PLUGIN_TYPE, String.class);
utils.setParameter(stmt, index++, CostantiConfigurazione.POLICY_USER_INFO_CLAIMS_PARSER_PLUGIN_TYPE, String.class);
}
else if(tokenDynamicDiscovery) {
utils.setParameter(stmt, index++, CostantiConfigurazione.POLICY_DYNAMIC_DISCOVERY_CLAIMS_PARSER_PLUGIN_TYPE, String.class);
}
else if(tokenNegoziazione) {
utils.setParameter(stmt, index++, CostantiConfigurazione.POLICY_RETRIEVE_TOKEN_PARSER_PLUGIN_TYPE, String.class);
}
else if(attributeAuthority) {
utils.setParameter(stmt, index++, CostantiConfigurazione.AA_RESPONSE_PARSER_PLUGIN_TYPE, String.class);
}
risultato = stmt.executeQuery();
while (risultato.next()) {
String nome = risultato.getString("nomeGP");
String labelMessaggio = DBOggettiInUsoUtils.formatGenericProperties(tipologia, nome);
gpList.add(labelMessaggio);
isInUso = true;
}
risultato.close();
stmt.close();
}
return isInUso;
} catch (Exception se) {
throw new UtilsException("[DBOggettiInUsoUtils::" + nomeMetodo + "] Exception: " + se.getMessage(),se);
} finally {
// Chiudo statement and resultset
JDBCUtilities.closeResources(risultato2, stmt2);
JDBCUtilities.closeResources(risultato, stmt);
}
}
protected static String toString(String className, String label, String tipoPlugin, String tipo, Map<ErrorsHandlerCostant, List<String>> whereIsInUso, boolean prefix, String separator){
if(className!=null && tipoPlugin!=null && tipo!=null) {
// nop
}
StringBuilder bf = new StringBuilder();
bf.append(label);
Set<ErrorsHandlerCostant> keys = whereIsInUso.keySet();
StringBuilder msg = new StringBuilder();
msg.append("Plugin '" +bf.toString() +"' non eliminabile perchè :"+separator);
if(!prefix){
msg = new StringBuilder();
}
String separatorCategorie = "";
if(whereIsInUso.size()>1) {
separatorCategorie = separator;
}
for (ErrorsHandlerCostant key : keys) {
List<String> messages = whereIsInUso.get(key);
if ( messages!=null && !messages.isEmpty()) {
msg.append(separatorCategorie);
}
switch (key) {
case CONNETTORE_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzata nel connettore per le Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case CONNETTORE_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Connettore): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case CONNETTORE_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nel connettore per le Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case CONNETTORE_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Connettore): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTENTICAZIONE_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autenticazione nel Controllo degli Accessi delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTENTICAZIONE_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Controllo degli Accessi - Autenticazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTENTICAZIONE_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autenticazione nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTENTICAZIONE_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Controllo degli Accessi - Autenticazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autorizzazione nel Controllo degli Accessi delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Controllo degli Accessi - Autorizzazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autorizzazione nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Controllo degli Accessi - Autorizzazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_CONTENUTI_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autorizzazione dei contenuti nel Controllo degli Accessi delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_CONTENUTI_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Controllo degli Accessi - Autorizzazione dei Contenuti): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_CONTENUTI_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato come processo di autorizzazione dei contenuti nel Controllo degli Accessi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case AUTORIZZAZIONE_CONTENUTI_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Controllo degli Accessi - Autorizzazione dei Contenuti): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case CONTROLLO_TRAFFICO:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato in Policy di Rate Limiting: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case INTEGRAZIONE_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato per generare i metadati di integrazione nelle Opzioni Avanzate delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case INTEGRAZIONE_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Opzioni Avanzate - Metadata di Integrazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case INTEGRAZIONE_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato per generare i metadati di integrazione nelle Opzioni Avanzate delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case INTEGRAZIONE_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Opzioni Avanzate - Metadata di Integrazione): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case BEHAVIOUR_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nella configurazione dei connettori multipli come consegna personalizzata delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case BEHAVIOUR_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Connettori Multipli - Consegna Personalizzata): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ALLARMI_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato negli Allarmi delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ALLARMI_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Allarmi): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ALLARMI_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato negli Allarmi delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ALLARMI_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Allarmi): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ALLARMI:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato negli Allarmi definiti nella configurazione generale: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case MESSAGE_HANDLER_MAPPING_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nei Message Handlers delle Erogazioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case MESSAGE_HANDLER_PA:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Inbound (Message Handlers): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case MESSAGE_HANDLER:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato nei Message Handlers: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case MESSAGE_HANDLER_MAPPING_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nei Message Handlers delle Fruizioni: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case MESSAGE_HANDLER_PD:
if ( messages!=null && !messages.isEmpty()) {
msg.append("utilizzato nelle Porte Outbound (Message Handlers): " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case SERVICE_HANDLER:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato nei Service Handlers: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case TOKEN_DYNAMIC_DISCOVERY_PA:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato nelle Token Policy di Validazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case TOKEN_PA:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato nelle Token Policy di Validazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case TOKEN_NEGOZIAZIONE_PA:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato nelle Token Policy di Negoziazione: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
case ATTRIBUTE_AUTHORITY_PA:
if ( messages!=null && !messages.isEmpty() ) {
msg.append("utilizzato negli Attribute Authority: " + DBOggettiInUsoUtils.formatList(messages,separator) + separator);
}
break;
default:
msg.append("utilizzato in oggetto non codificato ("+key+")"+separator);
break;
}
}// chiudo for
return msg.toString();
}
private static String formatMessageHandlerFromTipologia(String tipologia) {
if(tipologia.endsWith(CostantiDB.HANDLER_REQUEST_SUFFIX)) {
String tipologiaWS = tipologia.substring(0, tipologia.indexOf(CostantiDB.HANDLER_REQUEST_SUFFIX));
String template = "Fase [{0}] degli Handler di Richiesta";
return MessageFormat.format(template, tipologiaWS);
} else {
String tipologiaWS = tipologia.substring(0, tipologia.indexOf(CostantiDB.HANDLER_RESPONSE_SUFFIX));
String template = "Fase [{0}] degli Handler di Risposta";
return MessageFormat.format(template, tipologiaWS);
}
}
private static String formatServiceHandlerFromTipologia(String tipologia) {
/** String tipologiaWS = tipologia.substring(0, tipologia.indexOf(CostantiDB.HANDLER_REQUEST_SUFFIX));*/
return MessageFormat.format("Fase [{0}]", tipologia);
}
}