SondaFactory.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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.sonde;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Types;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import org.openspcoop2.utils.TipiDatabase;
- import org.openspcoop2.utils.sql.ISQLQueryObject;
- import org.openspcoop2.utils.sql.SQLObjectFactory;
- import org.openspcoop2.utils.sql.SQLQueryObjectException;
- /**
- * Classe di implementazione della Factory per le Sonde
- *
- *
- * @author Bussu Giovanni (bussu@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class SondaFactory {
- /**
- * Aggiorna la configurazione della sonda identificata dal parametro nome
- * @param nome nome della sonda da aggiornare
- * @param warn soglia di warning da impostare
- * @param err soglia di error da impostare
- * @param connection connessione al database
- * @param tipoDatabase tipo di database
- * @throws Exception
- */
- public static void updateConfSonda(String nome, long warn, long err, Connection connection, TipiDatabase tipoDatabase) throws Exception {
- ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
- sqlQueryObject.addUpdateTable("sonde");
- sqlQueryObject.addUpdateField("soglia_warn", "?");
- sqlQueryObject.addUpdateField("soglia_error", "?");
- sqlQueryObject.addWhereCondition("nome = ?");
- String sql = sqlQueryObject.createSQLUpdate();
- PreparedStatement ps = connection.prepareStatement(sql);
- try {
- ps.setLong(1, warn);
- ps.setLong(2, err);
- ps.setString(3, nome);
- ps.executeUpdate();
- }finally {
- try {
- if(ps!=null) {
- ps.close();
- }
- }catch(Throwable t) {
- // ignore
- }
- }
- }
- /**
- * Aggiorna lo stato della sonda identificata dal parametro nome
- * @param nome nome della sonda da aggiornare
- * @param sonda parametri con cui aggiornare la sonda
- * @param connection connessione al database
- * @param tipoDatabase tipo di database
- * @throws SondaException
- */
- public static void updateStatoSonda(String nome, Sonda sonda, Connection connection, TipiDatabase tipoDatabase) throws SondaException {
- try {
- ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
- sqlQueryObject.addUpdateTable("sonde");
- sqlQueryObject.addUpdateField("data_ok", "?");
- sqlQueryObject.addUpdateField("data_warn", "?");
- sqlQueryObject.addUpdateField("data_error", "?");
- sqlQueryObject.addUpdateField("data_ultimo_check", "?");
- sqlQueryObject.addUpdateField("dati_check", "?");
- sqlQueryObject.addUpdateField("stato_ultimo_check", "?");
- sqlQueryObject.addWhereCondition("nome = ?");
- String sql = sqlQueryObject.createSQLUpdate();
- PreparedStatement ps = null;
- try {
- ps = connection.prepareStatement(sql);
- int i = 1;
- if(sonda.getParam().getDataOk()!= null) {
- ps.setTimestamp(i++, new java.sql.Timestamp(sonda.getParam().getDataOk().getTime()));
- } else {
- ps.setNull(i++, Types.TIMESTAMP);
- }
- if(sonda.getParam().getDataWarn()!= null) {
- ps.setTimestamp(i++, new java.sql.Timestamp(sonda.getParam().getDataWarn().getTime()));
- } else {
- ps.setNull(i++, Types.TIMESTAMP);
- }
- if(sonda.getParam().getDataError()!= null) {
- ps.setTimestamp(i++, new java.sql.Timestamp(sonda.getParam().getDataError().getTime()));
- } else {
- ps.setNull(i++, Types.TIMESTAMP);
- }
- ps.setTimestamp(i++, new java.sql.Timestamp(sonda.getParam().getDataUltimoCheck().getTime()));
- ps.setString(i++, sonda.getParam().marshallDatiCheck());
- ps.setInt(i++, sonda.getParam().getStatoUltimoCheck());
- ps.setString(i++, nome);
- ps.executeUpdate();
- } finally {
- if(ps != null) {
- try {ps.close();} catch(Exception e) {}
- }
- }
- } catch(Exception e) {
- throw new SondaException(e);
- }
- }
- /**
- * @param nome nome della sonda da recuperare
- * @param connection connessione al database
- * @param tipoDatabase tipo di database
- * @return la sonda identificata dal parametro nome
- * @throws SondaException
- */
- public static Sonda get(String nome, Connection connection, TipiDatabase tipoDatabase) throws SondaException {
- try {
- ISQLQueryObject sqlQueryObject = getSqlQueryObjectForGetSonda(tipoDatabase);
- sqlQueryObject.addWhereCondition("nome = ?");
- String sql = sqlQueryObject.createSQLQuery();
- PreparedStatement ps = null;
- ResultSet rs = null;
- try {
- ps = connection.prepareStatement(sql);
- ps.setString(1, nome);
- rs = ps.executeQuery();
- if(rs.next()) {
- return getSonda(rs);
- }
- } finally {
- if(rs != null) {
- try {rs.close();} catch(Exception e) {}
- }
- if(ps != null) {
- try {ps.close();} catch(Exception e) {}
- }
- }
- return null;
- } catch(Exception e) {
- throw new SondaException(e);
- }
- }
- /**
- * @param connection connessione al database
- * @param tipoDatabase tipo di database
- * @return la lista di tutte le sonde presenti nel db
- * @throws SondaException
- */
- public static List<Sonda> findAll(Connection connection, TipiDatabase tipoDatabase) throws SondaException {
- try {
- List<Sonda> sondaLst = new ArrayList<Sonda>();
- ISQLQueryObject sqlQueryObject = getSqlQueryObjectForGetSonda(tipoDatabase);
- String sql = sqlQueryObject.createSQLQuery();
- PreparedStatement ps = null;
- ResultSet rs = null;
- try {
- ps = connection.prepareStatement(sql);
- rs = ps.executeQuery();
- while(rs.next()) {
- Sonda sonda = getSonda(rs);
- sondaLst.add(sonda);
- }
- } finally {
- if(rs != null) {
- try {rs.close();} catch(Exception e) {}
- }
- if(ps != null) {
- try {ps.close();} catch(Exception e) {}
- }
- }
- return sondaLst;
- } catch(Exception e) {
- throw new SondaException(e);
- }
- }
- private static Sonda getSonda(ResultSet rs) throws SQLException,
- NoSuchMethodException, SondaException,
- InstantiationException, IllegalAccessException,
- InvocationTargetException {
- String nome = rs.getString("nome");
- String classe = rs.getString("classe");
- Long soglia_warn = rs.getLong("soglia_warn");
- Long soglia_error = rs.getLong("soglia_error");
- Date data_ok = rs.getTimestamp("data_ok");
- Date data_warn = rs.getTimestamp("data_warn");
- Date data_error = rs.getTimestamp("data_error");
- Date data_ultimo_check = rs.getTimestamp("data_ultimo_check");
- String dati_check = rs.getString("dati_check");
- Integer stato_ultimo_check = rs.getInt("stato_ultimo_check");
- Class<?> className = null;
- try {
- className = (Class<?>) Class.forName(classe);
- } catch(ClassNotFoundException e) {
- throw new SondaException("Classe di definizione della sonda ["+classe+"] non trovata");
- }
- if(!Sonda.class.isAssignableFrom(className)) {
- throw new SondaException("Classe di definizione della sonda ["+classe+"] deve essere un'estensione della classe ["+Sonda.class.getName()+"]");
- }
- Constructor<?> ctor = className.getDeclaredConstructor(ParametriSonda.class);
- ctor.setAccessible(true);
- ParametriSonda param = new ParametriSonda();
- param.setNome(nome);
- param.setDataUltimoCheck(data_ultimo_check);
- param.setDataError(data_error);
- param.setDataWarn(data_warn);
- param.setDataOk(data_ok);
- param.unmarshallDatiCheck(dati_check);
- param.setSogliaWarn(soglia_warn);
- param.setSogliaError(soglia_error);
- param.setStatoUltimoCheck(stato_ultimo_check);
- Sonda sonda = (Sonda)ctor.newInstance(param);
- return sonda;
- }
- private static ISQLQueryObject getSqlQueryObjectForGetSonda(TipiDatabase tipoDatabase) throws SQLQueryObjectException {
- ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(tipoDatabase);
- sqlQueryObject.addFromTable("sonde");
- sqlQueryObject.addSelectField("nome");
- sqlQueryObject.addSelectField("classe");
- sqlQueryObject.addSelectField("soglia_warn");
- sqlQueryObject.addSelectField("soglia_error");
- sqlQueryObject.addSelectField("data_ok");
- sqlQueryObject.addSelectField("data_warn");
- sqlQueryObject.addSelectField("data_error");
- sqlQueryObject.addSelectField("data_ultimo_check");
- sqlQueryObject.addSelectField("dati_check");
- sqlQueryObject.addSelectField("stato_ultimo_check");
- return sqlQueryObject;
- }
- }