]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupOverviewModel.java
Basic Group GUI implementation
[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.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Set;
7
8 import javax.swing.table.AbstractTableModel;
9
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12
13 import at.ac.tuwien.sbc.valesriegler.common.PizzaType;
14 import at.ac.tuwien.sbc.valesriegler.group.Group;
15 import at.ac.tuwien.sbc.valesriegler.group.GroupState;
16 import at.ac.tuwien.sbc.valesriegler.jms.cook.Cook;
17
18 public class GroupOverviewModel extends AbstractTableModel {
19         private static final Logger log = LoggerFactory.getLogger(GroupOverviewModel.class);
20         
21         private static final String STATE = "State";
22         private static final String PIZZAS = "Pizzas";
23         private static final String SIZE = "Size";
24         private static final String ID = "ID";
25         private static final String UNHANDLEDCOLUMN = "Unhandled column";
26         private static final String[] COLUMNS = new String[] {
27                 ID, SIZE, PIZZAS, STATE 
28         };
29         
30         private List<Group> groups = new ArrayList<Group>();
31         
32         public GroupOverviewModel() {
33                 insertTestData();
34         }
35
36         private void insertTestData() {
37                 Group group1 = new Group();
38                 group1.setId(1);
39                 group1.setSize(3);
40                 group1.setState(GroupState.EATING);
41                 
42                 Group group2 = new Group();
43                 group2.setId(2);
44                 group2.setSize(1);
45                 group2.setState(GroupState.GONE);
46                 
47                 Group group3 = new Group();
48                 group3.setId(3);
49                 group3.setSize(2);
50                 group3.setState(GroupState.EATING);
51                 
52                 ArrayList<PizzaType> pizzas1 = new ArrayList<PizzaType>();
53                 pizzas1.add(PizzaType.MARGHERITA);
54                 pizzas1.add(PizzaType.CARDINALE);
55                 pizzas1.add(PizzaType.CARDINALE);
56                 
57                 ArrayList<PizzaType> pizzas2 = new ArrayList<PizzaType>();
58                 pizzas2.add(PizzaType.MARGHERITA);
59                 pizzas2.add(PizzaType.MARGHERITA);
60                 pizzas2.add(PizzaType.CARDINALE);
61                 
62                 ArrayList<PizzaType> pizzas3 = new ArrayList<PizzaType>();
63                 pizzas3.add(PizzaType.MARGHERITA);
64                 pizzas3.add(PizzaType.SALAMI);
65                 pizzas3.add(PizzaType.CARDINALE);
66                 
67                 group1.setPizzas(pizzas1);
68                 group2.setPizzas(pizzas2);
69                 group3.setPizzas(pizzas3);
70                 
71                 groups.add(group1);
72                 groups.add(group2);
73                 groups.add(group3);
74                 
75                 fireTableDataChanged();
76         }
77         
78
79         @Override
80         public int getRowCount() {
81                 return groups.size();
82         }
83         
84         @Override
85         public String getColumnName(int column) {
86                 return COLUMNS[column];
87         }
88
89         @Override
90         public int getColumnCount() {
91                 return COLUMNS.length;
92         }
93
94         @Override
95         public Object getValueAt(int rowIndex, int columnIndex) {
96                 Group group = groups.get(rowIndex);
97                 String wantedColumn = COLUMNS[columnIndex];
98                 switch(wantedColumn) {
99                 case ID : 
100                         int groupId = group.getId();
101                         log.info("This is the group id : {}", groupId);
102                         return groupId; 
103                 case SIZE : 
104                         int groupSize = group.getSize();
105                         log.info("This is the size : {}", groupSize);
106                         return groupSize; 
107                 case PIZZAS : return pizzaDisplay(group.getPizzas());
108                 case STATE : return group.getState();
109                 default : throw new RuntimeException(UNHANDLEDCOLUMN);
110                 }
111         }
112
113         /**
114          * 
115          * @return A display string for PizzaTypes. 
116          * <p />
117          * e.g. Cardinale, Cardinale, Margherita is displayed as "2xCARDINALE,1xMARGHERITA"
118          */
119         private String pizzaDisplay(List<PizzaType> pizzas) {
120                 HashMap<PizzaType, Integer> pizzaCount = new HashMap<PizzaType, Integer>();
121                 for (PizzaType pizzaType : pizzas) {
122                         if(pizzaCount.containsKey(pizzaType)) {
123                                 pizzaCount.put(pizzaType, pizzaCount.get(pizzaType)+1);
124                         }
125                         else pizzaCount.put(pizzaType, 1);
126                 }
127                 Set<PizzaType> pizzaTypes = pizzaCount.keySet();
128                 StringBuilder sb = new StringBuilder();
129                 
130                 boolean multiplePizzas = false;
131                 for (PizzaType pizzaType : pizzaTypes) {
132                         if(multiplePizzas) sb.append(",");
133                         else multiplePizzas = true;
134                         
135                         sb.append(pizzaCount.get(pizzaType) + "x");
136                         sb.append(pizzaType.toString());
137                 }
138                 
139                 return sb.toString();
140         }
141
142         public void addGroup(Group group) {
143                 groups.add(group);
144                 
145                 fireTableDataChanged();
146         }
147
148 }