1 package at.ac.tuwien.sbc.valesriegler.pizzeria;
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.jms.nac.JMSNAC;
5 import at.ac.tuwien.sbc.valesriegler.pizzeria.actions.TableNew;
6 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
7 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.*;
8 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.JMSPizzeriaConnector;
9 import at.ac.tuwien.sbc.valesriegler.pizzeria.jms.PizzeriaJMSNACMsgListener;
10 import at.ac.tuwien.sbc.valesriegler.types.Table;
11 import at.ac.tuwien.sbc.valesriegler.xvsm.PizzeriaAgentXVSM;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
16 import java.util.List;
19 * The Main class of the Pizzeria compoment.
21 * Start the communication and the Pizzeria GUI
23 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
26 public class PizzeriaAgent {
27 private static final String USAGE = "This application needs 2 parameters: <\"XVSM\"|\"JMS\"> <XVSM-Space-Identifier|JMS-Server-URL>";
28 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
30 private static PizzeriaAgent pizzeriaAgent;
32 private OrdersOverviewModel ordersModel;
33 private GroupsOverviewModel groupModel;
34 private TablesOverviewModel tablesModel;
35 private WaitersOfOrderModel waitersModel;
36 private PizzasOfOrderModel pizzasOfOrderModel;
37 private DeliveryDetailsModel deliveryDetailsModel;
38 private PizzasOfOrderModel pizzasOfDeliveryModel;
39 private DeliveryOrdersModel deliveryOrdersModel;
41 private PizzeriaAgentXVSM xvsm;
42 private JMSPizzeriaConnector jmspc;
43 private JMSNAC jmsnac;
45 public static void main(String[] args) {
46 if (args.length != 2) {
47 throw new IllegalArgumentException(USAGE);
50 log.info("Middleware: " + mw);
51 pizzeriaAgent = new PizzeriaAgent();
54 pizzeriaAgent.createModels();
55 pizzeriaAgent.initXVSM(args[1]);
56 if (!Util.runSimulation) {
57 pizzeriaAgent.initGUI(args[1]);
62 pizzeriaAgent.createModels();
63 pizzeriaAgent.jmspc = new JMSPizzeriaConnector(args[1]);
64 pizzeriaAgent.jmspc.init();
65 pizzeriaAgent.jmsnac = new JMSNAC(new PizzeriaJMSNACMsgListener());
66 if (!Util.runSimulation) {
67 pizzeriaAgent.initGUI(args[1]);
72 throw new IllegalArgumentException(USAGE);
75 private void initXVSM(String arg) {
78 port = Integer.parseInt(arg);
79 } catch (NumberFormatException e) {
80 log.error("The XVSM-Space-Identifier needs to be an integer port!");
84 xvsm = new PizzeriaAgentXVSM(port);
85 xvsm.initializeOrderId();
86 xvsm.notifyGroupAgent();
88 xvsm.listenForDeliveryUpdates();
89 xvsm.listenForTablesUpdates();
90 xvsm.listenForGroupUpdates();
93 private void initGUI(String pizzeriaIdentifier) {
94 PizzeriaGUI gui = new PizzeriaGUI(pizzeriaIdentifier );
95 SwingUtilities.invokeLater(gui);
98 class PizzeriaGUI implements Runnable {
99 private final String id;
101 public PizzeriaGUI(String pizzeriaIdentifier) {
102 this.id = pizzeriaIdentifier;
107 PizzeriaFrame frame = new PizzeriaFrame(id);
108 frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
111 public void freeTablesCreated(List<Table> tables) {
113 xvsm.sendFreeTablesToContainer(tables);
115 for (Table t : tables) {
116 jmspc.send(new TableNew(t));
123 frame.setVisible(true);
127 private void createModels() {
128 ordersModel = new OrdersOverviewModel();
129 groupModel = new GroupsOverviewModel();
130 tablesModel = new TablesOverviewModel();
131 waitersModel = new WaitersOfOrderModel();
132 pizzasOfOrderModel = new PizzasOfOrderModel();
133 deliveryOrdersModel = new DeliveryOrdersModel();
134 deliveryDetailsModel = new DeliveryDetailsModel();
135 pizzasOfDeliveryModel = new PizzasOfOrderModel();
138 public static PizzeriaAgent getInstance() {
139 return pizzeriaAgent;
142 public OrdersOverviewModel getOrdersModel() {
146 public DeliveryOrdersModel getDeliveryOrdersModel() {
147 return deliveryOrdersModel;
150 public DeliveryDetailsModel getDeliveryDetailsModel() {
151 return deliveryDetailsModel;
154 public PizzasOfOrderModel getPizzasOfDeliveryModel() {
155 return pizzasOfDeliveryModel;
158 public GroupsOverviewModel getGroupModel() {
162 public TablesOverviewModel getTablesModel() {
166 public WaitersOfOrderModel getWaitersModel() {
170 public PizzasOfOrderModel getPizzasOfOrderModel() {
171 return pizzasOfOrderModel;
174 public JMSNAC getJmsnac() {
178 public JMSPizzeriaConnector getJmspc() {
182 public interface TablesCreatedHandler {
183 public void freeTablesCreated(List<Table> tables);