Merge branch 'master' of
authorGregor Riegler <gregor.riegler@gmail.com>
Mon, 6 May 2013 00:08:07 +0000 (02:08 +0200)
committerGregor Riegler <gregor.riegler@gmail.com>
Mon, 6 May 2013 00:08:07 +0000 (02:08 +0200)
https://rgregor@bitbucket.org/rgregor/sbc-ss-2013.git

Conflicts:
src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/GroupData.java

24 files changed:
pom.xml
src/main/java/at/ac/tuwien/sbc/valesriegler/DEP_GroupDataMin.java
src/main/java/at/ac/tuwien/sbc/valesriegler/DEP_Order.java
src/main/java/at/ac/tuwien/sbc/valesriegler/DEP_Table.java
src/main/java/at/ac/tuwien/sbc/valesriegler/common/HasId.java [new file with mode: 0644]
src/main/java/at/ac/tuwien/sbc/valesriegler/common/TableModel.java
src/main/java/at/ac/tuwien/sbc/valesriegler/common/Util.java [moved from src/main/java/at/ac/tuwien/sbc/valesriegler/common/SpaceUtil.java with 83% similarity]
src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
src/main/java/at/ac/tuwien/sbc/valesriegler/group/GroupAgent.java
src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupFrame.java
src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java
src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/GroupsOverviewModel.java
src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/OrdersOverviewModel.java
src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/TablesOverviewModel.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/GroupData.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/Order.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/Pizza.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/PizzaOrder.java
src/main/java/at/ac/tuwien/sbc/valesriegler/types/Table.java
src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/XVSMConnector.java
src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/cook/Cook.java [new file with mode: 0644]
src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/waiter/Waiter.java

diff --git a/pom.xml b/pom.xml
index fe96bd4668dec6187bbb61d6b203a6a4da662d00..2ad4a6c36c305b2a4b27e715fb7b2b866680933b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                                </exclusion>
                        </exclusions>
                </dependency>
+               <dependency>
+                       <groupId>org.mozartspaces</groupId>
+                       <artifactId>mozartspaces-notifications</artifactId>
+                       <version>2.2-SNAPSHOT</version>
+               </dependency>
 
        </dependencies>
 
        <build>
                <plugins>
-                       <!-- <plugin>
-                               <groupId>org.codehaus.mojo</groupId>
-                               <artifactId>exec-maven-plugin</artifactId>
-                               <version>1.2.1</version>
-                       </plugin> -->
+                       <!-- <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> 
+                               <version>1.2.1</version> </plugin> -->
                </plugins>
                <pluginManagement>
                        <plugins>
                                </plugins>
                        </build>
                </profile>
-               
+
                <profile>
                        <id>pizzeria</id>
                        <build>
                                                                <argument>-classpath</argument>
                                                                <classpath />
                                                                <argument>at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent</argument>
-                                               <!--            <argument>xvsm://localhost:4242</argument> -->
+                                                               <!-- <argument>xvsm://localhost:4242</argument> -->
                                                        </arguments>
                                                </configuration>
                                        </plugin>
index c4e3f6bb6d2414ef86efc17d348e4605902cb200..ecbc960cb92d5e60e6be7d4e27491ab265ceffc5 100644 (file)
@@ -2,13 +2,15 @@ package at.ac.tuwien.sbc.valesriegler;
 
 import java.io.Serializable;
 
+import at.ac.tuwien.sbc.valesriegler.common.HasId;
+
 /**
  * A group bean which only has an id and a size.
  * 
  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
  */
 @Deprecated
