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.DeliveryGroupData;
7 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
9 import at.ac.tuwien.sbc.valesriegler.types.Table;
10 import at.ac.tuwien.sbc.valesriegler.xvsm.spacehelpers.SpaceAction;
11 import org.mozartspaces.core.MzsConstants.RequestTimeout;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
16 import java.io.Serializable;
17 import java.util.ArrayList;
18 import java.util.Arrays;
19 import java.util.List;
21 public class PizzeriaAgentXVSM extends AbstractXVSMConnector {
22 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgentXVSM.class);
24 public PizzeriaAgentXVSM(int port) {
26 tableAssignedContainer = useContainer(Util.TABLE_ASSIGNED) ;
27 freeTablesContainer = useContainer(Util.FREE_TABLES);
28 orderDeliveredContainer = 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);
35 pizzeriaTableContainer = useContainer(Util.PIZZERIA_TABLE);
36 pizzeriaGroupContainer = useContainer(Util.PIZZERIA_GROUP);
37 preparedDeliveryPizzasContainer = useContainer(Util.DELIVER_DELIVERY_PIZZAS);
38 pizzeriaDeliveryContainer = useContainer(Util.PIZZERIA_DELIVERY);
42 public void listenForTablesUpdates() {
43 getDefaultBuilder("listenForTablesUpdates").setLookaround(true).setCref(pizzeriaTableContainer).setSpaceAction(new SpaceAction() {
45 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
47 final List<Table> tables = castEntries(entries);
49 final ArrayList<Table> occupiedTables = new ArrayList<Table>();
50 for (Table table : tables) {
51 if(! table.isFree()) occupiedTables.add(table);
54 SwingUtilities.invokeLater(new Runnable() {
57 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
58 PizzeriaAgent.getInstance().getGroupModel().removeGroupsFromTables(occupiedTables);
62 }).createSpaceListenerImpl();
65 public void listenForGroupUpdates() {
66 getDefaultBuilder("listenForGroupUpdates").setLookaround(true).setCref(pizzeriaGroupContainer).setSpaceAction(new SpaceAction() {
68 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
69 final List<GroupData> groups = castEntries(entries);
70 final List<GroupData> waitingGroups = getWaitingGroups(groups);
71 final List<GroupData> orderedGroups = getOrderedGroups(groups);
73 SwingUtilities.invokeLater(new Runnable() {
76 PizzeriaAgent.getInstance().getGroupModel().addItems(waitingGroups);
77 PizzeriaAgent.getInstance().getOrdersModel().addItems(orderedGroups);
82 }).createSpaceListenerImpl();
85 public void listenForDeliveryUpdates() {
86 getDefaultBuilder("listenForDeliveryUpdates").setLookaround(true).setCref(pizzeriaDeliveryContainer).setSpaceAction(new SpaceAction() {
88 public void onEntriesWritten(List<? extends Serializable> entries) throws Exception {
89 final List<DeliveryGroupData> groups = castEntries(entries);
91 SwingUtilities.invokeLater(new Runnable() {
94 PizzeriaAgent.getInstance().getDeliveryOrdersModel().addItems(groups);
99 }).createSpaceListenerImpl();
102 public void sendFreeTablesToContainer(List<Table> tables) {
103 sendItemsToContainer(tables, freeTablesContainer, RequestTimeout.DEFAULT, null);
104 sendItemsToContainer(tables, pizzeriaTableContainer, RequestTimeout.DEFAULT, null);
107 private List<GroupData> getOrderedGroups(List<GroupData> groups) {
108 final ArrayList<GroupData> orderedGroups = new ArrayList<GroupData>();
109 for (GroupData group : groups) {
110 if(group.getState() != GroupState.WAITING) {
111 orderedGroups.add(group);
114 return orderedGroups;
117 public void initializeOrderId() {
118 sendItemsToContainer(Arrays.asList(new OrderId(0)), pizzeriaInfoContainer, RequestTimeout.DEFAULT, null);
121 public void notifyGroupAgent() {
122 sendItemsToContainer(Arrays.asList(new PizzeriaRegistration(port)), useContainerOfSpaceWithPort(Util.GROUP_AGENT_INFO, Util.GROUP_AGENT_PORT), RequestTimeout.DEFAULT, null);
125 private List<GroupData> getWaitingGroups(List<GroupData> groups) {
126 final ArrayList<GroupData> waitingGroups = new ArrayList<GroupData>();
127 for (GroupData group : groups) {
128 if (group.getState() == GroupState.WAITING) {
129 waitingGroups.add(group);
133 return waitingGroups;