1 package at.ac.tuwien.sbc.valesriegler.group.gui;
3 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
4 import at.ac.tuwien.sbc.valesriegler.common.Util;
5 import at.ac.tuwien.sbc.valesriegler.group.Group;
6 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
7 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
8 import at.ac.tuwien.sbc.valesriegler.types.Table;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
12 import java.util.ArrayList;
13 import java.util.List;
16 * Might not the nicest way to store global data, but this is an elemental
17 * Object, storing ALL the Group's data. Might consider splitting those two
23 public class GroupOverviewModel extends TableModel<Group> {
24 private static final Logger log = LoggerFactory.getLogger(GroupOverviewModel.class);
26 private static final String STATE = "State";
27 private static final String PIZZAS = "Pizzas";
28 private static final String SIZE = "Size";
29 private static final String ID = "ID";
30 private static final String PIZZERIA = "Pizzeria";
31 private static final String[] COLUMNS = new String[] { ID, SIZE, PIZZAS, STATE, PIZZERIA };
35 protected String[] getColumns() {
39 public List<Group> getItems() {
40 return new ArrayList<Group>(items.values());
43 public Group getGroupByID(int id) {
48 public Object getValueAt(int rowIndex, int columnIndex) {
49 List<Group> values = new ArrayList<Group>(items.values());
50 // TODO make sure this is necessary...
51 // Collections.sort(values, new Comparator<Group>() {
53 // public int compare(Group o1, Group o2) {
54 // final int o1Id = o1.getId();
55 // final int o2Id = o2.getId();
56 // if(o1Id<o2Id) return -1;
57 // else if(o1Id>o2Id) return 1;
61 Group group = values.get(rowIndex);
62 String wantedColumn = COLUMNS[columnIndex];
63 switch (wantedColumn) {
65 int groupId = group.getGroupData().getId();
66 return String.format(Util.NUMBER_DISPLAY_FORMAT, groupId);
68 int groupSize = group.getGroupData().getSize();
71 if (group.getGroupData().getOrder() == null)
73 return Util.pizzaDisplay(group.getGroupData().getOrder().getOrderedPizzas());
75 return group.getGroupData().getState();
77 return group.getGroupData().getPizzeriaId();
79 throw new RuntimeException(UNHANDLEDCOLUMN);
84 public void addItems(List<Group> newItems) {
85 log.info("addItems()");
86 super.addItems(newItems);
87 for (Group g : newItems) {
88 if(Util.useJMS) g.goGrabSomeFood();
94 * This is necessary as in the space version GroupData objects get written to the space. In order to
95 * translate from Group data to the actual group object the group object has to be looked up by the id.
97 * @param newItems the group data of the corresponding groups
99 public void addGroupData(List<GroupData> newItems) {
100 List<Group> groups = new ArrayList<Group>();
101 for (GroupData groupData : newItems) {
102 Group group = items.get(groupData.getId());
103 group.setGroupData(groupData);
106 super.addItems(groups);
109 public void setGroupEating(int groupId) {
110 // if(stateIs(groupId, GroupState.GONE) || stateIs(groupId, GroupState.PAY)) return;
111 changeStateOfGroup(groupId, GroupState.EATING);
113 fireTableDataChanged();
116 public void setGroupWantsToPay(int groupId) {
117 // if(stateIs(groupId, GroupState.GONE)) return;
118 changeStateOfGroup(groupId, GroupState.PAY);
120 fireTableDataChanged();
123 private boolean stateIs(int groupId, GroupState state) {
124 return items.get(groupId).getGroupData().getState() == state;
128 public void setGroupHasPaid(int groupId) {
129 changeStateOfGroup(groupId, GroupState.GONE);
131 fireTableDataChanged();
134 private void changeStateOfGroup(int groupId, GroupState state) {
135 items.get(groupId).getGroupData().setState(state);
138 public void setGroupsSitting(List<Table> tables) {
139 synchronized (items) {
140 for (Table table : tables) {
141 changeStateOfGroup(table.getGroupId(), GroupState.SITTING);
145 fireTableDataChanged();
148 public void setOrderTaken(GroupData group) {
149 changeStateOfGroup(group.getId(), GroupState.ORDERED);
151 fireTableDataChanged();