1 package at.ac.tuwien.sbc.valesriegler.xvsm;
3 import java.io.Serializable;
4 import java.util.ArrayList;
7 import javax.swing.SwingUtilities;
9 import org.mozartspaces.notifications.Notification;
10 import org.mozartspaces.notifications.NotificationListener;
11 import org.mozartspaces.notifications.Operation;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
16 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
17 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
18 import at.ac.tuwien.sbc.valesriegler.types.Pizza;
19 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
20 import at.ac.tuwien.sbc.valesriegler.types.Table;
22 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
23 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
25 public PizzeriaAgentXVSM() {
29 useFreeTablesContainer();
30 usePizzaInProgressContainer();
33 public void listenForTables() {
34 NotificationListener tablesListener = new NotificationListener() {
36 public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
37 log.info("Tables Change notified");
39 final List<Table> tables = castEntries(entries);
41 SwingUtilities.invokeLater(new Runnable() {
44 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
50 notificationMgr.createNotification(tablesContainer, tablesListener, Operation.WRITE);
51 } catch (Exception e) {
52 handleSpaceErrorAndTerminate(e);
56 public void listenForGroups() {
58 NotificationListener groupsListener = new NotificationListener() {
60 public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
61 final List<GroupData> groups = castEntries(entries);
63 // log.info("{} group changes!", groups.size());
64 // for (GroupData groupData : groups) {
65 // log.info(groupData.toString());
69 SwingUtilities.invokeLater(new Runnable() {
72 PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
74 List<GroupData> groupsWhoHaveOrdered = new ArrayList<>();
75 for (GroupData groupData : groups) {
76 if(groupData.getState() != GroupState.NEW && groupData.getState() != GroupState.WAITING) {
77 groupsWhoHaveOrdered.add(groupData);
80 PizzeriaAgent.getInstance().getOrdersModel().addItems(groupsWhoHaveOrdered);
87 notificationMgr.createNotification(groupsContainer, groupsListener, Operation.WRITE);
88 } catch (Exception e) {
89 handleSpaceErrorAndTerminate(e);
93 public void listenForOrders() {
96 public void listenForPizzasInPreparation() {
97 NotificationListener pizzasInProgress = new NotificationListener() {
99 public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
100 final List<Pizza> pizzas = castEntries(entries);
102 log.info("{} pizzas in progress changes!", pizzas.size());
103 for (PizzaOrder pizza : pizzas) {
104 log.info(pizza.toString());
107 SwingUtilities.invokeLater(new Runnable() {
110 PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
117 notificationMgr.createNotification(pizzaInProgressContainer, pizzasInProgress, Operation.WRITE);
118 } catch (Exception e) {
119 handleSpaceErrorAndTerminate(e);