1 package at.ac.tuwien.sbc.valesriegler.xvsm;
3 import java.io.Serializable;
4 import java.util.Arrays;
7 import javax.swing.SwingUtilities;
9 import at.ac.tuwien.sbc.valesriegler.common.OrderId;
10 import at.ac.tuwien.sbc.valesriegler.types.*;
11 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
12 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
13 import org.mozartspaces.core.MzsConstants.RequestTimeout;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
17 import at.ac.tuwien.sbc.valesriegler.common.Util;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
20 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
21 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
23 public PizzeriaAgentXVSM(int port) {
25 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
26 freeTablesContainer = useContainer(Util.FREE_TABLES);
27 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
28 orderCompleteContainer = useContainer(Util.ORDER_COMPLETE) ;
29 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
30 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
31 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
32 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
33 pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
34 deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
37 public void listenForOccupiedTables() {
38 SpaceListener tablesListener = getDefaultBuilder().setCref(tableAssignedContainer).setSpaceAction(new SpaceAction() {
40 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
41 log.info("A new group was assigned to a table!");
43 final List<Table> tables = castEntries(entries);
44 log.info("occupied tables: " + tables.toString());
46 SwingUtilities.invokeLater(new Runnable() {
49 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
50 PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(tables);
54 }).createSpaceListenerImpl();
57 public void listenForFreeTables() {
58 SpaceListener tablesListener = getDefaultBuilder().setCref(freeTablesContainer).setSpaceAction(new SpaceAction() {
61 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
62 log.info("A table has become free");
64 final List<Table> tables = castEntries(entries);
66 log.info("freetables: " + tables.toString());
67 // final TransactionReference tx = getDefaultTransaction();
68 // for (Table table : tables) {
69 // log.info("remove assigned table {}", table.getId());
70 // takeMatchingEntities(new Table(table.getId()), tableAssignedContainer, tx, RequestTimeout.DEFAULT, "Could not remove assigned tables");
72 // capi.commitTransaction(tx);
74 SwingUtilities.invokeLater(new Runnable() {
77 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
81 }).createSpaceListenerImpl();
84 public void listenForWaitingGroups() {
86 SpaceListener groupsListener = getDefaultBuilder().setCref(assignTableContainer).setSpaceAction(new SpaceAction() {
88 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
89 final List<GroupData> groups = castEntries(entries);
91 SwingUtilities.invokeLater(new Runnable() {
94 PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
99 }).createSpaceListenerImpl();
102 public void listenForTakenDeliveryOrders() {
103 SpaceListener orderTakenListener = getDefaultBuilder().setCref(deliveryOrderTakenContainer).setSpaceAction(new SpaceAction() {
105 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
106 final List<DeliveryGroupData> groups = castEntries(entries);
108 SwingUtilities.invokeLater(new Runnable() {
111 PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
116 }).createSpaceListenerImpl();
119 public void listenForTakenOrders() {
121 SpaceListener orderTakenListener = getDefaultBuilder().setCref(orderTakenContainer).setSpaceAction(new SpaceAction() {
123 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
124 final List<GroupData> groups = castEntries(entries);
126 SwingUtilities.invokeLater(new Runnable() {
129 PizzeriaAgent.getInstance().getOrdersModel().addItems(groups);
134 }).createSpaceListenerImpl();
137 public void listenForPizzasInPreparation() {
138 SpaceListener pizzasInProgress = getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
141 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
142 final List<Pizza> pizzas = castEntries(entries);
144 log.info("{} pizzas in progress changes!", pizzas.size());
145 for (PizzaOrder pizza : pizzas) {
146 log.info(pizza.toString());
149 SwingUtilities.invokeLater(new Runnable() {
152 PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
153 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
158 }).createSpaceListenerImpl();
161 public void listenForDeliveredOrders() {
162 SpaceListener deliveredOrders = getDefaultBuilder().setCref(orderCompleteContainer).setSpaceAction(new SpaceAction() {
164 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
165 final List<GroupData> groups = castEntries(entries);
167 log.info("{} order was delivered!", groups.size());
169 SwingUtilities.invokeLater(new Runnable() {
172 PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfOrders(groups);
176 }).createSpaceListenerImpl();
179 public void listenForPreparedPizzas() {
180 SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
182 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
183 final List<Pizza> pizzas = castEntries(entries);
185 SwingUtilities.invokeLater(new Runnable() {
188 PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
189 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
194 }).createSpaceListenerImpl();
197 public void listenForPayment() {
198 SpaceListener isGoneListener = getDefaultBuilder().setCref(paymentDoneContainer).setSpaceAction(new SpaceAction() {
200 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
201 final List<GroupData> groups = castEntries(entries);
203 final GroupData group = groups.get(0);
204 log.info("Group {} is gone", group.getId());
206 final int tableId = PizzeriaAgent.getInstance().getTablesModel().getTableIdOfGroup(group);
207 SwingUtilities.invokeLater(new Runnable() {
211 PizzeriaAgent.getInstance().getOrdersModel().updatePaymentWaiter(group);
212 PizzeriaAgent.getInstance().getTablesModel().makeTableFree(tableId);
216 Table table = new Table(tableId);
218 sendItemsToContainer(Arrays.asList(table), freeTablesContainer, RequestTimeout.DEFAULT, null);
220 }).createSpaceListenerImpl();
224 public void sendFreeTablesToContainer(List<Table> tables) {
225 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
228 public void initializeOrderId() {
229 sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
232 public void notifyGroupAgent() {
233 sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);