From 81735313646a70368b24b472f8d810bc128c7829 Mon Sep 17 00:00:00 2001
From: Gregor Riegler <gregor.riegler@gmail.com>
Date: Mon, 6 May 2013 17:11:43 +0200
Subject: [PATCH] XVSMConnector refactoring
---
.../sbc/valesriegler/common/TableModel.java | 1 -
.../sbc/valesriegler/group/GroupAgent.java | 2 +-
.../group/gui/GroupOverviewModel.java | 17 +++
.../valesriegler/pizzeria/PizzeriaAgent.java | 38 +++++-
.../pizzeria/gui/PizzeriaFrame.java | 2 +-
.../gui/tablemodels/GroupsOverviewModel.java | 10 ++
.../gui/tablemodels/TablesOverviewModel.java | 24 +---
.../sbc/valesriegler/xvsm/XVSMConnector.java | 128 ++++++------------
8 files changed, 114 insertions(+), 108 deletions(-)
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/common/TableModel.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/common/TableModel.java
index f58b8ba..cc67bbb 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/common/TableModel.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/common/TableModel.java
@@ -46,5 +46,4 @@ public abstract class TableModel<Item extends HasId> extends AbstractTableModel
}
protected abstract String[] getColumns();
-
}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/GroupAgent.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/GroupAgent.java
index 2502529..08b4cfc 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/GroupAgent.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/GroupAgent.java
@@ -75,7 +75,7 @@ public class GroupAgent {
for (Group group : newGroups) {
groupData.add(group.getGroupData());
}
- xvsm.createGroups(groupData);
+ xvsm.sendGroupsToSpace(groupData);
}
}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
index 118f3eb..6933822 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
@@ -11,6 +11,7 @@ import org.slf4j.LoggerFactory;
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.GroupData;
import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
@@ -111,4 +112,20 @@ public class GroupOverviewModel extends TableModel<Group> {
if(Util.useJMS) g.goGrabSomeFood();
}
}
+
+ /**
+ *
+ * This is necessary as in the space version GroupData objects get written to the space. In order to
+ * translate from Group data to the actual group object the group object has to be looked up by the id.
+ *
+ * @param newItems the group data of the corresponding groups
+ */
+ public void addGroupData(List<GroupData> newItems) {
+ List<Group> groups = new ArrayList<>();
+ for (GroupData groupData : newItems) {
+ Group group = items.get(groupData.getId());
+ groups.add(group);
+ }
+ super.addItems(groups);
+ }
}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
index 5b63bb6..6732999 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/PizzeriaAgent.java
@@ -1,9 +1,15 @@
package at.ac.tuwien.sbc.valesriegler.pizzeria;
+import java.io.Serializable;
+import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingUtilities;
+import org.mozartspaces.core.Entry;
+import org.mozartspaces.notifications.Notification;
+import org.mozartspaces.notifications.NotificationListener;
+import org.mozartspaces.notifications.Operation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -14,6 +20,7 @@ import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.OrdersOverviewMode
import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.PizzasOfOrderModel;
import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.TablesOverviewModel;
import at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels.WaitersOfOrderModel;
+import at.ac.tuwien.sbc.valesriegler.types.GroupData;
import at.ac.tuwien.sbc.valesriegler.types.Table;
import at.ac.tuwien.sbc.valesriegler.xvsm.XVSMConnector;
@@ -32,9 +39,6 @@ public class PizzeriaAgent {
private static PizzeriaAgent pizzeriaAgent;
-
-
-
private OrdersOverviewModel ordersModel;
private GroupsOverviewModel groupModel;
private TablesOverviewModel tablesModel;
@@ -79,7 +83,33 @@ public class PizzeriaAgent {
xvsm.useTablesContainer();
xvsm.useGroupsContainer();
- xvsm.initPizzeriaNotifications();
+ NotificationListener tablesListener = new NotificationListener() {
+ @Override
+ public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
+
+ final List<Table> tables = new ArrayList<>();
+ List<Entry> entryList = (List<Entry>) entries;
+ for (Entry entry : entryList) {
+ tables.add((Table) entry.getValue());
+ }
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ PizzeriaAgent.getInstance().getTablesModel().addItems(tables);
+ }
+ });
+ }
+ };
+
+ NotificationListener groupsListener = new NotificationListener() {
+ @Override
+ public void entryOperationFinished(final Notification notification, final Operation operation, final List<? extends Serializable> entries) {
+ List<GroupData> groups = (List<GroupData>) entries;
+ PizzeriaAgent.getInstance().getGroupModel().addItems(groups);
+ }
+ };
+ xvsm.initTablesNotifications(tablesListener);
+ xvsm.initGroupNotifications(groupsListener);
}
private void initGUI() {
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java
index 4ae943c..ac64ec4 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/PizzeriaFrame.java
@@ -159,7 +159,7 @@ public class PizzeriaFrame extends JFrame {
private void initWaitingGroupsOverview(JPanel wrapper) {
JPanel tablePanel = new JPanel();
- createTableInTitledPanel(tablePanel, PizzeriaAgent.getInstance().getGroupModel(), "Groups");
+ createTableInTitledPanel(tablePanel, PizzeriaAgent.getInstance().getGroupModel(), "Waiting groups");
wrapper.add(tablePanel);
}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/GroupsOverviewModel.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/GroupsOverviewModel.java
index 3e21eeb..69ea92f 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/GroupsOverviewModel.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/GroupsOverviewModel.java
@@ -1,10 +1,12 @@
package at.ac.tuwien.sbc.valesriegler.pizzeria.gui.tablemodels;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import at.ac.tuwien.sbc.valesriegler.common.TableModel;
import at.ac.tuwien.sbc.valesriegler.types.GroupData;
+import at.ac.tuwien.sbc.valesriegler.types.GroupState;
public class GroupsOverviewModel extends TableModel<GroupData> {
private static final String ID = "ID";
@@ -20,6 +22,14 @@ public class GroupsOverviewModel extends TableModel<GroupData> {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
List<GroupData> values = new ArrayList<>(items.values());
+ Iterator<GroupData> it = values.iterator();
+ while (it.hasNext()) {
+ GroupData groupData = it.next();
+ // Show only the waiting groups!
+ if(groupData.getState() != GroupState.WAITING) {
+ it.remove();
+ }
+ }
GroupData group = values.get(rowIndex);
String wantedColumn = COLUMNS[columnIndex];
switch (wantedColumn) {
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/TablesOverviewModel.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/TablesOverviewModel.java
index 031b231..c67a67d 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/TablesOverviewModel.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/pizzeria/gui/tablemodels/TablesOverviewModel.java
@@ -54,28 +54,18 @@ public class TablesOverviewModel extends TableModel<Table> {
}
public List<Table> createFreeTables(int numberOfTables) {
- synchronized (items) {
- List<Table> tables = new ArrayList<Table>();
- for (int i = 0; i < numberOfTables; i++) {
- Table table = createFreeTable();
- tables.add(table);
- }
+ List<Table> tables = new ArrayList<Table>();
+ for (int i = 0; i < numberOfTables; i++) {
+ Table table = createFreeTable();
+ tables.add(table);
+ }
- setItems(tables);
+ setItems(tables);
- return tables;
- }
+ return tables;
}
private Table createFreeTable() {
return new Table();
}
-
- public void mergeTables(List<Table> tables) {
- for (Table table : tables) {
- items.put(table.getId(), table);
- }
- fireTableDataChanged();
- }
-
}
diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/XVSMConnector.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/XVSMConnector.java
index 6c4bab5..b79fa63 100644
--- a/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/XVSMConnector.java
+++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/xvsm/XVSMConnector.java
@@ -29,6 +29,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import at.ac.tuwien.sbc.valesriegler.common.Util;
+import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
import at.ac.tuwien.sbc.valesriegler.pizzeria.PizzeriaAgent;
import at.ac.tuwien.sbc.valesriegler.types.GroupData;
import at.ac.tuwien.sbc.valesriegler.types.GroupState;
@@ -77,45 +78,15 @@ public class XVSMConnector {
handleSpaceErrorAndTerminate(e);
}
}
-
- private List<Coordinator> createCoordinators(Coordinator... coordinator) {
- return Arrays.asList(coordinator);
- }
-
- private void handleSpaceErrorAndTerminate(Exception e) {
- log.error(e.getMessage());
- e.printStackTrace();
- System.exit(1);
- }
+
public void sendTablesToSpace(List<Table> tables) {
- try {
- List<Entry> entries = new ArrayList<>();
- for (Table table : tables) {
- entries.add(new Entry(table));
- }
- capi.write(entries, tablesContainer);
-
- log.info("Wrote tables to Space!");
-
- } catch (MzsCoreException e) {
- log.info(e.getMessage());
- }
+ sendItemsToContainer(tables, tablesContainer);
}
- 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 void sendGroupsToSpace(List<GroupData> newGroups) {
+ sendItemsToContainer(newGroups, groupsContainer);
}
public void handleWaitingGroup(int id) {
@@ -208,57 +179,20 @@ public class XVSMConnector {
}
}
- 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<Table> tables = new ArrayList<>();
- List<Entry> entryList = (List<Entry>) entries;
- for (Entry entry : entryList) {
- tables.add((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 initTablesNotifications(NotificationListener listener) {
+ try {
+ notificationMgr.createNotification(tablesContainer, listener, Operation.WRITE);
+ } catch (Exception e) {
+ handleSpaceErrorAndTerminate(e);
+ }
}
- 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 initGroupNotifications(NotificationListener listener) {
+ try {
+ notificationMgr.createNotification(groupsContainer, listener, Operation.WRITE);
+ } catch (Exception e) {
+ handleSpaceErrorAndTerminate(e);
+ }
}
public void handlePaymentRequest() {
@@ -266,6 +200,32 @@ public class XVSMConnector {
public void handlePizzaDistribution() {
}
+
+
+ private List<Coordinator> createCoordinators(Coordinator... coordinator) {
+ return Arrays.asList(coordinator);
+ }
+
+ private void handleSpaceErrorAndTerminate(Exception e) {
+ log.error(e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+
+ private <T extends Serializable> void sendItemsToContainer(List<T> items, ContainerReference cref) {
+ try {
+ List<Entry> entries = new ArrayList<>();
+ for (Serializable item : items) {
+ entries.add(new Entry(item));
+ }
+ capi.write(entries, cref);
+
+ } catch (MzsCoreException e) {
+ log.info(e.getMessage());
+ e.printStackTrace();
+ }
+ }
}
--
2.47.3