Skip to content
Snippets Groups Projects
Select Git revision
  • 304f079d9ed05cd350c17451f4ed5145ab6ca62a
  • master default protected
2 results

build.sbt

Blame
  • Forked from joel.cavat / scala2020
    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);
        }
    }