package gr.ntua.ivml.mint.concurrent.queue.producers;
import gr.ntua.ivml.mint.util.Config;
import java.io.IOException;
import java.util.HashMap;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.AMQP.BasicProperties.Builder;
public class PublicationItemProducer {
private String queueHost;
private String queueName;
private ConnectionFactory factory;
private Connection connection;
private Channel channel;
private Builder builder;
private BasicProperties pros;
private HashMap<String, Object> header;
//private OAIRepositoryManager manager;
private String reportId;
//the DocumentId of the report as it is retrieved by the RPCPRoducer.initiReport() method.
public PublicationItemProducer(String reportId){
queueHost = gr.ntua.ivml.mint.util.Config.get("oai.queue.host");
queueName = gr.ntua.ivml.mint.util.Config.get("oai.queue.name");
this.reportId = reportId;
//manager = new OAIRepositoryManager();
builder = new Builder();
factory = new ConnectionFactory();
factory.setHost(queueHost);
try {
connection = factory.newConnection();
channel = connection.createChannel();
channel.queueDeclare(queueName, true, false, false, null);
} catch (IOException e) {
e.printStackTrace();
}
}
/*public void initReport(String orgName, String publicationDate, String publicationId){
try {
this.reportId = manager.initReport(orgName.replace(" ", "_"), "add", publicationDate, publicationId);
} catch (ParseException e) {
e.printStackTrace();
}
}*/
//public void resetSet(String orgName){this.manager.deleteDocumentsByOrg(orgName.replace(" ", "_"));}
public void sendItem(String xml, String orgName, String publicationDate){
generateHeader(orgName, publicationDate);
try {
channel.basicPublish( "", queueName,
pros,
xml.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
private void generateHeader(String orgName, String publicationDate){
header = new HashMap<String, Object>();
header.put("orgName", orgName.replace(" ", "_"));
//header.put("isLastItem", isLastItem);
header.put("publicationDate", publicationDate);
header.put("prefix", Config.get("oai.prefix"));
header.put("reportId", this.reportId);
builder.headers(header);
pros = builder.build();
}
public void close(){
try {
channel.close();
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}