]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
prepare merge of jms branch.
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / GroupOverviewModel.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Set;
6
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import at.ac.tuwien.sbc.valesriegler.common.PizzaType;
11 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
12 import at.ac.tuwien.sbc.valesriegler.group.Group;
13
14 public class GroupOverviewModel extends TableModel<Group> {
15         private static final Logger log = LoggerFactory.getLogger(GroupOverviewModel.class);
16
17         private static final String STATE = "State";
18         private static final String PIZZAS = "Pizzas";
19         private static final String SIZE = "Size";
20         private static final String ID = "ID";
21         private static final String[] COLUMNS = new String[] { ID, SIZE, PIZZAS, STATE };
22
23         @Override
24         protected String[] getColumns() {
25                 return COLUMNS;
26         }
27
28         public List<Group> getItems() {
29                 return items;
30         }
31
32         @Override
33         public Object getValueAt(int rowIndex, int columnIndex) {
34                 Group group = items.get(rowIndex);
35                 String wantedColumn = COLUMNS[columnIndex];
36                 switch (wantedColumn) {
37                 case ID:
38                         int groupId = group.getId();
39                         log.info("This is the group id : {}", groupId);
40                         return groupId;
41                 case SIZE:
42                         int groupSize = group.getSize();
43                         log.info("This is the size : {}", groupSize);
44                         return groupSize;
45                 case PIZZAS:
46                         return pizzaDisplay(group.getPizzas());
47                 case STATE:
48                         return group.getState();
49                 default:
50                         throw new RuntimeException(UNHANDLEDCOLUMN);
51                 }
52         }
53
54         /**
55          * 
56          * @return A display string for PizzaTypes.
57          *         <p />
58          *         e.g. Cardinale, Cardinale, Margherita is displayed as
59          *         "2xCARDINALE,1xMARGHERITA"
60          */
61         private String pizzaDisplay(List<PizzaType> pizzas) {
62                 HashMap<PizzaType, Integer> pizzaCount = new HashMap<PizzaType, Integer>();
63                 for (PizzaType pizzaType : pizzas) {
64                         if (pizzaCount.containsKey(pizzaType)) {
65                                 pizzaCount.put(pizzaType, pizzaCount.get(pizzaType) + 1);
66                         } else
67                                 pizzaCount.put(pizzaType, 1);
68                 }
69                 Set<PizzaType> pizzaTypes = pizzaCount.keySet();
70                 StringBuilder sb = new StringBuilder();
71
72                 boolean multiplePizzas = false;
73                 for (PizzaType pizzaType : pizzaTypes) {
74                         if (multiplePizzas)
75                                 sb.append(",");
76                         else
77                                 multiplePizzas = true;
78
79                         sb.append(pizzaCount.get(pizzaType) + "x");
80                         sb.append(pizzaType.toString());
81                 }
82
83                 return sb.toString();
84         }
85
86         @Override
87         public void addItems(List<Group> newItems) {
88                 log.info("addItems()");
89                 super.addItems(newItems);
90                 for (Group g : newItems) {
91                         g.goGrabSomeFood();
92                 }
93         }
94 }