]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/DeliveryOverviewModel.java
Merge it!
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / DeliveryOverviewModel.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3
4 import at.ac.tuwien.sbc.valesriegler.common.TableModel;
5 import at.ac.tuwien.sbc.valesriegler.common.Util;
6 import at.ac.tuwien.sbc.valesriegler.group.DeliveryGroup;
7 import at.ac.tuwien.sbc.valesriegler.types.DeliveryGroupData;
8 import at.ac.tuwien.sbc.valesriegler.types.DeliveryStatus;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.List;
15
16 public class DeliveryOverviewModel extends TableModel<DeliveryGroup> {
17     private static final Logger log = LoggerFactory.getLogger(GroupOverviewModel.class);
18
19     private static final String STATE = "State";
20     private static final String PIZZAS = "Pizzas";
21     private static final String ADDRESS = "Address";
22     private static final String ID = "ID";
23     private static final String PIZZERIA = "Pizzeria";
24     private static final String[] COLUMNS = new String[]{ID, ADDRESS, PIZZAS, STATE, PIZZERIA};
25
26
27     @Override
28     protected String[] getColumns() {
29         return COLUMNS;
30     }
31
32     @Override
33     public void addItems(List<DeliveryGroup> newItems) {
34         log.info("addItems()");
35         super.addItems(newItems);
36         for (DeliveryGroup g : newItems) {
37             if (Util.useJMS)
38                 g.orderSomeFood();
39         }
40     }
41
42     @Override
43     public Object getValueAt(int rowIndex, int columnIndex) {
44         List<DeliveryGroup> values = new ArrayList<>(items.values());
45         DeliveryGroup group = values.get(rowIndex);
46         String wantedColumn = COLUMNS[columnIndex];
47         switch (wantedColumn) {
48             case ID:
49                 int groupId = group.getId();
50                 return groupId;
51             case ADDRESS:
52                 return group.getDeliveryGroupData().getAddress();
53             case PIZZAS:
54                 if (group.getDeliveryGroupData().getOrder() == null)
55                     return "none";
56                 return Util.pizzaDisplay(group.getDeliveryGroupData().getOrder().getOrderedPizzas());
57             case STATE:
58                 return group.getDeliveryGroupData().getDeliveryStatus();
59             case PIZZERIA:
60                 return group.getDeliveryGroupData().getPizzeriaId();
61             default:
62                 throw new RuntimeException(UNHANDLEDCOLUMN);
63         }
64     }
65
66     public void addDeliveries(List<DeliveryGroupData> groups) {
67         synchronized (items) {
68             for (DeliveryGroupData group : groups) {
69                 final DeliveryGroup deliveryGroup = items.get(group.getId());
70                 if(deliveryGroup==null) {
71                     log.error("Delivery group not found: {}", group.getId());
72                 }
73                 else deliveryGroup.setDeliveryGroupData(group);
74             }
75         }
76         fireTableDataChanged();
77     }
78
79     public void createStatistics() {
80         int size;
81         int finished;
82         synchronized (items) {
83             final Collection<DeliveryGroup> values = items.values();
84             size = values.size();
85             finished = 0;
86             for (DeliveryGroup group : values) {
87                 final DeliveryStatus status = group.getDeliveryGroupData().getDeliveryStatus();
88                 if (status == DeliveryStatus.DELIVERED || status == DeliveryStatus.DELIVERY_FAILED) {
89                     finished++;
90                 }
91             }
92         }
93         log.info("{} deliveries were ordered", size);
94         log.info("{} were finished", finished);
95     }
96
97     public boolean hasFinished() {
98         int size;
99         int finished;
100         synchronized (items) {
101             final Collection<DeliveryGroup> values = items.values();
102             size = values.size();
103             finished = 0;
104             for (DeliveryGroup group : values) {
105                 final DeliveryStatus status = group.getDeliveryGroupData().getDeliveryStatus();
106                 if (status == DeliveryStatus.DELIVERED || status == DeliveryStatus.DELIVERY_FAILED) {
107                     finished++;
108                 }
109             }
110         }
111         final boolean result = size == finished;
112         return result;
113     }
114 }