All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.genexus.messaging.queue.SimpleMessageQueue Maven / Gradle / Ivy

package com.genexus.messaging.queue;

import com.genexus.*;
import com.genexus.diagnostics.core.ILogger;
import com.genexus.diagnostics.core.LogManager;
import com.genexus.messaging.queue.model.DeleteMessageResult;
import com.genexus.messaging.queue.model.MessageQueueOptions;
import com.genexus.messaging.queue.model.SendMessageResult;
import com.genexus.messaging.queue.model.SimpleQueueMessage;
import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage;
import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageOptions;
import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult;

import java.util.ArrayList;
import java.util.List;

public class SimpleMessageQueue {
	private IQueue queue;
	private static ILogger logger = LogManager.getLogger(SimpleMessageQueue.class);

	public SimpleMessageQueue() {

	}

	public SimpleMessageQueue(IQueue queueProvider) {
		queue = queueProvider;
	}

	void validQueue() throws Exception {
		if (queue == null) {
			logger.error("Queue was not instantiated.");
			throw new Exception("Queue was not instantiated.");
		}
	}

	public void clear(GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];
		errorMessages.clear();
		try {
			validQueue();
			success[0] = queue.purge();
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error("Could not clear queue", ex);
		}
		success[0] = false;
	}

	public short getQueueLength(GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];
		errorMessages.clear();
		short queueLength = 0;
		try {
			validQueue();
			queueLength = queue.getQueueLength().shortValue();
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error("Could not getQueueLength", ex);
		}
		return queueLength;
	}

	public SdtMessageResult sendMessage(SdtMessage sdtMessage, GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection messages = new GXBaseCollection<>();
		messages.add(sdtMessage);
		GXBaseCollection result = sendMessages(messages, new SdtMessageOptions(), errorMessagesArr, success);
		return ((result.size() == 1) ? result.item(1) : Convert.toSdtMessageResult(new SendMessageResult()));
	}

	public GXBaseCollection sendMessages(GXBaseCollection sdtMessages, SdtMessageOptions msgOptions, GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];
		List msgList = new ArrayList<>();
		GXBaseCollection listReturn = new GXBaseCollection<>();
		errorMessages.clear();

		for (SdtMessage m : sdtMessages) {
			msgList.add(Convert.toSimpleQueueMessage(m));
		}

		try {
			validQueue();
			List sendMessageResult = queue.sendMessages(msgList, Convert.toMessageQueueOptions(msgOptions));
			success[0] = true;
			for (SendMessageResult msgResult : sendMessageResult) {
				listReturn.add(Convert.toSdtMessageResult(msgResult));
			}
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error("Could not send queue message", ex);
		}

		return listReturn;
	}

	public GXBaseCollection getMessages(GXBaseCollection[] errorMessagesArr, boolean[] success) {
		return getMessages(null, errorMessagesArr, success);
	}

	public GXBaseCollection getMessages(SdtMessageOptions receiveOptions, GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];

		MessageQueueOptions mqOptions = (receiveOptions != null) ? Convert.toMessageQueueOptions(receiveOptions) : new MessageQueueOptions();
		List receivedMessages = queue.getMessages(mqOptions);
		GXBaseCollection receivedMessagesResult = new GXBaseCollection<>();
		try {
			validQueue();
			for (SimpleQueueMessage m : receivedMessages) {
				receivedMessagesResult.add(Convert.toSdtMessage(m));
			}
			success[0] = true;
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error(String.format("Could not get Messages from Queue"), ex);
		}
		return receivedMessagesResult;
	}

	public SdtMessageResult deleteMessage(SdtMessage msg, GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];
		errorMessages.clear();
		SdtMessageResult sdtDelete = new SdtMessageResult();
		if (msg == null || msg.getgxTv_SdtMessage_Messagehandleid().isEmpty()) {
			sdtDelete.setgxTv_SdtMessageResult_Messagestatus(DeleteMessageResult.FAILED);
			appendErrorMessage(errorMessages, 1, "Message HandledId property cannot be empty");
			return sdtDelete;
		}

		try {
			validQueue();
			DeleteMessageResult deletedMessage = queue.deleteMessage(msg.getgxTv_SdtMessage_Messagehandleid());
			sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId());
			sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId());
			sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus());
			success[0] = true;
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error(String.format("Could not delete Message '%s' from Queue", msg.getgxTv_SdtMessage_Messagehandleid()), ex);
		}
		return sdtDelete;
	}

	public GXBaseCollection deleteMessages(GXBaseCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) {
		GXBaseCollection errorMessages = errorMessagesArr[0];
		errorMessages.clear();
		try {
			validQueue();
			List handles = new ArrayList<>();
			for (SdtMessage msg : msgHandlesToDelete) {
				handles.add(msg.getgxTv_SdtMessage_Messagehandleid());
			}
			List deletedMessage = queue.deleteMessages(handles);
			success[0] = true;
			return Convert.toDeleteExternalMessageResultList(deletedMessage);
		} catch (Exception ex) {
			queueErrorMessagesSetup(ex, errorMessages);
			logger.error(String.format("Could not delete Messages from Queue "), ex);
		}
		return new GXBaseCollection();
	}

	protected void queueErrorMessagesSetup(Exception ex, GXBaseCollection messages) {
		if (messages != null && ex != null) {
			appendErrorMessage(messages, 1, ex.getMessage());
		}
	}

	private void appendErrorMessage(GXBaseCollection messages, int errorType, String errMessage) {
		SdtMessages_Message struct = new SdtMessages_Message();
		struct.setgxTv_SdtMessages_Message_Type((byte) errorType);
		struct.setgxTv_SdtMessages_Message_Description(errMessage);
		messages.add(struct);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy