1 package at.ac.tuwien.sbc.valesriegler.xvsm;
3 import at.ac.tuwien.sbc.valesriegler.common.OrderId;
4 import at.ac.tuwien.sbc.valesriegler.common.Util;
5 import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
6 import at.ac.tuwien.sbc.valesriegler.types.*;
7 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
8 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceListener;
9 import org.mozartspaces.core.MzsConstants.RequestTimeout;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
14 import java.io.Serializable;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
19 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
20 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
22 public PizzeriaAgentXVSM(int port) {
24 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
25 freeTablesContainer = useContainer(Util.FREE_TABLES);
26 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
27 orderDeliveredContainer = useContainer(Util.ORDER_COMPLETE) ;
28 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
29 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
30 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
31 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
32 pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
33 deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
34 pizzeriaTableContainer = useContainer(Util.PIZZERIA_TABLE);
35 pizzeriaGroupContainer = useContainer(Util.PIZZERIA_GROUP);
36 preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
37 pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
41 public void listenForOccupiedTables() {
42 SpaceListener tablesListener = getDefaultBuilder().setCref(tableAssignedContainer).setSpaceAction(new SpaceAction() {
44 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
45 log.info("A new group was assigned to a table!");
47 final List<Table> tables = castEntries(entries);
48 log.info("occupied tables: " + tables.toString());
50 SwingUtilities.invokeLater(new Runnable() {
53 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
54 PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(tables);
58 }).createSpaceListenerImpl();
61 public void listenForTablesUpdates() {
62 SpaceListener tablesListener = getDefaultBuilder().setCref(pizzeriaTableContainer).setSpaceAction(new SpaceAction() {
64 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
65 log.info("listenForTables!!!!!");
67 final List<Table> tables = castEntries(entries);
69 final ArrayList<Table> occupiedTables = new ArrayList<>();
70 for (Table table : tables) {
71 if(! table.isFree()) occupiedTables.add(table);
73 log.info("11111111111111111111 Number of occupied Tables: {}", occupiedTables.size());
75 SwingUtilities.invokeLater(new Runnable() {
78 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
79 PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(occupiedTables);
83 }).createSpaceListenerImpl();
86 public void listenForGroupUpdates() {
88 SpaceListener groupsListener = getDefaultBuilder().setCref(pizzeriaGroupContainer).setSpaceAction(new SpaceAction() {
90 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
91 final List<GroupData> groups = castEntries(entries);
92 final List<GroupData> waitingGroups = getWaitingGroups(groups);
93 final List<GroupData> orderedGroups = getOrderedGroups(groups);
95 SwingUtilities.invokeLater(new Runnable() {
98 PizzeriaAgent.getInstance().getGroupModel().addItems(waitingGroups);
99 PizzeriaAgent.getInstance().getOrdersModel().addItems(orderedGroups);
104 }).createSpaceListenerImpl();
107 private List<GroupData> getOrderedGroups(List<GroupData> groups) {
108 final ArrayList<GroupData> orderedGroups = new ArrayList<>();
109 for (GroupData group : groups) {
110 if(group.getState() != GroupState.WAITING) {
111 orderedGroups.add(group);
114 return orderedGroups;
117 private List<GroupData> getWaitingGroups(List<GroupData> groups) {
118 final ArrayList<GroupData> waitingGroups = new ArrayList<>();
119 for (GroupData group : groups) {
120 if (group.getState() == GroupState.WAITING) {
121 waitingGroups.add(group);
123 log.info("Fucking groupstate is {}", group.getState());
127 return waitingGroups;
130 public void listenForDeliveryUpdates() {//deliveryOrderTakenContainer
131 SpaceListener orderTakenListener = getDefaultBuilder().setCref(pizzeriaDeliveryContainer).setSpaceAction(new SpaceAction() {
133 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
134 final List<DeliveryGroupData> groups = castEntries(entries);
136 SwingUtilities.invokeLater(new Runnable() {
139 PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
144 }).createSpaceListenerImpl();
148 // public void listenForDeliveriesInProgress() {
149 // SpaceListener pizzasInProgress = getDefaultBuilder().setCref(deliveryInProgress).setSpaceAction(new SpaceAction() {
152 // public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
153 // final List<DeliveryGroupData> groups = castEntries(entries);
155 // SwingUtilities.invokeLater(new Runnable() {
157 // public void run() {
158 // PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
163 // }).createSpaceListenerImpl();
166 public void listenForPizzasInPreparation() {
167 SpaceListener pizzasInProgress = getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
170 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
171 final List<Pizza> pizzas = castEntries(entries);
173 log.info("{} pizzas in progress changes!", pizzas.size());
174 for (PizzaOrder pizza : pizzas) {
175 log.info(pizza.toString());
178 SwingUtilities.invokeLater(new Runnable() {
181 PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
182 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
187 }).createSpaceListenerImpl();
190 public void listenForDeliveredOrders() {
191 SpaceListener deliveredOrders = getDefaultBuilder().setCref(orderDeliveredContainer).setSpaceAction(new SpaceAction() {
193 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
194 final List<GroupData> groups = castEntries(entries);
196 log.info("{} order was delivered!", groups.size());
198 SwingUtilities.invokeLater(new Runnable() {
201 PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfOrders(groups);
205 }).createSpaceListenerImpl();
208 public void listenForPreparedPizzas() {
209 SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
211 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
212 final List<Pizza> pizzas = castEntries(entries);
214 SwingUtilities.invokeLater(new Runnable() {
217 PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
222 }).createSpaceListenerImpl();
225 public void listenForPreparedDeliveryPizzas() {
226 SpaceListener preparedPizzasListener = getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setSpaceAction(new SpaceAction() {
228 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
229 final List<Pizza> pizzas = castEntries(entries);
231 SwingUtilities.invokeLater(new Runnable() {
234 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
239 }).createSpaceListenerImpl();
243 public void listenForPayment() {
244 SpaceListener isGoneListener = getDefaultBuilder().setCref(paymentDoneContainer).setSpaceAction(new SpaceAction() {
246 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
247 final List<GroupData> groups = castEntries(entries);
249 final GroupData group = groups.get(0);
250 log.info("Group {} is gone", group.getId());
252 final int tableId = PizzeriaAgent.getInstance().getTablesModel().getTableIdOfGroup(group);
253 SwingUtilities.invokeLater(new Runnable() {
257 PizzeriaAgent.getInstance().getOrdersModel().updatePaymentWaiter(group);
258 PizzeriaAgent.getInstance().getTablesModel().makeTableFree(tableId);
262 Table table = new Table(tableId);
264 sendItemsToContainer(Arrays.asList(table), freeTablesContainer, RequestTimeout.DEFAULT, null);
266 }).createSpaceListenerImpl();
269 public void sendFreeTablesToContainer(List<Table> tables) {
270 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
271 sendItemsToContainer(tables, pizzeriaTableContainer, RequestTimeout.DEFAULT, null);
274 public void initializeOrderId() {
275 sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
278 public void notifyGroupAgent() {
279 sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);