-public class DEP_GroupDataMin implements Serializable {
+public class DEP_GroupDataMin implements Serializable, HasId {
        private int id;
        private int size;
 
index c91789f2dfa5f1b70e7c3d4e6838ef857adc2b57..9f5a77fa5e5d7e86de1497b3d80b77be4cb26ebc 100644 (file)
@@ -2,10 +2,11 @@ package at.ac.tuwien.sbc.valesriegler;
 
 import java.util.List;
 
+import at.ac.tuwien.sbc.valesriegler.common.HasId;
 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
 
 @Deprecated
-public class DEP_Order {
+public class DEP_Order implements HasId {
        private int id;
        private int tableId;
        private int groupId;
index 4de9c66e7315651aa6282764102aa82a88c0487d..8ca0ce56ca1550ad7b445cf903acb8cdb62dfba8 100644 (file)
@@ -2,12 +2,14 @@ package at.ac.tuwien.sbc.valesriegler;
 
 import java.io.Serializable;
 
+import at.ac.tuwien.sbc.valesriegler.common.HasId;
+
 @Deprecated
-public class DEP_Table implements Serializable {
+public class DEP_Table implements Serializable, HasId {
 
-       private int id;
+       private Integer id;
        private TableStatus status;
-       private int groupId;
+       private Integer groupId;
 
        public int getId() {
                return id;
@@ -25,7 +27,7 @@ public class DEP_Table implements Serializable {
                this.status = status;
        }
 
-       public int getGroupId() {
+       public Integer getGroupId() {
                return groupId;
        }
 
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/common/HasId.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/common/HasId.java
new file mode 100644 (file)
index 0000000..7a685db
--- /dev/null
@@ -0,0 +1,5 @@
+package at.ac.tuwien.sbc.valesriegler.common;
+
+public interface HasId {
+       public int getId();
+}
index f03350a6d5e12b49d56ede75922527396a60ff5e..f58b8ba1ab6979efea30d9939f7631f22eaa5661 100644 (file)
@@ -1,8 +1,8 @@
 package at.ac.tuwien.sbc.valesriegler.common;
 
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentSkipListMap;
 
 import javax.swing.table.AbstractTableModel;
 
@@ -12,13 +12,15 @@ import javax.swing.table.AbstractTableModel;
  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
  *
  */
-public abstract class TableModel<Item> extends AbstractTableModel {
+public abstract class TableModel<Item extends HasId> extends AbstractTableModel {
        protected static final String UNHANDLEDCOLUMN = "Unhandled column";
        
-       protected final List<Item> items = Collections.synchronizedList(new ArrayList<Item>());
+       protected final Map<Integer, Item> items = new ConcurrentSkipListMap<Integer, Item>();
        
        public void addItems(List<Item> newItems) {
-               items.addAll(newItems);
+               for (Item item : newItems) {
+                       items.put(item.getId(), item);
+               }
                
                fireTableDataChanged();
        }
similarity index 83%
rename from src/main/java/at/ac/tuwien/sbc/valesriegler/common/SpaceUtil.java
rename to src/main/java/at/ac/tuwien/sbc/valesriegler/common/Util.java
index 81f7bf3d5467570bc1e41364a184e836658e5fd4..8f214ec7b34f246d75d234d5b1677f185d123571 100644 (file)
@@ -10,8 +10,12 @@ import org.mozartspaces.core.MzsConstants.Container;
 import org.mozartspaces.core.MzsConstants.RequestTimeout;
 import org.mozartspaces.core.MzsCoreException;
 
-public abstract class SpaceUtil {
+public abstract class Util {
+       // TODO: solve the switch between mom by command-line arguments
+       public static final boolean useJMS = true;
+       
        public static final String TABLES_CONTAINER = "tables";
+       public static final String GROUPS_CONTAINER = "groups";
        public static final String SERVER_ADDR = "xvsm://localhost:9876";
        public static ContainerReference getOrCreateNamedContainer(final String spaceUri, final String containerName, final Capi capi, final List<Coordinator> coordinators)
                        throws MzsCoreException {
index 94adccc5dce27b4e320d9c62fafce9b4ed82e422..15d57abd382a1ee58346a5edc16073d4bab7d8f9 100644 (file)
@@ -3,6 +3,7 @@ package at.ac.tuwien.sbc.valesriegler.group;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import at.ac.tuwien.sbc.valesriegler.common.HasId;
 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
@@ -13,7 +14,7 @@ import at.ac.tuwien.sbc.valesriegler.types.Order;
 import at.ac.tuwien.sbc.valesriegler.types.Table;
 
 // class doing all the Group related work as required.
-public class Group implements Runnable {
+public class Group implements Runnable, HasId {
        private static final Logger log = LoggerFactory.getLogger(Group.class);
        private static int idNext = -1; // TODO: set to 0 after debugging!
 
@@ -107,6 +108,11 @@ public class Group implements Runnable {
                log.debug("bringOrderedPizzas(): " + this);
        }
 
+       @Override
+       public int getId() {
+               return groupData.getId();
+       }
+       
        // pay for the pizzas and leave
        public void payForPizzas(int waiter) {
                groupData.setState(GroupState.PAY);
index e15dd1d3bb9a965f353ae789f15ce4d3a7afa7aa..2502529ced551c8c64aec4eb7fb356db8840473b 100644 (file)
@@ -1,9 +1,22 @@
 package at.ac.tuwien.sbc.valesriegler.group;
 
+import java.io.Serializable;
+import java.rmi.server.Operation;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.management.Notification;
+import javax.management.NotificationListener;
 import javax.swing.SwingUtilities;
 
+import org.mozartspaces.core.CapiUtil;
+import org.mozartspaces.core.Entry;
+
+import at.ac.tuwien.sbc.valesriegler.common.Util;
 import at.ac.tuwien.sbc.valesriegler.group.gui.GroupOverviewModel;
 import at.ac.tuwien.sbc.valesriegler.group.jms.JMSGroupConnector;
+import at.ac.tuwien.sbc.valesriegler.types.GroupData;
+import at.ac.tuwien.sbc.valesriegler.xvsm.XVSMConnector;
 
 /**
  * The Main class of the Group component.
@@ -15,20 +28,32 @@ import at.ac.tuwien.sbc.valesriegler.group.jms.JMSGroupConnector;
  * 
  */
 public class GroupAgent {
+       
+       
        public static GroupAgent groupAgent;
        private GroupOverviewModel groupModel;
        private AbstractGroupConnector groupconn;
+       private XVSMConnector xvsm;
 
        public static void main(String[] args) {
                // TODO: use jms and xvsm manager here.
                groupAgent = new GroupAgent(new JMSGroupConnector());
+               
                SwingUtilities.invokeLater(new GroupGUI());
        }
 
        public GroupAgent(JMSGroupConnector groupconn) {
                groupModel = new GroupOverviewModel();
-               this.groupconn = groupconn;
-               groupconn.init();
+               if(Util.useJMS) {
+                       this.groupconn = groupconn;
+                       groupconn.init();
+               }
+               else {
+                       xvsm = new XVSMConnector();
+                       xvsm.initSpaceCommunication();
+                       xvsm.useGroupsContainer();
+
+               }
        }
 
        public static GroupAgent getInstance() {
@@ -42,4 +67,16 @@ public class GroupAgent {
        public GroupOverviewModel getGroupModel() {
                return groupModel;
        }
+
+       public void onGroupsCreated(List<Group> newGroups) {
+               if(!Util.useJMS) {
+                       List<GroupData> groupData = new ArrayList<>();
+                       
+                       for (Group group : newGroups) {
+                               groupData.add(group.getGroupData());
+                       }
+                       xvsm.createGroups(groupData);
+               }
+
+       }
 }
index beceb22833813267c0aa456b4c350793e47ede28..9393982159bfe96199c2c383444b4476f607cb69 100644 (file)
@@ -20,8 +20,12 @@ import javax.swing.ScrollPaneConstants;
 import javax.swing.SpinnerNumberModel;
 import javax.swing.border.TitledBorder;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import at.ac.tuwien.sbc.valesriegler.group.Group;
 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
+import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
 import at.ac.tuwien.sbc.valesriegler.types.Order;
 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
@@ -34,6 +38,8 @@ import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
  */
 @SuppressWarnings("serial")
 public class GroupFrame extends JFrame {
+       private static final Logger log = LoggerFactory.getLogger(GroupFrame.class);
+       
        public GroupFrame(GroupOverviewModel groupModel) {
                super("Groups");
                JPanel wrapper = new JPanel();
@@ -149,7 +155,9 @@ public class GroupFrame extends JFrame {
 
                                newGroups.add(group);
                        }
-                       GroupAgent.getInstance().getGroupModel().addItems(newGroups);
+                       GroupOverviewModel groupModel = GroupAgent.getInstance().getGroupModel();
+                       groupModel.addItems(newGroups);
+                       GroupAgent.getInstance().onGroupsCreated(newGroups);
                }
 
                public void handleCancel() {
index 4d7e7a8d247aefbd01b106f33ac1f0cbf9684c00..3ebbfe1e2aeecef640b396a89692408ae05fecae 100644 (file)
@@ -1,5 +1,7 @@
 package at.ac.tuwien.sbc.valesriegler.group.gui;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
@@ -7,7 +9,9 @@ import java.util.Set;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import at.ac.tuwien.sbc.valesriegler.DEP_Table;
 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
+import at.ac.tuwien.sbc.valesriegler.common.Util;
 import at.ac.tuwien.sbc.valesriegler.group.Group;
 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
@@ -23,7 +27,7 @@ public class GroupOverviewModel extends TableModel<Group> {
 
        public GroupOverviewModel() {
                super();
-               super.items.add(new Group()); // TODO: remove, debuggroup!
+//             super.items.add(new Group()); // TODO: remove, debuggroup!
        }
 
        @Override
@@ -32,20 +36,17 @@ public class GroupOverviewModel extends TableModel<Group> {
        }
 
        public List<Group> getItems() {
-               return items;
+               return new ArrayList<>(items.values());
        }
 
        public Group getGroupByID(int id) {
-               for (Group group : items) {
-                       if (group.getGroupData().getId() == id)
-                               return group;
-               }
-               return null;
+               return items.get(id);
        }
 
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
-               Group group = items.get(rowIndex);
+               List<Group> values = new ArrayList<>(items.values());
+               Group group = values.get(rowIndex);
                String wantedColumn = COLUMNS[columnIndex];
                switch (wantedColumn) {
                case ID:
@@ -105,7 +106,7 @@ public class GroupOverviewModel extends TableModel<Group> {
                log.info("addItems()");
                super.addItems(newItems);
                for (Group g : newItems) {
-                       g.goGrabSomeFood();
+                       if(Util.useJMS) g.goGrabSomeFood();
                }
        }
 }
index 9350462ac07877dd6ff3185882dcb5eb7a53178b..cb7a5c1ed42e5d7b26406ab86ca9d5d18b614085 100644 (file)
@@ -2,6 +2,8 @@ package at.ac.tuwien.sbc.valesriegler.pizzeria;
 
 import java.util.List;
 
+import javax.management.Notification;
+import javax.management.NotificationListener;
 import javax.swing.SwingUtilities;
 
 import org.mozartspaces.core.MzsCoreException;
@@ -9,6 +11,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import at.ac.tuwien.sbc.valesriegler.DEP_Table;
+import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.PizzeriaFrame;
 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.GroupsOverviewModel;
 import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewModel;
@@ -30,6 +34,11 @@ public class PizzeriaAgent {
 
        private static final String USAGE = "Usage: java PizzeriaAgent XVSM|JMS";
 
+       private static PizzeriaAgent pizzeriaAgent;
+
+       
+
+
        private OrdersOverviewModel ordersModel;
        private GroupsOverviewModel groupModel;
        private TablesOverviewModel tablesModel;
@@ -42,9 +51,10 @@ public class PizzeriaAgent {
                // if (args.length != 1) {
                // throw new IllegalArgumentException(USAGE);
                // } else {
-               String mom = "JMS";// args[0];
+//             String mom = "XVSM";// args[0];
+               String mom = Util.useJMS ? "JMS" : "XVSM"; 
                log.info(mom);
-               PizzeriaAgent pizzeriaAgent = new PizzeriaAgent();
+               pizzeriaAgent = new PizzeriaAgent();
                switch (mom) {
                case "XVSM":
                        pizzeriaAgent.createModels();
@@ -68,15 +78,12 @@ public class PizzeriaAgent {
        }
 
        private void initXVSM() {
-               try {
                        xvsm = new XVSMConnector();
                        xvsm.initSpaceCommunication();
-
-               } catch (MzsCoreException e) {
-                       log.error(e.getMessage());
-                       log.error("The Pizzeria has no Space connection! Have you started the Space Server?");
-                       System.exit(1);
-               }
+                       xvsm.useTablesContainer();
+                       xvsm.useGroupsContainer();
+                       
+                       xvsm.initPizzeriaNotifications();
        }
 
        private void initGUI() {
@@ -87,12 +94,14 @@ public class PizzeriaAgent {
        class PizzeriaGUI implements Runnable {
                @Override
                public void run() {
-                       PizzeriaFrame frame = new PizzeriaFrame(ordersModel, groupModel, tablesModel, waitersModel, pizzasModel);
+                       PizzeriaFrame frame = new PizzeriaFrame();
                        frame.setOnTablesCreatedHandler(new TablesCreatedHandler() {
 
                                @Override
                                public void freeTablesCreated(List<DEP_Table> tables) {
-                                       // xvsm.sendFreeTablesToSpace(tables);
+                                        if(!Util.useJMS) {
+                                                xvsm.sendTablesToSpace(tables);
+                                        }
                                }
 
                        });
@@ -109,8 +118,33 @@ public class PizzeriaAgent {
                waitersModel = new WaitersOfOrderModel();
                pizzasModel = new PizzasOfOrderModel();
        }
+       
+       public static PizzeriaAgent getInstance() {
+               return pizzeriaAgent;
+       }
+
+       public OrdersOverviewModel getOrdersModel() {
+               return ordersModel;
+       }
 
+       public GroupsOverviewModel getGroupModel() {
+               return groupModel;
+       }
+
+       public TablesOverviewModel getTablesModel() {
+               return tablesModel;
+       }
+
+       public WaitersOfOrderModel getWaitersModel() {
+               return waitersModel;
+       }
+
+       public PizzasOfOrderModel getPizzasModel() {
+               return pizzasModel;
+       }
+       
        public interface TablesCreatedHandler {
                public void freeTablesCreated(List<DEP_Table> tables);
        }
+
 }
index f9a7e63bbc5a673bed910cdfffde2fedcdc4e3b9..6a2fcba9c5c2ea0fa2872cc38605a9b1533ddcb4 100644 (file)
@@ -15,12 +15,16 @@ import javax.swing.JScrollPane;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 import javax.swing.ScrollPaneConstants;
+import javax.swing.SwingUtilities;
 import javax.swing.border.TitledBorder;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 import javax.swing.event.TableModelEvent;
 import javax.swing.event.TableModelListener;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import at.ac.tuwien.sbc.valesriegler.DEP_Order;
 import at.ac.tuwien.sbc.valesriegler.DEP_Table;
 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
@@ -41,6 +45,8 @@ import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
  */
 public class PizzeriaFrame extends JFrame {
+       private static final Logger log = LoggerFactory.getLogger(PizzeriaFrame.class);
+       
        private static final String WRONG_INPUT = "Wrong input";
        private static final String THE_NUMBER_MUST_BE_GREATER_OR_EQUAL_TO_1 = "The number must be greater or equal to 1";
        private static final String YOUR_INPUT_CANNOT_BE_PARSED_AS_A_NUMBER = "Your input cannot be parsed as a number!";
@@ -49,27 +55,14 @@ public class PizzeriaFrame extends JFrame {
        private static String PIZZAS_CAPTION = "Pizzas of order %d";
        private static String FREE_TABLES = "There are currently %d free table(s)";
 
-       private OrdersOverviewModel ordersModel;
-       private GroupsOverviewModel groupModel;
-       private TablesOverviewModel tablesModel;
-       private WaitersOfOrderModel waitersModel;
-       private PizzasOfOrderModel pizzasModel;
-
        private TablesCreatedHandler onTablesCreatedHandler;
 
-       public PizzeriaFrame(OrdersOverviewModel ordersModel, GroupsOverviewModel groupModel,
-                       TablesOverviewModel tablesModel, WaitersOfOrderModel waitersModel, PizzasOfOrderModel pizzasModel) {
+       public PizzeriaFrame() {
                super("Pizzeria");
-
-               this.ordersModel = ordersModel;
-               this.groupModel = groupModel;
-               this.tablesModel = tablesModel;
-               this.waitersModel = waitersModel;
-               this.pizzasModel = pizzasModel;
        }
 
        public void start() {
-               initModels();
+               
 
                JPanel wrapper = new JPanel();
                GridLayout wrapperLayout = new GridLayout(2, 2);
@@ -89,6 +82,8 @@ public class PizzeriaFrame extends JFrame {
 
                setContentPane(wrapper);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+               
+               initModels();
        }
 
        private int getNumberOfTables() {
@@ -111,13 +106,13 @@ public class PizzeriaFrame extends JFrame {
                return numberOfTables;
        }
 
-       private void initModels() {
+       public void initModels() {
                List<DEP_Order> orders = getOrdersTestData();
-               ordersModel.setItems(orders);
+               PizzeriaAgent.getInstance().getOrdersModel().setItems(orders);
 
                // When the tables get created in the first place, the handler is informed
                int numberOfTables = getNumberOfTables();
-               List<DEP_Table> freeTablesCreated = tablesModel.createFreeTables(numberOfTables);
+               List<DEP_Table> freeTablesCreated = PizzeriaAgent.getInstance().getTablesModel().createFreeTables(numberOfTables);
                onTablesCreatedHandler.freeTablesCreated(freeTablesCreated);
 
        }
@@ -129,8 +124,8 @@ public class PizzeriaFrame extends JFrame {
 
                final JPanel waitersPanel = new JPanel();
                final JPanel pizzasPanel = new JPanel();
-               createTableInTitledPanel(waitersPanel, waitersModel, "");
-               createTableInTitledPanel(pizzasPanel, pizzasModel, "");
+               createTableInTitledPanel(waitersPanel, PizzeriaAgent.getInstance().getWaitersModel(), "");
+               createTableInTitledPanel(pizzasPanel, PizzeriaAgent.getInstance().getPizzasModel(), "");
 
                /**
                 * Update the displayed order in the waiter and pizza detail tables when an
@@ -142,11 +137,11 @@ public class PizzeriaFrame extends JFrame {
                                ListSelectionModel lsm = (ListSelectionModel) e.getSource();
                                int minIndex = lsm.getMinSelectionIndex();
 
-                               DEP_Order currentOrder = ordersModel.getOrderOfRow(minIndex);
+                               DEP_Order currentOrder = PizzeriaAgent.getInstance().getOrdersModel().getOrderOfRow(minIndex);
                                waitersPanel.setBorder(new TitledBorder(String.format(WAITER_IDS_CAPTION, currentOrder.getId())));
                                pizzasPanel.setBorder(new TitledBorder(String.format(PIZZAS_CAPTION, currentOrder.getId())));
-                               waitersModel.setCurrentOrder(currentOrder);
-                               pizzasModel.setCurrentOrder(currentOrder);
+                               PizzeriaAgent.getInstance().getWaitersModel().setCurrentOrder(currentOrder);
+                               PizzeriaAgent.getInstance().getPizzasModel().setCurrentOrder(currentOrder);
 
                                waitersPanel.setVisible(true);
                                pizzasPanel.setVisible(true);
@@ -164,7 +159,7 @@ public class PizzeriaFrame extends JFrame {
 
        private JTable initOrdersOverview(JPanel wrapper) {
                JPanel tablePanel = new JPanel();
-               JTable orderTable = createTableInTitledPanel(tablePanel, ordersModel, "Orders");
+               JTable orderTable = createTableInTitledPanel(tablePanel, PizzeriaAgent.getInstance().getOrdersModel(), "Orders");
 
                wrapper.add(tablePanel);
 
@@ -173,7 +168,7 @@ public class PizzeriaFrame extends JFrame {
 
        private void initWaitingGroupsOverview(JPanel wrapper) {
                JPanel tablePanel = new JPanel();
-               createTableInTitledPanel(tablePanel, groupModel, "Groups");
+               createTableInTitledPanel(tablePanel, PizzeriaAgent.getInstance().getGroupModel(), "Groups");
 
                wrapper.add(tablePanel);
        }
@@ -182,14 +177,21 @@ public class PizzeriaFrame extends JFrame {
                JPanel scrollPanePanel = new JPanel(new GridBagLayout());
                final JLabel freeTablesLabel = new JLabel(getNumberOfFreeTables());
                scrollPanePanel.add(freeTablesLabel, new GridBagConstraints());
-               createTableInTitledPanel(scrollPanePanel, tablesModel, "Tables");
+               createTableInTitledPanel(scrollPanePanel, PizzeriaAgent.getInstance().getTablesModel(), "Tables");
 
-               tablesModel.addTableModelListener(new TableModelListener() {
-                       @Override
-                       public void tableChanged(TableModelEvent e) {
-                               freeTablesLabel.setText(getNumberOfFreeTables());
-                       }
-               });
+               PizzeriaAgent.getInstance().getTablesModel()
+                               .addTableModelListener(new TableModelListener() {
+                                       @Override
+                                       public void tableChanged(TableModelEvent e) {
+                                               String numberOfFreeTables = getNumberOfFreeTables();
+                                               log.info("Number of free tables changed: {}",
+                                                               numberOfFreeTables);
+
+                                               freeTablesLabel.setText(numberOfFreeTables);
+
+                                       }
+                               });
+               
 
                wrapper.add(scrollPanePanel);
        }
@@ -244,7 +246,7 @@ public class PizzeriaFrame extends JFrame {
        }
 
        private String getNumberOfFreeTables() {
-               return String.format(FREE_TABLES, tablesModel.getNumberOfFreeTables());
+               return String.format(FREE_TABLES,  PizzeriaAgent.getInstance().getTablesModel().getNumberOfFreeTables());
        }
 
        public void setOnTablesCreatedHandler(PizzeriaAgent.TablesCreatedHandler tablesCreatedHandler) {
index 498e820ad065bd4d42b876ef46dd6b4796cf7d33..f226fe83328a2268050113fe0178a1c4ea6f109a 100644 (file)
@@ -1,6 +1,10 @@
 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import at.ac.tuwien.sbc.valesriegler.DEP_GroupDataMin;
+import at.ac.tuwien.sbc.valesriegler.DEP_Order;
 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
 
 public class GroupsOverviewModel extends TableModel<DEP_GroupDataMin> {
@@ -18,7 +22,8 @@ public class GroupsOverviewModel extends TableModel<DEP_GroupDataMin> {
 
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
-               DEP_GroupDataMin group = items.get(rowIndex);
+               List<DEP_GroupDataMin> values = new ArrayList<>(items.values());
+               DEP_GroupDataMin group = values.get(rowIndex);
                String wantedColumn = COLUMNS[columnIndex];
                switch(wantedColumn) {
                case ID : return group.getId();
index b16b2c3646c9661db4a31d56b17ae7dc63d45fbf..a55128ecb1eb10b66fa43579fe3ee2da07d8d6d4 100644 (file)
@@ -1,6 +1,7 @@
 package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import at.ac.tuwien.sbc.valesriegler.DEP_Order;
@@ -18,7 +19,8 @@ public class OrdersOverviewModel extends TableModel<DEP_Order> {
        
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
-               DEP_Order order = items.get(rowIndex);
+               List<DEP_Order> values = new ArrayList<>(items.values());
+               DEP_Order order = values.get(rowIndex);
                String wantedColumn = COLUMNS[columnIndex];
                switch(wantedColumn) {
                case ID : return order.getId();
@@ -30,7 +32,7 @@ public class OrdersOverviewModel extends TableModel<DEP_Order> {
        }
        
        public DEP_Order getOrderOfRow(int rowIndex) {
-               return items.get(rowIndex);
+               return new ArrayList<>(items.values()).get(rowIndex);
        }
 
        @Override
index 498eece5b74922925bae6a8d2b1283d1091ff907..16102eddb140ea0795a7004c4969e362e8179a2b 100644 (file)
@@ -3,6 +3,7 @@ package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
 import java.util.ArrayList;
 import java.util.List;
 
+import at.ac.tuwien.sbc.valesriegler.DEP_GroupDataMin;
 import at.ac.tuwien.sbc.valesriegler.DEP_Table;
 import at.ac.tuwien.sbc.valesriegler.DEP_Table.TableStatus;
 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
@@ -23,7 +24,8 @@ public class TablesOverviewModel extends TableModel<DEP_Table> {
 
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
-               DEP_Table table = items.get(rowIndex);
+               List<DEP_Table> values = new ArrayList<>(items.values());
+               DEP_Table table = values.get(rowIndex);
                String wantedColumn = COLUMNS[columnIndex];
                switch(wantedColumn) {
                case TABLE_ID : return table.getId();
@@ -41,7 +43,7 @@ public class TablesOverviewModel extends TableModel<DEP_Table> {
                List<Integer> ids = new ArrayList<>();
                
                synchronized(items) {
-                       for(DEP_Table table : items) {
+                       for(DEP_Table table : items.values()) {
                                if(table.getStatus() == TableStatus.FREE) {
                                        ids.add(table.getId());
                                }
@@ -58,7 +60,6 @@ public class TablesOverviewModel extends TableModel<DEP_Table> {
                                DEP_Table table = createFreeTable();
                                tables.add(table);
                        }
-                       addItems(tables);
                        
                        return tables;
                }
@@ -72,4 +73,11 @@ public class TablesOverviewModel extends TableModel<DEP_Table> {
                return table;
        }
 
+       public void mergeTables(List<DEP_Table> tables) {
+               for (DEP_Table table : tables) {
+                       items.put(table.getId(), table);
+               }
+               fireTableDataChanged();
+       }
+
 }
index e8082e4a672be4e4a3cb0e9733d9de3ed4fcc26c..e940c9eff0de616c2f0874729beb06bb342bf3ac 100644 (file)
@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.mozartspaces.capi3.Queryable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -14,26 +15,26 @@ import org.slf4j.LoggerFactory;
  * @author jan
  * 
  */
+@Queryable(autoindex = true)
 public class GroupData implements Serializable {
        private static final Logger log = LoggerFactory.getLogger(GroupData.class);
 
-       final private int id;
+       final private Integer id;
        private GroupState state = GroupState.NEW;
-       private int size;
+       private Integer size;
 
        private Table table;
-
-       private int tableWaiter;
+       private Integer tableWaiter;
 
        private Order order;
-       private int orderWaiter;
-       private int servingWaiter;
-       private int payingWaiter;
+       private Integer orderWaiter;
+       private Integer servingWaiter;
+       private Integer payingWaiter;
 
        @Deprecated
        private List<PizzaType> pizzas = new ArrayList<PizzaType>();
 
-       public GroupData(int id) {
+       public GroupData(Integer id) {
                this.id = id;
        }
 
index 3685bb6f359f9d2a9749c91a5781dc169d7cdfd6..2c5bcaac0d97b05c0d80e161be3c97c4f670a1ff 100644 (file)
@@ -3,8 +3,11 @@ package at.ac.tuwien.sbc.valesriegler.types;
 import java.io.Serializable;
 import java.util.List;
 
+import org.mozartspaces.capi3.Queryable;
+
 import at.ac.tuwien.sbc.valesriegler.group.Group;
 
+@Queryable(autoindex = true)
 public class Order implements Serializable {
        private static int idNext = 0;
        private final int id;
index feb448d84fe4563b17685600b246aab269594527..a7b8ad1242d1b91147b5c411223552238d865e72 100644 (file)
@@ -25,7 +25,7 @@ public class Pizza implements Serializable {
 
        @Override
        public String toString() {
-               return "Pizza [id=" + id + ", type=" + type + ", cookId=" + cookId + ", deliveryAgent=" + deliveryAgent + "]";
+               return "Pizza [type=" + type + ", id=" + id + ", cookId=" + cookId + ", deliveryAgent=" + deliveryAgent + "]";
        }
 
 }
index e5a102c6acceea600d4bb9f25b1a76d7bcd7f9d8..d1b9fbad7f4d86b829ed2ef9ea32525a9745c191 100644 (file)
@@ -2,7 +2,9 @@ package at.ac.tuwien.sbc.valesriegler.types;
 
 import java.io.Serializable;
 
-public class PizzaOrder implements Serializable {
+import at.ac.tuwien.sbc.valesriegler.common.HasId;
+
+public class PizzaOrder implements Serializable, HasId {
        private static int nextID = 0;
        final private int id;
 
index 0b48bcc5495747134c722a41e2169f545218184b..5c890b2b4df7daa1850991ce6a7eeef366768873 100644 (file)
@@ -2,6 +2,9 @@ package at.ac.tuwien.sbc.valesriegler.types;
 
 import java.io.Serializable;
 
+import org.mozartspaces.capi3.Queryable;
+
+@Queryable(autoindex = true)
 public class Table implements Serializable {
        private final int id;
 
index 6dc29331489f1b14b79ae7081faf77d4799c149d..39b3ddaec4d2ad8409471c9aa9b22dbd616b291f 100644 (file)
@@ -1,23 +1,41 @@
 package at.ac.tuwien.sbc.valesriegler.xvsm;
 
 import java.io.Serializable;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import javax.swing.SwingUtilities;
+
 import org.mozartspaces.capi3.AnyCoordinator;
 import org.mozartspaces.capi3.Coordinator;
+import org.mozartspaces.capi3.FifoCoordinator;
+import org.mozartspaces.capi3.LindaCoordinator;
+import org.mozartspaces.capi3.LindaCoordinator.LindaSelector;
 import org.mozartspaces.core.Capi;
 import org.mozartspaces.core.ContainerReference;
 import org.mozartspaces.core.DefaultMzsCore;
 import org.mozartspaces.core.Entry;
+import org.mozartspaces.core.MzsConstants.RequestTimeout;
 import org.mozartspaces.core.MzsCore;
 import org.mozartspaces.core.MzsCoreException;
+import org.mozartspaces.core.TransactionReference;
+import org.mozartspaces.notifications.Notification;
+import org.mozartspaces.notifications.NotificationListener;
+import org.mozartspaces.notifications.NotificationManager;
+import org.mozartspaces.notifications.Operation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import at.ac.tuwien.sbc.valesriegler.DEP_Table;
-import at.ac.tuwien.sbc.valesriegler.common.SpaceUtil;
+import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
+import at.ac.tuwien.sbc.valesriegler.types.GroupData;
+import at.ac.tuwien.sbc.valesriegler.types.GroupState;
+import at.ac.tuwien.sbc.valesriegler.types.Order;
+import at.ac.tuwien.sbc.valesriegler.types.Table;
+
 
 /**
  * Responsible for XVSM Communication
@@ -29,16 +47,49 @@ public class XVSMConnector {
        private static final Logger log = LoggerFactory.getLogger(XVSMConnector.class);
        
        private ContainerReference tablesContainer;
+       private ContainerReference groupsContainer;
+//     private ContainerReference notificationContainer;
        private Capi capi;
+       private NotificationManager notificationMgr;
 
        
-       public void initSpaceCommunication() throws MzsCoreException {
-               MzsCore core = DefaultMzsCore.newInstanceWithoutSpace();
-               capi = new Capi(core);
-               tablesContainer = SpaceUtil.getOrCreateNamedContainer(SpaceUtil.SERVER_ADDR, SpaceUtil.TABLES_CONTAINER, capi, Arrays.asList((Coordinator) new AnyCoordinator()));
+       public void initSpaceCommunication()  {
+               try {
+                       MzsCore core = DefaultMzsCore.newInstanceWithoutSpace();
+                       capi = new Capi(core);
+                       notificationMgr = new NotificationManager(core);
+               } catch (Exception e) {
+                       log.error("Space connection could not be established! Have you started the Space Server?");
+                       handleSpaceErrorAndTerminate(e);
+               }
+       }
+       
+       public void useTablesContainer() {
+               try {
+                       tablesContainer = Util.getOrCreateNamedContainer(Util.SERVER_ADDR, Util.TABLES_CONTAINER, capi, createCoordinators(new AnyCoordinator()));
+               } catch (MzsCoreException e) {
+                       handleSpaceErrorAndTerminate(e);
+               }
+       }
+       
+       public void useGroupsContainer() {
+               try {
+                       groupsContainer = Util.getOrCreateNamedContainer(Util.SERVER_ADDR, Util.GROUPS_CONTAINER, capi, createCoordinators(new AnyCoordinator(), new LindaCoordinator(false)));
+               } catch (MzsCoreException e) {
+                       handleSpaceErrorAndTerminate(e);
+               }
+       }
+       
+       private List<Coordinator> createCoordinators(Coordinator... coordinator) {
+               return Arrays.asList(coordinator);
+       }
+       
+       private void handleSpaceErrorAndTerminate(Exception e) {
+               log.error(e.getMessage());
+               System.exit(1);
        }
        
-       public void sendFreeTablesToSpace(List<DEP_Table> tables) {
+       public void sendTablesToSpace(List<DEP_Table> tables) {
                try {
                        List<Entry> entries = new ArrayList<>();
                        for (DEP_Table table : tables) {
@@ -46,22 +97,174 @@ public class XVSMConnector {
                        }
                        capi.write(entries, tablesContainer);
                        
-                       log.info("Wrote Free tables to Space!");
+                       log.info("Wrote tables to Space!");
                } catch (MzsCoreException e) {
+                       log.info(e.getMessage());
+               }
+       }
+
+       public void createGroups(List<GroupData> newGroups) {
+               try {
+                       List<Entry> entries = new ArrayList<>();
+                       for (GroupData group : newGroups) {
+                               entries.add(new Entry(group));
+                       }
+                       capi.write(entries, groupsContainer);
+                       
+                       log.info("Wrote new Groups to Space!");
+               } catch (MzsCoreException e) {
+                       log.info(e.getMessage());
                        e.printStackTrace();
                }
        }
 
-       public List<DEP_Table> readTables() {
-               ArrayList<DEP_Table> tables = new ArrayList<>();
+       public void handleWaitingGroup(int id) {
                try {
-                       tables = capi.take(tablesContainer);
+                       TransactionReference tx = capi.createTransaction(RequestTimeout.INFINITE, URI.create(Util.SERVER_ADDR));
+                       DEP_Table table = null;
+                       try {
+                               ArrayList<DEP_Table> tables = capi.take(tablesContainer, FifoCoordinator.newSelector(), RequestTimeout.ZERO, tx);
+                               table = tables.get(0);
+                       } catch (Exception e) {
+                               log.info("There is no free table");
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       
+                       GroupData groupData = new GroupData(null);
+                       groupData.setState(GroupState.WAITING);
+                       LindaSelector sel = LindaCoordinator.newSelector(groupData, 1);
+                       ArrayList<GroupData> waitingGroups = null;
+                       
+                       try {
+                               waitingGroups = capi.take(groupsContainer, sel, RequestTimeout.ZERO, tx);
+                       } catch (Exception e) {
+                               log.info("There is no waiting group");
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       
+                       GroupData group = waitingGroups.get(0);
+                       group.setTable(new Table(table.getGroupId()));
+                       group.setTableWaiter(id);
+                       group.setState(GroupState.SITTING);
+                       
+                       try {
+                               capi.write(groupsContainer, RequestTimeout.TRY_ONCE,  tx, new Entry(group));
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       
+                       try {
+                               capi.write(new Entry(table), tablesContainer, RequestTimeout.TRY_ONCE, tx);
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       
+                       capi.commitTransaction(tx);
                } catch (MzsCoreException e) {
-                       log.error(e.getMessage());
                        e.printStackTrace();
-                       System.exit(1);
                }
-               return tables;
        }
 
+       public void handleOrderRequest(int id) {
+               try {
+                       TransactionReference tx = capi.createTransaction(RequestTimeout.INFINITE, URI.create(Util.SERVER_ADDR));
+                                       
+                       GroupData groupData = new GroupData(null);
+                       groupData.setState(GroupState.SITTING);
+                       LindaSelector sel = LindaCoordinator.newSelector(groupData, 1);
+                       ArrayList<GroupData> sittingGroups = null;
+                       
+                       try {
+                               sittingGroups = capi.take(groupsContainer, sel, RequestTimeout.ZERO, tx);
+                       } catch (Exception e) {
+                               log.info("There is no sitting group");
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       GroupData sittingGroup = sittingGroups.get(0);
+                       Order order = sittingGroup.getOrder();
+                       sittingGroup.setOrderWaiter(id);
+                       sittingGroup.setState(GroupState.ORDERED);
+                       
+                       try {
+                               capi.write(new Entry(sittingGroup), groupsContainer, RequestTimeout.TRY_ONCE, tx);
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               capi.rollbackTransaction(tx);
+                               return;
+                       }
+                       
+                       capi.commitTransaction(tx);
+                       
+               } catch (MzsCoreException e) {
+                       e.printStackTrace();
+               }
+       }
+
+       public void initPizzeriaNotifications() {
+               // When tables are written to the space the Pizzeria gets informed and sets the new tables in the tables model!
+                NotificationListener tablesListener = new NotificationListener() {
+                   @Override
+                   public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
+                       
+                       final List<DEP_Table> tables = new ArrayList<>();
+                       List<Entry> entryList = (List<Entry>) entries;
+                       for (Entry entry : entryList) {
+                                               tables.add((DEP_Table) entry.getValue());
+                                       }
+                       SwingUtilities.invokeLater(new Runnable() {
+                                               @Override
+                                               public void run() {
+                                                       PizzeriaAgent.getInstance().getTablesModel().mergeTables(tables);
+                                               }
+                                       });
+                   }
+               };
+               
+               NotificationListener groupsListener = new NotificationListener() {
+                   @Override
+                   public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
+                       List<GroupData> tables = (List<GroupData>) entries;
+//                     TODO problem at the moment: Item type of groupoverviewmodel is Group and not GroupData
+                   }
+               };
+               
+               try {
+                       notificationMgr.createNotification(tablesContainer, groupsListener, Operation.WRITE);
+                       notificationMgr.createNotification(tablesContainer, tablesListener, Operation.WRITE);
+               } catch (Exception e) {
+                   e.printStackTrace();
+               }
+       }
+       
+       public void initGroupNotifications() {
+                NotificationListener notifListener = new NotificationListener() {
+                   @Override
+                   public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
+                       List<GroupData> groups = (List<GroupData>) entries;
+
+                       // when a groupdata is changed, call setItems on the groupoverviewmodel. TODO problem at the moment: Item type of groupoverviewmodel is Group and not GroupData
+                   }
+
+               };
+               try {
+                       notificationMgr.createNotification(groupsContainer, notifListener, Operation.WRITE);
+               } catch (Exception e) {
+                  handleSpaceErrorAndTerminate(e);
+               }
+       }
+
+       public void handlePaymentRequest() {
+       }
+
+       public void handlePizzaDistribution() {
+       }
+
+
 }
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/cook/Cook.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/cook/Cook.java
new file mode 100644 (file)
index 0000000..59f7308
--- /dev/null
@@ -0,0 +1,53 @@
+package at.ac.tuwien.sbc.valesriegler.xvsm.cook;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.ac.tuwien.sbc.valesriegler.xvsm.XVSMConnector;
+
+public class Cook {
+       private static final String USAGE = "Cook needs exactly one parameter: ID of type Integer";
+       private static final Logger log = LoggerFactory.getLogger(Cook.class);
+       
+       private int id;
+       private XVSMConnector xvsm;
+
+       public static void main(String[] args) {
+               if(args.length != 1) {
+                       throw new IllegalArgumentException(USAGE);
+               }
+               
+               int parsedId = 0;
+               try {
+                       parsedId = Integer.parseInt(args[0]);
+               } catch (NumberFormatException e) {
+                       log.error(USAGE);
+                       return;
+               }
+               
+               Cook cook = new Cook(parsedId);
+               cook.start();
+       }
+
+       private void start() {
+               initSpaceCommunication();
+               
+
+               
+       }
+       
+       private void initSpaceCommunication() {
+               xvsm = new XVSMConnector();
+               xvsm.initSpaceCommunication();
+
+               log.info("Space Connection established!");
+               
+               
+       }
+
+       public Cook(int id) {
+               this.id = id;
+               log.info("I AM A Cook WITH ID {}", id);
+       }
+
+}
index 182d63555b0abc0b87be5c6c08d93d306fa7dfc4..b8fe83c30aff7682e4cd7fb9932b6a8e45bfc80a 100644 (file)
@@ -43,22 +43,24 @@ public class Waiter implements Serializable {
        private void start() {
                initSpaceCommunication();
                
-               List<DEP_Table> tables = xvsm.readTables();
-               
-               log.info("Number of free tables received: {}", tables.size());
-               
+               while(true) {
+                       xvsm.handleWaitingGroup(id);
+                       
+                       xvsm.handleOrderRequest(id);
+                       
+                       xvsm.handlePaymentRequest();
+                       
+                       xvsm.handlePizzaDistribution();
+               }               
        }
        
+
        private void initSpaceCommunication() {
-               try {
-                       xvsm = new XVSMConnector();
-                       xvsm.initSpaceCommunication();
-               } catch (MzsCoreException e) {
-                       log.error(e.getMessage());
-                       log.error("The Waiter has no Space connection! Have you started the Space Server?");
-                       System.exit(1);
-               }
-               
+               xvsm = new XVSMConnector();
+               xvsm.initSpaceCommunication();
+               xvsm.useTablesContainer();
+               xvsm.useGroupsContainer();
+
                log.info("Space Connection established!");