package nl.nn.adapterframework.testtool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nl.nn.adapterframework.core.IListener;
import nl.nn.adapterframework.core.IMessageHandler;
import nl.nn.adapterframework.core.ListenerException;
import nl.nn.adapterframework.util.LogUtil;
import org.apache.log4j.Logger;
/**
* Message handler for JavaListener and WebServiceListener.
*
* @author Jaco de Groot
*/
public class ListenerMessageHandler implements IMessageHandler {
private static Logger log = LogUtil.getLogger(ListenerMessageHandler.class);
private List requestMessages = new ArrayList();
private List responseMessages = new ArrayList();
private long requestTimeOut = TestTool.DEFAULT_TIMEOUT;
private long responseTimeOut = TestTool.DEFAULT_TIMEOUT;
public String processRequest(IListener origin, String correlationId, String message, Map context) throws ListenerException {
ListenerMessage listenerMessage = new ListenerMessage(correlationId, message, context);
putRequestMessage(listenerMessage);
String response = null;
listenerMessage = getResponseMessage();
if (listenerMessage != null) {
response = listenerMessage.getMessage();
}
return response;
}
public void putRequestMessage(ListenerMessage listenerMessage) {
if (listenerMessage != null) {
synchronized(requestMessages) {
requestMessages.add(listenerMessage);
}
} else {
log.error("listenerMessage is null");
}
}
public ListenerMessage getRequestMessage() {
return getRequestMessage(requestTimeOut);
}
public ListenerMessage getRequestMessage(long timeOut) {
ListenerMessage listenerMessage = null;
long startTime = System.currentTimeMillis();
while (listenerMessage == null && System.currentTimeMillis() < startTime + timeOut) {
synchronized(requestMessages) {
if (requestMessages.size() > 0) {
listenerMessage = (ListenerMessage)requestMessages.remove(0);
}
}
if (listenerMessage == null) {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
}
}
}
return listenerMessage;
}
public void putResponseMessage(ListenerMessage listenerMessage) {
if (listenerMessage != null) {
synchronized (responseMessages) {
responseMessages.add(listenerMessage);
}
} else {
log.error("listenerMessage is null");
}
}
public ListenerMessage getResponseMessage() {
return getResponseMessage(responseTimeOut);
}
public ListenerMessage getResponseMessage(long timeOut) {
ListenerMessage listenerMessage = null;
long startTime = System.currentTimeMillis();
while (listenerMessage == null && System.currentTimeMillis() < startTime + timeOut) {
synchronized(responseMessages) {
if (responseMessages.size() > 0) {
listenerMessage = (ListenerMessage)responseMessages.remove(0);
}
}
if (responseMessages == null) {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
}
}
}
return listenerMessage;
}
public void setRequestTimeOut(long requestTimeOut) {
this.requestTimeOut = requestTimeOut;
}
public void setResponseTimeOut(long responseTimeOut) {
this.responseTimeOut = responseTimeOut;
}
public void processRawMessage(IListener origin, Object rawMessage, Map threadContext) throws ListenerException {
String correlationId = origin.getIdFromRawMessage(rawMessage, threadContext);
String message = origin.getStringFromRawMessage(rawMessage, threadContext);
processRequest(origin, correlationId, message, threadContext);
}
public void processRawMessage(IListener origin, Object rawMessage, Map threadContext, long waitingTime) throws ListenerException {
processRawMessage(origin, rawMessage, threadContext);
}
public void processRawMessage(IListener origin, Object rawMessage) throws ListenerException {
processRawMessage(origin, rawMessage, null);
}
public String processRequest(IListener origin, String message) throws ListenerException {
return processRequest(origin, null, message, null);
}
public String processRequest(IListener origin, String correlationId, String message) throws ListenerException {
return processRequest(origin, correlationId, message, null);
}
public String processRequest(IListener origin, String correlationId, String message, HashMap context) throws ListenerException {
return processRequest(origin, correlationId, message, (Map)context);
}
public String processRequest(IListener origin, String correlationId, String message, Map context, long waitingTime) throws ListenerException {
return processRequest(origin, correlationId, message, context);
}
public String formatException(String origin, String arg1, String arg2, Throwable arg3) {
log.error("formatException(String arg0, String arg1, String arg2, Throwable arg3) not implemented");
return null;
}
}