package org.wso2.carbon.business.messaging.hl7.store;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.Message;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.message.MessageProducer;
import org.wso2.carbon.business.messaging.hl7.common.HL7Constants;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.SQLException;
public class JDBCProducer implements MessageProducer {
private static final Log logger = LogFactory.getLog(JDBCProducer.class.getName());
private String id;
private boolean isInitialized = false;
private JDBCStore store;
public JDBCProducer(JDBCStore store) {
if (store == null) {
logger.error("Cannot initialize.");
return;
}
this.store = store;
this.isInitialized = true;
}
@Override
public boolean storeMessage(MessageContext messageContext) {
try {
Message hl7Message = (Message) ((Axis2MessageContext) messageContext).
getAxis2MessageContext().getProperty(HL7Constants.HL7_MESSAGE_OBJECT);
CallableStatement callableStatement = store.getConnection().prepareCall(
JDBCUtils.setMessage(store.getName(), messageContext.getMessageID(), messageContext.getEnvelope().toString()));
callableStatement.setString(1, messageContext.getMessageID());
callableStatement.setString(2, hl7Message.encode());
callableStatement.executeUpdate();
return true;
} catch (SQLException e) {
logger.error("Could not store message in HL7 store: '" + store.getName() + "'. " + e.getMessage());
} catch (HL7Exception e) {
logger.error("Could not store message in HL7 store: '" + store.getName() + "'. " + e.getMessage());
}
return false;
}
@Override
public boolean cleanup() {
return false;
}
@Override
public void setId(int id) {
this.id = "[" + store.getName() + "-P-" + id + "]";
}
@Override
public String getId() {
return getIdAsString();
}
private String getIdAsString() {
if (this.id == null) {
return "[unknown-producer]";
}
return this.id;
}
}