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 org.mozartspaces.core.MzsConstants.RequestTimeout;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
13 import java.io.Serializable;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
18 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
19 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
21 public PizzeriaAgentXVSM(int port) {
23 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
24 freeTablesContainer = useContainer(Util.FREE_TABLES);
25 pizzaInProgressContainer = useContainer(Util.PIZZAS_IN_PROGRESS) ;
26 orderDeliveredContainer = useContainer(Util.ORDER_COMPLETE) ;
27 preparedPizzasContainer = useContainer(Util.DELIVER_PIZZAS);
28 paymentDoneContainer = useContainer(Util.PAYMENT_DONE) ;
29 orderTakenContainer = useContainer(Util.ORDER_TAKEN);
30 assignTableContainer = useContainer(Util.ASSIGN_TABLE);
31 pizzeriaInfoContainer = useContainer(Util.PIZZERIA_INFO);
32 deliveryOrderTakenContainer = useContainer(Util.DELIVERY_ORDER_TAKEN);
33 pizzeriaTableContainer = useContainer(Util.PIZZERIA_TABLE);
34 pizzeriaGroupContainer = useContainer(Util.PIZZERIA_GROUP);
35 preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
36 pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
40 public void listenForTablesUpdates() {
41 getDefaultBuilder().setCref(pizzeriaTableContainer).setSpaceAction(new SpaceAction() {
43 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
45 final List<Table> tables = castEntries(entries);
47 final ArrayList<Table> occupiedTables = new ArrayList<>();
48 for (Table table : tables) {
49 if(! table.isFree()) occupiedTables.add(table);
52 SwingUtilities.invokeLater(new Runnable() {
55 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
56 PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(occupiedTables);
60 }).createSpaceListenerImpl();
63 public void listenForGroupUpdates() {
64 getDefaultBuilder().setCref(pizzeriaGroupContainer).setSpaceAction(new SpaceAction() {
66 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
67 final List<GroupData> groups = castEntries(entries);
68 final List<GroupData> waitingGroups = getWaitingGroups(groups);
69 final List<GroupData> orderedGroups = getOrderedGroups(groups);
71 SwingUtilities.invokeLater(new Runnable() {
74 PizzeriaAgent.getInstance().getGroupModel().addItems(waitingGroups);
75 PizzeriaAgent.getInstance().getOrdersModel().addItems(orderedGroups);
80 }).createSpaceListenerImpl();
83 private List<GroupData> getOrderedGroups(List<GroupData> groups) {
84 final ArrayList<GroupData> orderedGroups = new ArrayList<>();
85 for (GroupData group : groups) {
86 if(group.getState() != GroupState.WAITING) {
87 orderedGroups.add(group);
93 private List<GroupData> getWaitingGroups(List<GroupData> groups) {
94 final ArrayList<GroupData> waitingGroups = new ArrayList<>();
95 for (GroupData group : groups) {
96 if (group.getState() == GroupState.WAITING) {
97 waitingGroups.add(group);
99 log.info("Fucking groupstate is {}", group.getState());
103 return waitingGroups;
106 public void listenForDeliveryUpdates() {//deliveryOrderTakenContainer
107 getDefaultBuilder().setCref(pizzeriaDeliveryContainer).setSpaceAction(new SpaceAction() {
109 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
110 final List<DeliveryGroupData> groups = castEntries(entries);
112 SwingUtilities.invokeLater(new Runnable() {
115 PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
120 }).createSpaceListenerImpl();
123 public void listenForPizzasInPreparation() {
124 getDefaultBuilder().setCref(pizzaInProgressContainer).setSpaceAction(new SpaceAction() {
127 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
128 final List<Pizza> pizzas = castEntries(entries);
130 log.info("{} pizzas in progress changes!", pizzas.size());
131 for (PizzaOrder pizza : pizzas) {
132 log.info(pizza.toString());
135 SwingUtilities.invokeLater(new Runnable() {
138 PizzeriaAgent.getInstance().getOrdersModel().updatePizzasInPreparation(pizzas);
139 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updatePizzasInPreparation(pizzas);
144 }).createSpaceListenerImpl();
148 public void listenForPreparedPizzas() {
149 getDefaultBuilder().setCref(preparedPizzasContainer).setSpaceAction(new SpaceAction() {
151 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
152 final List<Pizza> pizzas = castEntries(entries);
154 SwingUtilities.invokeLater(new Runnable() {
157 PizzeriaAgent.getInstance().getOrdersModel().updateStatusOfPizzasDone(pizzas);
162 }).createSpaceListenerImpl();
165 public void listenForPreparedDeliveryPizzas() {
166 getDefaultBuilder().setCref(preparedDeliveryPizzasContainer).setSpaceAction(new SpaceAction() {
168 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
169 final List<Pizza> pizzas = castEntries(entries);
171 SwingUtilities.invokeLater(new Runnable() {
174 PizzeriaAgent.getInstance().getDeliveryOrdersModel().updateStatusOfPizzasDone(pizzas);
179 }).createSpaceListenerImpl();
182 public void sendFreeTablesToContainer(List<Table> tables) {
183 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
184 sendItemsToContainer(tables, pizzeriaTableContainer, RequestTimeout.DEFAULT, null);
187 public void initializeOrderId() {
188 sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
191 public void notifyGroupAgent() {
192 sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);