From 7d137d7a1f60845ceeb696b67373af1cba46a893 Mon Sep 17 00:00:00 2001 From: Thierry Vuilleumier <thierry.vuilleumier@etu.hesge.ch> Date: Sun, 3 Feb 2019 23:06:31 +0100 Subject: [PATCH] add client for EventService and add log() method --- .../java/ch/hepia/event/EventService.java | 176 ++++++++++++++---- 1 file changed, 143 insertions(+), 33 deletions(-) diff --git a/services/src/main/java/ch/hepia/event/EventService.java b/services/src/main/java/ch/hepia/event/EventService.java index b40958e..e65242e 100644 --- a/services/src/main/java/ch/hepia/event/EventService.java +++ b/services/src/main/java/ch/hepia/event/EventService.java @@ -1,53 +1,163 @@ package ch.hepia.event; -import java.util.List; -import java.util.stream.Collectors; -import java.util.ArrayList; +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; - public EventService(){ - this.events = new ArrayList<>(); - } + private Optional<Session> maybeSession; + private Optional<MessageProducer> maybeProducer; - public void add(Event e){ - this.events.add(e); + static { + clientQueueName = "client.messages"; + ackMode = Session.AUTO_ACKNOWLEDGE; } - public List<Event> getCreditRefused(){ - return getEventsOfThis(EventCreditRefused.class); - } + public EventService(final String ipBroker){ + this.events = new ArrayList<>(); + final String brokerUrl = "tcp://" + ipBroker + ":61616"; - public List<Event> getCreditWithdrawn(){ - return getEventsOfThis(EventCreditWithdrawn.class); - } + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl); + try { + Connection connection = connectionFactory.createConnection(); + connection.start(); - public List<Event> getOrderCancelled(){ - return getEventsOfThis(EventOrderCancelled.class); - } + Session session = connection.createSession(transacted, ackMode); + maybeSession = Optional.of(session); - public List<Event> getOrderCreated(){ - return getEventsOfThis(EventOrderCreated.class); - } + Destination mainTopic = session.createTopic(clientQueueName); - public List<Event> getOrderPlaced(){ - return getEventsOfThis(EventOrderPlaced.class); - } + //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); - public List<Event> getOrderPrepared(){ - return getEventsOfThis(EventOrderPrepared.class); - } + MessageConsumer responseConsumer = session.createConsumer(mainTopic); - public List<Event> getOrderSent(){ - return getEventsOfThis(EventOrderPlaced.class); - } + 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(); + } + } + }); - private List<Event> getEventsOfThis(Class c){ - return this.events.stream().filter(e -> e.getClass().equals(c)).collect(Collectors.toList()); + } catch (JMSException e) { + e.printStackTrace(); + } + } + + private void add(Event e){ + this.events.add(e); } - public void display(){ - this.events.stream().forEach(System.out::println); + 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); } } \ No newline at end of file -- GitLab