1 package at.ac.tuwien.sbc.valesriegler.pizzeria;
3 import java.io.Serializable;
4 import java.util.ArrayList;
7 import javax.swing.SwingUtilities;
9 import org.mozartspaces.core.Entry;
10 import org.mozartspaces.notifications.Notification;
11 import org.mozartspaces.notifications.NotificationListener;
12 import org.mozartspaces.notifications.Operation;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
16 import at.ac.tuwien.sbc.valesriegler.common.Util;
17 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
18 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
19 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
20 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
21 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
22 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
23 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
24 import at.ac.tuwien.sbc.valesriegler.types.Table;
25 import at.ac.tuwien.sbc.valesriegler.xvsm.XVSMConnector;
28 * The Main class of the Pizzeria compoment.
30 * Start the communication and the Pizzeria GUI
32 * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
35 public class PizzeriaAgent {
36 private static final Logger log = LoggerFactory.getLogger(PizzeriaAgent.class);
38 private static final String USAGE = "Usage: java PizzeriaAgent XVSM|JMS";
40 private static PizzeriaAgent pizzeriaAgent;
42 private OrdersOverviewModel ordersModel;
43 private GroupsOverviewModel groupModel;
44 private TablesOverviewModel tablesModel;
45 private WaitersOfOrderModel waitersModel;
46 private PizzasOfOrderModel pizzasModel;
48 private XVSMConnector xvsm;
50 public static void main(String[] args) {// TODO: remove hardcoding of JMS.
51 // if (args.length != 1) {
52 // throw new IllegalArgumentException(USAGE);
54 // String mom = "XVSM";// args[0];
55 String mom = Util.useJMS ? "JMS" : "XVSM";
57 pizzeriaAgent = new PizzeriaAgent();
60 pizzeriaAgent.createModels();
61 pizzeriaAgent.initXVSM();
62 pizzeriaAgent.initGUI();
65 pizzeriaAgent.createModels();
66 pizzeriaAgent.initJMS();
67 pizzeriaAgent.initGUI();
70 throw new IllegalArgumentException(USAGE);
76 private void initJMS() {
77 // do what you have to do
80 private void initXVSM() {
81 xvsm = new XVSMConnector();
82 xvsm.initSpaceCommunication();
83 xvsm.useTablesContainer();
84 xvsm.useGroupsContainer();
85 xvsm.useFreeTablesContainer();
87 NotificationListener tablesListener = new NotificationListener() {
89 public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
90 log.info("Tables Change notified");
92 final List<Table> tables = new ArrayList<>();
93 List<Entry> entryList = (List<Entry>) entries;
94 for (Entry entry : entryList) {
95 tables.add((Table) entry.getValue());
97 SwingUtilities.invokeLater(new Runnable() {
100 PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
106 NotificationListener groupsListener = new NotificationListener() {
108 public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
109 List<GroupData> groups = (List<GroupData>) entries;
110 PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
113 // xvsm.initTablesNotifications(tablesListener);
114 xvsm.initGroupNotifications(groupsListener);
117 private void initGUI() {
118 PizzeriaGUI gui = new PizzeriaGUI();
119 SwingUtilities.invokeLater(gui);
122 class PizzeriaGUI implements Runnable {
125 PizzeriaFrame frame = new PizzeriaFrame();
126 frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
129 public void freeTablesCreated(List<Table> tables) {
131 xvsm.sendFreeTablesToSpace(tables);
139 frame.setVisible(true);
143 private void createModels() {
144 ordersModel = new OrdersOverviewModel();
145 groupModel = new GroupsOverviewModel();
146 tablesModel = new TablesOverviewModel();
147 waitersModel = new WaitersOfOrderModel();
148 pizzasModel = new PizzasOfOrderModel();
151 public static PizzeriaAgent getInstance() {
152 return pizzeriaAgent;
155 public OrdersOverviewModel getOrdersModel() {
159 public GroupsOverviewModel getGroupModel() {
163 public TablesOverviewModel getTablesModel() {
167 public WaitersOfOrderModel getWaitersModel() {
171 public PizzasOfOrderModel getPizzasModel() {
175 public interface TablesCreatedHandler {
176 public void freeTablesCreated(List<Table> tables);