package org.apache.synapse.transport.http.conn;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.util.Observable;
/**
* This class is to hold debug information for wire level debug in transport level
*/
public class SynapseDebugInfoHolder extends Observable {
private final Log log = LogFactory.getLog(SynapseDebugInfoHolder.class);
public static final String SYNAPSE_WIRE_LOG_HOLDER_PROPERTY = "synapse.wire.log.holder";
public static final String SYNAPSE_WIRE_LOG_MEDIATOR_ID_PROPERTY = "synapse.wire.log.mediator.id";
public static final String DUMMY_MEDIATOR_ID = "{ \"dummyID\" : \"dummy\"}";
private boolean isDebuggerEnabled = false;
private static SynapseDebugInfoHolder debugInfoHolder;
/**
* Private constructor to make this singleton
*/
private SynapseDebugInfoHolder() {
}
/**
* get instance method which will return a single instance
*
* @return
*/
public static synchronized SynapseDebugInfoHolder getInstance() {
if (debugInfoHolder == null) {
debugInfoHolder = new SynapseDebugInfoHolder();
}
return debugInfoHolder;
}
public void setDebuggerEnabled(boolean isDebuggerEnabled) {
this.isDebuggerEnabled = isDebuggerEnabled;
}
public boolean isDebuggerEnabled() {
return isDebuggerEnabled;
}
/**
* This method will set the wirelog holder and will notify observers about that, so they can retrieve it
*
* @param wireLogHolder
*/
public synchronized void setWireLogHolder(SynapseWireLogHolder wireLogHolder) {
try {
//cloning the wirelog holder so that normal flow can continue after event being fired
SynapseWireLogHolder clonedHolder = wireLogHolder.deepClone();
wireLogHolder.clear();
setChanged();
notifyObservers(clonedHolder);
} catch (IOException e) {
log.debug("Error cloning the wirelog holder object - " + e.getMessage(), e);
} catch (ClassNotFoundException e) {
log.debug("Error cloning the wirelog holder object - " + e.getMessage(), e);
}
}
}