Select Git revision
Forked from
orestis.malaspin / math_tech_info
Source project has a limited visibility.
EventService.java 7.18 KiB
package ch.hepia.event;
import java.util.*;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.lang.model.util.ElementScanner6;
import org.apache.activemq.ActiveMQConnectionFactory;
public class EventService{
private List<Event> events;
private static int ackMode;
private static String clientQueueName;
private boolean transacted = false;
private Optional<Session> maybeSession;
private Optional<MessageProducer> maybeProducer;
static {
clientQueueName = "client.messages";
ackMode = Session.AUTO_ACKNOWLEDGE;
}
public EventService(final String ipBroker){
this.events = new ArrayList<>();
final String brokerUrl = "tcp://" + ipBroker + ":61616";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);
try {
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(transacted, ackMode);
maybeSession = Optional.of(session);
Destination mainTopic = session.createTopic(clientQueueName);
//Setup a message producer to send message to the queue the server is consuming from
MessageProducer producer = session.createProducer(mainTopic);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
maybeProducer = Optional.of(producer);
MessageConsumer responseConsumer = session.createConsumer(mainTopic);
responseConsumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
ObjectMessage objMessage = (ObjectMessage) message;
Object obj = objMessage.getObject();
//------------------------------------------
if (obj instanceof EventAccountCreated){
add((EventAccountCreated) obj);
}
//------------------------------------------
if (obj instanceof EventAccountCredited){
add((EventAccountCredited) obj);
}
//------------------------------------------
if (obj instanceof EventAccountDoesntExist){
add((EventAccountDoesntExist) obj);
}
//------------------------------------------
if (obj instanceof EventAddProductQuantity){
add((EventAddProductQuantity) obj);
}
//------------------------------------------
if (obj instanceof EventCreateAccount){
add((EventCreateAccount) obj);
}
//------------------------------------------
if (obj instanceof EventCreateProduct){
add((EventCreateProduct) obj);
}
//------------------------------------------
if (obj instanceof EventCreditAccepted){
add((EventCreditAccepted) obj);
}
//------------------------------------------
if (obj instanceof EventCreditAnAccount){
add((EventCreditAnAccount) obj);
}
//------------------------------------------
if (obj instanceof EventCreditRefused){
add((EventCreditRefused) obj);
}
//------------------------------------------
if (obj instanceof EventCreditWithdrawn){
add((EventCreditWithdrawn) obj);
}
//------------------------------------------
if (obj instanceof EventOrderCancelled){
add((EventOrderCancelled) obj);
}
//------------------------------------------
if (obj instanceof EventOrderCreated){
add((EventOrderCreated) obj);
}
//------------------------------------------
if (obj instanceof EventOrderPlaced){
add((EventOrderPlaced) obj);
}
//------------------------------------------
if (obj instanceof EventOrderPrepared){
add((EventOrderPrepared) obj);
}
//------------------------------------------
if (obj instanceof EventOrderSent){
add((EventOrderSent) obj);
}
//------------------------------------------
if (obj instanceof EventProductCreated){
add((EventProductCreated) obj);
}
//------------------------------------------
if (obj instanceof EventProductDoesntExist){
add((EventProductDoesntExist) obj);
}
//------------------------------------------
if (obj instanceof EventProductOutOfStock){
add((EventProductOutOfStock) obj);
}
//------------------------------------------
if (obj instanceof EventProductQuantityAdded){
add((EventProductQuantityAdded) obj);
}
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
} catch (JMSException e) {
e.printStackTrace();
}
}
private void add(Event e){
this.events.add(e);
}
public void log(int id){
this.events.stream().filter(e -> e.id() == id).sorted((e1,e2) -> {
if(e1.date().before(e2.date()))
return -1;
else if(e1.date().after(e2.date()))
return 1;
else
return 0;
}).forEach(System.out::println);
}
}