]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupCreationHandler.java
[XVSM] Delivery in progress, Delivery done updates in UIs, Delivery logic
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / GroupCreationHandler.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3 import at.ac.tuwien.sbc.valesriegler.common.HasId;
4 import at.ac.tuwien.sbc.valesriegler.group.DeliveryGroup;
5 import at.ac.tuwien.sbc.valesriegler.group.Group;
6 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
7 import at.ac.tuwien.sbc.valesriegler.types.Order;
8 import at.ac.tuwien.sbc.valesriegler.types.PizzaOrder;
9 import at.ac.tuwien.sbc.valesriegler.types.PizzaType;
10 import org.slf4j.LoggerFactory;
11
12 import javax.swing.*;
13 import java.util.ArrayList;
14 import java.util.List;
15
16 /**
17  * Handles the Wizard-like creation of groups.
18  * <p />
19  * Give an instance of this class as a callback to the Panel from which a
20  * group creation request should be issued
21  */
22 class GroupCreationHandler {
23     private static final org.slf4j.Logger log = LoggerFactory.getLogger(GroupCreationHandler.class);
24     private final boolean createDeliveryGroups;
25     private JPanel creationPanel;
26     private JPanel chooseGroupSizePanel;
27     private JPanel groupCreationPanel;
28
29     public GroupCreationHandler(JPanel creationPanel, JPanel chooseGroupSizePanel, JPanel groupCreationPanel, boolean createDeliveryGroups) {
30         this.createDeliveryGroups = createDeliveryGroups;
31         this.creationPanel = creationPanel;
32         this.chooseGroupSizePanel = chooseGroupSizePanel;
33         this.groupCreationPanel = groupCreationPanel;
34     }
35
36     public void showGroupCreationDetailPanel() {
37         chooseGroupSizePanel.setVisible(false);
38         creationPanel.add(groupCreationPanel);
39     }
40
41     public void handleGroupCreation(GroupCreationDetailsRequest gc) {
42         chooseGroupSizePanel.setVisible(true);
43         creationPanel.remove(groupCreationPanel);
44         creationPanel.repaint();
45         createGroups(gc);
46     }
47
48     public void createGroups(GroupCreationDetailsRequest gc) {
49         List<DeliveryGroup> newDeliveryGroups = new ArrayList<>();
50         List<Group> newNormalGroups = new ArrayList<>();
51
52         for (int i = 0; i < gc.numberOfGroups; i++) {
53             if(createDeliveryGroups) {
54                 DeliveryGroup group = new DeliveryGroup();
55                 final Order order = createOrder(group, gc);
56                 group.getDeliveryGroupData().setOrder(order);
57                 group.getDeliveryGroupData().setPizzeriaId(gc.pizzeria);
58                 group.getDeliveryGroupData().setAddress(gc.address);
59                 newDeliveryGroups.add(group);
60             } else {
61                 Group group = new Group();
62                 final Order order = createOrder(group, gc);
63                 group.getGroupData().setOrder(order);
64                 group.getGroupData().setSize(gc.size);
65                 group.getGroupData().setPizzeriaId(gc.pizzeria);
66                 newNormalGroups.add(group);
67             }
68         }
69         if(createDeliveryGroups) {
70             DeliveryOverviewModel deliveryOverviewModel = GroupAgent.getInstance().getDeliveryModel();
71             deliveryOverviewModel.addItems(newDeliveryGroups);
72             GroupAgent.getInstance().onDeliveryGroupsCreated(newDeliveryGroups);
73         } else {
74             GroupOverviewModel groupModel = GroupAgent.getInstance().getGroupModel();
75             groupModel.addItems(newNormalGroups);
76             GroupAgent.getInstance().onGroupsCreated(newNormalGroups);
77         }
78     }
79
80     private Order createOrder(HasId group, GroupCreationDetailsRequest gc) {
81         List<PizzaOrder> pizzaOrders = new ArrayList<>();
82         for (PizzaType pt : gc.pizzaTypes) {
83             final PizzaOrder pizzaOrder = new PizzaOrder(pt);
84 //            pizzaOrder.setDeliveryPizza(createDeliveryGroups);
85             pizzaOrders.add(pizzaOrder);
86         }
87         Order order = new Order(group, pizzaOrders);
88         order.setNumberOfPizzas(order.getOrderedPizzas().size());
89
90         return order;
91     }
92
93     public void handleCancel() {
94         chooseGroupSizePanel.setVisible(true);
95         creationPanel.remove(groupCreationPanel);
96         creationPanel.repaint();
97     }
98 }