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