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.43.0