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.jms.nac.JMSNAC;
12 import at.ac.tuwien.sbc.valesriegler.pizzeria.actions.TableNew;
13 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
14 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.DeliveryDetailsModel;
15 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.DeliveryOrdersModel;
16 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
19 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
20 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
21 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
22 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.PizzeriaJMSNACMsgListener;
23 import at.ac.tuwien.sbc.valesriegler.types.Table;
24 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
27 * The Main class of the Pizzeria compoment.
29 * Start the communication and the Pizzeria GUI
31 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
34 public class PizzeriaAgent {
35 private static final String USAGE = "This application needs 2 parameters: <\"XVSM\"|\"JMS\"> <XVSM-Space-Identifier|JMS-Server-URL>";
36 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
38 private static PizzeriaAgent pizzeriaAgent;
40 private OrdersOverviewModel ordersModel;
41 private GroupsOverviewModel groupModel;
42 private TablesOverviewModel tablesModel;
43 private WaitersOfOrderModel waitersModel;
44 private PizzasOfOrderModel pizzasOfOrderModel;
45 private DeliveryDetailsModel deliveryDetailsModel;
46 private PizzasOfOrderModel pizzasOfDeliveryModel;
47 private DeliveryOrdersModel deliveryOrdersModel;
49 private PizzeriaAgentXVSM xvsm;
50 private JMSPizzeriaConnector jmspc;
51 private JMSNAC jmsnac;
53 public static void main(String[] args) {
54 if (args.length != 2) {
55 throw new IllegalArgumentException(USAGE);
58 log.info("Middleware: " + mw);
59 pizzeriaAgent = new PizzeriaAgent();
62 pizzeriaAgent.createModels();
63 pizzeriaAgent.initXVSM(args[1]);
64 if (!Util.runSimulation) {
65 pizzeriaAgent.initGUI();
70 pizzeriaAgent.createModels();
71 pizzeriaAgent.jmspc = new JMSPizzeriaConnector(args[1]);
72 pizzeriaAgent.jmspc.init();
73 pizzeriaAgent.jmsnac = new JMSNAC(new PizzeriaJMSNACMsgListener());
74 if (!Util.runSimulation) {
75 pizzeriaAgent.initGUI();
80 throw new IllegalArgumentException(USAGE);
83 private void initXVSM(String arg) {
86 port = Integer.parseInt(arg);
87 } catch (NumberFormatException e) {
88 log.error("The XVSM-Space-Identifier needs to be an integer port!");
92 xvsm = new PizzeriaAgentXVSM(port);
93 xvsm.initializeOrderId();
94 xvsm.notifyGroupAgent();
96 xvsm.listenForDeliveryUpdates();
97 xvsm.listenForTablesUpdates();
98 xvsm.listenForGroupUpdates();
101 private void initGUI() {
102 PizzeriaGUI gui = new PizzeriaGUI();
103 SwingUtilities.invokeLater(gui);
106 class PizzeriaGUI implements Runnable {
109 PizzeriaFrame frame = new PizzeriaFrame();
110 frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
113 public void freeTablesCreated(List<Table> tables) {
115 xvsm.sendFreeTablesToContainer(tables);
117 for (Table t : tables) {
118 jmspc.send(new TableNew(t));
125 frame.setVisible(true);
129 private void createModels() {
130 ordersModel = new OrdersOverviewModel();
131 groupModel = new GroupsOverviewModel();
132 tablesModel = new TablesOverviewModel();
133 waitersModel = new WaitersOfOrderModel();
134 pizzasOfOrderModel = new PizzasOfOrderModel();
135 deliveryOrdersModel = new DeliveryOrdersModel();
136 deliveryDetailsModel = new DeliveryDetailsModel();
137 pizzasOfDeliveryModel = new PizzasOfOrderModel();
140 public static PizzeriaAgent getInstance() {
141 return pizzeriaAgent;
144 public OrdersOverviewModel getOrdersModel() {
148 public DeliveryOrdersModel getDeliveryOrdersModel() {
149 return deliveryOrdersModel;
152 public DeliveryDetailsModel getDeliveryDetailsModel() {
153 return deliveryDetailsModel;
156 public PizzasOfOrderModel getPizzasOfDeliveryModel() {
157 return pizzasOfDeliveryModel;
160 public GroupsOverviewModel getGroupModel() {
164 public TablesOverviewModel getTablesModel() {
168 public WaitersOfOrderModel getWaitersModel() {
172 public PizzasOfOrderModel getPizzasOfOrderModel() {
173 return pizzasOfOrderModel;
176 public JMSNAC getJmsnac() {
180 public JMSPizzeriaConnector getJmspc() {
184 public interface TablesCreatedHandler {
185 public void freeTablesCreated(List<Table> tables);