PluginsDriverUtils.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.core.plugins.utils;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import org.openspcoop2.core.commons.Filtri;
import org.openspcoop2.core.commons.ISearch;
import org.openspcoop2.core.commons.Liste;
import org.openspcoop2.core.commons.SearchUtils;
import org.openspcoop2.core.config.constants.PluginCostanti;
import org.openspcoop2.core.plugins.IdPlugin;
import org.openspcoop2.core.plugins.Plugin;
import org.openspcoop2.core.plugins.constants.TipoPlugin;
import org.openspcoop2.core.plugins.dao.IPluginService;
import org.openspcoop2.core.plugins.dao.IPluginServiceSearch;
import org.openspcoop2.core.plugins.dao.jdbc.JDBCServiceManager;
import org.openspcoop2.core.plugins.dao.jdbc.converter.PluginFieldConverter;
import org.openspcoop2.generic_project.beans.AliasTableComplexField;
import org.openspcoop2.generic_project.beans.ComplexField;
import org.openspcoop2.generic_project.beans.CustomField;
import org.openspcoop2.generic_project.beans.IAliasTableField;
import org.openspcoop2.generic_project.beans.NonNegativeNumber;
import org.openspcoop2.generic_project.exception.NotFoundException;
import org.openspcoop2.generic_project.exception.ServiceException;
import org.openspcoop2.generic_project.expression.IExpression;
import org.openspcoop2.generic_project.expression.IPaginatedExpression;
import org.openspcoop2.generic_project.expression.LikeMode;
import org.openspcoop2.generic_project.expression.SortOrder;
import org.openspcoop2.generic_project.utils.ServiceManagerProperties;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.slf4j.Logger;
/**
* PluginsDriverUtils
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class PluginsDriverUtils {
public static int numeroPluginsClassiList(Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "numeroPluginsClassiList";
int val = 0;
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginServiceSearch pluginServiceSearch = jdbcServiceManagerMonitorEngineConfig.getPluginServiceSearch();
IExpression expr = pluginServiceSearch.newExpression();
NonNegativeNumber count = pluginServiceSearch.count(expr);
if(count!= null)
val = (int) count.longValue();
return val;
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static List<Plugin> pluginsClassiList(ISearch ricerca, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "pluginsClassiList";
int idLista = Liste.CONFIGURAZIONE_PLUGINS_CLASSI;
int offset;
int limit;
String search;
limit = ricerca.getPageSize(idLista);
offset = ricerca.getIndexIniziale(idLista);
search = (org.openspcoop2.core.constants.Costanti.SESSION_ATTRIBUTE_VALUE_RICERCA_UNDEFINED.equals(ricerca.getSearchString(idLista)) ? "" : ricerca.getSearchString(idLista));
String filterTipoPlugin = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_TIPO_PLUGIN_CLASSI);
String filterStato = SearchUtils.getFilter(ricerca, idLista, Filtri.FILTRO_STATO);
log.debug("search : " + search);
log.debug("filterTipoPlugin : " + filterTipoPlugin);
log.debug("filterStato : " + filterStato);
List<Plugin> lista = new ArrayList<Plugin>();
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginServiceSearch pluginServiceSearch = jdbcServiceManagerMonitorEngineConfig.getPluginServiceSearch();
IExpression expr = pluginServiceSearch.newExpression();
boolean addAnd = false;
if (!search.equals("")) {
IExpression exprLabel = pluginServiceSearch.newExpression();
exprLabel.ilike(Plugin.model().LABEL, search, LikeMode.ANYWHERE);
IExpression exprTipo = pluginServiceSearch.newExpression();
exprTipo.ilike(Plugin.model().TIPO, search, LikeMode.ANYWHERE);
expr.or(exprLabel, exprTipo);
addAnd = true;
}
if(filterStato!=null && !filterStato.equals("")) {
if(Filtri.FILTRO_STATO_VALORE_ABILITATO.equals(filterStato) || Filtri.FILTRO_STATO_VALORE_DISABILITATO.equals(filterStato)) {
if(addAnd) {
expr.and();
}
addAnd = true;
expr.equals(Plugin.model().STATO, Filtri.FILTRO_STATO_VALORE_ABILITATO.equals(filterStato));
}
}
if(!filterTipoPlugin.equals("")) {
if(addAnd) {
expr.and();
}
expr.equals(Plugin.model().TIPO_PLUGIN, filterTipoPlugin);
TipoPlugin tipoPlugin = TipoPlugin.toEnumConstant(filterTipoPlugin);
switch (tipoPlugin) {
case AUTENTICAZIONE:
case AUTORIZZAZIONE:
case AUTORIZZAZIONE_CONTENUTI:
case INTEGRAZIONE:
String filtroRuolo = SearchUtils.getFilter(ricerca, idLista, PluginCostanti.FILTRO_RUOLO_NOME);
log.debug("filtroRuolo : " + filtroRuolo);
if(!filtroRuolo.equals("")) {
expr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, PluginCostanti.FILTRO_RUOLO_NOME);
expr.and();
IExpression exprOr = pluginServiceSearch.newExpression();
exprOr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, filtroRuolo);
exprOr.or();
exprOr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, PluginCostanti.FILTRO_RUOLO_VALORE_ENTRAMBI);
expr.and(exprOr);
}
break;
case SERVICE_HANDLER:
String filtroShTipo = SearchUtils.getFilter(ricerca, idLista, PluginCostanti.FILTRO_SERVICE_HANDLER_NOME);
log.debug("filtroShTipo : " + filtroShTipo);
if(!filtroShTipo.equals("")) {
expr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, PluginCostanti.FILTRO_SERVICE_HANDLER_NOME)
.and().equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, filtroShTipo);
}
break;
case MESSAGE_HANDLER:
// message handler e ruolo messa ge handler
String filtroMhRuolo = SearchUtils.getFilter(ricerca, idLista, PluginCostanti.FILTRO_RUOLO_MESSAGE_HANDLER_NOME);
log.debug("filtroMhRuolo : " + filtroMhRuolo);
boolean ruoloDefined = !filtroMhRuolo.equals("");
String filtroMhTipo = SearchUtils.getFilter(ricerca, idLista, PluginCostanti.FILTRO_FASE_MESSAGE_HANDLER_NOME);
log.debug("filtroMhTipo : " + filtroMhTipo);
boolean tipoDefined = !filtroMhTipo.equals("");
if(tipoDefined && ruoloDefined) {
IAliasTableField ruolo_name = new AliasTableComplexField((ComplexField)Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, FilterUtils.getNextAliasPluginsTable());
IAliasTableField ruolo_valore = new AliasTableComplexField((ComplexField)Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, ruolo_name.getAliasTable());
IAliasTableField tipo_name = new AliasTableComplexField((ComplexField)Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, FilterUtils.getNextAliasPluginsTable());
IAliasTableField tipo_valore = new AliasTableComplexField((ComplexField)Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, tipo_name.getAliasTable());
expr.
and().
equals(ruolo_name, PluginCostanti.FILTRO_RUOLO_MESSAGE_HANDLER_NOME).
equals(ruolo_valore, filtroMhRuolo).
equals(tipo_name, PluginCostanti.FILTRO_FASE_MESSAGE_HANDLER_NOME).
equals(tipo_valore, filtroMhTipo);
}
else if(tipoDefined) {
expr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, PluginCostanti.FILTRO_FASE_MESSAGE_HANDLER_NOME)
.and().equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, filtroMhTipo);
}
else if(ruoloDefined) {
expr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, PluginCostanti.FILTRO_RUOLO_MESSAGE_HANDLER_NOME)
.and().equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, filtroMhRuolo);
}
break;
case ALLARME:
String filtroApplicabilita = SearchUtils.getFilter(ricerca, idLista, PluginCostanti.FILTRO_APPLICABILITA_NOME);
log.debug("filtroApplicabilita : " + filtroApplicabilita);
if(!filtroApplicabilita.equals("")) {
expr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.NOME, PluginCostanti.FILTRO_APPLICABILITA_NOME);
expr.and();
IExpression exprOr = pluginServiceSearch.newExpression();
exprOr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, filtroApplicabilita);
exprOr.or();
exprOr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, PluginCostanti.FILTRO_APPLICABILITA_VALORE_QUALSIASI);
if(PluginCostanti.FILTRO_APPLICABILITA_VALORE_EROGAZIONE.equals(filtroApplicabilita) || PluginCostanti.FILTRO_APPLICABILITA_VALORE_FRUIZIONE.equals(filtroApplicabilita)) {
exprOr.equals(Plugin.model().PLUGIN_PROPRIETA_COMPATIBILITA.VALORE, PluginCostanti.FILTRO_APPLICABILITA_VALORE_IMPLEMENTAZIONE_API);
}
expr.and(exprOr);
}
break;
case BEHAVIOUR:
case CONNETTORE:
case RATE_LIMITING:
case RICERCA:
case STATISTICA:
case TRANSAZIONE:
case TOKEN_DYNAMIC_DISCOVERY:
case TOKEN_VALIDAZIONE:
case TOKEN_NEGOZIAZIONE:
case ATTRIBUTE_AUTHORITY:
break;
}
}
NonNegativeNumber count = pluginServiceSearch.count(expr);
ricerca.setNumEntries(idLista,(int) count.longValue());
// ricavo le entries
if (limit == 0) // con limit
limit = ISQLQueryObject.LIMIT_DEFAULT_VALUE;
IPaginatedExpression pagExpr = pluginServiceSearch.toPaginatedExpression(expr);
pagExpr.limit(limit).offset(offset);
pagExpr.addOrder(Plugin.model().TIPO_PLUGIN, SortOrder.ASC);
pagExpr.addOrder(Plugin.model().LABEL, SortOrder.ASC);
lista = pluginServiceSearch.findAll(pagExpr);
return lista;
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static void createPluginClassi(Plugin plugin, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "createPluginClassi";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginService pluginService = jdbcServiceManagerMonitorEngineConfig.getPluginService();
pluginService.create(plugin);
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static void updatePluginClassi(Plugin plugin, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "updatePluginClassi";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginService pluginService = jdbcServiceManagerMonitorEngineConfig.getPluginService();
pluginService.update(plugin.getOldIdPlugin(), plugin);
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static void deletePluginClassi(Plugin plugin, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "deletePluginClassi";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginService pluginService = jdbcServiceManagerMonitorEngineConfig.getPluginService();
pluginService.delete(plugin);
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static boolean existsPlugin(TipoPlugin tipoPlugin, String tipo, String label, String className, Connection con, Logger log, String tipoDB) throws ServiceException {
return _existsPlugin(tipoPlugin, tipo, label, className, con, log, tipoDB);
}
public static boolean existsPluginConTipo(TipoPlugin tipoPlugin, String tipo, Connection con, Logger log, String tipoDB) throws ServiceException {
return _existsPlugin(tipoPlugin, tipo, null, null, con, log, tipoDB);
}
public static boolean existsPluginConLabel(TipoPlugin tipoPlugin, String label, Connection con, Logger log, String tipoDB) throws ServiceException {
return _existsPlugin(tipoPlugin, null, label, null, con, log, tipoDB);
}
public static boolean existsPluginConClassName(TipoPlugin tipoPlugin, String className, Connection con, Logger log, String tipoDB) throws ServiceException {
return _existsPlugin(tipoPlugin, null, null, className, con, log, tipoDB);
}
private static boolean _existsPlugin(TipoPlugin tipoPlugin, String tipo, String label, String className, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "existsPlugin";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginServiceSearch pluginServiceSearch = jdbcServiceManagerMonitorEngineConfig.getPluginServiceSearch();
IExpression expr = pluginServiceSearch.newExpression();
List<IExpression> list = new ArrayList<IExpression>();
if(tipo!=null) {
IExpression tipoExp = pluginServiceSearch.newExpression();
tipoExp.equals(Plugin.model().TIPO_PLUGIN, tipoPlugin.toString()).and().equals(Plugin.model().TIPO, tipo);
list.add(tipoExp);
}
if(label!=null) {
IExpression labelExp = pluginServiceSearch.newExpression();
labelExp.equals(Plugin.model().TIPO_PLUGIN, tipoPlugin.toString()).and().equals(Plugin.model().LABEL, label);
list.add(labelExp);
}
if(className!=null) {
IExpression classExp = pluginServiceSearch.newExpression();
classExp.equals(Plugin.model().TIPO_PLUGIN, tipoPlugin.toString()).and().equals(Plugin.model().CLASS_NAME, className);
list.add(classExp);
}
expr.or(list.toArray(new IExpression[list.size()]));
NonNegativeNumber count = pluginServiceSearch.count(expr);
return count.longValue() > 0;
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static Plugin getPlugin(long idPlugin, Connection con, Logger log, String tipoDB) throws ServiceException {
String nomeMetodo = "getPlugin";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginServiceSearch pluginServiceSearch = jdbcServiceManagerMonitorEngineConfig.getPluginServiceSearch();
IExpression expr = pluginServiceSearch.newExpression();
PluginFieldConverter converter = new PluginFieldConverter(tipoDB);
expr.equals(new CustomField("id", Long.class, "id", converter.toTable(Plugin.model())), idPlugin);
Plugin plugin = pluginServiceSearch.find(expr);
IdPlugin idPluginObj = pluginServiceSearch.convertToId(plugin);
plugin.setOldIdPlugin(idPluginObj);
return plugin;
} catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
public static Plugin getPlugin(TipoPlugin tipoPlugin, String tipo, boolean throwNotFound, Connection con, Logger log, String tipoDB) throws ServiceException,NotFoundException {
return getPlugin(tipoPlugin.getValue(), tipo, throwNotFound, con, log, tipoDB);
}
public static Plugin getPlugin(String tipoPlugin, String tipo, boolean throwNotFound, Connection con, Logger log, String tipoDB) throws ServiceException,NotFoundException {
String nomeMetodo = "getPlugin";
try {
ServiceManagerProperties properties = new ServiceManagerProperties();
properties.setDatabaseType(tipoDB);
properties.setShowSql(true);
JDBCServiceManager jdbcServiceManagerMonitorEngineConfig = new JDBCServiceManager(con, properties, log);
IPluginServiceSearch pluginServiceSearch = jdbcServiceManagerMonitorEngineConfig.getPluginServiceSearch();
IdPlugin idPlugin = new IdPlugin();
idPlugin.setTipoPlugin(tipoPlugin);
idPlugin.setTipo(tipo);
Plugin plugin = pluginServiceSearch.get(idPlugin);
if(plugin==null) {
throw new NotFoundException("NotFound");
}
IdPlugin idPluginObj = pluginServiceSearch.convertToId(plugin);
plugin.setOldIdPlugin(idPluginObj);
return plugin;
}
catch (NotFoundException notFound) {
if(throwNotFound) {
throw new NotFoundException("[" + nomeMetodo + "] Errore : " + notFound.getMessage(),notFound);
}
return null;
}
catch (Exception qe) {
throw new ServiceException("[" + nomeMetodo + "] Errore : " + qe.getMessage(),qe);
}
}
}