package org.atricore.idbus.capabilities.oauth2.main.binding.logging;
import org.apache.camel.Message;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.atricore.idbus.common.oauth._2_0.protocol.OAuthRequestAbstractType;
import org.atricore.idbus.common.oauth._2_0.protocol.OAuthResponseAbstractType;
import org.atricore.idbus.kernel.main.mediation.camel.component.binding.CamelMediationMessage;
import org.atricore.idbus.kernel.main.mediation.camel.logging.LogMessageBuilder;
import org.atricore.idbus.capabilities.oauth2.common.util.XmlUtils;
/**
* @author <a href=mailto:sgonzalez@atricore.org>Sebastian Gonzalez Oyuela</a>
*/
public class OAuth2LogMessageBuilder implements LogMessageBuilder {
private static final Log logger = LogFactory.getLog(OAuth2LogMessageBuilder.class);
public boolean canHandle(Message message) {
if (!(message instanceof CamelMediationMessage))
return false;
CamelMediationMessage oauthMsg = (CamelMediationMessage) message;
if (oauthMsg.getMessage() == null) {
logger.trace("No message found in mediation message : " + oauthMsg.getMessageId());
return false;
}
Object content = oauthMsg.getMessage().getContent();
if (content == null) {
logger.trace("No message content found in mediation message : " + oauthMsg.getMessageId());
return false;
}
if (content instanceof OAuthRequestAbstractType) {
return true;
} else if (content instanceof OAuthResponseAbstractType) {
return true;
}
return false;
}
public String getType() {
return "oauth2";
}
public String buildLogMessage(Message message) {
try {
StringBuffer logMsg = new StringBuffer();
CamelMediationMessage oauthMsg = (CamelMediationMessage) message;
if (oauthMsg.getMessage() == null) {
logger.warn("No message found in mediation message : " + oauthMsg.getMessageId());
return null;
}
Object content = oauthMsg.getMessage().getContent();
if (content instanceof OAuthRequestAbstractType) {
logMsg.append(XmlUtils.marshalOAuth2Request((OAuthRequestAbstractType) content, false));
} else if (content instanceof OAuthResponseAbstractType) {
logMsg.append(XmlUtils.marshalOAuth2Response((OAuthResponseAbstractType) content, false));
} else if (content == null) {
logger.debug("No Message content");
} else {
logger.warn("Unknown Message content " + content);
}
return logMsg.toString();
} catch (Exception e) {
logger.error("Cannot generate mediation log message: " + e.getMessage(), e);
return null;
}
}
}