1 package at.ac.tuwien.sbc.valesriegler.pizzeria;
5 import javax.swing.SwingUtilities;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
10 import at.ac.tuwien.sbc.valesriegler.common.Util;
11 import at.ac.tuwien.sbc.valesriegler.pizzeria.actions.TableNew;
12 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
13 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.DeliveryDetailsModel;
14 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.DeliveryOrdersModel;
15 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
16 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
19 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
20 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
21 import at.ac.tuwien.sbc.valesriegler.types.Table;
22 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
25 * The Main class of the Pizzeria compoment.
27 * Start the communication and the Pizzeria GUI
29 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
32 public class PizzeriaAgent {
33 private static final String USAGE = "This application needs 2 parameters: <\"XVSM\"|\"JMS\"> <XVSM-Space-Identifier|JMS-Server-URL>";
34 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
36 private static PizzeriaAgent pizzeriaAgent;
38 private OrdersOverviewModel ordersModel;
39 private GroupsOverviewModel groupModel;
40 private TablesOverviewModel tablesModel;
41 private WaitersOfOrderModel waitersModel;
42 private PizzasOfOrderModel pizzasOfOrderModel;
43 private DeliveryDetailsModel deliveryDetailsModel;
44 private PizzasOfOrderModel pizzasOfDeliveryModel;
45 private DeliveryOrdersModel deliveryOrdersModel;
47 private PizzeriaAgentXVSM xvsm;
48 private JMSPizzeriaConnector jmspc;
50 public static void main(String[] args) {
51 if (args.length != 2) {
52 throw new IllegalArgumentException(USAGE);
55 log.info("Middleware: " + mw);
56 pizzeriaAgent = new PizzeriaAgent();
59 pizzeriaAgent.createModels();
60 pizzeriaAgent.initXVSM(args[1]);
61 pizzeriaAgent.initGUI();
65 pizzeriaAgent.createModels();
66 pizzeriaAgent.jmspc = new JMSPizzeriaConnector(args[1]);
67 pizzeriaAgent.jmspc.init();
68 pizzeriaAgent.initGUI();
72 throw new IllegalArgumentException(USAGE);
76 private void initXVSM(String arg) {
79 port = Integer.parseInt(arg);
80 } catch (NumberFormatException e) {
81 log.error("The XVSM-Space-Identifier needs to be an integer port!");
85 xvsm = new PizzeriaAgentXVSM(port);
86 xvsm.initializeOrderId();
87 xvsm.notifyGroupAgent();
89 // xvsm.listenForFreeTables();
90 // xvsm.listenForTakenOrders();
91 xvsm.listenForTakenDeliveryOrders();
92 // xvsm.listenForWaitingGroups();
93 xvsm.listenForPizzasInPreparation();
94 // xvsm.listenForDeliveredOrders();
95 xvsm.listenForPreparedPizzas();
96 xvsm.listenForTables();
97 xvsm.listenForGroups();
98 // xvsm.listenForPayment();
99 // xvsm.listenForOccupiedTables();
102 private void initGUI() {
103 PizzeriaGUI gui = new PizzeriaGUI();
104 SwingUtilities.invokeLater(gui);
107 class PizzeriaGUI implements Runnable {
110 PizzeriaFrame frame = new PizzeriaFrame();
111 frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
114 public void freeTablesCreated(List<Table> tables) {
116 xvsm.sendFreeTablesToContainer(tables);
118 for (Table t : tables) {
119 jmspc.send(new TableNew(t));
126 frame.setVisible(true);
130 private void createModels() {
131 ordersModel = new OrdersOverviewModel();
132 groupModel = new GroupsOverviewModel();
133 tablesModel = new TablesOverviewModel();
134 waitersModel = new WaitersOfOrderModel();
135 pizzasOfOrderModel = new PizzasOfOrderModel();
136 deliveryOrdersModel = new DeliveryOrdersModel();
137 deliveryDetailsModel = new DeliveryDetailsModel();
138 pizzasOfDeliveryModel = new PizzasOfOrderModel();
141 public static PizzeriaAgent getInstance() {
142 return pizzeriaAgent;
145 public OrdersOverviewModel getOrdersModel() {
149 public DeliveryOrdersModel getDeliveryOrdersModel() {
150 return deliveryOrdersModel;
153 public DeliveryDetailsModel getDeliveryDetailsModel() {
154 return deliveryDetailsModel;
157 public PizzasOfOrderModel getPizzasOfDeliveryModel() {
158 return pizzasOfDeliveryModel;
161 public GroupsOverviewModel getGroupModel() {
165 public TablesOverviewModel getTablesModel() {
169 public WaitersOfOrderModel getWaitersModel() {
173 public PizzasOfOrderModel getPizzasOfOrderModel() {
174 return pizzasOfOrderModel;
177 public interface TablesCreatedHandler {
178 public void freeTablesCreated(List<Table> tables);