]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/PizzeriaAgentXVSM.java
Space cooks prepare pizzas and Pizzeria GUI shows that
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / xvsm / PizzeriaAgentXVSM.java
1 package at.ac.tuwien.sbc.valesriegler.xvsm;
2
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.SwingUtilities;
8
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;
14
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;
21
22 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
23         private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
24         
25         public PizzeriaAgentXVSM() {
26                 super();
27                 useTablesContainer();
28                 useGroupsContainer();
29                 useFreeTablesContainer();
30                 usePizzaInProgressContainer();
31         }
32
33         public void listenForTables() {
34                 NotificationListener tablesListener = new NotificationListener() {
35             @Override
36             public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
37                 log.info("Tables Change notified");
38                 
39                 final List<Table> tables = castEntries(entries);
40         
41                 SwingUtilities.invokeLater(new Runnable() {
42                                         @Override
43                                         public void run() {
44                                                 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
45                                         }
46                                 });
47             }
48         };
49         try {
50                 notificationMgr.createNotification(tablesContainer, tablesListener, Operation.WRITE);
51         } catch (Exception e) {
52             handleSpaceErrorAndTerminate(e);
53         }
54         }
55
56         public void listenForGroups() {
57                 
58         NotificationListener groupsListener = new NotificationListener() {
59             @Override
60             public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
61                 final List<GroupData> groups = castEntries(entries);
62                 
63 //                log.info("{} group changes!", groups.size());
64 //                for (GroupData groupData : groups) {
65 //                      log.info(groupData.toString());
66 //                                      
67 //                              }
68                 
69                 SwingUtilities.invokeLater(new Runnable() {
70                                         @Override
71                                         public void run() {
72                                                 PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
73                                                 
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);
78                                                         }
79                                                 }
80                                                 PizzeriaAgent.getInstance().getOrdersModel().addItems(groupsWhoHaveOrdered);
81                                         }
82                                 });
83                 
84             }
85         };
86           try {
87                 notificationMgr.createNotification(groupsContainer, groupsListener, Operation.WRITE);
88         } catch (Exception e) {
89            handleSpaceErrorAndTerminate(e);
90         }
91         }
92
93         public void listenForOrders() {
94         }
95
96         public void listenForPizzasInPreparation() {
97                 NotificationListener pizzasInProgress = new NotificationListener() {
98             @Override
99             public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
100                 final List<Pizza> pizzas = castEntries(entries);
101                 
102                 log.info("{} pizzas in progress changes!", pizzas.size());
103                 for (PizzaOrder pizza : pizzas) {
104                         log.info(pizza.toString());
105                                 }
106                 
107                 SwingUtilities.invokeLater(new Runnable() {
108                                         @Override
109                                         public void run() {
110                                                 PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
111                                         }
112                                 });
113                 
114             }
115         };
116           try {
117                 notificationMgr.createNotification(pizzaInProgressContainer, pizzasInProgress, Operation.WRITE);
118         } catch (Exception e) {
119            handleSpaceErrorAndTerminate(e);
120         }
121         }
122
123
124 }