ControlStationJMSCore.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.web.ctrlstat.core;

import java.util.List;
import java.util.Map;
import java.util.Properties;

import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.InitialContext;

import org.openspcoop2.web.ctrlstat.costanti.OperationsParameter;
import org.openspcoop2.web.ctrlstat.costanti.TipoOggettoDaSmistare;
import org.openspcoop2.web.lib.queue.costanti.Operazione;

/**
 * ControlStationJMSCore
 * 
 * @author Andrea Poli (apoli@link.it)
 * @author $Author$
 * @version $Rev$, $Date$
 * 
 */
public class ControlStationJMSCore {

	/**
	 * Inoltra l'operazione nella coda dello smistatore in caso di errori lancia
	 * un'eccezione che verra' gestita dal chiamante
	 * 
	 * @param operazioneDaSmistare
	 * @throws Exception
	 */
	public static void setDati(OperazioneDaSmistare operazioneDaSmistare,String smistatoreQueue,String cfName,Properties cfProp) throws Exception {

		QueueConnection qc = null;
		QueueSession qs = null;
		QueueSender sender = null;
		try{

			// Estraggo i dati dall'Operazione da smistare, che tanto mi servono
			// per settare la StringProperty
			long idTable = operazioneDaSmistare.getIDTable();
			Operazione operazione = operazioneDaSmistare.getOperazione();
			String pdd = operazioneDaSmistare.getPdd();
			TipoOggettoDaSmistare oggettoDaSmistare = operazioneDaSmistare.getOggetto();
	
			ControlStationCore.log.debug("[ControlStationCore::setDati] id[" + idTable + "] operazione[" + operazione.name() + 
					"] pdd[" + pdd + "] oggetto[" + oggettoDaSmistare.name() + "]");
	
			InitialContext ctx = new InitialContext(cfProp);
			Queue queue = (Queue) ctx.lookup(smistatoreQueue);
			QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup(cfName);
			qc = qcf.createQueueConnection();
			qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			sender = qs.createSender(queue);
			ctx.close();
	
			// Create a message
			ObjectMessage message = qs.createObjectMessage(operazioneDaSmistare);
	
			// Preparo la StringProperty, che serve per il filtro
			StringBuilder idOperazione = new StringBuilder();
			idOperazione.append("[" + operazione.name() + "]");
			idOperazione.append("[" + oggettoDaSmistare.name() + "]");
	
			Map<OperationsParameter, List<String>> params = operazioneDaSmistare.getParameters();
			if(params!=null && !params.isEmpty()) {
				// aggiungo informazioni il filtro
				for (OperationsParameter key : params.keySet()) {
					List<String> values = params.get(key);
					for (String value : values) {
						idOperazione.append("[" + value + "]");
					}
		
				}
			}
	
			ControlStationCore.log.debug("[ControlStationCore::setDati] id=[" + idOperazione.toString() + "]");
			message.setStringProperty("ID", idOperazione.toString());
	
			// send a message
			sender.send(message);

		}finally {
			try {
				if(sender!=null) {
					sender.close();
				}
			}catch(Throwable t) {
				// ignore
			}
			try {
				if(qs!=null) {
					qs.close();
				}
			}catch(Throwable t) {
				// ignore
			}
			try {
				if(qc!=null) {
					qc.close();
				}
			}catch(Throwable t) {
				// ignore
			}
		}

	}
	
}