1 package at.ac.tuwien.sbc.valesriegler.pizzeria;
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.pizzeria.actions.TableNew;
5 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
6 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.*;
7 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
8 import at.ac.tuwien.sbc.valesriegler.types.Table;
9 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
14 import java.util.List;
17 * The Main class of the Pizzeria compoment.
19 * Start the communication and the Pizzeria GUI
21 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
24 public class PizzeriaAgent {
25 private static final String USAGE = "This application needs 2 parameters: <\"XVSM\"|\"JMS\"> <XVSM-Space-Identifier|JMS-Server-URL>";
26 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
28 private static PizzeriaAgent pizzeriaAgent;
30 private OrdersOverviewModel ordersModel;
31 private GroupsOverviewModel groupModel;
32 private TablesOverviewModel tablesModel;
33 private WaitersOfOrderModel waitersModel;
34 private PizzasOfOrderModel pizzasOfOrderModel;
35 private DeliveryDetailsModel deliveryDetailsModel;
36 private PizzasOfOrderModel pizzasOfDeliveryModel;
37 private DeliveryOrdersModel deliveryOrdersModel;
39 private PizzeriaAgentXVSM xvsm;
40 private JMSPizzeriaConnector jmspc;
42 public static void main(String[] args) {
43 if (args.length != 2) {
44 throw new IllegalArgumentException(USAGE);
47 log.info("Middleware: " + mw);
48 pizzeriaAgent = new PizzeriaAgent();
51 pizzeriaAgent.createModels();
52 pizzeriaAgent.initXVSM(args[1]);
53 if (! Util.runSimulation) {
54 pizzeriaAgent.initGUI();
59 pizzeriaAgent.createModels();
60 pizzeriaAgent.jmspc = new JMSPizzeriaConnector(args[1]);
61 pizzeriaAgent.jmspc.init();
62 if (! Util.runSimulation) {
63 pizzeriaAgent.initGUI();
68 throw new IllegalArgumentException(USAGE);
72 private void initXVSM(String arg) {
75 port = Integer.parseInt(arg);
76 } catch (NumberFormatException e) {
77 log.error("The XVSM-Space-Identifier needs to be an integer port!");
81 xvsm = new PizzeriaAgentXVSM(port);
82 xvsm.initializeOrderId();
83 xvsm.notifyGroupAgent();
85 xvsm.listenForDeliveryUpdates();
86 xvsm.listenForTablesUpdates();
87 xvsm.listenForGroupUpdates();
90 private void initGUI() {
91 PizzeriaGUI gui = new PizzeriaGUI();
92 SwingUtilities.invokeLater(gui);
95 class PizzeriaGUI implements Runnable {
98 PizzeriaFrame frame = new PizzeriaFrame();
99 frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
102 public void freeTablesCreated(List<Table> tables) {
104 xvsm.sendFreeTablesToContainer(tables);
106 for (Table t : tables) {
107 jmspc.send(new TableNew(t));
114 frame.setVisible(true);
118 private void createModels() {
119 ordersModel = new OrdersOverviewModel();
120 groupModel = new GroupsOverviewModel();
121 tablesModel = new TablesOverviewModel();
122 waitersModel = new WaitersOfOrderModel();
123 pizzasOfOrderModel = new PizzasOfOrderModel();
124 deliveryOrdersModel = new DeliveryOrdersModel();
125 deliveryDetailsModel = new DeliveryDetailsModel();
126 pizzasOfDeliveryModel = new PizzasOfOrderModel();
129 public static PizzeriaAgent getInstance() {
130 return pizzeriaAgent;
133 public OrdersOverviewModel getOrdersModel() {
137 public DeliveryOrdersModel getDeliveryOrdersModel() {
138 return deliveryOrdersModel;
141 public DeliveryDetailsModel getDeliveryDetailsModel() {
142 return deliveryDetailsModel;
145 public PizzasOfOrderModel getPizzasOfDeliveryModel() {
146 return pizzasOfDeliveryModel;
149 public GroupsOverviewModel getGroupModel() {
153 public TablesOverviewModel getTablesModel() {
157 public WaitersOfOrderModel getWaitersModel() {
161 public PizzasOfOrderModel getPizzasOfOrderModel() {
162 return pizzasOfOrderModel;
165 public interface TablesCreatedHandler {
166 public void freeTablesCreated(List<Table> tables);